From ba73f4adf3f931549da08acb7365ce8ed04a2bd6 Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Wed, 30 Sep 2015 15:54:30 -0400 Subject: [PATCH 001/345] Fix static directory listing recursion --- fileserve.go | 18 ++++++++++++++++++ server.go | 10 +++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/fileserve.go b/fileserve.go index 4e9e1da..45a0e63 100644 --- a/fileserve.go +++ b/fileserve.go @@ -29,6 +29,24 @@ func fileServeHandler(c web.C, w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, filePath) } +func staticHandler(c web.C, w http.ResponseWriter, r *http.Request) { + path := r.URL.Path + if path[len(path)-1:] == "/" { + notFoundHandler(c, w, r) + return + } else { + filePath := strings.TrimPrefix(path, "/static/") + file, err := staticBox.Open(filePath) + if err != nil { + oopsHandler(c, w, r) + return + } + + http.ServeContent(w, r, filePath, timeStarted, file) + return + } +} + func fileExistsAndNotExpired(filename string) bool { filePath := path.Join(Config.filesDir, filename) diff --git a/server.go b/server.go index 98fdd53..963aa3a 100644 --- a/server.go +++ b/server.go @@ -8,6 +8,7 @@ import ( "net/http" "os" "regexp" + "time" "github.com/GeertJohan/go.rice" "github.com/flosch/pongo2" @@ -27,6 +28,8 @@ var Config struct { var Templates = make(map[string]*pongo2.Template) var TemplateSet *pongo2.TemplateSet +var staticBox *rice.Box +var timeStarted time.Time func setup() { if Config.noLogs { @@ -65,6 +68,9 @@ func setup() { os.Exit(1) } + staticBox = rice.MustFindBox("static") + timeStarted = time.Now() + // Routing setup nameRe := regexp.MustCompile(`^/(?P[a-z0-9-\.]+)$`) selifRe := regexp.MustCompile(`^/selif/(?P[a-z0-9-\.]+)$`) @@ -81,9 +87,7 @@ func setup() { goji.Put("/upload/:name", uploadPutHandler) goji.Delete("/:name", deleteHandler) - staticBox := rice.MustFindBox("static") - goji.Get("/static/*", http.StripPrefix("/static/", - http.FileServer(staticBox.HTTPBox()))) + goji.Get("/static/*", staticHandler) goji.Get(nameRe, fileDisplayHandler) goji.Get(selifRe, fileServeHandler) goji.Get(selifIndexRe, unauthorizedHandler) From 31359499ac185b6320c8f073bbed171e37a57963 Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Wed, 30 Sep 2015 23:37:00 -0400 Subject: [PATCH 002/345] Switch to dropzonejs. Fixes #18 --- server_test.go | 85 +- static/css/dropzone.css | 58 ++ static/css/linx.css | 4 - static/js/cat.js | 1291 ----------------------------- static/js/dropzone.js | 1729 +++++++++++++++++++++++++++++++++++++++ static/js/upload.js | 74 ++ templates/index.html | 85 +- upload.go | 13 +- 8 files changed, 1901 insertions(+), 1438 deletions(-) create mode 100644 static/css/dropzone.css delete mode 100644 static/js/cat.js create mode 100644 static/js/dropzone.js create mode 100644 static/js/upload.js diff --git a/server_test.go b/server_test.go index f029e17..4d78137 100644 --- a/server_test.go +++ b/server_test.go @@ -32,8 +32,8 @@ func TestIndex(t *testing.T) { goji.DefaultMux.ServeHTTP(w, req) - if !strings.Contains(w.Body.String(), "file-uploader") { - t.Fatal("String 'file-uploader' not found in index response") + if !strings.Contains(w.Body.String(), "Click or Drop file") { + t.Fatal("String 'Click or Drop file' not found in index response") } } @@ -86,87 +86,6 @@ func TestDisplayNotFound(t *testing.T) { } } -func TestPostBodyUpload(t *testing.T) { - w := httptest.NewRecorder() - - filename := randomString(10) + ".ext" - - req, err := http.NewRequest("POST", "/upload", strings.NewReader("File content")) - if err != nil { - t.Fatal(err) - } - - req.Header.Set("Content-Type", "application/octet-stream") - params := req.URL.Query() - params.Add("qqfile", filename) - req.URL.RawQuery = params.Encode() - - goji.DefaultMux.ServeHTTP(w, req) - - if w.Code != 301 { - t.Fatalf("Status code is not 301, but %d", w.Code) - } - if w.Header().Get("Location") != "/"+filename { - t.Fatalf("Was redirected to %s instead of /%s", w.Header().Get("Location"), filename) - } -} - -func TestPostEmptyBodyUpload(t *testing.T) { - w := httptest.NewRecorder() - - filename := randomString(10) + ".ext" - - req, err := http.NewRequest("POST", "/upload", strings.NewReader("")) - if err != nil { - t.Fatal(err) - } - - req.Header.Set("Content-Type", "application/octet-stream") - params := req.URL.Query() - params.Add("qqfile", filename) - req.URL.RawQuery = params.Encode() - - goji.DefaultMux.ServeHTTP(w, req) - - if w.Code == 301 { - t.Fatal("Status code is 301") - } - - if !strings.Contains(w.Body.String(), "Oops! Something went wrong.") { - t.Fatal("Response doesn't contain'Oops! Something went wrong.'") - } -} - -func TestPostBodyRandomizeUpload(t *testing.T) { - w := httptest.NewRecorder() - - filename := randomString(10) + ".ext" - - req, err := http.NewRequest("POST", "/upload", strings.NewReader("File content")) - if err != nil { - t.Fatal(err) - } - - req.Header.Set("Content-Type", "application/octet-stream") - params := req.URL.Query() - params.Add("qqfile", filename) - params.Add("randomize", "true") - req.URL.RawQuery = params.Encode() - - goji.DefaultMux.ServeHTTP(w, req) - - if w.Code != 301 { - t.Fatalf("Status code is not 301, but %d", w.Code) - } - if w.Header().Get("Location") == "/"+filename { - t.Fatalf("Was redirected to %s instead of something random", filename) - } -} - -func TestPostBodyExpireUpload(t *testing.T) { - // Dependant on json info on display url to check expiry -} - func TestPutUpload(t *testing.T) { w := httptest.NewRecorder() diff --git a/static/css/dropzone.css b/static/css/dropzone.css new file mode 100644 index 0000000..35345b3 --- /dev/null +++ b/static/css/dropzone.css @@ -0,0 +1,58 @@ +#dropzone { + width: 400px; + margin-left: auto; + margin-right: auto; +} + +#choices { + padding-bottom: 20px; +} + +div.dz-default { + border: 2px dashed #C9C9C9; + color: #C9C9C9; + font: 14px "helvetica neue",helvetica,arial,sans-serif; + background-color: #FAFBFC; + padding-top: 60px; + padding-bottom: 60px; + text-align: center; +} + +div.dz-default:hover { + background-color: #eff4f8; +} + +div.upload { + background-color: #E2E2E2; + border: 1px solid #C9C9C9; + margin-bottom: 5px; + padding: 5px; +} + +.upload { + font-size: 12px; +} + +.upload a { + font-size: 12px; + text-decoration: none; + border-bottom: 1px dotted #556A7F; + font-weight: 600; + color: #556A7F; +} + +.upload a:hover { + border-bottom: 1px dotted #556A7F; + color: #556A7F; +} + +.upload .right { + float: right; + padding-left: 5px; +} + +.cancel { + margin-right: 5px; + font-size: 10px; + border-bottom: 1px dotted #556A7F; +} \ No newline at end of file diff --git a/static/css/linx.css b/static/css/linx.css index 0a6c031..cf83032 100644 --- a/static/css/linx.css +++ b/static/css/linx.css @@ -189,10 +189,6 @@ body { font-size: 18px; } -#html5 { - text-align: center; -} - #file-uploader a { text-decoration: none; border-bottom: 1px dotted #556A7F; diff --git a/static/js/cat.js b/static/js/cat.js deleted file mode 100644 index 1809ad2..0000000 --- a/static/js/cat.js +++ /dev/null @@ -1,1291 +0,0 @@ -/*! jQuery v1.11.3 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.3",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b="length"in a&&a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1; - -return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/\s*$/g,ra={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:k.htmlSerialize?[0,"",""]:[1,"X
","
"]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?""!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("${2}\nsnippet iframe.\n ${3}\nsnippet iframe#\n ${3}\nsnippet img\n ${2}${3}\nsnippet img.\n ${3}${4}\nsnippet img#\n ${3}${4}\nsnippet input\n ${5}\nsnippet input.\n ${6}\nsnippet input:text\n ${4}\nsnippet input:submit\n ${4}\nsnippet input:hidden\n ${4}\nsnippet input:button\n ${4}\nsnippet input:image\n ${5}\nsnippet input:checkbox\n ${3}\nsnippet input:radio\n ${3}\nsnippet input:color\n ${4}\nsnippet input:date\n ${4}\nsnippet input:datetime\n ${4}\nsnippet input:datetime-local\n ${4}\nsnippet input:email\n ${4}\nsnippet input:file\n ${4}\nsnippet input:month\n ${4}\nsnippet input:number\n ${4}\nsnippet input:password\n ${4}\nsnippet input:range\n ${4}\nsnippet input:reset\n ${4}\nsnippet input:search\n ${4}\nsnippet input:time\n ${4}\nsnippet input:url\n ${4}\nsnippet input:week\n ${4}\nsnippet ins\n ${1}\nsnippet kbd\n ${1}\nsnippet keygen\n ${1}\nsnippet label\n \nsnippet label:i\n \n ${7}\nsnippet label:s\n \n \nsnippet legend\n ${1}\nsnippet legend+\n ${1}\nsnippet li\n
  • ${1}
  • \nsnippet li.\n
  • ${2}
  • \nsnippet li+\n
  • ${1}
  • \n li+${2}\nsnippet lia\n
  • ${1}
  • \nsnippet lia+\n
  • ${1}
  • \n lia+${3}\nsnippet link\n ${5}\nsnippet link:atom\n ${2}\nsnippet link:css\n ${4}\nsnippet link:favicon\n ${2}\nsnippet link:rss\n ${2}\nsnippet link:touch\n ${2}\nsnippet map\n \n ${2}\n \nsnippet map.\n \n ${3}\n \nsnippet map#\n \n ${5}${6}\n ${7}\nsnippet mark\n ${1}\nsnippet menu\n \n ${1}\n \nsnippet menu:c\n \n ${1}\n \nsnippet menu:t\n \n ${1}\n \nsnippet meta\n ${3}\nsnippet meta:compat\n ${3}\nsnippet meta:refresh\n ${3}\nsnippet meta:utf\n ${3}\nsnippet meter\n ${1}\nsnippet nav\n \nsnippet nav.\n \nsnippet nav#\n \nsnippet noscript\n \nsnippet object\n \n ${3}\n ${4}\n# Embed QT Movie\nsnippet movie\n \n \n \n \n \n ${6}\nsnippet ol\n
      \n ${1}\n
    \nsnippet ol.\n
      \n ${2}\n
    \nsnippet ol+\n
      \n
    1. ${1}
    2. \n li+${2}\n
    \nsnippet opt\n \nsnippet opt+\n \n opt+${3}\nsnippet optt\n \nsnippet optgroup\n \n \n opt+${3}\n \nsnippet output\n ${1}\nsnippet p\n

    ${1}

    \nsnippet param\n ${3}\nsnippet pre\n
    \n		${1}\n	
    \nsnippet progress\n ${1}\nsnippet q\n ${1}\nsnippet rp\n ${1}\nsnippet rt\n ${1}\nsnippet ruby\n \n ${1}\n \nsnippet s\n ${1}\nsnippet samp\n \n ${1}\n \nsnippet script\n ",rE:!0,sL:["actionscript","javascript","handlebars"]}},c,{cN:"pi",b:/<\?\w+/,e:/\?>/,r:10},{cN:"tag",b:"",c:[{cN:"title",b:/[^ \/><\n\t]+/,r:0},e]}]}});hljs.registerLanguage("css",function(e){var c="[a-zA-Z-][a-zA-Z0-9_-]*",a={cN:"function",b:c+"\\(",rB:!0,eE:!0,e:"\\("},r={cN:"rule",b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{cN:"value",eW:!0,eE:!0,c:[a,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"hexcolor",b:"#[0-9A-Fa-f]+"},{cN:"important",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,r,{cN:"id",b:/\#[A-Za-z0-9_-]+/},{cN:"class",b:/\.[A-Za-z0-9_-]+/},{cN:"attr_selector",b:/\[/,e:/\]/,i:"$"},{cN:"pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"']+/},{cN:"at_rule",b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{cN:"at_rule",b:"@",e:"[{;]",c:[{cN:"keyword",b:/\S+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[a,e.ASM,e.QSM,e.CSSNM]}]},{cN:"tag",b:c,r:0},{cN:"rules",b:"{",e:"}",i:/\S/,c:[e.CBCM,r]}]}});hljs.registerLanguage("django",function(e){var t={cN:"filter",b:/\|[A-Za-z]+:?/,k:"truncatewords removetags linebreaksbr yesno get_digit timesince random striptags filesizeformat escape linebreaks length_is ljust rjust cut urlize fix_ampersands title floatformat capfirst pprint divisibleby add make_list unordered_list urlencode timeuntil urlizetrunc wordcount stringformat linenumbers slice date dictsort dictsortreversed default_if_none pluralize lower join center default truncatewords_html upper length phone2numeric wordwrap time addslashes slugify first escapejs force_escape iriencode last safe safeseq truncatechars localize unlocalize localtime utc timezone",c:[{cN:"argument",b:/"/,e:/"/},{cN:"argument",b:/'/,e:/'/}]};return{aliases:["jinja"],cI:!0,sL:"xml",c:[e.C(/\{%\s*comment\s*%}/,/\{%\s*endcomment\s*%}/),e.C(/\{#/,/#}/),{cN:"template_tag",b:/\{%/,e:/%}/,k:"comment endcomment load templatetag ifchanged endifchanged if endif firstof for endfor in ifnotequal endifnotequal widthratio extends include spaceless endspaceless regroup by as ifequal endifequal ssi now with cycle url filter endfilter debug block endblock else autoescape endautoescape csrf_token empty elif endwith static trans blocktrans endblocktrans get_static_prefix get_media_prefix plural get_current_language language get_available_languages get_current_language_bidi get_language_info get_language_info_list localize endlocalize localtime endlocaltime timezone endtimezone get_current_timezone verbatim",c:[t]},{cN:"variable",b:/\{\{/,e:/}}/,c:[t]}]}});hljs.registerLanguage("verilog",function(e){return{aliases:["v"],cI:!0,k:{keyword:"always and assign begin buf bufif0 bufif1 case casex casez cmos deassign default defparam disable edge else end endcase endfunction endmodule endprimitive endspecify endtable endtask event for force forever fork function if ifnone initial inout input join macromodule module nand negedge nmos nor not notif0 notif1 or output parameter pmos posedge primitive pulldown pullup rcmos release repeat rnmos rpmos rtran rtranif0 rtranif1 specify specparam table task timescale tran tranif0 tranif1 wait while xnor xor",typename:"highz0 highz1 integer large medium pull0 pull1 real realtime reg scalared signed small strong0 strong1 supply0 supply0 supply1 supply1 time tri tri0 tri1 triand trior trireg vectored wand weak0 weak1 wire wor"},c:[e.CBCM,e.CLCM,e.QSM,{cN:"number",b:"\\b(\\d+'(b|h|o|d|B|H|O|D))?[0-9xzXZ]+",c:[e.BE],r:0},{cN:"typename",b:"\\.\\w+",r:0},{cN:"value",b:"#\\((?!parameter).+\\)"},{cN:"keyword",b:"\\+|-|\\*|/|%|<|>|=|#|`|\\!|&|\\||@|:|\\^|~|\\{|\\}",r:0}]}});hljs.registerLanguage("perl",function(e){var t="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",r={cN:"subst",b:"[$@]\\{",e:"\\}",k:t},s={b:"->{",e:"}"},n={cN:"variable",v:[{b:/\$\d/},{b:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{b:/[\$%@][^\s\w{]/,r:0}]},o=[e.BE,r,n],i=[n,e.HCM,e.C("^\\=\\w","\\=cut",{eW:!0}),s,{cN:"string",c:o,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",r:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",r:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",r:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",r:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",r:5},{b:"qw\\s+q",e:"q",r:5},{b:"'",e:"'",c:[e.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[e.BE]},{b:"{\\w+}",c:[],r:0},{b:"-?\\w+\\s*\\=\\>",c:[],r:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\/\\/|"+e.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",r:0,c:[e.HCM,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",r:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[e.BE],r:0}]},{cN:"sub",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",r:5},{cN:"operator",b:"-\\w\\b",r:0},{b:"^__DATA__$",e:"^__END__$",sL:"mojolicious",c:[{b:"^@@.*",e:"$",cN:"comment"}]}];return r.c=i,s.c=i,{aliases:["pl"],k:t,c:i}});hljs.registerLanguage("fsharp",function(e){var t={b:"<",e:">",c:[e.inherit(e.TM,{b:/'[a-zA-Z0-9_]+/})]};return{aliases:["fs"],k:"abstract and as assert base begin class default delegate do done downcast downto elif else end exception extern false finally for fun function global if in inherit inline interface internal lazy let match member module mutable namespace new null of open or override private public rec return sig static struct then to true try type upcast use val void when while with yield",c:[{cN:"keyword",b:/\b(yield|return|let|do)!/},{cN:"string",b:'@"',e:'"',c:[{b:'""'}]},{cN:"string",b:'"""',e:'"""'},e.C("\\(\\*","\\*\\)"),{cN:"class",bK:"type",e:"\\(|=|$",eE:!0,c:[e.UTM,t]},{cN:"annotation",b:"\\[<",e:">\\]",r:10},{cN:"attribute",b:"\\B('[A-Za-z])\\b",c:[e.BE]},e.CLCM,e.inherit(e.QSM,{i:null}),e.CNM]}});hljs.registerLanguage("swift",function(e){var i={keyword:"class deinit enum extension func init let protocol static struct subscript typealias var break case continue default do else fallthrough if in for return switch where while as dynamicType is new super self Self Type __COLUMN__ __FILE__ __FUNCTION__ __LINE__ associativity didSet get infix inout left mutating none nonmutating operator override postfix precedence prefix right set unowned unowned safe unsafe weak willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue assert bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced join lexicographicalCompare map max maxElement min minElement numericCast partition posix print println quickSort reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith strideof strideofValue swap swift toString transcode underestimateCount unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafePointers withVaList"},t={cN:"type",b:"\\b[A-Z][\\w']*",r:0},n=e.C("/\\*","\\*/",{c:["self"]}),r={cN:"subst",b:/\\\(/,e:"\\)",k:i,c:[]},s={cN:"number",b:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",r:0},o=e.inherit(e.QSM,{c:[r,e.BE]});return r.c=[s],{k:i,c:[o,e.CLCM,n,t,s,{cN:"func",bK:"func",e:"{",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/,i:/\(/}),{cN:"generics",b://,i:/>/},{cN:"params",b:/\(/,e:/\)/,endsParent:!0,k:i,c:["self",s,o,e.CBCM,{b:":"}],i:/["']/}],i:/\[|%/},{cN:"class",bK:"struct protocol class extension enum",k:i,e:"\\{",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/})]},{cN:"preprocessor",b:"(@assignment|@class_protocol|@exported|@final|@lazy|@noreturn|@NSCopying|@NSManaged|@objc|@optional|@required|@auto_closure|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix)"},{bK:"import",e:/$/,c:[e.CLCM,n]}]}});hljs.registerLanguage("cs",function(e){var r="abstract as base bool break byte case catch char checked const continue decimal dynamic default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long null when object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this true try typeof uint ulong unchecked unsafe ushort using virtual volatile void while async protected public private internal ascending descending from get group into join let orderby partial select set value var where yield",t=e.IR+"(<"+e.IR+">)?";return{aliases:["csharp"],k:r,i:/::/,c:[e.C("///","$",{rB:!0,c:[{cN:"xmlDocTag",v:[{b:"///",r:0},{b:""},{b:""}]}]}),e.CLCM,e.CBCM,{cN:"preprocessor",b:"#",e:"$",k:"if else elif endif define undef warning error line region endregion pragma checksum"},{cN:"string",b:'@"',e:'"',c:[{b:'""'}]},e.ASM,e.QSM,e.CNM,{bK:"class interface",e:/[{;=]/,i:/[^\s:]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:"namespace",e:/[{;=]/,i:/[^\s:]/,c:[{cN:"title",b:"[a-zA-Z](\\.?\\w)*",r:0},e.CLCM,e.CBCM]},{bK:"new return throw await",r:0},{cN:"function",b:"("+t+"\\s+)+"+e.IR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:r,c:[{b:e.IR+"\\s*\\(",rB:!0,c:[e.TM],r:0},{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:r,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]}]}});hljs.registerLanguage("accesslog",function(T){return{c:[{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+\\b",r:0},{cN:"string",b:'"(GET|POST|HEAD|PUT|DELETE|CONNECT|OPTIONS|PATCH|TRACE)',e:'"',k:"GET POST HEAD PUT DELETE CONNECT OPTIONS PATCH TRACE",i:"\\n",r:10},{cN:"string",b:/\[/,e:/\]/,i:"\\n"},{cN:"string",b:'"',e:'"',i:"\\n"}]}});hljs.registerLanguage("r",function(e){var r="([a-zA-Z]|\\.[a-zA-Z.])[a-zA-Z0-9._]*";return{c:[e.HCM,{b:r,l:r,k:{keyword:"function if in break next repeat else for return switch while try tryCatch stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...",literal:"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10"},r:0},{cN:"number",b:"0[xX][0-9a-fA-F]+[Li]?\\b",r:0},{cN:"number",b:"\\d+(?:[eE][+\\-]?\\d*)?L\\b",r:0},{cN:"number",b:"\\d+\\.(?!\\d)(?:i\\b)?",r:0},{cN:"number",b:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",r:0},{cN:"number",b:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",r:0},{b:"`",e:"`",r:0},{cN:"string",c:[e.BE],v:[{b:'"',e:'"'},{b:"'",e:"'"}]}]}});hljs.registerLanguage("apache",function(e){var r={cN:"number",b:"[\\$%]\\d+"};return{aliases:["apacheconf"],cI:!0,c:[e.HCM,{cN:"tag",b:""},{cN:"keyword",b:/\w+/,r:0,k:{common:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,r:0,k:{literal:"on off all"},c:[{cN:"sqbracket",b:"\\s\\[",e:"\\]$"},{cN:"cbracket",b:"[\\$%]\\{",e:"\\}",c:["self",r]},r,e.QSM]}}],i:/\S/}});hljs.registerLanguage("http",function(t){return{aliases:["https"],i:"\\S",c:[{cN:"status",b:"^HTTP/[0-9\\.]+",e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{cN:"request",b:"^[A-Z]+ (.*?) HTTP/[0-9\\.]+$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{cN:"string",e:"$"}},{b:"\\n\\n",starts:{sL:[],eW:!0}}]}});hljs.registerLanguage("cmake",function(e){return{aliases:["cmake.in"],cI:!0,k:{keyword:"add_custom_command add_custom_target add_definitions add_dependencies add_executable add_library add_subdirectory add_test aux_source_directory break build_command cmake_minimum_required cmake_policy configure_file create_test_sourcelist define_property else elseif enable_language enable_testing endforeach endfunction endif endmacro endwhile execute_process export find_file find_library find_package find_path find_program fltk_wrap_ui foreach function get_cmake_property get_directory_property get_filename_component get_property get_source_file_property get_target_property get_test_property if include include_directories include_external_msproject include_regular_expression install link_directories load_cache load_command macro mark_as_advanced message option output_required_files project qt_wrap_cpp qt_wrap_ui remove_definitions return separate_arguments set set_directory_properties set_property set_source_files_properties set_target_properties set_tests_properties site_name source_group string target_link_libraries try_compile try_run unset variable_watch while build_name exec_program export_library_dependencies install_files install_programs install_targets link_libraries make_directory remove subdir_depends subdirs use_mangled_mesa utility_source variable_requires write_file qt5_use_modules qt5_use_package qt5_wrap_cpp on off true false and or",operator:"equal less greater strless strgreater strequal matches"},c:[{cN:"envvar",b:"\\${",e:"}"},e.HCM,e.QSM,e.NM]}});hljs.registerLanguage("thrift",function(e){var t="bool byte i16 i32 i64 double string binary";return{k:{keyword:"namespace const typedef struct enum service exception void oneway set list map required optional",built_in:t,literal:"true false"},c:[e.QSM,e.NM,e.CLCM,e.CBCM,{cN:"class",bK:"struct enum service exception",e:/\{/,i:/\n/,c:[e.inherit(e.TM,{starts:{eW:!0,eE:!0}})]},{b:"\\b(set|list|map)\\s*<",e:">",k:t,c:["self"]}]}});hljs.registerLanguage("objectivec",function(e){var t={cN:"built_in",b:"(AV|CA|CF|CG|CI|MK|MP|NS|UI)\\w+"},i={keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},o=/[a-zA-Z@][a-zA-Z0-9_]*/,n="@interface @class @protocol @implementation";return{aliases:["mm","objc","obj-c"],k:i,l:o,i:""}]}]},{cN:"class",b:"("+n.split(" ").join("|")+")\\b",e:"({|$)",eE:!0,k:n,l:o,c:[e.UTM]},{cN:"variable",b:"\\."+e.UIR,r:0}]}});hljs.registerLanguage("mathematica",function(e){return{aliases:["mma"],l:"(\\$|\\b)"+e.IR+"\\b",k:"AbelianGroup Abort AbortKernels AbortProtect Above Abs Absolute AbsoluteCorrelation AbsoluteCorrelationFunction AbsoluteCurrentValue AbsoluteDashing AbsoluteFileName AbsoluteOptions AbsolutePointSize AbsoluteThickness AbsoluteTime AbsoluteTiming AccountingForm Accumulate Accuracy AccuracyGoal ActionDelay ActionMenu ActionMenuBox ActionMenuBoxOptions Active ActiveItem ActiveStyle AcyclicGraphQ AddOnHelpPath AddTo AdjacencyGraph AdjacencyList AdjacencyMatrix AdjustmentBox AdjustmentBoxOptions AdjustTimeSeriesForecast AffineTransform After AiryAi AiryAiPrime AiryAiZero AiryBi AiryBiPrime AiryBiZero AlgebraicIntegerQ AlgebraicNumber AlgebraicNumberDenominator AlgebraicNumberNorm AlgebraicNumberPolynomial AlgebraicNumberTrace AlgebraicRules AlgebraicRulesData Algebraics AlgebraicUnitQ Alignment AlignmentMarker AlignmentPoint All AllowedDimensions AllowGroupClose AllowInlineCells AllowKernelInitialization AllowReverseGroupClose AllowScriptLevelChange AlphaChannel AlternatingGroup AlternativeHypothesis Alternatives AmbientLight Analytic AnchoredSearch And AndersonDarlingTest AngerJ AngleBracket AngularGauge Animate AnimationCycleOffset AnimationCycleRepetitions AnimationDirection AnimationDisplayTime AnimationRate AnimationRepetitions AnimationRunning Animator AnimatorBox AnimatorBoxOptions AnimatorElements Annotation Annuity AnnuityDue Antialiasing Antisymmetric Apart ApartSquareFree Appearance AppearanceElements AppellF1 Append AppendTo Apply ArcCos ArcCosh ArcCot ArcCoth ArcCsc ArcCsch ArcSec ArcSech ArcSin ArcSinDistribution ArcSinh ArcTan ArcTanh Arg ArgMax ArgMin ArgumentCountQ ARIMAProcess ArithmeticGeometricMean ARMAProcess ARProcess Array ArrayComponents ArrayDepth ArrayFlatten ArrayPad ArrayPlot ArrayQ ArrayReshape ArrayRules Arrays Arrow Arrow3DBox ArrowBox Arrowheads AspectRatio AspectRatioFixed Assert Assuming Assumptions AstronomicalData Asynchronous AsynchronousTaskObject AsynchronousTasks AtomQ Attributes AugmentedSymmetricPolynomial AutoAction AutoDelete AutoEvaluateEvents AutoGeneratedPackage AutoIndent AutoIndentSpacings AutoItalicWords AutoloadPath AutoMatch Automatic AutomaticImageSize AutoMultiplicationSymbol AutoNumberFormatting AutoOpenNotebooks AutoOpenPalettes AutorunSequencing AutoScaling AutoScroll AutoSpacing AutoStyleOptions AutoStyleWords Axes AxesEdge AxesLabel AxesOrigin AxesStyle Axis BabyMonsterGroupB Back Background BackgroundTasksSettings Backslash Backsubstitution Backward Band BandpassFilter BandstopFilter BarabasiAlbertGraphDistribution BarChart BarChart3D BarLegend BarlowProschanImportance BarnesG BarOrigin BarSpacing BartlettHannWindow BartlettWindow BaseForm Baseline BaselinePosition BaseStyle BatesDistribution BattleLemarieWavelet Because BeckmannDistribution Beep Before Begin BeginDialogPacket BeginFrontEndInteractionPacket BeginPackage BellB BellY Below BenfordDistribution BeniniDistribution BenktanderGibratDistribution BenktanderWeibullDistribution BernoulliB BernoulliDistribution BernoulliGraphDistribution BernoulliProcess BernsteinBasis BesselFilterModel BesselI BesselJ BesselJZero BesselK BesselY BesselYZero Beta BetaBinomialDistribution BetaDistribution BetaNegativeBinomialDistribution BetaPrimeDistribution BetaRegularized BetweennessCentrality BezierCurve BezierCurve3DBox BezierCurve3DBoxOptions BezierCurveBox BezierCurveBoxOptions BezierFunction BilateralFilter Binarize BinaryFormat BinaryImageQ BinaryRead BinaryReadList BinaryWrite BinCounts BinLists Binomial BinomialDistribution BinomialProcess BinormalDistribution BiorthogonalSplineWavelet BipartiteGraphQ BirnbaumImportance BirnbaumSaundersDistribution BitAnd BitClear BitGet BitLength BitNot BitOr BitSet BitShiftLeft BitShiftRight BitXor Black BlackmanHarrisWindow BlackmanNuttallWindow BlackmanWindow Blank BlankForm BlankNullSequence BlankSequence Blend Block BlockRandom BlomqvistBeta BlomqvistBetaTest Blue Blur BodePlot BohmanWindow Bold Bookmarks Boole BooleanConsecutiveFunction BooleanConvert BooleanCountingFunction BooleanFunction BooleanGraph BooleanMaxterms BooleanMinimize BooleanMinterms Booleans BooleanTable BooleanVariables BorderDimensions BorelTannerDistribution Bottom BottomHatTransform BoundaryStyle Bounds Box BoxBaselineShift BoxData BoxDimensions Boxed Boxes BoxForm BoxFormFormatTypes BoxFrame BoxID BoxMargins BoxMatrix BoxRatios BoxRotation BoxRotationPoint BoxStyle BoxWhiskerChart Bra BracketingBar BraKet BrayCurtisDistance BreadthFirstScan Break Brown BrownForsytheTest BrownianBridgeProcess BrowserCategory BSplineBasis BSplineCurve BSplineCurve3DBox BSplineCurveBox BSplineCurveBoxOptions BSplineFunction BSplineSurface BSplineSurface3DBox BubbleChart BubbleChart3D BubbleScale BubbleSizes BulletGauge BusinessDayQ ButterflyGraph ButterworthFilterModel Button ButtonBar ButtonBox ButtonBoxOptions ButtonCell ButtonContents ButtonData ButtonEvaluator ButtonExpandable ButtonFrame ButtonFunction ButtonMargins ButtonMinHeight ButtonNote ButtonNotebook ButtonSource ButtonStyle ButtonStyleMenuListing Byte ByteCount ByteOrdering C CachedValue CacheGraphics CalendarData CalendarType CallPacket CanberraDistance Cancel CancelButton CandlestickChart Cap CapForm CapitalDifferentialD CardinalBSplineBasis CarmichaelLambda Cases Cashflow Casoratian Catalan CatalanNumber Catch CauchyDistribution CauchyWindow CayleyGraph CDF CDFDeploy CDFInformation CDFWavelet Ceiling Cell CellAutoOverwrite CellBaseline CellBoundingBox CellBracketOptions CellChangeTimes CellContents CellContext CellDingbat CellDynamicExpression CellEditDuplicate CellElementsBoundingBox CellElementSpacings CellEpilog CellEvaluationDuplicate CellEvaluationFunction CellEventActions CellFrame CellFrameColor CellFrameLabelMargins CellFrameLabels CellFrameMargins CellGroup CellGroupData CellGrouping CellGroupingRules CellHorizontalScrolling CellID CellLabel CellLabelAutoDelete CellLabelMargins CellLabelPositioning CellMargins CellObject CellOpen CellPrint CellProlog Cells CellSize CellStyle CellTags CellularAutomaton CensoredDistribution Censoring Center CenterDot CentralMoment CentralMomentGeneratingFunction CForm ChampernowneNumber ChanVeseBinarize Character CharacterEncoding CharacterEncodingsPath CharacteristicFunction CharacteristicPolynomial CharacterRange Characters ChartBaseStyle ChartElementData ChartElementDataFunction ChartElementFunction ChartElements ChartLabels ChartLayout ChartLegends ChartStyle Chebyshev1FilterModel Chebyshev2FilterModel ChebyshevDistance ChebyshevT ChebyshevU Check CheckAbort CheckAll Checkbox CheckboxBar CheckboxBox CheckboxBoxOptions ChemicalData ChessboardDistance ChiDistribution ChineseRemainder ChiSquareDistribution ChoiceButtons ChoiceDialog CholeskyDecomposition Chop Circle CircleBox CircleDot CircleMinus CirclePlus CircleTimes CirculantGraph CityData Clear ClearAll ClearAttributes ClearSystemCache ClebschGordan ClickPane Clip ClipboardNotebook ClipFill ClippingStyle ClipPlanes ClipRange Clock ClockGauge ClockwiseContourIntegral Close Closed CloseKernels ClosenessCentrality Closing ClosingAutoSave ClosingEvent ClusteringComponents CMYKColor Coarse Coefficient CoefficientArrays CoefficientDomain CoefficientList CoefficientRules CoifletWavelet Collect Colon ColonForm ColorCombine ColorConvert ColorData ColorDataFunction ColorFunction ColorFunctionScaling Colorize ColorNegate ColorOutput ColorProfileData ColorQuantize ColorReplace ColorRules ColorSelectorSettings ColorSeparate ColorSetter ColorSetterBox ColorSetterBoxOptions ColorSlider ColorSpace Column ColumnAlignments ColumnBackgrounds ColumnForm ColumnLines ColumnsEqual ColumnSpacings ColumnWidths CommonDefaultFormatTypes Commonest CommonestFilter CommonUnits CommunityBoundaryStyle CommunityGraphPlot CommunityLabels CommunityRegionStyle CompatibleUnitQ CompilationOptions CompilationTarget Compile Compiled CompiledFunction Complement CompleteGraph CompleteGraphQ CompleteKaryTree CompletionsListPacket Complex Complexes ComplexExpand ComplexInfinity ComplexityFunction ComponentMeasurements ComponentwiseContextMenu Compose ComposeList ComposeSeries Composition CompoundExpression CompoundPoissonDistribution CompoundPoissonProcess CompoundRenewalProcess Compress CompressedData Condition ConditionalExpression Conditioned Cone ConeBox ConfidenceLevel ConfidenceRange ConfidenceTransform ConfigurationPath Congruent Conjugate ConjugateTranspose Conjunction Connect ConnectedComponents ConnectedGraphQ ConnesWindow ConoverTest ConsoleMessage ConsoleMessagePacket ConsolePrint Constant ConstantArray Constants ConstrainedMax ConstrainedMin ContentPadding ContentsBoundingBox ContentSelectable ContentSize Context ContextMenu Contexts ContextToFilename ContextToFileName Continuation Continue ContinuedFraction ContinuedFractionK ContinuousAction ContinuousMarkovProcess ContinuousTimeModelQ ContinuousWaveletData ContinuousWaveletTransform ContourDetect ContourGraphics ContourIntegral ContourLabels ContourLines ContourPlot ContourPlot3D Contours ContourShading ContourSmoothing ContourStyle ContraharmonicMean Control ControlActive ControlAlignment ControllabilityGramian ControllabilityMatrix ControllableDecomposition ControllableModelQ ControllerDuration ControllerInformation ControllerInformationData ControllerLinking ControllerManipulate ControllerMethod ControllerPath ControllerState ControlPlacement ControlsRendering ControlType Convergents ConversionOptions ConversionRules ConvertToBitmapPacket ConvertToPostScript ConvertToPostScriptPacket Convolve ConwayGroupCo1 ConwayGroupCo2 ConwayGroupCo3 CoordinateChartData CoordinatesToolOptions CoordinateTransform CoordinateTransformData CoprimeQ Coproduct CopulaDistribution Copyable CopyDirectory CopyFile CopyTag CopyToClipboard CornerFilter CornerNeighbors Correlation CorrelationDistance CorrelationFunction CorrelationTest Cos Cosh CoshIntegral CosineDistance CosineWindow CosIntegral Cot Coth Count CounterAssignments CounterBox CounterBoxOptions CounterClockwiseContourIntegral CounterEvaluator CounterFunction CounterIncrements CounterStyle CounterStyleMenuListing CountRoots CountryData Covariance CovarianceEstimatorFunction CovarianceFunction CoxianDistribution CoxIngersollRossProcess CoxModel CoxModelFit CramerVonMisesTest CreateArchive CreateDialog CreateDirectory CreateDocument CreateIntermediateDirectories CreatePalette CreatePalettePacket CreateScheduledTask CreateTemporary CreateWindow CriticalityFailureImportance CriticalitySuccessImportance CriticalSection Cross CrossingDetect CrossMatrix Csc Csch CubeRoot Cubics Cuboid CuboidBox Cumulant CumulantGeneratingFunction Cup CupCap Curl CurlyDoubleQuote CurlyQuote CurrentImage CurrentlySpeakingPacket CurrentValue CurvatureFlowFilter CurveClosed Cyan CycleGraph CycleIndexPolynomial Cycles CyclicGroup Cyclotomic Cylinder CylinderBox CylindricalDecomposition D DagumDistribution DamerauLevenshteinDistance DampingFactor Darker Dashed Dashing DataCompression DataDistribution DataRange DataReversed Date DateDelimiters DateDifference DateFunction DateList DateListLogPlot DateListPlot DatePattern DatePlus DateRange DateString DateTicksFormat DaubechiesWavelet DavisDistribution DawsonF DayCount DayCountConvention DayMatchQ DayName DayPlus DayRange DayRound DeBruijnGraph Debug DebugTag Decimal DeclareKnownSymbols DeclarePackage Decompose Decrement DedekindEta Default DefaultAxesStyle DefaultBaseStyle DefaultBoxStyle DefaultButton DefaultColor DefaultControlPlacement DefaultDuplicateCellStyle DefaultDuration DefaultElement DefaultFaceGridsStyle DefaultFieldHintStyle DefaultFont DefaultFontProperties DefaultFormatType DefaultFormatTypeForStyle DefaultFrameStyle DefaultFrameTicksStyle DefaultGridLinesStyle DefaultInlineFormatType DefaultInputFormatType DefaultLabelStyle DefaultMenuStyle DefaultNaturalLanguage DefaultNewCellStyle DefaultNewInlineCellStyle DefaultNotebook DefaultOptions DefaultOutputFormatType DefaultStyle DefaultStyleDefinitions DefaultTextFormatType DefaultTextInlineFormatType DefaultTicksStyle DefaultTooltipStyle DefaultValues Defer DefineExternal DefineInputStreamMethod DefineOutputStreamMethod Definition Degree DegreeCentrality DegreeGraphDistribution DegreeLexicographic DegreeReverseLexicographic Deinitialization Del Deletable Delete DeleteBorderComponents DeleteCases DeleteContents DeleteDirectory DeleteDuplicates DeleteFile DeleteSmallComponents DeleteWithContents DeletionWarning Delimiter DelimiterFlashTime DelimiterMatching Delimiters Denominator DensityGraphics DensityHistogram DensityPlot DependentVariables Deploy Deployed Depth DepthFirstScan Derivative DerivativeFilter DescriptorStateSpace DesignMatrix Det DGaussianWavelet DiacriticalPositioning Diagonal DiagonalMatrix Dialog DialogIndent DialogInput DialogLevel DialogNotebook DialogProlog DialogReturn DialogSymbols Diamond DiamondMatrix DiceDissimilarity DictionaryLookup DifferenceDelta DifferenceOrder DifferenceRoot DifferenceRootReduce Differences DifferentialD DifferentialRoot DifferentialRootReduce DifferentiatorFilter DigitBlock DigitBlockMinimum DigitCharacter DigitCount DigitQ DihedralGroup Dilation Dimensions DiracComb DiracDelta DirectedEdge DirectedEdges DirectedGraph DirectedGraphQ DirectedInfinity Direction Directive Directory DirectoryName DirectoryQ DirectoryStack DirichletCharacter DirichletConvolve DirichletDistribution DirichletL DirichletTransform DirichletWindow DisableConsolePrintPacket DiscreteChirpZTransform DiscreteConvolve DiscreteDelta DiscreteHadamardTransform DiscreteIndicator DiscreteLQEstimatorGains DiscreteLQRegulatorGains DiscreteLyapunovSolve DiscreteMarkovProcess DiscretePlot DiscretePlot3D DiscreteRatio DiscreteRiccatiSolve DiscreteShift DiscreteTimeModelQ DiscreteUniformDistribution DiscreteVariables DiscreteWaveletData DiscreteWaveletPacketTransform DiscreteWaveletTransform Discriminant Disjunction Disk DiskBox DiskMatrix Dispatch DispersionEstimatorFunction Display DisplayAllSteps DisplayEndPacket DisplayFlushImagePacket DisplayForm DisplayFunction DisplayPacket DisplayRules DisplaySetSizePacket DisplayString DisplayTemporary DisplayWith DisplayWithRef DisplayWithVariable DistanceFunction DistanceTransform Distribute Distributed DistributedContexts DistributeDefinitions DistributionChart DistributionDomain DistributionFitTest DistributionParameterAssumptions DistributionParameterQ Dithering Div Divergence Divide DivideBy Dividers Divisible Divisors DivisorSigma DivisorSum DMSList DMSString Do DockedCells DocumentNotebook DominantColors DOSTextFormat Dot DotDashed DotEqual Dotted DoubleBracketingBar DoubleContourIntegral DoubleDownArrow DoubleLeftArrow DoubleLeftRightArrow DoubleLeftTee DoubleLongLeftArrow DoubleLongLeftRightArrow DoubleLongRightArrow DoubleRightArrow DoubleRightTee DoubleUpArrow DoubleUpDownArrow DoubleVerticalBar DoublyInfinite Down DownArrow DownArrowBar DownArrowUpArrow DownLeftRightVector DownLeftTeeVector DownLeftVector DownLeftVectorBar DownRightTeeVector DownRightVector DownRightVectorBar Downsample DownTee DownTeeArrow DownValues DragAndDrop DrawEdges DrawFrontFaces DrawHighlighted Drop DSolve Dt DualLinearProgramming DualSystemsModel DumpGet DumpSave DuplicateFreeQ Dynamic DynamicBox DynamicBoxOptions DynamicEvaluationTimeout DynamicLocation DynamicModule DynamicModuleBox DynamicModuleBoxOptions DynamicModuleParent DynamicModuleValues DynamicName DynamicNamespace DynamicReference DynamicSetting DynamicUpdating DynamicWrapper DynamicWrapperBox DynamicWrapperBoxOptions E EccentricityCentrality EdgeAdd EdgeBetweennessCentrality EdgeCapacity EdgeCapForm EdgeColor EdgeConnectivity EdgeCost EdgeCount EdgeCoverQ EdgeDashing EdgeDelete EdgeDetect EdgeForm EdgeIndex EdgeJoinForm EdgeLabeling EdgeLabels EdgeLabelStyle EdgeList EdgeOpacity EdgeQ EdgeRenderingFunction EdgeRules EdgeShapeFunction EdgeStyle EdgeThickness EdgeWeight Editable EditButtonSettings EditCellTagsSettings EditDistance EffectiveInterest Eigensystem Eigenvalues EigenvectorCentrality Eigenvectors Element ElementData Eliminate EliminationOrder EllipticE EllipticExp EllipticExpPrime EllipticF EllipticFilterModel EllipticK EllipticLog EllipticNomeQ EllipticPi EllipticReducedHalfPeriods EllipticTheta EllipticThetaPrime EmitSound EmphasizeSyntaxErrors EmpiricalDistribution Empty EmptyGraphQ EnableConsolePrintPacket Enabled Encode End EndAdd EndDialogPacket EndFrontEndInteractionPacket EndOfFile EndOfLine EndOfString EndPackage EngineeringForm Enter EnterExpressionPacket EnterTextPacket Entropy EntropyFilter Environment Epilog Equal EqualColumns EqualRows EqualTilde EquatedTo Equilibrium EquirippleFilterKernel Equivalent Erf Erfc Erfi ErlangB ErlangC ErlangDistribution Erosion ErrorBox ErrorBoxOptions ErrorNorm ErrorPacket ErrorsDialogSettings EstimatedDistribution EstimatedProcess EstimatorGains EstimatorRegulator EuclideanDistance EulerE EulerGamma EulerianGraphQ EulerPhi Evaluatable Evaluate Evaluated EvaluatePacket EvaluationCell EvaluationCompletionAction EvaluationElements EvaluationMode EvaluationMonitor EvaluationNotebook EvaluationObject EvaluationOrder Evaluator EvaluatorNames EvenQ EventData EventEvaluator EventHandler EventHandlerTag EventLabels ExactBlackmanWindow ExactNumberQ ExactRootIsolation ExampleData Except ExcludedForms ExcludePods Exclusions ExclusionsStyle Exists Exit ExitDialog Exp Expand ExpandAll ExpandDenominator ExpandFileName ExpandNumerator Expectation ExpectationE ExpectedValue ExpGammaDistribution ExpIntegralE ExpIntegralEi Exponent ExponentFunction ExponentialDistribution ExponentialFamily ExponentialGeneratingFunction ExponentialMovingAverage ExponentialPowerDistribution ExponentPosition ExponentStep Export ExportAutoReplacements ExportPacket ExportString Expression ExpressionCell ExpressionPacket ExpToTrig ExtendedGCD Extension ExtentElementFunction ExtentMarkers ExtentSize ExternalCall ExternalDataCharacterEncoding Extract ExtractArchive ExtremeValueDistribution FaceForm FaceGrids FaceGridsStyle Factor FactorComplete Factorial Factorial2 FactorialMoment FactorialMomentGeneratingFunction FactorialPower FactorInteger FactorList FactorSquareFree FactorSquareFreeList FactorTerms FactorTermsList Fail FailureDistribution False FARIMAProcess FEDisableConsolePrintPacket FeedbackSector FeedbackSectorStyle FeedbackType FEEnableConsolePrintPacket Fibonacci FieldHint FieldHintStyle FieldMasked FieldSize File FileBaseName FileByteCount FileDate FileExistsQ FileExtension FileFormat FileHash FileInformation FileName FileNameDepth FileNameDialogSettings FileNameDrop FileNameJoin FileNames FileNameSetter FileNameSplit FileNameTake FilePrint FileType FilledCurve FilledCurveBox Filling FillingStyle FillingTransform FilterRules FinancialBond FinancialData FinancialDerivative FinancialIndicator Find FindArgMax FindArgMin FindClique FindClusters FindCurvePath FindDistributionParameters FindDivisions FindEdgeCover FindEdgeCut FindEulerianCycle FindFaces FindFile FindFit FindGeneratingFunction FindGeoLocation FindGeometricTransform FindGraphCommunities FindGraphIsomorphism FindGraphPartition FindHamiltonianCycle FindIndependentEdgeSet FindIndependentVertexSet FindInstance FindIntegerNullVector FindKClan FindKClique FindKClub FindKPlex FindLibrary FindLinearRecurrence FindList FindMaximum FindMaximumFlow FindMaxValue FindMinimum FindMinimumCostFlow FindMinimumCut FindMinValue FindPermutation FindPostmanTour FindProcessParameters FindRoot FindSequenceFunction FindSettings FindShortestPath FindShortestTour FindThreshold FindVertexCover FindVertexCut Fine FinishDynamic FiniteAbelianGroupCount FiniteGroupCount FiniteGroupData First FirstPassageTimeDistribution FischerGroupFi22 FischerGroupFi23 FischerGroupFi24Prime FisherHypergeometricDistribution FisherRatioTest FisherZDistribution Fit FitAll FittedModel FixedPoint FixedPointList FlashSelection Flat Flatten FlattenAt FlatTopWindow FlipView Floor FlushPrintOutputPacket Fold FoldList Font FontColor FontFamily FontForm FontName FontOpacity FontPostScriptName FontProperties FontReencoding FontSize FontSlant FontSubstitutions FontTracking FontVariations FontWeight For ForAll Format FormatRules FormatType FormatTypeAutoConvert FormatValues FormBox FormBoxOptions FortranForm Forward ForwardBackward Fourier FourierCoefficient FourierCosCoefficient FourierCosSeries FourierCosTransform FourierDCT FourierDCTFilter FourierDCTMatrix FourierDST FourierDSTMatrix FourierMatrix FourierParameters FourierSequenceTransform FourierSeries FourierSinCoefficient FourierSinSeries FourierSinTransform FourierTransform FourierTrigSeries FractionalBrownianMotionProcess FractionalPart FractionBox FractionBoxOptions FractionLine Frame FrameBox FrameBoxOptions Framed FrameInset FrameLabel Frameless FrameMargins FrameStyle FrameTicks FrameTicksStyle FRatioDistribution FrechetDistribution FreeQ FrequencySamplingFilterKernel FresnelC FresnelS Friday FrobeniusNumber FrobeniusSolve FromCharacterCode FromCoefficientRules FromContinuedFraction FromDate FromDigits FromDMS Front FrontEndDynamicExpression FrontEndEventActions FrontEndExecute FrontEndObject FrontEndResource FrontEndResourceString FrontEndStackSize FrontEndToken FrontEndTokenExecute FrontEndValueCache FrontEndVersion FrontFaceColor FrontFaceOpacity Full FullAxes FullDefinition FullForm FullGraphics FullOptions FullSimplify Function FunctionExpand FunctionInterpolation FunctionSpace FussellVeselyImportance GaborFilter GaborMatrix GaborWavelet GainMargins GainPhaseMargins Gamma GammaDistribution GammaRegularized GapPenalty Gather GatherBy GaugeFaceElementFunction GaugeFaceStyle GaugeFrameElementFunction GaugeFrameSize GaugeFrameStyle GaugeLabels GaugeMarkers GaugeStyle GaussianFilter GaussianIntegers GaussianMatrix GaussianWindow GCD GegenbauerC General GeneralizedLinearModelFit GenerateConditions GeneratedCell GeneratedParameters GeneratingFunction Generic GenericCylindricalDecomposition GenomeData GenomeLookup GeodesicClosing GeodesicDilation GeodesicErosion GeodesicOpening GeoDestination GeodesyData GeoDirection GeoDistance GeoGridPosition GeometricBrownianMotionProcess GeometricDistribution GeometricMean GeometricMeanFilter GeometricTransformation GeometricTransformation3DBox GeometricTransformation3DBoxOptions GeometricTransformationBox GeometricTransformationBoxOptions GeoPosition GeoPositionENU GeoPositionXYZ GeoProjectionData GestureHandler GestureHandlerTag Get GetBoundingBoxSizePacket GetContext GetEnvironment GetFileName GetFrontEndOptionsDataPacket GetLinebreakInformationPacket GetMenusPacket GetPageBreakInformationPacket Glaisher GlobalClusteringCoefficient GlobalPreferences GlobalSession Glow GoldenRatio GompertzMakehamDistribution GoodmanKruskalGamma GoodmanKruskalGammaTest Goto Grad Gradient GradientFilter GradientOrientationFilter Graph GraphAssortativity GraphCenter GraphComplement GraphData GraphDensity GraphDiameter GraphDifference GraphDisjointUnion GraphDistance GraphDistanceMatrix GraphElementData GraphEmbedding GraphHighlight GraphHighlightStyle GraphHub Graphics Graphics3D Graphics3DBox Graphics3DBoxOptions GraphicsArray GraphicsBaseline GraphicsBox GraphicsBoxOptions GraphicsColor GraphicsColumn GraphicsComplex GraphicsComplex3DBox GraphicsComplex3DBoxOptions GraphicsComplexBox GraphicsComplexBoxOptions GraphicsContents GraphicsData GraphicsGrid GraphicsGridBox GraphicsGroup GraphicsGroup3DBox GraphicsGroup3DBoxOptions GraphicsGroupBox GraphicsGroupBoxOptions GraphicsGrouping GraphicsHighlightColor GraphicsRow GraphicsSpacing GraphicsStyle GraphIntersection GraphLayout GraphLinkEfficiency GraphPeriphery GraphPlot GraphPlot3D GraphPower GraphPropertyDistribution GraphQ GraphRadius GraphReciprocity GraphRoot GraphStyle GraphUnion Gray GrayLevel GreatCircleDistance Greater GreaterEqual GreaterEqualLess GreaterFullEqual GreaterGreater GreaterLess GreaterSlantEqual GreaterTilde Green Grid GridBaseline GridBox GridBoxAlignment GridBoxBackground GridBoxDividers GridBoxFrame GridBoxItemSize GridBoxItemStyle GridBoxOptions GridBoxSpacings GridCreationSettings GridDefaultElement GridElementStyleOptions GridFrame GridFrameMargins GridGraph GridLines GridLinesStyle GroebnerBasis GroupActionBase GroupCentralizer GroupElementFromWord GroupElementPosition GroupElementQ GroupElements GroupElementToWord GroupGenerators GroupMultiplicationTable GroupOrbits GroupOrder GroupPageBreakWithin GroupSetwiseStabilizer GroupStabilizer GroupStabilizerChain Gudermannian GumbelDistribution HaarWavelet HadamardMatrix HalfNormalDistribution HamiltonianGraphQ HammingDistance HammingWindow HankelH1 HankelH2 HankelMatrix HannPoissonWindow HannWindow HaradaNortonGroupHN HararyGraph HarmonicMean HarmonicMeanFilter HarmonicNumber Hash HashTable Haversine HazardFunction Head HeadCompose Heads HeavisideLambda HeavisidePi HeavisideTheta HeldGroupHe HeldPart HelpBrowserLookup HelpBrowserNotebook HelpBrowserSettings HermiteDecomposition HermiteH HermitianMatrixQ HessenbergDecomposition Hessian HexadecimalCharacter Hexahedron HexahedronBox HexahedronBoxOptions HiddenSurface HighlightGraph HighlightImage HighpassFilter HigmanSimsGroupHS HilbertFilter HilbertMatrix Histogram Histogram3D HistogramDistribution HistogramList HistogramTransform HistogramTransformInterpolation HitMissTransform HITSCentrality HodgeDual HoeffdingD HoeffdingDTest Hold HoldAll HoldAllComplete HoldComplete HoldFirst HoldForm HoldPattern HoldRest HolidayCalendar HomeDirectory HomePage Horizontal HorizontalForm HorizontalGauge HorizontalScrollPosition HornerForm HotellingTSquareDistribution HoytDistribution HTMLSave Hue HumpDownHump HumpEqual HurwitzLerchPhi HurwitzZeta HyperbolicDistribution HypercubeGraph HyperexponentialDistribution Hyperfactorial Hypergeometric0F1 Hypergeometric0F1Regularized Hypergeometric1F1 Hypergeometric1F1Regularized Hypergeometric2F1 Hypergeometric2F1Regularized HypergeometricDistribution HypergeometricPFQ HypergeometricPFQRegularized HypergeometricU Hyperlink HyperlinkCreationSettings Hyphenation HyphenationOptions HypoexponentialDistribution HypothesisTestData I Identity IdentityMatrix If IgnoreCase Im Image Image3D Image3DSlices ImageAccumulate ImageAdd ImageAdjust ImageAlign ImageApply ImageAspectRatio ImageAssemble ImageCache ImageCacheValid ImageCapture ImageChannels ImageClip ImageColorSpace ImageCompose ImageConvolve ImageCooccurrence ImageCorners ImageCorrelate ImageCorrespondingPoints ImageCrop ImageData ImageDataPacket ImageDeconvolve ImageDemosaic ImageDifference ImageDimensions ImageDistance ImageEffect ImageFeatureTrack ImageFileApply ImageFileFilter ImageFileScan ImageFilter ImageForestingComponents ImageForwardTransformation ImageHistogram ImageKeypoints ImageLevels ImageLines ImageMargins ImageMarkers ImageMeasurements ImageMultiply ImageOffset ImagePad ImagePadding ImagePartition ImagePeriodogram ImagePerspectiveTransformation ImageQ ImageRangeCache ImageReflect ImageRegion ImageResize ImageResolution ImageRotate ImageRotated ImageScaled ImageScan ImageSize ImageSizeAction ImageSizeCache ImageSizeMultipliers ImageSizeRaw ImageSubtract ImageTake ImageTransformation ImageTrim ImageType ImageValue ImageValuePositions Implies Import ImportAutoReplacements ImportString ImprovementImportance In IncidenceGraph IncidenceList IncidenceMatrix IncludeConstantBasis IncludeFileExtension IncludePods IncludeSingularTerm Increment Indent IndentingNewlineSpacings IndentMaxFraction IndependenceTest IndependentEdgeSetQ IndependentUnit IndependentVertexSetQ Indeterminate IndexCreationOptions Indexed IndexGraph IndexTag Inequality InexactNumberQ InexactNumbers Infinity Infix Information Inherited InheritScope Initialization InitializationCell InitializationCellEvaluation InitializationCellWarning InlineCounterAssignments InlineCounterIncrements InlineRules Inner Inpaint Input InputAliases InputAssumptions InputAutoReplacements InputField InputFieldBox InputFieldBoxOptions InputForm InputGrouping InputNamePacket InputNotebook InputPacket InputSettings InputStream InputString InputStringPacket InputToBoxFormPacket Insert InsertionPointObject InsertResults Inset Inset3DBox Inset3DBoxOptions InsetBox InsetBoxOptions Install InstallService InString Integer IntegerDigits IntegerExponent IntegerLength IntegerPart IntegerPartitions IntegerQ Integers IntegerString Integral Integrate Interactive InteractiveTradingChart Interlaced Interleaving InternallyBalancedDecomposition InterpolatingFunction InterpolatingPolynomial Interpolation InterpolationOrder InterpolationPoints InterpolationPrecision Interpretation InterpretationBox InterpretationBoxOptions InterpretationFunction InterpretTemplate InterquartileRange Interrupt InterruptSettings Intersection Interval IntervalIntersection IntervalMemberQ IntervalUnion Inverse InverseBetaRegularized InverseCDF InverseChiSquareDistribution InverseContinuousWaveletTransform InverseDistanceTransform InverseEllipticNomeQ InverseErf InverseErfc InverseFourier InverseFourierCosTransform InverseFourierSequenceTransform InverseFourierSinTransform InverseFourierTransform InverseFunction InverseFunctions InverseGammaDistribution InverseGammaRegularized InverseGaussianDistribution InverseGudermannian InverseHaversine InverseJacobiCD InverseJacobiCN InverseJacobiCS InverseJacobiDC InverseJacobiDN InverseJacobiDS InverseJacobiNC InverseJacobiND InverseJacobiNS InverseJacobiSC InverseJacobiSD InverseJacobiSN InverseLaplaceTransform InversePermutation InverseRadon InverseSeries InverseSurvivalFunction InverseWaveletTransform InverseWeierstrassP InverseZTransform Invisible InvisibleApplication InvisibleTimes IrreduciblePolynomialQ IsolatingInterval IsomorphicGraphQ IsotopeData Italic Item ItemBox ItemBoxOptions ItemSize ItemStyle ItoProcess JaccardDissimilarity JacobiAmplitude Jacobian JacobiCD JacobiCN JacobiCS JacobiDC JacobiDN JacobiDS JacobiNC JacobiND JacobiNS JacobiP JacobiSC JacobiSD JacobiSN JacobiSymbol JacobiZeta JankoGroupJ1 JankoGroupJ2 JankoGroupJ3 JankoGroupJ4 JarqueBeraALMTest JohnsonDistribution Join Joined JoinedCurve JoinedCurveBox JoinForm JordanDecomposition JordanModelDecomposition K KagiChart KaiserBesselWindow KaiserWindow KalmanEstimator KalmanFilter KarhunenLoeveDecomposition KaryTree KatzCentrality KCoreComponents KDistribution KelvinBei KelvinBer KelvinKei KelvinKer KendallTau KendallTauTest KernelExecute KernelMixtureDistribution KernelObject Kernels Ket Khinchin KirchhoffGraph KirchhoffMatrix KleinInvariantJ KnightTourGraph KnotData KnownUnitQ KolmogorovSmirnovTest KroneckerDelta KroneckerModelDecomposition KroneckerProduct KroneckerSymbol KuiperTest KumaraswamyDistribution Kurtosis KuwaharaFilter Label Labeled LabeledSlider LabelingFunction LabelStyle LaguerreL LambdaComponents LambertW LanczosWindow LandauDistribution Language LanguageCategory LaplaceDistribution LaplaceTransform Laplacian LaplacianFilter LaplacianGaussianFilter Large Larger Last Latitude LatitudeLongitude LatticeData LatticeReduce Launch LaunchKernels LayeredGraphPlot LayerSizeFunction LayoutInformation LCM LeafCount LeapYearQ LeastSquares LeastSquaresFilterKernel Left LeftArrow LeftArrowBar LeftArrowRightArrow LeftDownTeeVector LeftDownVector LeftDownVectorBar LeftRightArrow LeftRightVector LeftTee LeftTeeArrow LeftTeeVector LeftTriangle LeftTriangleBar LeftTriangleEqual LeftUpDownVector LeftUpTeeVector LeftUpVector LeftUpVectorBar LeftVector LeftVectorBar LegendAppearance Legended LegendFunction LegendLabel LegendLayout LegendMargins LegendMarkers LegendMarkerSize LegendreP LegendreQ LegendreType Length LengthWhile LerchPhi Less LessEqual LessEqualGreater LessFullEqual LessGreater LessLess LessSlantEqual LessTilde LetterCharacter LetterQ Level LeveneTest LeviCivitaTensor LevyDistribution Lexicographic LibraryFunction LibraryFunctionError LibraryFunctionInformation LibraryFunctionLoad LibraryFunctionUnload LibraryLoad LibraryUnload LicenseID LiftingFilterData LiftingWaveletTransform LightBlue LightBrown LightCyan Lighter LightGray LightGreen Lighting LightingAngle LightMagenta LightOrange LightPink LightPurple LightRed LightSources LightYellow Likelihood Limit LimitsPositioning LimitsPositioningTokens LindleyDistribution Line Line3DBox LinearFilter LinearFractionalTransform LinearModelFit LinearOffsetFunction LinearProgramming LinearRecurrence LinearSolve LinearSolveFunction LineBox LineBreak LinebreakAdjustments LineBreakChart LineBreakWithin LineColor LineForm LineGraph LineIndent LineIndentMaxFraction LineIntegralConvolutionPlot LineIntegralConvolutionScale LineLegend LineOpacity LineSpacing LineWrapParts LinkActivate LinkClose LinkConnect LinkConnectedQ LinkCreate LinkError LinkFlush LinkFunction LinkHost LinkInterrupt LinkLaunch LinkMode LinkObject LinkOpen LinkOptions LinkPatterns LinkProtocol LinkRead LinkReadHeld LinkReadyQ Links LinkWrite LinkWriteHeld LiouvilleLambda List Listable ListAnimate ListContourPlot ListContourPlot3D ListConvolve ListCorrelate ListCurvePathPlot ListDeconvolve ListDensityPlot Listen ListFourierSequenceTransform ListInterpolation ListLineIntegralConvolutionPlot ListLinePlot ListLogLinearPlot ListLogLogPlot ListLogPlot ListPicker ListPickerBox ListPickerBoxBackground ListPickerBoxOptions ListPlay ListPlot ListPlot3D ListPointPlot3D ListPolarPlot ListQ ListStreamDensityPlot ListStreamPlot ListSurfacePlot3D ListVectorDensityPlot ListVectorPlot ListVectorPlot3D ListZTransform Literal LiteralSearch LocalClusteringCoefficient LocalizeVariables LocationEquivalenceTest LocationTest Locator LocatorAutoCreate LocatorBox LocatorBoxOptions LocatorCentering LocatorPane LocatorPaneBox LocatorPaneBoxOptions LocatorRegion Locked Log Log10 Log2 LogBarnesG LogGamma LogGammaDistribution LogicalExpand LogIntegral LogisticDistribution LogitModelFit LogLikelihood LogLinearPlot LogLogisticDistribution LogLogPlot LogMultinormalDistribution LogNormalDistribution LogPlot LogRankTest LogSeriesDistribution LongEqual Longest LongestAscendingSequence LongestCommonSequence LongestCommonSequencePositions LongestCommonSubsequence LongestCommonSubsequencePositions LongestMatch LongForm Longitude LongLeftArrow LongLeftRightArrow LongRightArrow Loopback LoopFreeGraphQ LowerCaseQ LowerLeftArrow LowerRightArrow LowerTriangularize LowpassFilter LQEstimatorGains LQGRegulator LQOutputRegulatorGains LQRegulatorGains LUBackSubstitution LucasL LuccioSamiComponents LUDecomposition LyapunovSolve LyonsGroupLy MachineID MachineName MachineNumberQ MachinePrecision MacintoshSystemPageSetup Magenta Magnification Magnify MainSolve MaintainDynamicCaches Majority MakeBoxes MakeExpression MakeRules MangoldtLambda ManhattanDistance Manipulate Manipulator MannWhitneyTest MantissaExponent Manual Map MapAll MapAt MapIndexed MAProcess MapThread MarcumQ MardiaCombinedTest MardiaKurtosisTest MardiaSkewnessTest MarginalDistribution MarkovProcessProperties Masking MatchingDissimilarity MatchLocalNameQ MatchLocalNames MatchQ Material MathematicaNotation MathieuC MathieuCharacteristicA MathieuCharacteristicB MathieuCharacteristicExponent MathieuCPrime MathieuGroupM11 MathieuGroupM12 MathieuGroupM22 MathieuGroupM23 MathieuGroupM24 MathieuS MathieuSPrime MathMLForm MathMLText Matrices MatrixExp MatrixForm MatrixFunction MatrixLog MatrixPlot MatrixPower MatrixQ MatrixRank Max MaxBend MaxDetect MaxExtraBandwidths MaxExtraConditions MaxFeatures MaxFilter Maximize MaxIterations MaxMemoryUsed MaxMixtureKernels MaxPlotPoints MaxPoints MaxRecursion MaxStableDistribution MaxStepFraction MaxSteps MaxStepSize MaxValue MaxwellDistribution McLaughlinGroupMcL Mean MeanClusteringCoefficient MeanDegreeConnectivity MeanDeviation MeanFilter MeanGraphDistance MeanNeighborDegree MeanShift MeanShiftFilter Median MedianDeviation MedianFilter Medium MeijerG MeixnerDistribution MemberQ MemoryConstrained MemoryInUse Menu MenuAppearance MenuCommandKey MenuEvaluator MenuItem MenuPacket MenuSortingValue MenuStyle MenuView MergeDifferences Mesh MeshFunctions MeshRange MeshShading MeshStyle Message MessageDialog MessageList MessageName MessageOptions MessagePacket Messages MessagesNotebook MetaCharacters MetaInformation Method MethodOptions MexicanHatWavelet MeyerWavelet Min MinDetect MinFilter MinimalPolynomial MinimalStateSpaceModel Minimize Minors MinRecursion MinSize MinStableDistribution Minus MinusPlus MinValue Missing MissingDataMethod MittagLefflerE MixedRadix MixedRadixQuantity MixtureDistribution Mod Modal Mode Modular ModularLambda Module Modulus MoebiusMu Moment Momentary MomentConvert MomentEvaluate MomentGeneratingFunction Monday Monitor MonomialList MonomialOrder MonsterGroupM MorletWavelet MorphologicalBinarize MorphologicalBranchPoints MorphologicalComponents MorphologicalEulerNumber MorphologicalGraph MorphologicalPerimeter MorphologicalTransform Most MouseAnnotation MouseAppearance MouseAppearanceTag MouseButtons Mouseover MousePointerNote MousePosition MovingAverage MovingMedian MoyalDistribution MultiedgeStyle MultilaunchWarning MultiLetterItalics MultiLetterStyle MultilineFunction Multinomial MultinomialDistribution MultinormalDistribution MultiplicativeOrder Multiplicity Multiselection MultivariateHypergeometricDistribution MultivariatePoissonDistribution MultivariateTDistribution N NakagamiDistribution NameQ Names NamespaceBox Nand NArgMax NArgMin NBernoulliB NCache NDSolve NDSolveValue Nearest NearestFunction NeedCurrentFrontEndPackagePacket NeedCurrentFrontEndSymbolsPacket NeedlemanWunschSimilarity Needs Negative NegativeBinomialDistribution NegativeMultinomialDistribution NeighborhoodGraph Nest NestedGreaterGreater NestedLessLess NestedScriptRules NestList NestWhile NestWhileList NevilleThetaC NevilleThetaD NevilleThetaN NevilleThetaS NewPrimitiveStyle NExpectation Next NextPrime NHoldAll NHoldFirst NHoldRest NicholsGridLines NicholsPlot NIntegrate NMaximize NMaxValue NMinimize NMinValue NominalVariables NonAssociative NoncentralBetaDistribution NoncentralChiSquareDistribution NoncentralFRatioDistribution NoncentralStudentTDistribution NonCommutativeMultiply NonConstants None NonlinearModelFit NonlocalMeansFilter NonNegative NonPositive Nor NorlundB Norm Normal NormalDistribution NormalGrouping Normalize NormalizedSquaredEuclideanDistance NormalsFunction NormFunction Not NotCongruent NotCupCap NotDoubleVerticalBar Notebook NotebookApply NotebookAutoSave NotebookClose NotebookConvertSettings NotebookCreate NotebookCreateReturnObject NotebookDefault NotebookDelete NotebookDirectory NotebookDynamicExpression NotebookEvaluate NotebookEventActions NotebookFileName NotebookFind NotebookFindReturnObject NotebookGet NotebookGetLayoutInformationPacket NotebookGetMisspellingsPacket NotebookInformation NotebookInterfaceObject NotebookLocate NotebookObject NotebookOpen NotebookOpenReturnObject NotebookPath NotebookPrint NotebookPut NotebookPutReturnObject NotebookRead NotebookResetGeneratedCells Notebooks NotebookSave NotebookSaveAs NotebookSelection NotebookSetupLayoutInformationPacket NotebooksMenu NotebookWrite NotElement NotEqualTilde NotExists NotGreater NotGreaterEqual NotGreaterFullEqual NotGreaterGreater NotGreaterLess NotGreaterSlantEqual NotGreaterTilde NotHumpDownHump NotHumpEqual NotLeftTriangle NotLeftTriangleBar NotLeftTriangleEqual NotLess NotLessEqual NotLessFullEqual NotLessGreater NotLessLess NotLessSlantEqual NotLessTilde NotNestedGreaterGreater NotNestedLessLess NotPrecedes NotPrecedesEqual NotPrecedesSlantEqual NotPrecedesTilde NotReverseElement NotRightTriangle NotRightTriangleBar NotRightTriangleEqual NotSquareSubset NotSquareSubsetEqual NotSquareSuperset NotSquareSupersetEqual NotSubset NotSubsetEqual NotSucceeds NotSucceedsEqual NotSucceedsSlantEqual NotSucceedsTilde NotSuperset NotSupersetEqual NotTilde NotTildeEqual NotTildeFullEqual NotTildeTilde NotVerticalBar NProbability NProduct NProductFactors NRoots NSolve NSum NSumTerms Null NullRecords NullSpace NullWords Number NumberFieldClassNumber NumberFieldDiscriminant NumberFieldFundamentalUnits NumberFieldIntegralBasis NumberFieldNormRepresentatives NumberFieldRegulator NumberFieldRootsOfUnity NumberFieldSignature NumberForm NumberFormat NumberMarks NumberMultiplier NumberPadding NumberPoint NumberQ NumberSeparator NumberSigns NumberString Numerator NumericFunction NumericQ NuttallWindow NValues NyquistGridLines NyquistPlot O ObservabilityGramian ObservabilityMatrix ObservableDecomposition ObservableModelQ OddQ Off Offset OLEData On ONanGroupON OneIdentity Opacity Open OpenAppend Opener OpenerBox OpenerBoxOptions OpenerView OpenFunctionInspectorPacket Opening OpenRead OpenSpecialOptions OpenTemporary OpenWrite Operate OperatingSystem OptimumFlowData Optional OptionInspectorSettings OptionQ Options OptionsPacket OptionsPattern OptionValue OptionValueBox OptionValueBoxOptions Or Orange Order OrderDistribution OrderedQ Ordering Orderless OrnsteinUhlenbeckProcess Orthogonalize Out Outer OutputAutoOverwrite OutputControllabilityMatrix OutputControllableModelQ OutputForm OutputFormData OutputGrouping OutputMathEditExpression OutputNamePacket OutputResponse OutputSizeLimit OutputStream Over OverBar OverDot Overflow OverHat Overlaps Overlay OverlayBox OverlayBoxOptions Overscript OverscriptBox OverscriptBoxOptions OverTilde OverVector OwenT OwnValues PackingMethod PaddedForm Padding PadeApproximant PadLeft PadRight PageBreakAbove PageBreakBelow PageBreakWithin PageFooterLines PageFooters PageHeaderLines PageHeaders PageHeight PageRankCentrality PageWidth PairedBarChart PairedHistogram PairedSmoothHistogram PairedTTest PairedZTest PaletteNotebook PalettePath Pane PaneBox PaneBoxOptions Panel PanelBox PanelBoxOptions Paneled PaneSelector PaneSelectorBox PaneSelectorBoxOptions PaperWidth ParabolicCylinderD ParagraphIndent ParagraphSpacing ParallelArray ParallelCombine ParallelDo ParallelEvaluate Parallelization Parallelize ParallelMap ParallelNeeds ParallelProduct ParallelSubmit ParallelSum ParallelTable ParallelTry Parameter ParameterEstimator ParameterMixtureDistribution ParameterVariables ParametricFunction ParametricNDSolve ParametricNDSolveValue ParametricPlot ParametricPlot3D ParentConnect ParentDirectory ParentForm Parenthesize ParentList ParetoDistribution Part PartialCorrelationFunction PartialD ParticleData Partition PartitionsP PartitionsQ ParzenWindow PascalDistribution PassEventsDown PassEventsUp Paste PasteBoxFormInlineCells PasteButton Path PathGraph PathGraphQ Pattern PatternSequence PatternTest PauliMatrix PaulWavelet Pause PausedTime PDF PearsonChiSquareTest PearsonCorrelationTest PearsonDistribution PerformanceGoal PeriodicInterpolation Periodogram PeriodogramArray PermutationCycles PermutationCyclesQ PermutationGroup PermutationLength PermutationList PermutationListQ PermutationMax PermutationMin PermutationOrder PermutationPower PermutationProduct PermutationReplace Permutations PermutationSupport Permute PeronaMalikFilter Perpendicular PERTDistribution PetersenGraph PhaseMargins Pi Pick PIDData PIDDerivativeFilter PIDFeedforward PIDTune Piecewise PiecewiseExpand PieChart PieChart3D PillaiTrace PillaiTraceTest Pink Pivoting PixelConstrained PixelValue PixelValuePositions Placed Placeholder PlaceholderReplace Plain PlanarGraphQ Play PlayRange Plot Plot3D Plot3Matrix PlotDivision PlotJoined PlotLabel PlotLayout PlotLegends PlotMarkers PlotPoints PlotRange PlotRangeClipping PlotRangePadding PlotRegion PlotStyle Plus PlusMinus Pochhammer PodStates PodWidth Point Point3DBox PointBox PointFigureChart PointForm PointLegend PointSize PoissonConsulDistribution PoissonDistribution PoissonProcess PoissonWindow PolarAxes PolarAxesOrigin PolarGridLines PolarPlot PolarTicks PoleZeroMarkers PolyaAeppliDistribution PolyGamma Polygon Polygon3DBox Polygon3DBoxOptions PolygonBox PolygonBoxOptions PolygonHoleScale PolygonIntersections PolygonScale PolyhedronData PolyLog PolynomialExtendedGCD PolynomialForm PolynomialGCD PolynomialLCM PolynomialMod PolynomialQ PolynomialQuotient PolynomialQuotientRemainder PolynomialReduce PolynomialRemainder Polynomials PopupMenu PopupMenuBox PopupMenuBoxOptions PopupView PopupWindow Position Positive PositiveDefiniteMatrixQ PossibleZeroQ Postfix PostScript Power PowerDistribution PowerExpand PowerMod PowerModList PowerSpectralDensity PowersRepresentations PowerSymmetricPolynomial Precedence PrecedenceForm Precedes PrecedesEqual PrecedesSlantEqual PrecedesTilde Precision PrecisionGoal PreDecrement PredictionRoot PreemptProtect PreferencesPath Prefix PreIncrement Prepend PrependTo PreserveImageOptions Previous PriceGraphDistribution PrimaryPlaceholder Prime PrimeNu PrimeOmega PrimePi PrimePowerQ PrimeQ Primes PrimeZetaP PrimitiveRoot PrincipalComponents PrincipalValue Print PrintAction PrintForm PrintingCopies PrintingOptions PrintingPageRange PrintingStartingPageNumber PrintingStyleEnvironment PrintPrecision PrintTemporary Prism PrismBox PrismBoxOptions PrivateCellOptions PrivateEvaluationOptions PrivateFontOptions PrivateFrontEndOptions PrivateNotebookOptions PrivatePaths Probability ProbabilityDistribution ProbabilityPlot ProbabilityPr ProbabilityScalePlot ProbitModelFit ProcessEstimator ProcessParameterAssumptions ProcessParameterQ ProcessStateDomain ProcessTimeDomain Product ProductDistribution ProductLog ProgressIndicator ProgressIndicatorBox ProgressIndicatorBoxOptions Projection Prolog PromptForm Properties Property PropertyList PropertyValue Proportion Proportional Protect Protected ProteinData Pruning PseudoInverse Purple Put PutAppend Pyramid PyramidBox PyramidBoxOptions QBinomial QFactorial QGamma QHypergeometricPFQ QPochhammer QPolyGamma QRDecomposition QuadraticIrrationalQ Quantile QuantilePlot Quantity QuantityForm QuantityMagnitude QuantityQ QuantityUnit Quartics QuartileDeviation Quartiles QuartileSkewness QueueingNetworkProcess QueueingProcess QueueProperties Quiet Quit Quotient QuotientRemainder RadialityCentrality RadicalBox RadicalBoxOptions RadioButton RadioButtonBar RadioButtonBox RadioButtonBoxOptions Radon RamanujanTau RamanujanTauL RamanujanTauTheta RamanujanTauZ Random RandomChoice RandomComplex RandomFunction RandomGraph RandomImage RandomInteger RandomPermutation RandomPrime RandomReal RandomSample RandomSeed RandomVariate RandomWalkProcess Range RangeFilter RangeSpecification RankedMax RankedMin Raster Raster3D Raster3DBox Raster3DBoxOptions RasterArray RasterBox RasterBoxOptions Rasterize RasterSize Rational RationalFunctions Rationalize Rationals Ratios Raw RawArray RawBoxes RawData RawMedium RayleighDistribution Re Read ReadList ReadProtected Real RealBlockDiagonalForm RealDigits RealExponent Reals Reap Record RecordLists RecordSeparators Rectangle RectangleBox RectangleBoxOptions RectangleChart RectangleChart3D RecurrenceFilter RecurrenceTable RecurringDigitsForm Red Reduce RefBox ReferenceLineStyle ReferenceMarkers ReferenceMarkerStyle Refine ReflectionMatrix ReflectionTransform Refresh RefreshRate RegionBinarize RegionFunction RegionPlot RegionPlot3D RegularExpression Regularization Reinstall Release ReleaseHold ReliabilityDistribution ReliefImage ReliefPlot Remove RemoveAlphaChannel RemoveAsynchronousTask Removed RemoveInputStreamMethod RemoveOutputStreamMethod RemoveProperty RemoveScheduledTask RenameDirectory RenameFile RenderAll RenderingOptions RenewalProcess RenkoChart Repeated RepeatedNull RepeatedString Replace ReplaceAll ReplaceHeldPart ReplaceImageValue ReplaceList ReplacePart ReplacePixelValue ReplaceRepeated Resampling Rescale RescalingTransform ResetDirectory ResetMenusPacket ResetScheduledTask Residue Resolve Rest Resultant ResumePacket Return ReturnExpressionPacket ReturnInputFormPacket ReturnPacket ReturnTextPacket Reverse ReverseBiorthogonalSplineWavelet ReverseElement ReverseEquilibrium ReverseGraph ReverseUpEquilibrium RevolutionAxis RevolutionPlot3D RGBColor RiccatiSolve RiceDistribution RidgeFilter RiemannR RiemannSiegelTheta RiemannSiegelZ Riffle Right RightArrow RightArrowBar RightArrowLeftArrow RightCosetRepresentative RightDownTeeVector RightDownVector RightDownVectorBar RightTee RightTeeArrow RightTeeVector RightTriangle RightTriangleBar RightTriangleEqual RightUpDownVector RightUpTeeVector RightUpVector RightUpVectorBar RightVector RightVectorBar RiskAchievementImportance RiskReductionImportance RogersTanimotoDissimilarity Root RootApproximant RootIntervals RootLocusPlot RootMeanSquare RootOfUnityQ RootReduce Roots RootSum Rotate RotateLabel RotateLeft RotateRight RotationAction RotationBox RotationBoxOptions RotationMatrix RotationTransform Round RoundImplies RoundingRadius Row RowAlignments RowBackgrounds RowBox RowHeights RowLines RowMinHeight RowReduce RowsEqual RowSpacings RSolve RudvalisGroupRu Rule RuleCondition RuleDelayed RuleForm RulerUnits Run RunScheduledTask RunThrough RuntimeAttributes RuntimeOptions RussellRaoDissimilarity SameQ SameTest SampleDepth SampledSoundFunction SampledSoundList SampleRate SamplingPeriod SARIMAProcess SARMAProcess SatisfiabilityCount SatisfiabilityInstances SatisfiableQ Saturday Save Saveable SaveAutoDelete SaveDefinitions SawtoothWave Scale Scaled ScaleDivisions ScaledMousePosition ScaleOrigin ScalePadding ScaleRanges ScaleRangeStyle ScalingFunctions ScalingMatrix ScalingTransform Scan ScheduledTaskActiveQ ScheduledTaskData ScheduledTaskObject ScheduledTasks SchurDecomposition ScientificForm ScreenRectangle ScreenStyleEnvironment ScriptBaselineShifts ScriptLevel ScriptMinSize ScriptRules ScriptSizeMultipliers Scrollbars ScrollingOptions ScrollPosition Sec Sech SechDistribution SectionGrouping SectorChart SectorChart3D SectorOrigin SectorSpacing SeedRandom Select Selectable SelectComponents SelectedCells SelectedNotebook Selection SelectionAnimate SelectionCell SelectionCellCreateCell SelectionCellDefaultStyle SelectionCellParentStyle SelectionCreateCell SelectionDebuggerTag SelectionDuplicateCell SelectionEvaluate SelectionEvaluateCreateCell SelectionMove SelectionPlaceholder SelectionSetStyle SelectWithContents SelfLoops SelfLoopStyle SemialgebraicComponentInstances SendMail Sequence SequenceAlignment SequenceForm SequenceHold SequenceLimit Series SeriesCoefficient SeriesData SessionTime Set SetAccuracy SetAlphaChannel SetAttributes Setbacks SetBoxFormNamesPacket SetDelayed SetDirectory SetEnvironment SetEvaluationNotebook SetFileDate SetFileLoadingContext SetNotebookStatusLine SetOptions SetOptionsPacket SetPrecision SetProperty SetSelectedNotebook SetSharedFunction SetSharedVariable SetSpeechParametersPacket SetStreamPosition SetSystemOptions Setter SetterBar SetterBox SetterBoxOptions Setting SetValue Shading Shallow ShannonWavelet ShapiroWilkTest Share Sharpen ShearingMatrix ShearingTransform ShenCastanMatrix Short ShortDownArrow Shortest ShortestMatch ShortestPathFunction ShortLeftArrow ShortRightArrow ShortUpArrow Show ShowAutoStyles ShowCellBracket ShowCellLabel ShowCellTags ShowClosedCellArea ShowContents ShowControls ShowCursorTracker ShowGroupOpenCloseIcon ShowGroupOpener ShowInvisibleCharacters ShowPageBreaks ShowPredictiveInterface ShowSelection ShowShortBoxForm ShowSpecialCharacters ShowStringCharacters ShowSyntaxStyles ShrinkingDelay ShrinkWrapBoundingBox SiegelTheta SiegelTukeyTest Sign Signature SignedRankTest SignificanceLevel SignPadding SignTest SimilarityRules SimpleGraph SimpleGraphQ Simplify Sin Sinc SinghMaddalaDistribution SingleEvaluation SingleLetterItalics SingleLetterStyle SingularValueDecomposition SingularValueList SingularValuePlot SingularValues Sinh SinhIntegral SinIntegral SixJSymbol Skeleton SkeletonTransform SkellamDistribution Skewness SkewNormalDistribution Skip SliceDistribution Slider Slider2D Slider2DBox Slider2DBoxOptions SliderBox SliderBoxOptions SlideView Slot SlotSequence Small SmallCircle Smaller SmithDelayCompensator SmithWatermanSimilarity SmoothDensityHistogram SmoothHistogram SmoothHistogram3D SmoothKernelDistribution SocialMediaData Socket SokalSneathDissimilarity Solve SolveAlways SolveDelayed Sort SortBy Sound SoundAndGraphics SoundNote SoundVolume Sow Space SpaceForm Spacer Spacings Span SpanAdjustments SpanCharacterRounding SpanFromAbove SpanFromBoth SpanFromLeft SpanLineThickness SpanMaxSize SpanMinSize SpanningCharacters SpanSymmetric SparseArray SpatialGraphDistribution Speak SpeakTextPacket SpearmanRankTest SpearmanRho Spectrogram SpectrogramArray Specularity SpellingCorrection SpellingDictionaries SpellingDictionariesPath SpellingOptions SpellingSuggestionsPacket Sphere SphereBox SphericalBesselJ SphericalBesselY SphericalHankelH1 SphericalHankelH2 SphericalHarmonicY SphericalPlot3D SphericalRegion SpheroidalEigenvalue SpheroidalJoiningFactor SpheroidalPS SpheroidalPSPrime SpheroidalQS SpheroidalQSPrime SpheroidalRadialFactor SpheroidalS1 SpheroidalS1Prime SpheroidalS2 SpheroidalS2Prime Splice SplicedDistribution SplineClosed SplineDegree SplineKnots SplineWeights Split SplitBy SpokenString Sqrt SqrtBox SqrtBoxOptions Square SquaredEuclideanDistance SquareFreeQ SquareIntersection SquaresR SquareSubset SquareSubsetEqual SquareSuperset SquareSupersetEqual SquareUnion SquareWave StabilityMargins StabilityMarginsStyle StableDistribution Stack StackBegin StackComplete StackInhibit StandardDeviation StandardDeviationFilter StandardForm Standardize StandbyDistribution Star StarGraph StartAsynchronousTask StartingStepSize StartOfLine StartOfString StartScheduledTask StartupSound StateDimensions StateFeedbackGains StateOutputEstimator StateResponse StateSpaceModel StateSpaceRealization StateSpaceTransform StationaryDistribution StationaryWaveletPacketTransform StationaryWaveletTransform StatusArea StatusCentrality StepMonitor StieltjesGamma StirlingS1 StirlingS2 StopAsynchronousTask StopScheduledTask StrataVariables StratonovichProcess StreamColorFunction StreamColorFunctionScaling StreamDensityPlot StreamPlot StreamPoints StreamPosition Streams StreamScale StreamStyle String StringBreak StringByteCount StringCases StringCount StringDrop StringExpression StringForm StringFormat StringFreeQ StringInsert StringJoin StringLength StringMatchQ StringPosition StringQ StringReplace StringReplaceList StringReplacePart StringReverse StringRotateLeft StringRotateRight StringSkeleton StringSplit StringTake StringToStream StringTrim StripBoxes StripOnInput StripWrapperBoxes StrokeForm StructuralImportance StructuredArray StructuredSelection StruveH StruveL Stub StudentTDistribution Style StyleBox StyleBoxAutoDelete StyleBoxOptions StyleData StyleDefinitions StyleForm StyleKeyMapping StyleMenuListing StyleNameDialogSettings StyleNames StylePrint StyleSheetPath Subfactorial Subgraph SubMinus SubPlus SubresultantPolynomialRemainders SubresultantPolynomials Subresultants Subscript SubscriptBox SubscriptBoxOptions Subscripted Subset SubsetEqual Subsets SubStar Subsuperscript SubsuperscriptBox SubsuperscriptBoxOptions Subtract SubtractFrom SubValues Succeeds SucceedsEqual SucceedsSlantEqual SucceedsTilde SuchThat Sum SumConvergence Sunday SuperDagger SuperMinus SuperPlus Superscript SuperscriptBox SuperscriptBoxOptions Superset SupersetEqual SuperStar Surd SurdForm SurfaceColor SurfaceGraphics SurvivalDistribution SurvivalFunction SurvivalModel SurvivalModelFit SuspendPacket SuzukiDistribution SuzukiGroupSuz SwatchLegend Switch Symbol SymbolName SymletWavelet Symmetric SymmetricGroup SymmetricMatrixQ SymmetricPolynomial SymmetricReduction Symmetrize SymmetrizedArray SymmetrizedArrayRules SymmetrizedDependentComponents SymmetrizedIndependentComponents SymmetrizedReplacePart SynchronousInitialization SynchronousUpdating Syntax SyntaxForm SyntaxInformation SyntaxLength SyntaxPacket SyntaxQ SystemDialogInput SystemException SystemHelpPath SystemInformation SystemInformationData SystemOpen SystemOptions SystemsModelDelay SystemsModelDelayApproximate SystemsModelDelete SystemsModelDimensions SystemsModelExtract SystemsModelFeedbackConnect SystemsModelLabels SystemsModelOrder SystemsModelParallelConnect SystemsModelSeriesConnect SystemsModelStateFeedbackConnect SystemStub Tab TabFilling Table TableAlignments TableDepth TableDirections TableForm TableHeadings TableSpacing TableView TableViewBox TabSpacings TabView TabViewBox TabViewBoxOptions TagBox TagBoxNote TagBoxOptions TaggingRules TagSet TagSetDelayed TagStyle TagUnset Take TakeWhile Tally Tan Tanh TargetFunctions TargetUnits TautologyQ TelegraphProcess TemplateBox TemplateBoxOptions TemplateSlotSequence TemporalData Temporary TemporaryVariable TensorContract TensorDimensions TensorExpand TensorProduct TensorQ TensorRank TensorReduce TensorSymmetry TensorTranspose TensorWedge Tetrahedron TetrahedronBox TetrahedronBoxOptions TeXForm TeXSave Text Text3DBox Text3DBoxOptions TextAlignment TextBand TextBoundingBox TextBox TextCell TextClipboardType TextData TextForm TextJustification TextLine TextPacket TextParagraph TextRecognize TextRendering TextStyle Texture TextureCoordinateFunction TextureCoordinateScaling Therefore ThermometerGauge Thick Thickness Thin Thinning ThisLink ThompsonGroupTh Thread ThreeJSymbol Threshold Through Throw Thumbnail Thursday Ticks TicksStyle Tilde TildeEqual TildeFullEqual TildeTilde TimeConstrained TimeConstraint Times TimesBy TimeSeriesForecast TimeSeriesInvertibility TimeUsed TimeValue TimeZone Timing Tiny TitleGrouping TitsGroupT ToBoxes ToCharacterCode ToColor ToContinuousTimeModel ToDate ToDiscreteTimeModel ToeplitzMatrix ToExpression ToFileName Together Toggle ToggleFalse Toggler TogglerBar TogglerBox TogglerBoxOptions ToHeldExpression ToInvertibleTimeSeries TokenWords Tolerance ToLowerCase ToNumberField TooBig Tooltip TooltipBox TooltipBoxOptions TooltipDelay TooltipStyle Top TopHatTransform TopologicalSort ToRadicals ToRules ToString Total TotalHeight TotalVariationFilter TotalWidth TouchscreenAutoZoom TouchscreenControlPlacement ToUpperCase Tr Trace TraceAbove TraceAction TraceBackward TraceDepth TraceDialog TraceForward TraceInternal TraceLevel TraceOff TraceOn TraceOriginal TracePrint TraceScan TrackedSymbols TradingChart TraditionalForm TraditionalFunctionNotation TraditionalNotation TraditionalOrder TransferFunctionCancel TransferFunctionExpand TransferFunctionFactor TransferFunctionModel TransferFunctionPoles TransferFunctionTransform TransferFunctionZeros TransformationFunction TransformationFunctions TransformationMatrix TransformedDistribution TransformedField Translate TranslationTransform TransparentColor Transpose TreeForm TreeGraph TreeGraphQ TreePlot TrendStyle TriangleWave TriangularDistribution Trig TrigExpand TrigFactor TrigFactorList Trigger TrigReduce TrigToExp TrimmedMean True TrueQ TruncatedDistribution TsallisQExponentialDistribution TsallisQGaussianDistribution TTest Tube TubeBezierCurveBox TubeBezierCurveBoxOptions TubeBox TubeBSplineCurveBox TubeBSplineCurveBoxOptions Tuesday TukeyLambdaDistribution TukeyWindow Tuples TuranGraph TuringMachine Transparent UnateQ Uncompress Undefined UnderBar Underflow Underlined Underoverscript UnderoverscriptBox UnderoverscriptBoxOptions Underscript UnderscriptBox UnderscriptBoxOptions UndirectedEdge UndirectedGraph UndirectedGraphQ UndocumentedTestFEParserPacket UndocumentedTestGetSelectionPacket Unequal Unevaluated UniformDistribution UniformGraphDistribution UniformSumDistribution Uninstall Union UnionPlus Unique UnitBox UnitConvert UnitDimensions Unitize UnitRootTest UnitSimplify UnitStep UnitTriangle UnitVector Unprotect UnsameQ UnsavedVariables Unset UnsetShared UntrackedVariables Up UpArrow UpArrowBar UpArrowDownArrow Update UpdateDynamicObjects UpdateDynamicObjectsSynchronous UpdateInterval UpDownArrow UpEquilibrium UpperCaseQ UpperLeftArrow UpperRightArrow UpperTriangularize Upsample UpSet UpSetDelayed UpTee UpTeeArrow UpValues URL URLFetch URLFetchAsynchronous URLSave URLSaveAsynchronous UseGraphicsRange Using UsingFrontEnd V2Get ValidationLength Value ValueBox ValueBoxOptions ValueForm ValueQ ValuesData Variables Variance VarianceEquivalenceTest VarianceEstimatorFunction VarianceGammaDistribution VarianceTest VectorAngle VectorColorFunction VectorColorFunctionScaling VectorDensityPlot VectorGlyphData VectorPlot VectorPlot3D VectorPoints VectorQ Vectors VectorScale VectorStyle Vee Verbatim Verbose VerboseConvertToPostScriptPacket VerifyConvergence VerifySolutions VerifyTestAssumptions Version VersionNumber VertexAdd VertexCapacity VertexColors VertexComponent VertexConnectivity VertexCoordinateRules VertexCoordinates VertexCorrelationSimilarity VertexCosineSimilarity VertexCount VertexCoverQ VertexDataCoordinates VertexDegree VertexDelete VertexDiceSimilarity VertexEccentricity VertexInComponent VertexInDegree VertexIndex VertexJaccardSimilarity VertexLabeling VertexLabels VertexLabelStyle VertexList VertexNormals VertexOutComponent VertexOutDegree VertexQ VertexRenderingFunction VertexReplace VertexShape VertexShapeFunction VertexSize VertexStyle VertexTextureCoordinates VertexWeight Vertical VerticalBar VerticalForm VerticalGauge VerticalSeparator VerticalSlider VerticalTilde ViewAngle ViewCenter ViewMatrix ViewPoint ViewPointSelectorSettings ViewPort ViewRange ViewVector ViewVertical VirtualGroupData Visible VisibleCell VoigtDistribution VonMisesDistribution WaitAll WaitAsynchronousTask WaitNext WaitUntil WakebyDistribution WalleniusHypergeometricDistribution WaringYuleDistribution WatershedComponents WatsonUSquareTest WattsStrogatzGraphDistribution WaveletBestBasis WaveletFilterCoefficients WaveletImagePlot WaveletListPlot WaveletMapIndexed WaveletMatrixPlot WaveletPhi WaveletPsi WaveletScale WaveletScalogram WaveletThreshold WeaklyConnectedComponents WeaklyConnectedGraphQ WeakStationarity WeatherData WeberE Wedge Wednesday WeibullDistribution WeierstrassHalfPeriods WeierstrassInvariants WeierstrassP WeierstrassPPrime WeierstrassSigma WeierstrassZeta WeightedAdjacencyGraph WeightedAdjacencyMatrix WeightedData WeightedGraphQ Weights WelchWindow WheelGraph WhenEvent Which While White Whitespace WhitespaceCharacter WhittakerM WhittakerW WienerFilter WienerProcess WignerD WignerSemicircleDistribution WilksW WilksWTest WindowClickSelect WindowElements WindowFloating WindowFrame WindowFrameElements WindowMargins WindowMovable WindowOpacity WindowSelected WindowSize WindowStatusArea WindowTitle WindowToolbars WindowWidth With WolframAlpha WolframAlphaDate WolframAlphaQuantity WolframAlphaResult Word WordBoundary WordCharacter WordData WordSearch WordSeparators WorkingPrecision Write WriteString Wronskian XMLElement XMLObject Xnor Xor Yellow YuleDissimilarity ZernikeR ZeroSymmetric ZeroTest ZeroWidthTimes Zeta ZetaZero ZipfDistribution ZTest ZTransform $Aborted $ActivationGroupID $ActivationKey $ActivationUserRegistered $AddOnsDirectory $AssertFunction $Assumptions $AsynchronousTask $BaseDirectory $BatchInput $BatchOutput $BoxForms $ByteOrdering $Canceled $CharacterEncoding $CharacterEncodings $CommandLine $CompilationTarget $ConditionHold $ConfiguredKernels $Context $ContextPath $ControlActiveSetting $CreationDate $CurrentLink $DateStringFormat $DefaultFont $DefaultFrontEnd $DefaultImagingDevice $DefaultPath $Display $DisplayFunction $DistributedContexts $DynamicEvaluation $Echo $Epilog $ExportFormats $Failed $FinancialDataSource $FormatType $FrontEnd $FrontEndSession $GeoLocation $HistoryLength $HomeDirectory $HTTPCookies $IgnoreEOF $ImagingDevices $ImportFormats $InitialDirectory $Input $InputFileName $InputStreamMethods $Inspector $InstallationDate $InstallationDirectory $InterfaceEnvironment $IterationLimit $KernelCount $KernelID $Language $LaunchDirectory $LibraryPath $LicenseExpirationDate $LicenseID $LicenseProcesses $LicenseServer $LicenseSubprocesses $LicenseType $Line $Linked $LinkSupported $LoadedFiles $MachineAddresses $MachineDomain $MachineDomains $MachineEpsilon $MachineID $MachineName $MachinePrecision $MachineType $MaxExtraPrecision $MaxLicenseProcesses $MaxLicenseSubprocesses $MaxMachineNumber $MaxNumber $MaxPiecewiseCases $MaxPrecision $MaxRootDegree $MessageGroups $MessageList $MessagePrePrint $Messages $MinMachineNumber $MinNumber $MinorReleaseNumber $MinPrecision $ModuleNumber $NetworkLicense $NewMessage $NewSymbol $Notebooks $NumberMarks $Off $OperatingSystem $Output $OutputForms $OutputSizeLimit $OutputStreamMethods $Packages $ParentLink $ParentProcessID $PasswordFile $PatchLevelID $Path $PathnameSeparator $PerformanceGoal $PipeSupported $Post $Pre $PreferencesDirectory $PrePrint $PreRead $PrintForms $PrintLiteral $ProcessID $ProcessorCount $ProcessorType $ProductInformation $ProgramName $RandomState $RecursionLimit $ReleaseNumber $RootDirectory $ScheduledTask $ScriptCommandLine $SessionID $SetParentLink $SharedFunctions $SharedVariables $SoundDisplay $SoundDisplayFunction $SuppressInputFormHeads $SynchronousEvaluation $SyntaxHandler $System $SystemCharacterEncoding $SystemID $SystemWordLength $TemporaryDirectory $TemporaryPrefix $TextStyle $TimedOut $TimeUnit $TimeZone $TopDirectory $TraceOff $TraceOn $TracePattern $TracePostAction $TracePreAction $Urgent $UserAddOnsDirectory $UserBaseDirectory $UserDocumentsDirectory $UserName $Version $VersionNumber", -c:[{cN:"comment",b:/\(\*/,e:/\*\)/},e.ASM,e.QSM,e.CNM,{cN:"list",b:/\{/,e:/\}/,i:/:/}]}});hljs.registerLanguage("python",function(e){var r={cN:"prompt",b:/^(>>>|\.\.\.) /},b={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[r],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[r],r:10},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},e.ASM,e.QSM]},a={cN:"number",r:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},l={cN:"params",b:/\(/,e:/\)/,c:["self",r,a,b]};return{aliases:["py","gyp"],k:{keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},i:/(<\/|->|\?)/,c:[r,a,b,e.HCM,{v:[{cN:"function",bK:"def",r:10},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,l]},{cN:"decorator",b:/^[\t ]*@/,e:/$/},{b:/\b(print|exec)\(/}]}});hljs.registerLanguage("java",function(e){var a=e.UIR+"(<"+e.UIR+">)?",t="false synchronized int abstract float private char boolean static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private",c="\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",r={cN:"number",b:c,r:0};return{aliases:["jsp"],k:t,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{r:0,c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"new throw return else",r:0},{cN:"function",b:"("+a+"\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:t,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:t,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},r,{cN:"annotation",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("nginx",function(e){var r={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+e.UIR}]},b={eW:!0,l:"[a-z/_]+",k:{built_in:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},r:0,i:"=>",c:[e.HCM,{cN:"string",c:[e.BE,r],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{cN:"url",b:"([a-z]+):/",e:"\\s",eW:!0,eE:!0,c:[r]},{cN:"regexp",c:[e.BE,r],v:[{b:"\\s\\^",e:"\\s|{|;",rE:!0},{b:"~\\*?\\s+",e:"\\s|{|;",rE:!0},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",r:0},r]};return{aliases:["nginxconf"],c:[e.HCM,{b:e.UIR+"\\s",e:";|{",rB:!0,c:[{cN:"title",b:e.UIR,starts:b}],r:0}],i:"[^\\s\\}]"}});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},s={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/-?[a-z\.]+/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",operator:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"shebang",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,e.NM,s,a,t]}});hljs.registerLanguage("sql",function(e){var t=e.C("--","$");return{cI:!0,i:/[<>{}*]/,c:[{cN:"operator",bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke",e:/;/,eW:!0,k:{keyword:"abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound buffer_cache buffer_pool build bulk by byte byteordermark bytes c cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle d data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration e each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain export export_set extended extent external external_1 external_2 externally extract f failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function g general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour http i id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists k keep keep_duplicates key keys kill l language large last last_day last_insert_id last_value lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim m main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex n name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding p package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select self sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime t table tables tablespace tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null",built_in:"array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text varchar varying void"},c:[{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[e.BE]},e.CNM,e.CBCM,t]},e.CBCM,t]}});hljs.registerLanguage("cpp",function(t){var e={cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"},r={cN:"string",v:[t.inherit(t.QSM,{b:'((u8?|U)|L)?"'}),{b:'(u8?|U)?R"',e:'"',c:[t.BE]},{b:"'\\\\?.",e:"'",i:"."}]},s={cN:"number",v:[{b:"\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)"},{b:t.CNR}]},i={cN:"preprocessor",b:"#",e:"$",k:"if else elif endif define undef warning error line pragma ifdef ifndef",c:[{b:/\\\n/,r:0},{bK:"include",e:"$",c:[r,{cN:"string",b:"<",e:">",i:"\\n"}]},r,s,t.CLCM,t.CBCM]},a=t.IR+"\\s*\\(",c={keyword:"int float while private char catch export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf",literal:"true false nullptr NULL"};return{aliases:["c","cc","h","c++","h++","hpp"],k:c,i:"",k:c,c:["self",e]},{b:t.IR+"::",k:c},{bK:"new throw return else",r:0},{cN:"function",b:"("+t.IR+"[\\*&\\s]+)+"+a,rB:!0,e:/[{;=]/,eE:!0,k:c,i:/[^\w\s\*&]/,c:[{b:a,rB:!0,c:[t.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:c,r:0,c:[t.CLCM,t.CBCM,r,s]},t.CLCM,t.CBCM,i]}]}});hljs.registerLanguage("matlab",function(e){var a=[e.CNM,{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]}],s={r:0,c:[{cN:"operator",b:/'['\.]*/}]};return{k:{keyword:"break case catch classdef continue else elseif end enumerated events for function global if methods otherwise parfor persistent properties return spmd switch try while",built_in:"sin sind sinh asin asind asinh cos cosd cosh acos acosd acosh tan tand tanh atan atand atan2 atanh sec secd sech asec asecd asech csc cscd csch acsc acscd acsch cot cotd coth acot acotd acoth hypot exp expm1 log log1p log10 log2 pow2 realpow reallog realsqrt sqrt nthroot nextpow2 abs angle complex conj imag real unwrap isreal cplxpair fix floor ceil round mod rem sign airy besselj bessely besselh besseli besselk beta betainc betaln ellipj ellipke erf erfc erfcx erfinv expint gamma gammainc gammaln psi legendre cross dot factor isprime primes gcd lcm rat rats perms nchoosek factorial cart2sph cart2pol pol2cart sph2cart hsv2rgb rgb2hsv zeros ones eye repmat rand randn linspace logspace freqspace meshgrid accumarray size length ndims numel disp isempty isequal isequalwithequalnans cat reshape diag blkdiag tril triu fliplr flipud flipdim rot90 find sub2ind ind2sub bsxfun ndgrid permute ipermute shiftdim circshift squeeze isscalar isvector ans eps realmax realmin pi i inf nan isnan isinf isfinite j why compan gallery hadamard hankel hilb invhilb magic pascal rosser toeplitz vander wilkinson"},i:'(//|"|#|/\\*|\\s+/\\w+)',c:[{cN:"function",bK:"function",e:"$",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)"},{cN:"params",b:"\\[",e:"\\]"}]},{b:/[a-zA-Z_][a-zA-Z_0-9]*'['\.]*/,rB:!0,r:0,c:[{b:/[a-zA-Z_][a-zA-Z_0-9]*/,r:0},s.c[0]]},{cN:"matrix",b:"\\[",e:"\\]",c:a,r:0,starts:s},{cN:"cell",b:"\\{",e:/}/,c:a,r:0,starts:s},{b:/\)/,r:0,starts:s},e.C("^\\s*\\%\\{\\s*$","^\\s*\\%\\}\\s*$"),e.C("\\%","$")].concat(a)}});hljs.registerLanguage("elm",function(e){var c=[e.C("--","$"),e.C("{-","-}",{c:["self"]})],i={cN:"type",b:"\\b[A-Z][\\w']*",r:0},n={cN:"container",b:"\\(",e:"\\)",i:'"',c:[{cN:"type",b:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"}].concat(c)},t={cN:"container",b:"{",e:"}",c:n.c};return{k:"let in if then else case of where module import exposing type alias as infix infixl infixr port",c:[{cN:"module",b:"\\bmodule\\b",e:"where",k:"module where",c:[n].concat(c),i:"\\W\\.|;"},{cN:"import",b:"\\bimport\\b",e:"$",k:"import|0 as exposing",c:[n].concat(c),i:"\\W\\.|;"},{cN:"typedef",b:"\\btype\\b",e:"$",k:"type alias",c:[i,n,t].concat(c)},{cN:"infix",bK:"infix infixl infixr",e:"$",c:[e.CNM].concat(c)},{cN:"foreign",b:"\\bport\\b",e:"$",k:"port",c:c},e.QSM,e.CNM,i,e.inherit(e.TM,{b:"^[_a-z][\\w']*"}),{b:"->|<-"}].concat(c)}});hljs.registerLanguage("php",function(e){var c={cN:"variable",b:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},a={cN:"preprocessor",b:/<\?(php)?|\?>/},i={cN:"string",c:[e.BE,a],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},t={v:[e.BNM,e.CNM]};return{aliases:["php3","php4","php5","php6"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[e.CLCM,e.HCM,e.C("/\\*","\\*/",{c:[{cN:"doctag",b:"@[A-Za-z]+"},a]}),e.C("__halt_compiler.+?;",!1,{eW:!0,k:"__halt_compiler",l:e.UIR}),{cN:"string",b:/<<<['"]?\w+['"]?$/,e:/^\w+;?$/,c:[e.BE,{cN:"subst",v:[{b:/\$\w+/},{b:/\{\$/,e:/\}/}]}]},a,c,{b:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",c,e.CBCM,i,t]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},i,t]}});hljs.registerLanguage("vbnet",function(e){return{aliases:["vb"],cI:!0,k:{keyword:"addhandler addressof alias and andalso aggregate ansi as assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into is isfalse isnot istrue join key let lib like loop me mid mod module mustinherit mustoverride mybase myclass namespace narrowing new next not notinheritable notoverridable of off on operator option optional or order orelse overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim rem removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly xor",built_in:"boolean byte cbool cbyte cchar cdate cdec cdbl char cint clng cobj csbyte cshort csng cstr ctype date decimal directcast double gettype getxmlnamespace iif integer long object sbyte short single string trycast typeof uinteger ulong ushort",literal:"true false nothing"},i:"//|{|}|endif|gosub|variant|wend",c:[e.inherit(e.QSM,{c:[{b:'""'}]}),e.C("'","$",{rB:!0,c:[{cN:"xmlDocTag",b:"'''|",c:[e.PWM]},{cN:"xmlDocTag",b:"",c:[e.PWM]}]}),e.CNM,{cN:"preprocessor",b:"#",e:"$",k:"if else elseif end region externalsource"}]}});hljs.registerLanguage("dart",function(e){var t={cN:"subst",b:"\\$\\{",e:"}",k:"true false null this is new super"},r={cN:"string",v:[{b:"r'''",e:"'''"},{b:'r"""',e:'"""'},{b:"r'",e:"'",i:"\\n"},{b:'r"',e:'"',i:"\\n"},{b:"'''",e:"'''",c:[e.BE,t]},{b:'"""',e:'"""',c:[e.BE,t]},{b:"'",e:"'",i:"\\n",c:[e.BE,t]},{b:'"',e:'"',i:"\\n",c:[e.BE,t]}]};t.c=[e.CNM,r];var n={keyword:"assert break case catch class const continue default do else enum extends false final finally for if in is new null rethrow return super switch this throw true try var void while with",literal:"abstract as dynamic export external factory get implements import library operator part set static typedef",built_in:"print Comparable DateTime Duration Function Iterable Iterator List Map Match Null Object Pattern RegExp Set Stopwatch String StringBuffer StringSink Symbol Type Uri bool double int num document window querySelector querySelectorAll Element ElementList"};return{k:n,c:[r,e.C("/\\*\\*","\\*/",{sL:"markdown"}),e.C("///","$",{sL:"markdown"}),e.CLCM,e.CBCM,{cN:"class",bK:"class interface",e:"{",eE:!0,c:[{bK:"extends implements"},e.UTM]},e.CNM,{cN:"annotation",b:"@[A-Za-z]+"},{b:"=>"}]}});hljs.registerLanguage("vbscript",function(e){return{aliases:["vbs"],cI:!0,k:{keyword:"call class const dim do loop erase execute executeglobal exit for each next function if then else on error option explicit new private property let get public randomize redim rem select case set stop sub while wend with end to elseif is or xor and not class_initialize class_terminate default preserve in me byval byref step resume goto",built_in:"lcase month vartype instrrev ubound setlocale getobject rgb getref string weekdayname rnd dateadd monthname now day minute isarray cbool round formatcurrency conversions csng timevalue second year space abs clng timeserial fixs len asc isempty maths dateserial atn timer isobject filter weekday datevalue ccur isdate instr datediff formatdatetime replace isnull right sgn array snumeric log cdbl hex chr lbound msgbox ucase getlocale cos cdate cbyte rtrim join hour oct typename trim strcomp int createobject loadpicture tan formatnumber mid scriptenginebuildversion scriptengine split scriptengineminorversion cint sin datepart ltrim sqr scriptenginemajorversion time derived eval date formatpercent exp inputbox left ascw chrw regexp server response request cstr err",literal:"true false null nothing empty"},i:"//",c:[e.inherit(e.QSM,{c:[{b:'""'}]}),e.C(/'/,/$/,{r:0}),e.CNM]}});hljs.registerLanguage("fortran",function(e){var t={cN:"params",b:"\\(",e:"\\)"},n={constant:".False. .True.",type:"integer real character complex logical dimension allocatable|10 parameter external implicit|10 none double precision assign intent optional pointer target in out common equivalence data",keyword:"kind do while private call intrinsic where elsewhere type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. goto save else use module select case access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit continue format pause cycle exit c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg synchronous nopass non_overridable pass protected volatile abstract extends import non_intrinsic value deferred generic final enumerator class associate bind enum c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated c_f_pointer c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure",built_in:"alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_ofacosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image"};return{cI:!0,aliases:["f90","f95"],k:n,c:[e.inherit(e.ASM,{cN:"string",r:0}),e.inherit(e.QSM,{cN:"string",r:0}),{cN:"function",bK:"subroutine function program",i:"[${=\\n]",c:[e.UTM,t]},e.C("!","$",{r:0}),{cN:"number",b:"(?=\\b|\\+|\\-|\\.)(?=\\.\\d|\\d)(?:\\d+)?(?:\\.?\\d*)(?:[de][+-]?\\d+)?\\b\\.?",r:0}]}});hljs.registerLanguage("scheme",function(e){var t="[^\\(\\)\\[\\]\\{\\}\",'`;#|\\\\\\s]+",r="(\\-|\\+)?\\d+([./]\\d+)?",i=r+"[+\\-]"+r+"i",a={built_in:"case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules ' * + , ,@ - ... / ; < <= = => > >= ` abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string=? string>? string? substring symbol->string symbol? tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"},n={cN:"shebang",b:"^#!",e:"$"},c={cN:"literal",b:"(#t|#f|#\\\\"+t+"|#\\\\.)"},l={cN:"number",v:[{b:r,r:0},{b:i,r:0},{b:"#b[0-1]+(/[0-1]+)?"},{b:"#o[0-7]+(/[0-7]+)?"},{b:"#x[0-9a-f]+(/[0-9a-f]+)?"}]},s=e.QSM,o=[e.C(";","$",{r:0}),e.C("#\\|","\\|#")],u={b:t,r:0},p={cN:"variable",b:"'"+t},d={eW:!0,r:0},g={cN:"list",v:[{b:"\\(",e:"\\)"},{b:"\\[",e:"\\]"}],c:[{cN:"keyword",b:t,l:t,k:a},d]};return d.c=[c,l,s,u,p,g].concat(o),{i:/\S/,c:[n,l,s,p,g].concat(o)}});hljs.registerLanguage("coffeescript",function(e){var c={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",built_in:"npm require console print module global window document"},n="[A-Za-z$_][0-9A-Za-z$_]*",r={cN:"subst",b:/#\{/,e:/}/,k:c},t=[e.BNM,e.inherit(e.CNM,{starts:{e:"(\\s*/)?",r:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/"""/,e:/"""/,c:[e.BE,r]},{b:/"/,e:/"/,c:[e.BE,r]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[r,e.HCM]},{b:"//[gim]*",r:0},{b:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/}]},{cN:"property",b:"@"+n},{b:"`",e:"`",eB:!0,eE:!0,sL:"javascript"}];r.c=t;var s=e.inherit(e.TM,{b:n}),i="(\\(.*\\))?\\s*\\B[-=]>",o={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:c,c:["self"].concat(t)}]};return{aliases:["coffee","cson","iced"],k:c,i:/\/\*/,c:t.concat([e.C("###","###"),e.HCM,{cN:"function",b:"^\\s*"+n+"\\s*=\\s*"+i,e:"[-=]>",rB:!0,c:[s,o]},{b:/[:\(,=]\s*/,r:0,c:[{cN:"function",b:i,e:"[-=]>",rB:!0,c:[o]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[s]},s]},{cN:"attribute",b:n+":",e:":",rB:!0,rE:!0,r:0}])}});hljs.registerLanguage("haml",function(s){return{cI:!0,c:[{cN:"doctype",b:"^!!!( (5|1\\.1|Strict|Frameset|Basic|Mobile|RDFa|XML\\b.*))?$",r:10},s.C("^\\s*(!=#|=#|-#|/).*$",!1,{r:0}),{b:"^\\s*(-|=|!=)(?!#)",starts:{e:"\\n",sL:"ruby"}},{cN:"tag",b:"^\\s*%",c:[{cN:"title",b:"\\w+"},{cN:"value",b:"[#\\.][\\w-]+"},{b:"{\\s*",e:"\\s*}",eE:!0,c:[{b:":\\w+\\s*=>",e:",\\s+",rB:!0,eW:!0,c:[{cN:"symbol",b:":\\w+"},s.ASM,s.QSM,{b:"\\w+",r:0}]}]},{b:"\\(\\s*",e:"\\s*\\)",eE:!0,c:[{b:"\\w+\\s*=",e:"\\s+",rB:!0,eW:!0,c:[{cN:"attribute",b:"\\w+",r:0},s.ASM,s.QSM,{b:"\\w+",r:0}]}]}]},{cN:"bullet",b:"^\\s*[=~]\\s*",r:0},{b:"#{",starts:{e:"}",sL:"ruby"}}]}});hljs.registerLanguage("javascript",function(e){return{aliases:["js"],k:{keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},c:[{cN:"pi",r:10,b:/^\s*['"]use (strict|asm)['"]/},e.ASM,e.QSM,{cN:"string",b:"`",e:"`",c:[e.BE,{cN:"subst",b:"\\$\\{",e:"\\}"}]},e.CLCM,e.CBCM,{cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{b:/\s*[);\]]/,r:0,sL:"xml"}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:[e.CLCM,e.CBCM]}],i:/\[|%/},{b:/\$[(.]/},{b:"\\."+e.IR,r:0},{bK:"import",e:"[;$]",k:"import from as",c:[e.ASM,e.QSM]},{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]}],i:/#/}});hljs.registerLanguage("erlang",function(e){var r="[a-z'][a-zA-Z0-9_']*",c="("+r+":"+r+"|"+r+")",a={keyword:"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor",literal:"false true"},n=e.C("%","$"),i={cN:"number",b:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",r:0},b={b:"fun\\s+"+r+"/\\d+"},d={b:c+"\\(",e:"\\)",rB:!0,r:0,c:[{cN:"function_name",b:c,r:0},{b:"\\(",e:"\\)",eW:!0,rE:!0,r:0}]},o={cN:"tuple",b:"{",e:"}",r:0},t={cN:"variable",b:"\\b_([A-Z][A-Za-z0-9_]*)?",r:0},l={cN:"variable",b:"[A-Z][a-zA-Z0-9_]*",r:0},f={b:"#"+e.UIR,r:0,rB:!0,c:[{cN:"record_name",b:"#"+e.UIR,r:0},{b:"{",e:"}",r:0}]},s={bK:"fun receive if try case",e:"end",k:a};s.c=[n,b,e.inherit(e.ASM,{cN:""}),s,d,e.QSM,i,o,t,l,f];var u=[n,b,s,d,e.QSM,i,o,t,l,f];d.c[1].c=u,o.c=u,f.c[1].c=u;var v={cN:"params",b:"\\(",e:"\\)",c:u};return{aliases:["erl"],k:a,i:"(",rB:!0,i:"\\(|#|//|/\\*|\\\\|:|;",c:[v,e.inherit(e.TM,{b:r})],starts:{e:";|\\.",k:a,c:u}},n,{cN:"pp",b:"^-",e:"\\.",r:0,eE:!0,rB:!0,l:"-"+e.IR,k:"-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn -import -include -include_lib -compile -define -else -endif -file -behaviour -behavior -spec",c:[v]},i,e.QSM,f,t,l,o,{b:/\.$/}]}});hljs.registerLanguage("dns",function(d){return{aliases:["bind","zone"],k:{keyword:"IN A AAAA AFSDB APL CAA CDNSKEY CDS CERT CNAME DHCID DLV DNAME DNSKEY DS HIP IPSECKEY KEY KX LOC MX NAPTR NS NSEC NSEC3 NSEC3PARAM PTR RRSIG RP SIG SOA SRV SSHFP TA TKEY TLSA TSIG TXT"},c:[d.C(";","$"),{cN:"operator",bK:"$TTL $GENERATE $INCLUDE $ORIGIN"},{cN:"number",b:"((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))"},{cN:"number",b:"((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])"}]}});hljs.registerLanguage("ocaml",function(e){return{aliases:["ml"],k:{keyword:"and as assert asr begin class constraint do done downto else end exception external for fun function functor if in include inherit! inherit initializer land lazy let lor lsl lsr lxor match method!|10 method mod module mutable new object of open! open or private rec sig struct then to try type val! val virtual when while with parser value",built_in:"array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 string unit in_channel out_channel ref",literal:"true false"},i:/\/\/|>>/,l:"[a-z_]\\w*!?",c:[{cN:"literal",b:"\\[(\\|\\|)?\\]|\\(\\)",r:0},e.C("\\(\\*","\\*\\)",{c:["self"]}),{cN:"symbol",b:"'[A-Za-z_](?!')[\\w']*"},{cN:"tag",b:"`[A-Z][\\w']*"},{cN:"type",b:"\\b[A-Z][\\w']*",r:0},{b:"[a-z_]\\w*'[\\w']*"},e.inherit(e.ASM,{cN:"char",r:0}),e.inherit(e.QSM,{i:null}),{cN:"number",b:"\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",r:0},{b:/[-=]>/}]}});hljs.registerLanguage("clojure",function(e){var t={built_in:"def defonce cond apply if-not if-let if not not= = < > <= >= == + / * - rem quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last drop-while while intern condp case reduced cycle split-at split-with repeat replicate iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter monitor-exit defmacro defn defn- macroexpand macroexpand-1 for dosync and or when when-not when-let comp juxt partial sequence memoize constantly complement identity assert peek pop doto proxy defstruct first rest cons defprotocol cast coll deftype defrecord last butlast sigs reify second ffirst fnext nfirst nnext defmulti defmethod meta with-meta ns in-ns create-ns import refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize"},r="a-zA-Z_\\-!.?+*=<>&#'",n="["+r+"]["+r+"0-9/;:]*",a="[-+]?\\d+(\\.\\d+)?",o={b:n,r:0},s={cN:"number",b:a,r:0},c=e.inherit(e.QSM,{i:null}),i=e.C(";","$",{r:0}),d={cN:"literal",b:/\b(true|false|nil)\b/},l={cN:"collection",b:"[\\[\\{]",e:"[\\]\\}]"},m={cN:"comment",b:"\\^"+n},p=e.C("\\^\\{","\\}"),u={cN:"attribute",b:"[:]"+n},f={cN:"list",b:"\\(",e:"\\)"},h={eW:!0,r:0},y={k:t,l:n,cN:"keyword",b:n,starts:h},b=[f,c,m,p,i,u,l,s,d,o];return f.c=[e.C("comment",""),y,h],h.c=b,l.c=b,{aliases:["clj"],i:/\S/,c:[f,c,m,p,i,u,l,s,d]}});hljs.registerLanguage("x86asm",function(s){return{cI:!0,l:"\\.?"+s.IR,k:{keyword:"lock rep repe repz repne repnz xaquire xrelease bnd nobnd aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63",literal:"ip eip rip al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 cs ds es fs gs ss st st0 st1 st2 st3 st4 st5 st6 st7 mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 xmm8 xmm9 xmm10 xmm11 xmm12 xmm13 xmm14 xmm15 xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ymm0 ymm1 ymm2 ymm3 ymm4 ymm5 ymm6 ymm7 ymm8 ymm9 ymm10 ymm11 ymm12 ymm13 ymm14 ymm15 ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 zmm0 zmm1 zmm2 zmm3 zmm4 zmm5 zmm6 zmm7 zmm8 zmm9 zmm10 zmm11 zmm12 zmm13 zmm14 zmm15 zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 k0 k1 k2 k3 k4 k5 k6 k7 bnd0 bnd1 bnd2 bnd3 cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d r0h r1h r2h r3h r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l",pseudo:"db dw dd dq dt ddq do dy dz resb resw resd resq rest resdq reso resy resz incbin equ times",preprocessor:"%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep %endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment .nolist byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr __FILE__ __LINE__ __SECT__ __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ __UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__ __PASS__ struc endstruc istruc at iend align alignb sectalign daz nodaz up down zero default option assume public ",built_in:"bits use16 use32 use64 default section segment absolute extern global common cpu float __utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ __float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ __Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__"},c:[s.C(";","$",{r:0}),{cN:"number",v:[{b:"\\b(?:([0-9][0-9_]*)?\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|(0[Xx])?[0-9][0-9_]*\\.?[0-9_]*(?:[pP](?:[+-]?[0-9_]+)?)?)\\b",r:0},{b:"\\$[0-9][0-9A-Fa-f]*",r:0},{b:"\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\b"},{b:"\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\b"}]},s.QSM,{cN:"string",v:[{b:"'",e:"[^\\\\]'"},{b:"`",e:"[^\\\\]`"},{b:"\\.[A-Za-z0-9]+"}],r:0},{cN:"label",v:[{b:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)"},{b:"^\\s*%%[A-Za-z0-9_$#@~.?]*:"}],r:0},{cN:"argument",b:"%[0-9]+",r:0},{cN:"built_in",b:"%!S+",r:0}]}});hljs.registerLanguage("tcl",function(e){return{aliases:["tk"],k:"after append apply array auto_execok auto_import auto_load auto_mkindex auto_mkindex_old auto_qualify auto_reset bgerror binary break catch cd chan clock close concat continue dde dict encoding eof error eval exec exit expr fblocked fconfigure fcopy file fileevent filename flush for foreach format gets glob global history http if incr info interp join lappend|10 lassign|10 lindex|10 linsert|10 list llength|10 load lrange|10 lrepeat|10 lreplace|10 lreverse|10 lsearch|10 lset|10 lsort|10 mathfunc mathop memory msgcat namespace open package parray pid pkg::create pkg_mkIndex platform platform::shell proc puts pwd read refchan regexp registry regsub|10 rename return safe scan seek set socket source split string subst switch tcl_endOfWord tcl_findLibrary tcl_startOfNextWord tcl_startOfPreviousWord tcl_wordBreakAfter tcl_wordBreakBefore tcltest tclvars tell time tm trace unknown unload unset update uplevel upvar variable vwait while",c:[e.C(";[ \\t]*#","$"),e.C("^[ \\t]*#","$"),{bK:"proc",e:"[\\{]",eE:!0,c:[{cN:"symbol",b:"[ \\t\\n\\r]+(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*",e:"[ \\t\\n\\r]",eW:!0,eE:!0}]},{cN:"variable",eE:!0,v:[{b:"\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*\\(([a-zA-Z0-9_])*\\)",e:"[^a-zA-Z0-9_\\}\\$]"},{b:"\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*",e:"(\\))?[^a-zA-Z0-9_\\}\\$]"}]},{cN:"string",c:[e.BE],v:[e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},{cN:"number",v:[e.BNM,e.CNM]}]}});hljs.registerLanguage("ini",function(e){var c={cN:"string",c:[e.BE],v:[{b:"'''",e:"'''",r:10},{b:'"""',e:'"""',r:10},{b:'"',e:'"'},{b:"'",e:"'"}]};return{aliases:["toml"],cI:!0,i:/\S/,c:[e.C(";","$"),e.HCM,{cN:"title",b:/^\s*\[+/,e:/\]+/},{cN:"setting",b:/^[a-z0-9\[\]_-]+\s*=\s*/,e:"$",c:[{cN:"value",eW:!0,k:"on off true false yes no",c:[{cN:"variable",v:[{b:/\$[\w\d"][\w\d_]*/},{b:/\$\{(.*?)}/}]},c,{cN:"number",b:/([\+\-]+)?[\d]+_[\d_]+/},e.NM],r:0}]}]}});hljs.registerLanguage("diff",function(e){return{aliases:["patch"],c:[{cN:"chunk",r:10,v:[{b:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"header",v:[{b:/Index: /,e:/$/},{b:/=====/,e:/=====$/},{b:/^\-\-\-/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+\+\+/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"change",b:"^\\!",e:"$"}]}});hljs.registerLanguage("dos",function(e){var r=e.C(/@?rem\b/,/$/,{r:10}),t={cN:"label",b:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)",r:0};return{aliases:["bat","cmd"],cI:!0,k:{flow:"if else goto for in do call exit not exist errorlevel defined",operator:"equ neq lss leq gtr geq",keyword:"shift cd dir echo setlocal endlocal set pause copy",stream:"prn nul lpt3 lpt2 lpt1 con com4 com3 com2 com1 aux",winutils:"ping net ipconfig taskkill xcopy ren del",built_in:"append assoc at attrib break cacls cd chcp chdir chkdsk chkntfs cls cmd color comp compact convert date dir diskcomp diskcopy doskey erase fs find findstr format ftype graftabl help keyb label md mkdir mode more move path pause print popd pushd promt rd recover rem rename replace restore rmdir shiftsort start subst time title tree type ver verify vol"},c:[{cN:"envvar",b:/%%[^ ]|%[^ ]+?%|![^ ]+?!/},{cN:"function",b:t.b,e:"goto:eof",c:[e.inherit(e.TM,{b:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),r]},{cN:"number",b:"\\b\\d+",r:0},r]}});hljs.registerLanguage("erlang-repl",function(r){return{k:{special_functions:"spawn spawn_link self",reserved:"after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if let not of or orelse|10 query receive rem try when xor"},c:[{cN:"prompt",b:"^[0-9]+> ",r:10},r.C("%","$"),{cN:"number",b:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",r:0},r.ASM,r.QSM,{cN:"constant",b:"\\?(::)?([A-Z]\\w*(::)?)+"},{cN:"arrow",b:"->"},{cN:"ok",b:"ok"},{cN:"exclamation_mark",b:"!"},{cN:"function_or_atom",b:"(\\b[a-z'][a-zA-Z0-9_']*:[a-z'][a-zA-Z0-9_']*)|(\\b[a-z'][a-zA-Z0-9_']*)",r:0},{cN:"variable",b:"[A-Z][a-zA-Z0-9_']*",r:0}]}});hljs.registerLanguage("groovy",function(e){return{k:{typename:"byte short char int long boolean float double void",literal:"true false null",keyword:"def as in assert trait super this abstract static volatile transient public private protected synchronized final class interface enum if else for while switch case break default continue throw throws try catch finally implements extends new import package return instanceof"},c:[e.C("/\\*\\*","\\*/",{r:0,c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,{cN:"string",b:'"""',e:'"""'},{cN:"string",b:"'''",e:"'''"},{cN:"string",b:"\\$/",e:"/\\$",r:10},e.ASM,{cN:"regexp",b:/~?\/[^\/\n]+\//,c:[e.BE]},e.QSM,{cN:"shebang",b:"^#!/usr/bin/env",e:"$",i:"\n"},e.BNM,{cN:"class",bK:"class interface trait enum",e:"{",i:":",c:[{bK:"extends implements"},e.UTM]},e.CNM,{cN:"annotation",b:"@[A-Za-z]+"},{cN:"string",b:/[^\?]{0}[A-Za-z0-9_$]+ *:/},{b:/\?/,e:/\:/},{cN:"label",b:"^\\s*[A-Za-z0-9_$]+:",r:0}],i:/#/}});hljs.registerLanguage("go",function(e){var t={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer",constant:"true false iota nil",typename:"bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{aliases:["golang"],k:t,i:">>|\.\.\.) /},b={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[r],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[r],r:10},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},e.ASM,e.QSM]},a={cN:"number",r:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},l={cN:"params",b:/\(/,e:/\)/,c:["self",r,a,b]};return{aliases:["py","gyp"],k:{keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},i:/(<\/|->|\?)/,c:[r,a,b,e.HCM,{v:[{cN:"function",bK:"def",r:10},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,l]},{cN:"decorator",b:/^[\t ]*@/,e:/$/},{b:/\b(print|exec)\(/}]}});hljs.registerLanguage("java",function(e){var a=e.UIR+"(<"+e.UIR+">)?",t="false synchronized int abstract float private char boolean static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private",c="\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",r={cN:"number",b:c,r:0};return{aliases:["jsp"],k:t,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{r:0,c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"new throw return else",r:0},{cN:"function",b:"("+a+"\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:t,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:t,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},r,{cN:"annotation",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("nginx",function(e){var r={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+e.UIR}]},b={eW:!0,l:"[a-z/_]+",k:{built_in:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},r:0,i:"=>",c:[e.HCM,{cN:"string",c:[e.BE,r],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{cN:"url",b:"([a-z]+):/",e:"\\s",eW:!0,eE:!0,c:[r]},{cN:"regexp",c:[e.BE,r],v:[{b:"\\s\\^",e:"\\s|{|;",rE:!0},{b:"~\\*?\\s+",e:"\\s|{|;",rE:!0},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",r:0},r]};return{aliases:["nginxconf"],c:[e.HCM,{b:e.UIR+"\\s",e:";|{",rB:!0,c:[{cN:"title",b:e.UIR,starts:b}],r:0}],i:"[^\\s\\}]"}});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},s={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/-?[a-z\.]+/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",operator:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"shebang",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,e.NM,s,a,t]}});hljs.registerLanguage("sql",function(e){var t=e.C("--","$");return{cI:!0,i:/[<>{}*]/,c:[{cN:"operator",bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke",e:/;/,eW:!0,k:{keyword:"abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound buffer_cache buffer_pool build bulk by byte byteordermark bytes c cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle d data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration e each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain export export_set extended extent external external_1 external_2 externally extract f failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function g general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour http i id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists k keep keep_duplicates key keys kill l language large last last_day last_insert_id last_value lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim m main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex n name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding p package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select self sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime t table tables tablespace tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null",built_in:"array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text varchar varying void"},c:[{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[e.BE]},e.CNM,e.CBCM,t]},e.CBCM,t]}});hljs.registerLanguage("cpp",function(t){var e={cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"},r={cN:"string",v:[t.inherit(t.QSM,{b:'((u8?|U)|L)?"'}),{b:'(u8?|U)?R"',e:'"',c:[t.BE]},{b:"'\\\\?.",e:"'",i:"."}]},s={cN:"number",v:[{b:"\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)"},{b:t.CNR}]},i={cN:"preprocessor",b:"#",e:"$",k:"if else elif endif define undef warning error line pragma ifdef ifndef",c:[{b:/\\\n/,r:0},{bK:"include",e:"$",c:[r,{cN:"string",b:"<",e:">",i:"\\n"}]},r,s,t.CLCM,t.CBCM]},a=t.IR+"\\s*\\(",c={keyword:"int float while private char catch export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf",literal:"true false nullptr NULL"};return{aliases:["c","cc","h","c++","h++","hpp"],k:c,i:"",k:c,c:["self",e]},{b:t.IR+"::",k:c},{bK:"new throw return else",r:0},{cN:"function",b:"("+t.IR+"[\\*&\\s]+)+"+a,rB:!0,e:/[{;=]/,eE:!0,k:c,i:/[^\w\s\*&]/,c:[{b:a,rB:!0,c:[t.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:c,r:0,c:[t.CLCM,t.CBCM,r,s]},t.CLCM,t.CBCM,i]}]}});hljs.registerLanguage("matlab",function(e){var a=[e.CNM,{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]}],s={r:0,c:[{cN:"operator",b:/'['\.]*/}]};return{k:{keyword:"break case catch classdef continue else elseif end enumerated events for function global if methods otherwise parfor persistent properties return spmd switch try while",built_in:"sin sind sinh asin asind asinh cos cosd cosh acos acosd acosh tan tand tanh atan atand atan2 atanh sec secd sech asec asecd asech csc cscd csch acsc acscd acsch cot cotd coth acot acotd acoth hypot exp expm1 log log1p log10 log2 pow2 realpow reallog realsqrt sqrt nthroot nextpow2 abs angle complex conj imag real unwrap isreal cplxpair fix floor ceil round mod rem sign airy besselj bessely besselh besseli besselk beta betainc betaln ellipj ellipke erf erfc erfcx erfinv expint gamma gammainc gammaln psi legendre cross dot factor isprime primes gcd lcm rat rats perms nchoosek factorial cart2sph cart2pol pol2cart sph2cart hsv2rgb rgb2hsv zeros ones eye repmat rand randn linspace logspace freqspace meshgrid accumarray size length ndims numel disp isempty isequal isequalwithequalnans cat reshape diag blkdiag tril triu fliplr flipud flipdim rot90 find sub2ind ind2sub bsxfun ndgrid permute ipermute shiftdim circshift squeeze isscalar isvector ans eps realmax realmin pi i inf nan isnan isinf isfinite j why compan gallery hadamard hankel hilb invhilb magic pascal rosser toeplitz vander wilkinson"},i:'(//|"|#|/\\*|\\s+/\\w+)',c:[{cN:"function",bK:"function",e:"$",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)"},{cN:"params",b:"\\[",e:"\\]"}]},{b:/[a-zA-Z_][a-zA-Z_0-9]*'['\.]*/,rB:!0,r:0,c:[{b:/[a-zA-Z_][a-zA-Z_0-9]*/,r:0},s.c[0]]},{cN:"matrix",b:"\\[",e:"\\]",c:a,r:0,starts:s},{cN:"cell",b:"\\{",e:/}/,c:a,r:0,starts:s},{b:/\)/,r:0,starts:s},e.C("^\\s*\\%\\{\\s*$","^\\s*\\%\\}\\s*$"),e.C("\\%","$")].concat(a)}});hljs.registerLanguage("elm",function(e){var c=[e.C("--","$"),e.C("{-","-}",{c:["self"]})],i={cN:"type",b:"\\b[A-Z][\\w']*",r:0},n={cN:"container",b:"\\(",e:"\\)",i:'"',c:[{cN:"type",b:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"}].concat(c)},t={cN:"container",b:"{",e:"}",c:n.c};return{k:"let in if then else case of where module import exposing type alias as infix infixl infixr port",c:[{cN:"module",b:"\\bmodule\\b",e:"where",k:"module where",c:[n].concat(c),i:"\\W\\.|;"},{cN:"import",b:"\\bimport\\b",e:"$",k:"import|0 as exposing",c:[n].concat(c),i:"\\W\\.|;"},{cN:"typedef",b:"\\btype\\b",e:"$",k:"type alias",c:[i,n,t].concat(c)},{cN:"infix",bK:"infix infixl infixr",e:"$",c:[e.CNM].concat(c)},{cN:"foreign",b:"\\bport\\b",e:"$",k:"port",c:c},e.QSM,e.CNM,i,e.inherit(e.TM,{b:"^[_a-z][\\w']*"}),{b:"->|<-"}].concat(c)}});hljs.registerLanguage("php",function(e){var c={cN:"variable",b:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},a={cN:"preprocessor",b:/<\?(php)?|\?>/},i={cN:"string",c:[e.BE,a],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},t={v:[e.BNM,e.CNM]};return{aliases:["php3","php4","php5","php6"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[e.CLCM,e.HCM,e.C("/\\*","\\*/",{c:[{cN:"doctag",b:"@[A-Za-z]+"},a]}),e.C("__halt_compiler.+?;",!1,{eW:!0,k:"__halt_compiler",l:e.UIR}),{cN:"string",b:/<<<['"]?\w+['"]?$/,e:/^\w+;?$/,c:[e.BE,{cN:"subst",v:[{b:/\$\w+/},{b:/\{\$/,e:/\}/}]}]},a,c,{b:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",c,e.CBCM,i,t]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},i,t]}});hljs.registerLanguage("vbnet",function(e){return{aliases:["vb"],cI:!0,k:{keyword:"addhandler addressof alias and andalso aggregate ansi as assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into is isfalse isnot istrue join key let lib like loop me mid mod module mustinherit mustoverride mybase myclass namespace narrowing new next not notinheritable notoverridable of off on operator option optional or order orelse overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim rem removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly xor",built_in:"boolean byte cbool cbyte cchar cdate cdec cdbl char cint clng cobj csbyte cshort csng cstr ctype date decimal directcast double gettype getxmlnamespace iif integer long object sbyte short single string trycast typeof uinteger ulong ushort",literal:"true false nothing"},i:"//|{|}|endif|gosub|variant|wend",c:[e.inherit(e.QSM,{c:[{b:'""'}]}),e.C("'","$",{rB:!0,c:[{cN:"xmlDocTag",b:"'''|",c:[e.PWM]},{cN:"xmlDocTag",b:"",c:[e.PWM]}]}),e.CNM,{cN:"preprocessor",b:"#",e:"$",k:"if else elseif end region externalsource"}]}});hljs.registerLanguage("dart",function(e){var t={cN:"subst",b:"\\$\\{",e:"}",k:"true false null this is new super"},r={cN:"string",v:[{b:"r'''",e:"'''"},{b:'r"""',e:'"""'},{b:"r'",e:"'",i:"\\n"},{b:'r"',e:'"',i:"\\n"},{b:"'''",e:"'''",c:[e.BE,t]},{b:'"""',e:'"""',c:[e.BE,t]},{b:"'",e:"'",i:"\\n",c:[e.BE,t]},{b:'"',e:'"',i:"\\n",c:[e.BE,t]}]};t.c=[e.CNM,r];var n={keyword:"assert break case catch class const continue default do else enum extends false final finally for if in is new null rethrow return super switch this throw true try var void while with",literal:"abstract as dynamic export external factory get implements import library operator part set static typedef",built_in:"print Comparable DateTime Duration Function Iterable Iterator List Map Match Null Object Pattern RegExp Set Stopwatch String StringBuffer StringSink Symbol Type Uri bool double int num document window querySelector querySelectorAll Element ElementList"};return{k:n,c:[r,e.C("/\\*\\*","\\*/",{sL:"markdown"}),e.C("///","$",{sL:"markdown"}),e.CLCM,e.CBCM,{cN:"class",bK:"class interface",e:"{",eE:!0,c:[{bK:"extends implements"},e.UTM]},e.CNM,{cN:"annotation",b:"@[A-Za-z]+"},{b:"=>"}]}});hljs.registerLanguage("vbscript",function(e){return{aliases:["vbs"],cI:!0,k:{keyword:"call class const dim do loop erase execute executeglobal exit for each next function if then else on error option explicit new private property let get public randomize redim rem select case set stop sub while wend with end to elseif is or xor and not class_initialize class_terminate default preserve in me byval byref step resume goto",built_in:"lcase month vartype instrrev ubound setlocale getobject rgb getref string weekdayname rnd dateadd monthname now day minute isarray cbool round formatcurrency conversions csng timevalue second year space abs clng timeserial fixs len asc isempty maths dateserial atn timer isobject filter weekday datevalue ccur isdate instr datediff formatdatetime replace isnull right sgn array snumeric log cdbl hex chr lbound msgbox ucase getlocale cos cdate cbyte rtrim join hour oct typename trim strcomp int createobject loadpicture tan formatnumber mid scriptenginebuildversion scriptengine split scriptengineminorversion cint sin datepart ltrim sqr scriptenginemajorversion time derived eval date formatpercent exp inputbox left ascw chrw regexp server response request cstr err",literal:"true false null nothing empty"},i:"//",c:[e.inherit(e.QSM,{c:[{b:'""'}]}),e.C(/'/,/$/,{r:0}),e.CNM]}});hljs.registerLanguage("fortran",function(e){var t={cN:"params",b:"\\(",e:"\\)"},n={constant:".False. .True.",type:"integer real character complex logical dimension allocatable|10 parameter external implicit|10 none double precision assign intent optional pointer target in out common equivalence data",keyword:"kind do while private call intrinsic where elsewhere type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. goto save else use module select case access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit continue format pause cycle exit c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg synchronous nopass non_overridable pass protected volatile abstract extends import non_intrinsic value deferred generic final enumerator class associate bind enum c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated c_f_pointer c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure",built_in:"alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_ofacosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image"};return{cI:!0,aliases:["f90","f95"],k:n,c:[e.inherit(e.ASM,{cN:"string",r:0}),e.inherit(e.QSM,{cN:"string",r:0}),{cN:"function",bK:"subroutine function program",i:"[${=\\n]",c:[e.UTM,t]},e.C("!","$",{r:0}),{cN:"number",b:"(?=\\b|\\+|\\-|\\.)(?=\\.\\d|\\d)(?:\\d+)?(?:\\.?\\d*)(?:[de][+-]?\\d+)?\\b\\.?",r:0}]}});hljs.registerLanguage("scheme",function(e){var t="[^\\(\\)\\[\\]\\{\\}\",'`;#|\\\\\\s]+",r="(\\-|\\+)?\\d+([./]\\d+)?",i=r+"[+\\-]"+r+"i",a={built_in:"case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules ' * + , ,@ - ... / ; < <= = => > >= ` abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string=? string>? string? substring symbol->string symbol? tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"},n={cN:"shebang",b:"^#!",e:"$"},c={cN:"literal",b:"(#t|#f|#\\\\"+t+"|#\\\\.)"},l={cN:"number",v:[{b:r,r:0},{b:i,r:0},{b:"#b[0-1]+(/[0-1]+)?"},{b:"#o[0-7]+(/[0-7]+)?"},{b:"#x[0-9a-f]+(/[0-9a-f]+)?"}]},s=e.QSM,o=[e.C(";","$",{r:0}),e.C("#\\|","\\|#")],u={b:t,r:0},p={cN:"variable",b:"'"+t},d={eW:!0,r:0},g={cN:"list",v:[{b:"\\(",e:"\\)"},{b:"\\[",e:"\\]"}],c:[{cN:"keyword",b:t,l:t,k:a},d]};return d.c=[c,l,s,u,p,g].concat(o),{i:/\S/,c:[n,l,s,p,g].concat(o)}});hljs.registerLanguage("coffeescript",function(e){var c={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",built_in:"npm require console print module global window document"},n="[A-Za-z$_][0-9A-Za-z$_]*",r={cN:"subst",b:/#\{/,e:/}/,k:c},t=[e.BNM,e.inherit(e.CNM,{starts:{e:"(\\s*/)?",r:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/"""/,e:/"""/,c:[e.BE,r]},{b:/"/,e:/"/,c:[e.BE,r]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[r,e.HCM]},{b:"//[gim]*",r:0},{b:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/}]},{cN:"property",b:"@"+n},{b:"`",e:"`",eB:!0,eE:!0,sL:"javascript"}];r.c=t;var s=e.inherit(e.TM,{b:n}),i="(\\(.*\\))?\\s*\\B[-=]>",o={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:c,c:["self"].concat(t)}]};return{aliases:["coffee","cson","iced"],k:c,i:/\/\*/,c:t.concat([e.C("###","###"),e.HCM,{cN:"function",b:"^\\s*"+n+"\\s*=\\s*"+i,e:"[-=]>",rB:!0,c:[s,o]},{b:/[:\(,=]\s*/,r:0,c:[{cN:"function",b:i,e:"[-=]>",rB:!0,c:[o]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[s]},s]},{cN:"attribute",b:n+":",e:":",rB:!0,rE:!0,r:0}])}});hljs.registerLanguage("haml",function(s){return{cI:!0,c:[{cN:"doctype",b:"^!!!( (5|1\\.1|Strict|Frameset|Basic|Mobile|RDFa|XML\\b.*))?$",r:10},s.C("^\\s*(!=#|=#|-#|/).*$",!1,{r:0}),{b:"^\\s*(-|=|!=)(?!#)",starts:{e:"\\n",sL:"ruby"}},{cN:"tag",b:"^\\s*%",c:[{cN:"title",b:"\\w+"},{cN:"value",b:"[#\\.][\\w-]+"},{b:"{\\s*",e:"\\s*}",eE:!0,c:[{b:":\\w+\\s*=>",e:",\\s+",rB:!0,eW:!0,c:[{cN:"symbol",b:":\\w+"},s.ASM,s.QSM,{b:"\\w+",r:0}]}]},{b:"\\(\\s*",e:"\\s*\\)",eE:!0,c:[{b:"\\w+\\s*=",e:"\\s+",rB:!0,eW:!0,c:[{cN:"attribute",b:"\\w+",r:0},s.ASM,s.QSM,{b:"\\w+",r:0}]}]}]},{cN:"bullet",b:"^\\s*[=~]\\s*",r:0},{b:"#{",starts:{e:"}",sL:"ruby"}}]}});hljs.registerLanguage("javascript",function(e){return{aliases:["js"],k:{keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},c:[{cN:"pi",r:10,b:/^\s*['"]use (strict|asm)['"]/},e.ASM,e.QSM,{cN:"string",b:"`",e:"`",c:[e.BE,{cN:"subst",b:"\\$\\{",e:"\\}"}]},e.CLCM,e.CBCM,{cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{b:/\s*[);\]]/,r:0,sL:"xml"}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:[e.CLCM,e.CBCM]}],i:/\[|%/},{b:/\$[(.]/},{b:"\\."+e.IR,r:0},{bK:"import",e:"[;$]",k:"import from as",c:[e.ASM,e.QSM]},{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]}],i:/#/}});hljs.registerLanguage("erlang",function(e){var r="[a-z'][a-zA-Z0-9_']*",c="("+r+":"+r+"|"+r+")",a={keyword:"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor",literal:"false true"},n=e.C("%","$"),i={cN:"number",b:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",r:0},b={b:"fun\\s+"+r+"/\\d+"},d={b:c+"\\(",e:"\\)",rB:!0,r:0,c:[{cN:"function_name",b:c,r:0},{b:"\\(",e:"\\)",eW:!0,rE:!0,r:0}]},o={cN:"tuple",b:"{",e:"}",r:0},t={cN:"variable",b:"\\b_([A-Z][A-Za-z0-9_]*)?",r:0},l={cN:"variable",b:"[A-Z][a-zA-Z0-9_]*",r:0},f={b:"#"+e.UIR,r:0,rB:!0,c:[{cN:"record_name",b:"#"+e.UIR,r:0},{b:"{",e:"}",r:0}]},s={bK:"fun receive if try case",e:"end",k:a};s.c=[n,b,e.inherit(e.ASM,{cN:""}),s,d,e.QSM,i,o,t,l,f];var u=[n,b,s,d,e.QSM,i,o,t,l,f];d.c[1].c=u,o.c=u,f.c[1].c=u;var v={cN:"params",b:"\\(",e:"\\)",c:u};return{aliases:["erl"],k:a,i:"(",rB:!0,i:"\\(|#|//|/\\*|\\\\|:|;",c:[v,e.inherit(e.TM,{b:r})],starts:{e:";|\\.",k:a,c:u}},n,{cN:"pp",b:"^-",e:"\\.",r:0,eE:!0,rB:!0,l:"-"+e.IR,k:"-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn -import -include -include_lib -compile -define -else -endif -file -behaviour -behavior -spec",c:[v]},i,e.QSM,f,t,l,o,{b:/\.$/}]}});hljs.registerLanguage("dns",function(d){return{aliases:["bind","zone"],k:{keyword:"IN A AAAA AFSDB APL CAA CDNSKEY CDS CERT CNAME DHCID DLV DNAME DNSKEY DS HIP IPSECKEY KEY KX LOC MX NAPTR NS NSEC NSEC3 NSEC3PARAM PTR RRSIG RP SIG SOA SRV SSHFP TA TKEY TLSA TSIG TXT"},c:[d.C(";","$"),{cN:"operator",bK:"$TTL $GENERATE $INCLUDE $ORIGIN"},{cN:"number",b:"((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))"},{cN:"number",b:"((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])"}]}});hljs.registerLanguage("ocaml",function(e){return{aliases:["ml"],k:{keyword:"and as assert asr begin class constraint do done downto else end exception external for fun function functor if in include inherit! inherit initializer land lazy let lor lsl lsr lxor match method!|10 method mod module mutable new object of open! open or private rec sig struct then to try type val! val virtual when while with parser value",built_in:"array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 string unit in_channel out_channel ref",literal:"true false"},i:/\/\/|>>/,l:"[a-z_]\\w*!?",c:[{cN:"literal",b:"\\[(\\|\\|)?\\]|\\(\\)",r:0},e.C("\\(\\*","\\*\\)",{c:["self"]}),{cN:"symbol",b:"'[A-Za-z_](?!')[\\w']*"},{cN:"tag",b:"`[A-Z][\\w']*"},{cN:"type",b:"\\b[A-Z][\\w']*",r:0},{b:"[a-z_]\\w*'[\\w']*"},e.inherit(e.ASM,{cN:"char",r:0}),e.inherit(e.QSM,{i:null}),{cN:"number",b:"\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",r:0},{b:/[-=]>/}]}});hljs.registerLanguage("clojure",function(e){var t={built_in:"def defonce cond apply if-not if-let if not not= = < > <= >= == + / * - rem quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last drop-while while intern condp case reduced cycle split-at split-with repeat replicate iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter monitor-exit defmacro defn defn- macroexpand macroexpand-1 for dosync and or when when-not when-let comp juxt partial sequence memoize constantly complement identity assert peek pop doto proxy defstruct first rest cons defprotocol cast coll deftype defrecord last butlast sigs reify second ffirst fnext nfirst nnext defmulti defmethod meta with-meta ns in-ns create-ns import refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize"},r="a-zA-Z_\\-!.?+*=<>&#'",n="["+r+"]["+r+"0-9/;:]*",a="[-+]?\\d+(\\.\\d+)?",o={b:n,r:0},s={cN:"number",b:a,r:0},c=e.inherit(e.QSM,{i:null}),i=e.C(";","$",{r:0}),d={cN:"literal",b:/\b(true|false|nil)\b/},l={cN:"collection",b:"[\\[\\{]",e:"[\\]\\}]"},m={cN:"comment",b:"\\^"+n},p=e.C("\\^\\{","\\}"),u={cN:"attribute",b:"[:]"+n},f={cN:"list",b:"\\(",e:"\\)"},h={eW:!0,r:0},y={k:t,l:n,cN:"keyword",b:n,starts:h},b=[f,c,m,p,i,u,l,s,d,o];return f.c=[e.C("comment",""),y,h],h.c=b,l.c=b,{aliases:["clj"],i:/\S/,c:[f,c,m,p,i,u,l,s,d]}});hljs.registerLanguage("x86asm",function(s){return{cI:!0,l:"\\.?"+s.IR,k:{keyword:"lock rep repe repz repne repnz xaquire xrelease bnd nobnd aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63",literal:"ip eip rip al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 cs ds es fs gs ss st st0 st1 st2 st3 st4 st5 st6 st7 mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 xmm8 xmm9 xmm10 xmm11 xmm12 xmm13 xmm14 xmm15 xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ymm0 ymm1 ymm2 ymm3 ymm4 ymm5 ymm6 ymm7 ymm8 ymm9 ymm10 ymm11 ymm12 ymm13 ymm14 ymm15 ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 zmm0 zmm1 zmm2 zmm3 zmm4 zmm5 zmm6 zmm7 zmm8 zmm9 zmm10 zmm11 zmm12 zmm13 zmm14 zmm15 zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 k0 k1 k2 k3 k4 k5 k6 k7 bnd0 bnd1 bnd2 bnd3 cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d r0h r1h r2h r3h r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l",pseudo:"db dw dd dq dt ddq do dy dz resb resw resd resq rest resdq reso resy resz incbin equ times",preprocessor:"%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep %endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment .nolist byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr __FILE__ __LINE__ __SECT__ __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ __UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__ __PASS__ struc endstruc istruc at iend align alignb sectalign daz nodaz up down zero default option assume public ",built_in:"bits use16 use32 use64 default section segment absolute extern global common cpu float __utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ __float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ __Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__"},c:[s.C(";","$",{r:0}),{cN:"number",v:[{b:"\\b(?:([0-9][0-9_]*)?\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|(0[Xx])?[0-9][0-9_]*\\.?[0-9_]*(?:[pP](?:[+-]?[0-9_]+)?)?)\\b",r:0},{b:"\\$[0-9][0-9A-Fa-f]*",r:0},{b:"\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\b"},{b:"\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\b"}]},s.QSM,{cN:"string",v:[{b:"'",e:"[^\\\\]'"},{b:"`",e:"[^\\\\]`"},{b:"\\.[A-Za-z0-9]+"}],r:0},{cN:"label",v:[{b:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)"},{b:"^\\s*%%[A-Za-z0-9_$#@~.?]*:"}],r:0},{cN:"argument",b:"%[0-9]+",r:0},{cN:"built_in",b:"%!S+",r:0}]}});hljs.registerLanguage("tcl",function(e){return{aliases:["tk"],k:"after append apply array auto_execok auto_import auto_load auto_mkindex auto_mkindex_old auto_qualify auto_reset bgerror binary break catch cd chan clock close concat continue dde dict encoding eof error eval exec exit expr fblocked fconfigure fcopy file fileevent filename flush for foreach format gets glob global history http if incr info interp join lappend|10 lassign|10 lindex|10 linsert|10 list llength|10 load lrange|10 lrepeat|10 lreplace|10 lreverse|10 lsearch|10 lset|10 lsort|10 mathfunc mathop memory msgcat namespace open package parray pid pkg::create pkg_mkIndex platform platform::shell proc puts pwd read refchan regexp registry regsub|10 rename return safe scan seek set socket source split string subst switch tcl_endOfWord tcl_findLibrary tcl_startOfNextWord tcl_startOfPreviousWord tcl_wordBreakAfter tcl_wordBreakBefore tcltest tclvars tell time tm trace unknown unload unset update uplevel upvar variable vwait while",c:[e.C(";[ \\t]*#","$"),e.C("^[ \\t]*#","$"),{bK:"proc",e:"[\\{]",eE:!0,c:[{cN:"symbol",b:"[ \\t\\n\\r]+(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*",e:"[ \\t\\n\\r]",eW:!0,eE:!0}]},{cN:"variable",eE:!0,v:[{b:"\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*\\(([a-zA-Z0-9_])*\\)",e:"[^a-zA-Z0-9_\\}\\$]"},{b:"\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*",e:"(\\))?[^a-zA-Z0-9_\\}\\$]"}]},{cN:"string",c:[e.BE],v:[e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},{cN:"number",v:[e.BNM,e.CNM]}]}});hljs.registerLanguage("ini",function(e){var c={cN:"string",c:[e.BE],v:[{b:"'''",e:"'''",r:10},{b:'"""',e:'"""',r:10},{b:'"',e:'"'},{b:"'",e:"'"}]};return{aliases:["toml"],cI:!0,i:/\S/,c:[e.C(";","$"),e.HCM,{cN:"title",b:/^\s*\[+/,e:/\]+/},{cN:"setting",b:/^[a-z0-9\[\]_-]+\s*=\s*/,e:"$",c:[{cN:"value",eW:!0,k:"on off true false yes no",c:[{cN:"variable",v:[{b:/\$[\w\d"][\w\d_]*/},{b:/\$\{(.*?)}/}]},c,{cN:"number",b:/([\+\-]+)?[\d]+_[\d_]+/},e.NM],r:0}]}]}});hljs.registerLanguage("diff",function(e){return{aliases:["patch"],c:[{cN:"chunk",r:10,v:[{b:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"header",v:[{b:/Index: /,e:/$/},{b:/=====/,e:/=====$/},{b:/^\-\-\-/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+\+\+/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"change",b:"^\\!",e:"$"}]}});hljs.registerLanguage("dos",function(e){var r=e.C(/@?rem\b/,/$/,{r:10}),t={cN:"label",b:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)",r:0};return{aliases:["bat","cmd"],cI:!0,k:{flow:"if else goto for in do call exit not exist errorlevel defined",operator:"equ neq lss leq gtr geq",keyword:"shift cd dir echo setlocal endlocal set pause copy",stream:"prn nul lpt3 lpt2 lpt1 con com4 com3 com2 com1 aux",winutils:"ping net ipconfig taskkill xcopy ren del",built_in:"append assoc at attrib break cacls cd chcp chdir chkdsk chkntfs cls cmd color comp compact convert date dir diskcomp diskcopy doskey erase fs find findstr format ftype graftabl help keyb label md mkdir mode more move path pause print popd pushd promt rd recover rem rename replace restore rmdir shiftsort start subst time title tree type ver verify vol"},c:[{cN:"envvar",b:/%%[^ ]|%[^ ]+?%|![^ ]+?!/},{cN:"function",b:t.b,e:"goto:eof",c:[e.inherit(e.TM,{b:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),r]},{cN:"number",b:"\\b\\d+",r:0},r]}});hljs.registerLanguage("erlang-repl",function(r){return{k:{special_functions:"spawn spawn_link self",reserved:"after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if let not of or orelse|10 query receive rem try when xor"},c:[{cN:"prompt",b:"^[0-9]+> ",r:10},r.C("%","$"),{cN:"number",b:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",r:0},r.ASM,r.QSM,{cN:"constant",b:"\\?(::)?([A-Z]\\w*(::)?)+"},{cN:"arrow",b:"->"},{cN:"ok",b:"ok"},{cN:"exclamation_mark",b:"!"},{cN:"function_or_atom",b:"(\\b[a-z'][a-zA-Z0-9_']*:[a-z'][a-zA-Z0-9_']*)|(\\b[a-z'][a-zA-Z0-9_']*)",r:0},{cN:"variable",b:"[A-Z][a-zA-Z0-9_']*",r:0}]}});hljs.registerLanguage("groovy",function(e){return{k:{typename:"byte short char int long boolean float double void",literal:"true false null",keyword:"def as in assert trait super this abstract static volatile transient public private protected synchronized final class interface enum if else for while switch case break default continue throw throws try catch finally implements extends new import package return instanceof"},c:[e.C("/\\*\\*","\\*/",{r:0,c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,{cN:"string",b:'"""',e:'"""'},{cN:"string",b:"'''",e:"'''"},{cN:"string",b:"\\$/",e:"/\\$",r:10},e.ASM,{cN:"regexp",b:/~?\/[^\/\n]+\//,c:[e.BE]},e.QSM,{cN:"shebang",b:"^#!/usr/bin/env",e:"$",i:"\n"},e.BNM,{cN:"class",bK:"class interface trait enum",e:"{",i:":",c:[{bK:"extends implements"},e.UTM]},e.CNM,{cN:"annotation",b:"@[A-Za-z]+"},{cN:"string",b:/[^\?]{0}[A-Za-z0-9_$]+ *:/},{b:/\?/,e:/\:/},{cN:"label",b:"^\\s*[A-Za-z0-9_$]+:",r:0}],i:/#/}});hljs.registerLanguage("go",function(e){var t={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer",constant:"true false iota nil",typename:"bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{aliases:["golang"],k:t,i:" Date: Sun, 4 Oct 2015 22:43:42 -0400 Subject: [PATCH 034/345] Document csp flags --- README.md | 3 +++ server.go | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 96a1196..3398bb5 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,9 @@ Command-line options - ```-siteurl "http://mylinx.example.org/"``` -- the site url (for generating links) - ```-filespath files/"``` -- Path to store uploads (default is files/) - ```-metapath meta/``` -- Path to store information about uploads (default is meta/) +- ```-contentsecuritypolicy "..."``` -- Content-Security-Policy header for pages (default is "default-src 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; referrer none;") +- ```-filecontentsecuritypolicy "..."``` -- Content-Security-Policy header for files (default is "default-src 'none'; img-src 'self'; object-src 'self'; media-src 'self'; sandbox; referrer none;"") +- ```-xframeoptions "..." ``` -- X-Frame-Options header (default is "SAMEORIGIN") - ```-remoteuploads``` -- (optionally) enable remote uploads (/upload?url=https://...) - ```-fastcgi``` -- (optionally) serve through fastcgi - ```-nologs``` -- (optionally) disable request logs in stdout diff --git a/server.go b/server.go index 9992a88..312de95 100644 --- a/server.go +++ b/server.go @@ -135,13 +135,13 @@ func main() { "serve through fastcgi") flag.BoolVar(&Config.remoteUploads, "remoteuploads", false, "enable remote uploads") - flag.StringVar(&Config.contentSecurityPolicy, "contentSecurityPolicy", + flag.StringVar(&Config.contentSecurityPolicy, "contentsecuritypolicy", "default-src 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; referrer none;", "value of default Content-Security-Policy header") - flag.StringVar(&Config.fileContentSecurityPolicy, "fileContentSecurityPolicy", + flag.StringVar(&Config.fileContentSecurityPolicy, "filecontentsecuritypolicy", "default-src 'none'; img-src 'self'; object-src 'self'; media-src 'self'; sandbox; referrer none;", "value of Content-Security-Policy header for file access") - flag.StringVar(&Config.xFrameOptions, "xFrameOptions", "SAMEORIGIN", + flag.StringVar(&Config.xFrameOptions, "xframeoptions", "SAMEORIGIN", "value of X-Frame-Options header") flag.Parse() From c5250e529e4263c1c8556d34456989de5155b497 Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Tue, 6 Oct 2015 00:31:09 -0400 Subject: [PATCH 035/345] Headers are now Linx-.. instead of X-... --- delete.go | 2 +- server_test.go | 14 +++++++------- static/js/upload.js | 2 +- upload.go | 9 +++------ 4 files changed, 12 insertions(+), 15 deletions(-) diff --git a/delete.go b/delete.go index 521b277..e70bf22 100644 --- a/delete.go +++ b/delete.go @@ -10,7 +10,7 @@ import ( ) func deleteHandler(c web.C, w http.ResponseWriter, r *http.Request) { - requestKey := r.Header.Get("X-Delete-Key") + requestKey := r.Header.Get("Linx-Delete-Key") filename := c.URLParams["name"] filePath := path.Join(Config.filesDir, filename) diff --git a/server_test.go b/server_test.go index 31e690b..4fc426f 100644 --- a/server_test.go +++ b/server_test.go @@ -113,7 +113,7 @@ func TestPutRandomizedUpload(t *testing.T) { t.Fatal(err) } - req.Header.Set("X-Randomized-Barename", "yes") + req.Header.Set("Linx-Randomize", "yes") goji.DefaultMux.ServeHTTP(w, req) @@ -132,7 +132,7 @@ func TestPutEmptyUpload(t *testing.T) { t.Fatal(err) } - req.Header.Set("X-Randomized-Barename", "yes") + req.Header.Set("Linx-Randomize", "yes") goji.DefaultMux.ServeHTTP(w, req) @@ -194,7 +194,7 @@ func TestPutRandomizedJSONUpload(t *testing.T) { } req.Header.Set("Accept", "application/json") - req.Header.Set("X-Randomized-Barename", "yes") + req.Header.Set("Linx-Randomize", "yes") goji.DefaultMux.ServeHTTP(w, req) @@ -228,7 +228,7 @@ func TestPutExpireJSONUpload(t *testing.T) { } req.Header.Set("Accept", "application/json") - req.Header.Set("X-File-Expiry", "600") + req.Header.Set("Linx-Expiry", "600") goji.DefaultMux.ServeHTTP(w, req) @@ -275,7 +275,7 @@ func TestPutAndDelete(t *testing.T) { // Delete it w = httptest.NewRecorder() req, err = http.NewRequest("DELETE", "/"+myjson.Filename, nil) - req.Header.Set("X-Delete-Key", myjson.Delete_Key) + req.Header.Set("Linx-Delete-Key", myjson.Delete_Key) goji.DefaultMux.ServeHTTP(w, req) if w.Code != 200 { @@ -319,7 +319,7 @@ func TestPutAndSpecificDelete(t *testing.T) { } req.Header.Set("Accept", "application/json") - req.Header.Set("X-Delete-Key", "supersecret") + req.Header.Set("Linx-Delete-Key", "supersecret") goji.DefaultMux.ServeHTTP(w, req) @@ -331,7 +331,7 @@ func TestPutAndSpecificDelete(t *testing.T) { // Delete it w = httptest.NewRecorder() req, err = http.NewRequest("DELETE", "/"+myjson.Filename, nil) - req.Header.Set("X-Delete-Key", "supersecret") + req.Header.Set("Linx-Delete-Key", "supersecret") goji.DefaultMux.ServeHTTP(w, req) if w.Code != 200 { diff --git a/static/js/upload.js b/static/js/upload.js index 6656de0..60ef981 100644 --- a/static/js/upload.js +++ b/static/js/upload.js @@ -60,7 +60,7 @@ Dropzone.options.dropzone = { deleteAction.addEventListener('click', function(ev) { xhr = new XMLHttpRequest(); xhr.open("DELETE", resp.url, true); - xhr.setRequestHeader("X-Delete-Key", resp.delete_key); + xhr.setRequestHeader("Linx-Delete-Key", resp.delete_key); xhr.onreadystatechange = function(file) { if (xhr.readyState == 4 && xhr.status === 200) { var text = document.createTextNode("Deleted "); diff --git a/upload.go b/upload.go index 861c03b..3864896 100644 --- a/upload.go +++ b/upload.go @@ -172,17 +172,14 @@ func uploadRemote(c web.C, w http.ResponseWriter, r *http.Request) { } func uploadHeaderProcess(r *http.Request, upReq *UploadRequest) { - // For legacy reasons - if r.Header.Get("X-Randomized-Filename") == "yes" { - upReq.randomBarename = true - } else if r.Header.Get("X-Randomized-Barename") == "yes" { + if r.Header.Get("Linx-Randomize") == "yes" { upReq.randomBarename = true } - upReq.deletionKey = r.Header.Get("X-Delete-Key") + upReq.deletionKey = r.Header.Get("Linx-Delete-Key") // Get seconds until expiry. Non-integer responses never expire. - expStr := r.Header.Get("X-File-Expiry") + expStr := r.Header.Get("Linx-Expiry") upReq.expiry = parseExpiry(expStr) } From 4330d605e349453f3d892348c9d4ddbd8c74f908 Mon Sep 17 00:00:00 2001 From: George Burgess IV Date: Mon, 5 Oct 2015 23:49:57 -0700 Subject: [PATCH 036/345] Clean up logging on start --- server.go | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/server.go b/server.go index 312de95..37e2e1b 100644 --- a/server.go +++ b/server.go @@ -2,7 +2,6 @@ package main import ( "flag" - "fmt" "log" "net" "net/http" @@ -52,14 +51,12 @@ func setup() { // make directories if needed err := os.MkdirAll(Config.filesDir, 0755) if err != nil { - fmt.Println("Error: could not create files directory") - os.Exit(1) + log.Fatal("Could not create files directory:", err) } err = os.MkdirAll(Config.metaDir, 0700) if err != nil { - fmt.Println("Error: could not create metadata directory") - os.Exit(1) + log.Fatal("Could not create metadata directory:", err) } // ensure siteURL ends wth '/' @@ -70,15 +67,13 @@ func setup() { // Template setup p2l, err := NewPongo2TemplatesLoader() if err != nil { - fmt.Println("Error: could not load templates") - os.Exit(1) + log.Fatal("Error: could not load templates", err) } TemplateSet := pongo2.NewSet("templates", p2l) TemplateSet.Globals["sitename"] = Config.siteName err = populateTemplatesMap(TemplateSet, Templates) if err != nil { - fmt.Println("Error: could not load templates") - os.Exit(1) + log.Fatal("Error: could not load templates", err) } staticBox = rice.MustFindBox("static") From 1e421e07cd27e501a15d601c121ca910f4b2c44b Mon Sep 17 00:00:00 2001 From: George Burgess IV Date: Mon, 5 Oct 2015 23:50:20 -0700 Subject: [PATCH 037/345] swap to using time types instead of ints --- display.go | 10 ++++++---- expiry.go | 29 +++-------------------------- meta.go | 24 ++++++++++-------------- upload.go | 17 ++++++++++------- 4 files changed, 29 insertions(+), 51 deletions(-) diff --git a/display.go b/display.go index 5fc26c7..6503c28 100644 --- a/display.go +++ b/display.go @@ -17,6 +17,8 @@ import ( "github.com/zenazn/goji/web" ) +const maxDisplayFileSizeBytes = 1024 * 512 + func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { fileName := c.URLParams["name"] filePath := path.Join(Config.filesDir, fileName) @@ -29,8 +31,8 @@ func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { expiry, _ := metadataGetExpiry(fileName) var expiryHuman string - if expiry != 0 { - expiryHuman = humanize.RelTime(time.Now(), time.Unix(expiry, 0), "", "") + if !expiry.IsZero() { + expiryHuman = humanize.RelTime(time.Now(), expiry, "", "") } sizeHuman := humanize.Bytes(uint64(fileInfo.Size())) extra := make(map[string]string) @@ -47,7 +49,7 @@ func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { js, _ := json.Marshal(map[string]string{ "filename": fileName, "mimetype": mimetype, - "expiry": strconv.FormatInt(expiry, 10), + "expiry": strconv.FormatInt(expiry.Unix(), 10), "size": strconv.FormatInt(fileInfo.Size(), 10), }) w.Write(js) @@ -65,7 +67,7 @@ func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { } else if mimetype == "application/pdf" { tpl = Templates["display/pdf.html"] } else if supportedBinExtension(extension) { - if fileInfo.Size() < 500000 { + if fileInfo.Size() < maxDisplayFileSizeBytes { bytes, err := ioutil.ReadFile(filePath) if err != nil { tpl = Templates["display/file.html"] diff --git a/expiry.go b/expiry.go index 0444842..d8b4ba5 100644 --- a/expiry.go +++ b/expiry.go @@ -4,37 +4,14 @@ import ( "time" ) -// Get what the unix timestamp will be in "seconds". -func getFutureTimestamp(seconds int64) (ts int64) { - now := int64(time.Now().Unix()) - - if seconds == 0 { - ts = 0 - } else { - ts = now + seconds - } - - return -} - // Determine if a file with expiry set to "ts" has expired yet -func isTsExpired(ts int64) (expired bool) { - now := int64(time.Now().Unix()) - - if ts == 0 { - expired = false - } else if now > ts { - expired = true - } else { - expired = false - } - - return +func isTsExpired(ts time.Time) bool { + now := time.Now() + return !ts.IsZero() && now.After(ts) } // Determine if the given filename is expired func isFileExpired(filename string) bool { exp, _ := metadataGetExpiry(filename) - return isTsExpired(exp) } diff --git a/meta.go b/meta.go index f2165e0..adfb969 100644 --- a/meta.go +++ b/meta.go @@ -7,6 +7,7 @@ import ( "os" "path" "strconv" + "time" ) // Write metadata from Upload struct to file @@ -47,29 +48,24 @@ func metadataRead(filename string) ([]string, error) { return lines, scanner.Err() } -func metadataGetExpiry(filename string) (int64, error) { +func metadataGetExpiry(filename string) (expiry time.Time, err error) { metadata, err := metadataRead(filename) - if len(metadata) < 1 { - err := errors.New("ERR: Metadata file does not contain expiry") - return 0, err - } - // XXX in this case it's up to the caller to determine proper behavior // for a nonexistant metadata file or broken file if err != nil { - return 0, err + return } - var expiry int64 - expiry, err = strconv.ParseInt(metadata[0], 10, 32) - - if err != nil { - return 0, err - } else { - return int64(expiry), err + if len(metadata) < 1 { + err = errors.New("ERR: Metadata file does not contain expiry") + return } + + expirySecs, err := strconv.ParseInt(metadata[0], 10, 64) + expiry = time.Unix(expirySecs, 0) + return } func metadataGetDeleteKey(filename string) (string, error) { diff --git a/upload.go b/upload.go index 3864896..d68c055 100644 --- a/upload.go +++ b/upload.go @@ -14,6 +14,7 @@ import ( "regexp" "strconv" "strings" + "time" "bitbucket.org/taruti/mimemagic" "github.com/dchest/uniuri" @@ -32,7 +33,7 @@ var fileBlacklist = map[string]bool{ type UploadRequest struct { src io.Reader filename string - expiry int64 // Seconds until expiry, 0 = never + expiry time.Duration // Seconds until expiry, 0 = never randomBarename bool deletionKey string // Empty string if not defined } @@ -41,8 +42,8 @@ type UploadRequest struct { type Upload struct { Filename string // Final filename on disk Size int64 - Expiry int64 // Unix timestamp of expiry, 0=never - DeleteKey string // Deletion key, one generated if not provided + Expiry time.Time // Unix timestamp of expiry, 0=never + DeleteKey string // Deletion key, one generated if not provided } func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { @@ -243,7 +244,9 @@ func processUpload(upReq UploadRequest) (upload Upload, err error) { defer dst.Close() // Get the rest of the metadata needed for storage - upload.Expiry = getFutureTimestamp(upReq.expiry) + if upReq.expiry != 0 { + upload.Expiry = time.Now().Add(upReq.expiry) + } // If no delete key specified, pick a random one. if upReq.deletionKey == "" { @@ -279,7 +282,7 @@ func generateJSONresponse(upload Upload) []byte { "url": Config.siteURL + upload.Filename, "filename": upload.Filename, "delete_key": upload.DeleteKey, - "expiry": strconv.FormatInt(int64(upload.Expiry), 10), + "expiry": strconv.FormatInt(upload.Expiry.Unix(), 10), "size": strconv.FormatInt(upload.Size, 10), }) @@ -302,7 +305,7 @@ func barePlusExt(filename string) (barename, extension string) { return } -func parseExpiry(expStr string) int64 { +func parseExpiry(expStr string) time.Duration { if expStr == "" { return 0 } else { @@ -310,7 +313,7 @@ func parseExpiry(expStr string) int64 { if err != nil { return 0 } else { - return int64(expiry) + return time.Duration(expiry) * time.Second } } } From 12551d12b3afce7f7977bae5c1099579d2519a60 Mon Sep 17 00:00:00 2001 From: George Burgess IV Date: Mon, 5 Oct 2015 23:51:49 -0700 Subject: [PATCH 038/345] housekeeping --- server.go | 8 ++++---- templates.go | 3 +-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/server.go b/server.go index 37e2e1b..e3f2abf 100644 --- a/server.go +++ b/server.go @@ -21,15 +21,15 @@ var Config struct { bind string filesDir string metaDir string - noLogs bool - allowHotlink bool siteName string siteURL string - fastcgi bool - remoteUploads bool contentSecurityPolicy string fileContentSecurityPolicy string xFrameOptions string + noLogs bool + allowHotlink bool + fastcgi bool + remoteUploads bool } var Templates = make(map[string]*pongo2.Template) diff --git a/templates.go b/templates.go index 195f0f4..eb2997d 100644 --- a/templates.go +++ b/templates.go @@ -41,8 +41,7 @@ func (fs *Pongo2Loader) Abs(base, name string) string { } func populateTemplatesMap(tSet *pongo2.TemplateSet, tMap map[string]*pongo2.Template) error { - - templates := [...]string{ + templates := []string{ "index.html", "paste.html", "404.html", From 875ebd6db23ce84177138b09ae09f2194743a109 Mon Sep 17 00:00:00 2001 From: Matt Hazinski Date: Wed, 7 Oct 2015 00:08:14 -0400 Subject: [PATCH 039/345] Add support for deletion key and expiry in remote upload --- upload.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/upload.go b/upload.go index 861c03b..b7b739f 100644 --- a/upload.go +++ b/upload.go @@ -149,6 +149,8 @@ func uploadRemote(c web.C, w http.ResponseWriter, r *http.Request) { upReq.filename = filepath.Base(grabUrl.Path) upReq.src = resp.Body + upReq.deletionKey = r.FormValue("deletekey") + upReq.expiry = parseExpiry(r.FormValue("expiry")) upload, err := processUpload(upReq) From 11039d57f11d14547c32248b81e0e684ee4a6af1 Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Wed, 7 Oct 2015 01:15:45 -0400 Subject: [PATCH 040/345] Fix dyreshark breakages + fix small file with no extension bug --- expiry.go | 4 +++- meta.go | 2 +- upload.go | 9 ++++++--- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/expiry.go b/expiry.go index d8b4ba5..cea3c3b 100644 --- a/expiry.go +++ b/expiry.go @@ -4,10 +4,12 @@ import ( "time" ) +var neverExpire = time.Unix(0, 0) + // Determine if a file with expiry set to "ts" has expired yet func isTsExpired(ts time.Time) bool { now := time.Now() - return !ts.IsZero() && now.After(ts) + return ts != neverExpire && now.After(ts) } // Determine if the given filename is expired diff --git a/meta.go b/meta.go index adfb969..b92171b 100644 --- a/meta.go +++ b/meta.go @@ -23,7 +23,7 @@ func metadataWrite(filename string, upload *Upload) error { w := bufio.NewWriter(file) - fmt.Fprintln(w, upload.Expiry) + fmt.Fprintln(w, upload.Expiry.Unix()) fmt.Fprintln(w, upload.DeleteKey) return w.Flush() diff --git a/upload.go b/upload.go index b7ced73..06392fc 100644 --- a/upload.go +++ b/upload.go @@ -199,8 +199,8 @@ func processUpload(upReq UploadRequest) (upload Upload, err error) { if len(extension) == 0 { // Pull the first 512 bytes off for use in MIME detection header = make([]byte, 512) - n, err := upReq.src.Read(header) - if n == 0 || err != nil { + n, _ := upReq.src.Read(header) + if n == 0 { return upload, errors.New("Empty file") } header = header[:n] @@ -246,7 +246,10 @@ func processUpload(upReq UploadRequest) (upload Upload, err error) { defer dst.Close() // Get the rest of the metadata needed for storage - if upReq.expiry != 0 { + if upReq.expiry == 0 { + upload.Expiry = neverExpire + + } else { upload.Expiry = time.Now().Add(upReq.expiry) } From 9640e2c7ce9f34cde602e6aaba8bdcd9de3f671f Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Wed, 7 Oct 2015 03:00:03 -0400 Subject: [PATCH 041/345] Tests + fixes --- csp_test.go | 11 ++ display.go | 2 +- pages.go | 4 +- server_test.go | 434 +++++++++++++++++++++++++++++++++++++++++++------ upload.go | 1 - util.go | 33 ---- 6 files changed, 399 insertions(+), 86 deletions(-) diff --git a/csp_test.go b/csp_test.go index d2b6eee..87f5dd9 100644 --- a/csp_test.go +++ b/csp_test.go @@ -3,6 +3,8 @@ package main import ( "net/http" "net/http/httptest" + "os" + "path" "testing" "github.com/zenazn/goji" @@ -14,6 +16,15 @@ var testCSPHeaders = map[string]string{ } func TestContentSecurityPolicy(t *testing.T) { + Config.siteURL = "http://linx.example.org/" + Config.filesDir = path.Join(os.TempDir(), generateBarename()) + Config.metaDir = Config.filesDir + "_meta" + Config.noLogs = true + Config.siteName = "linx" + Config.contentSecurityPolicy = "default-src 'none'; style-src 'self';" + Config.xFrameOptions = "SAMEORIGIN" + setup() + w := httptest.NewRecorder() req, err := http.NewRequest("GET", "/", nil) diff --git a/display.go b/display.go index 6503c28..b966077 100644 --- a/display.go +++ b/display.go @@ -31,7 +31,7 @@ func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { expiry, _ := metadataGetExpiry(fileName) var expiryHuman string - if !expiry.IsZero() { + if expiry != neverExpire { expiryHuman = humanize.RelTime(time.Now(), expiry, "", "") } sizeHuman := humanize.Bytes(uint64(fileInfo.Size())) diff --git a/pages.go b/pages.go index c4676a4..ac1b7f1 100644 --- a/pages.go +++ b/pages.go @@ -47,13 +47,13 @@ func oopsHandler(c web.C, w http.ResponseWriter, r *http.Request, rt RespType, m } if rt == RespHTML { - Templates["oops.html"].ExecuteWriter(pongo2.Context{"msg": msg}, w) w.WriteHeader(500) + Templates["oops.html"].ExecuteWriter(pongo2.Context{"msg": msg}, w) return } else if rt == RespPLAIN { - fmt.Fprintf(w, "%s", msg) w.WriteHeader(500) + fmt.Fprintf(w, "%s", msg) return } else if rt == RespJSON { diff --git a/server_test.go b/server_test.go index 4fc426f..b117117 100644 --- a/server_test.go +++ b/server_test.go @@ -1,21 +1,37 @@ package main import ( + "bytes" "encoding/json" + "mime/multipart" "net/http" "net/http/httptest" + "net/url" "os" "path" "strconv" "strings" "testing" + "time" "github.com/zenazn/goji" ) +type RespOkJSON struct { + Filename string + Url string + Delete_Key string + Expiry string + Size string +} + +type RespErrJSON struct { + Error string +} + func TestSetup(t *testing.T) { Config.siteURL = "http://linx.example.org/" - Config.filesDir = path.Join(os.TempDir(), randomString(10)) + Config.filesDir = path.Join(os.TempDir(), generateBarename()) Config.metaDir = Config.filesDir + "_meta" Config.noLogs = true Config.siteName = "linx" @@ -55,7 +71,7 @@ func TestNotFound(t *testing.T) { func TestFileNotFound(t *testing.T) { w := httptest.NewRecorder() - filename := randomString(10) + filename := generateBarename() req, err := http.NewRequest("GET", "/selif/"+filename, nil) if err != nil { @@ -72,7 +88,7 @@ func TestFileNotFound(t *testing.T) { func TestDisplayNotFound(t *testing.T) { w := httptest.NewRecorder() - filename := randomString(10) + filename := generateBarename() req, err := http.NewRequest("GET", "/"+filename, nil) if err != nil { @@ -86,10 +102,346 @@ func TestDisplayNotFound(t *testing.T) { } } +func TestPostCodeUpload(t *testing.T) { + w := httptest.NewRecorder() + + filename := generateBarename() + extension := "txt" + + form := url.Values{} + form.Add("content", "File content") + form.Add("filename", filename) + form.Add("extension", extension) + + req, err := http.NewRequest("POST", "/upload/", nil) + if err != nil { + t.Fatal(err) + } + req.PostForm = form + req.Header.Set("Content-Type", "application/x-www-form-urlencoded") + + goji.DefaultMux.ServeHTTP(w, req) + + if w.Code != 301 { + t.Fatalf("Status code is not 301, but %d", w.Code) + } + + if w.Header().Get("Location") != "/"+filename+"."+extension { + t.Fatalf("Was redirected to %s instead of /%s", w.Header().Get("Location"), filename) + } +} + +func TestPostCodeExpiryJSONUpload(t *testing.T) { + w := httptest.NewRecorder() + + form := url.Values{} + form.Add("content", "File content") + form.Add("filename", "") + form.Add("expires", "60") + + req, err := http.NewRequest("POST", "/upload/", nil) + if err != nil { + t.Fatal(err) + } + req.PostForm = form + req.Header.Set("Content-Type", "application/x-www-form-urlencoded") + req.Header.Set("Accept", "application/json") + + goji.DefaultMux.ServeHTTP(w, req) + + if w.Code != 200 { + t.Log(w.Body.String()) + t.Fatalf("Status code is not 200, but %d", w.Code) + } + + var myjson RespOkJSON + err = json.Unmarshal([]byte(w.Body.String()), &myjson) + if err != nil { + t.Fatal(err) + } + + myExp, err := strconv.ParseInt(myjson.Expiry, 10, 64) + if err != nil { + t.Fatal(err) + } + curTime := time.Now().Unix() + + if myExp < curTime { + t.Fatalf("File expiry (%d) is smaller than current time (%d)", myExp, curTime) + } + + if myjson.Size != "12" { + t.Fatalf("File size was not 12 but %s", myjson.Size) + } +} + +func TestPostUpload(t *testing.T) { + w := httptest.NewRecorder() + + filename := generateBarename() + ".txt" + + var b bytes.Buffer + mw := multipart.NewWriter(&b) + fw, err := mw.CreateFormFile("file", filename) + if err != nil { + t.Fatal(err) + } + + fw.Write([]byte("File content")) + mw.Close() + + req, err := http.NewRequest("POST", "/upload/", &b) + req.Header.Set("Content-Type", mw.FormDataContentType()) + if err != nil { + t.Fatal(err) + } + + goji.DefaultMux.ServeHTTP(w, req) + + if w.Code != 301 { + t.Fatalf("Status code is not 301, but %d", w.Code) + } + + if w.Header().Get("Location") != "/"+filename { + t.Fatalf("Was redirected to %s instead of /%s", w.Header().Get("Location"), filename) + } +} + +func TestPostJSONUpload(t *testing.T) { + w := httptest.NewRecorder() + + filename := generateBarename() + ".txt" + + var b bytes.Buffer + mw := multipart.NewWriter(&b) + fw, err := mw.CreateFormFile("file", filename) + if err != nil { + t.Fatal(err) + } + + fw.Write([]byte("File content")) + mw.Close() + + req, err := http.NewRequest("POST", "/upload/", &b) + req.Header.Set("Content-Type", mw.FormDataContentType()) + req.Header.Set("Accept", "application/json") + if err != nil { + t.Fatal(err) + } + + goji.DefaultMux.ServeHTTP(w, req) + + if w.Code != 200 { + t.Log(w.Body.String()) + t.Fatalf("Status code is not 200, but %d", w.Code) + } + + var myjson RespOkJSON + err = json.Unmarshal([]byte(w.Body.String()), &myjson) + if err != nil { + t.Fatal(err) + } + + if myjson.Filename != filename { + t.Fatalf("Filename is not '%s' but '%s' ", filename, myjson.Filename) + } + + if myjson.Expiry != "0" { + t.Fatalf("File expiry is not 0 but %s", myjson.Expiry) + } + + if myjson.Size != "12" { + t.Fatalf("File size was not 12 but %s", myjson.Size) + } +} + +func TestPostExpiresJSONUpload(t *testing.T) { + w := httptest.NewRecorder() + + filename := generateBarename() + ".txt" + + var b bytes.Buffer + mw := multipart.NewWriter(&b) + fw, err := mw.CreateFormFile("file", filename) + if err != nil { + t.Fatal(err) + } + fw.Write([]byte("File content")) + + exp, err := mw.CreateFormField("expires") + if err != nil { + t.Fatal(err) + } + exp.Write([]byte("60")) + + mw.Close() + + req, err := http.NewRequest("POST", "/upload/", &b) + req.Header.Set("Content-Type", mw.FormDataContentType()) + req.Header.Set("Accept", "application/json") + if err != nil { + t.Fatal(err) + } + + goji.DefaultMux.ServeHTTP(w, req) + + if w.Code != 200 { + t.Log(w.Body.String()) + t.Fatalf("Status code is not 200, but %d", w.Code) + } + + var myjson RespOkJSON + err = json.Unmarshal([]byte(w.Body.String()), &myjson) + if err != nil { + t.Fatal(err) + } + + if myjson.Filename != filename { + t.Fatalf("Filename is not '%s' but '%s' ", filename, myjson.Filename) + } + + myExp, err := strconv.ParseInt(myjson.Expiry, 10, 64) + if err != nil { + t.Fatal(err) + } + curTime := time.Now().Unix() + + if myExp < curTime { + t.Fatalf("File expiry (%d) is smaller than current time (%d)", myExp, curTime) + } + + if myjson.Size != "12" { + t.Fatalf("File size was not 12 but %s", myjson.Size) + } +} + +func TestPostRandomizeJSONUpload(t *testing.T) { + w := httptest.NewRecorder() + + filename := generateBarename() + ".txt" + + var b bytes.Buffer + mw := multipart.NewWriter(&b) + fw, err := mw.CreateFormFile("file", filename) + if err != nil { + t.Fatal(err) + } + fw.Write([]byte("File content")) + + rnd, err := mw.CreateFormField("randomize") + if err != nil { + t.Fatal(err) + } + rnd.Write([]byte("true")) + + mw.Close() + + req, err := http.NewRequest("POST", "/upload/", &b) + req.Header.Set("Content-Type", mw.FormDataContentType()) + req.Header.Set("Accept", "application/json") + if err != nil { + t.Fatal(err) + } + + goji.DefaultMux.ServeHTTP(w, req) + + if w.Code != 200 { + t.Log(w.Body.String()) + t.Fatalf("Status code is not 200, but %d", w.Code) + } + + var myjson RespOkJSON + err = json.Unmarshal([]byte(w.Body.String()), &myjson) + if err != nil { + t.Fatal(err) + } + + if myjson.Filename == filename { + t.Fatalf("Filename is not random", filename, myjson.Filename) + } + + if myjson.Size != "12" { + t.Fatalf("File size was not 12 but %s", myjson.Size) + } +} + +func TestPostEmptyUpload(t *testing.T) { + w := httptest.NewRecorder() + + filename := generateBarename() + ".txt" + + var b bytes.Buffer + mw := multipart.NewWriter(&b) + fw, err := mw.CreateFormFile("file", filename) + if err != nil { + t.Fatal(err) + } + + fw.Write([]byte("")) + mw.Close() + + req, err := http.NewRequest("POST", "/upload/", &b) + req.Header.Set("Content-Type", mw.FormDataContentType()) + if err != nil { + t.Fatal(err) + } + + goji.DefaultMux.ServeHTTP(w, req) + + if w.Code != 500 { + t.Log(w.Body.String()) + t.Fatalf("Status code is not 500, but %d", w.Code) + } + + if !strings.Contains(w.Body.String(), "Empty file") { + t.Fatal("Response did not contain 'Empty file'") + } +} + +func TestPostEmptyJSONUpload(t *testing.T) { + w := httptest.NewRecorder() + + filename := generateBarename() + ".txt" + + var b bytes.Buffer + mw := multipart.NewWriter(&b) + fw, err := mw.CreateFormFile("file", filename) + if err != nil { + t.Fatal(err) + } + + fw.Write([]byte("")) + mw.Close() + + req, err := http.NewRequest("POST", "/upload/", &b) + req.Header.Set("Content-Type", mw.FormDataContentType()) + req.Header.Set("Accept", "application/json") + if err != nil { + t.Fatal(err) + } + + goji.DefaultMux.ServeHTTP(w, req) + + if w.Code != 500 { + t.Log(w.Body.String()) + t.Fatalf("Status code is not 500, but %d", w.Code) + } + + var myjson RespErrJSON + err = json.Unmarshal([]byte(w.Body.String()), &myjson) + if err != nil { + t.Fatal(err) + } + + if myjson.Error != "Could not upload file: Empty file" { + t.Fatal("Json 'error' was not 'Empty file' but " + myjson.Error) + } +} + func TestPutUpload(t *testing.T) { w := httptest.NewRecorder() - filename := randomString(10) + ".ext" + filename := generateBarename() + ".ext" req, err := http.NewRequest("PUT", "/upload/"+filename, strings.NewReader("File content")) if err != nil { @@ -106,7 +458,26 @@ func TestPutUpload(t *testing.T) { func TestPutRandomizedUpload(t *testing.T) { w := httptest.NewRecorder() - filename := randomString(10) + ".ext" + filename := generateBarename() + ".ext" + + req, err := http.NewRequest("PUT", "/upload/"+filename, strings.NewReader("File content")) + if err != nil { + t.Fatal(err) + } + + req.Header.Set("Linx-Randomize", "yes") + + goji.DefaultMux.ServeHTTP(w, req) + + if w.Body.String() == Config.siteURL+filename { + t.Fatal("Filename was not random") + } +} + +func TestPutNoExtensionUpload(t *testing.T) { + w := httptest.NewRecorder() + + filename := generateBarename() req, err := http.NewRequest("PUT", "/upload/"+filename, strings.NewReader("File content")) if err != nil { @@ -125,7 +496,7 @@ func TestPutRandomizedUpload(t *testing.T) { func TestPutEmptyUpload(t *testing.T) { w := httptest.NewRecorder() - filename := randomString(10) + ".ext" + filename := generateBarename() + ".ext" req, err := http.NewRequest("PUT", "/upload/"+filename, strings.NewReader("")) if err != nil { @@ -142,18 +513,11 @@ func TestPutEmptyUpload(t *testing.T) { } func TestPutJSONUpload(t *testing.T) { - type RespJSON struct { - Filename string - Url string - Delete_Key string - Expiry string - Size string - } - var myjson RespJSON + var myjson RespOkJSON w := httptest.NewRecorder() - filename := randomString(10) + ".ext" + filename := generateBarename() + ".ext" req, err := http.NewRequest("PUT", "/upload/"+filename, strings.NewReader("File content")) if err != nil { @@ -175,18 +539,11 @@ func TestPutJSONUpload(t *testing.T) { } func TestPutRandomizedJSONUpload(t *testing.T) { - type RespJSON struct { - Filename string - Url string - Delete_Key string - Expiry string - Size string - } - var myjson RespJSON + var myjson RespOkJSON w := httptest.NewRecorder() - filename := randomString(10) + ".ext" + filename := generateBarename() + ".ext" req, err := http.NewRequest("PUT", "/upload/"+filename, strings.NewReader("File content")) if err != nil { @@ -209,18 +566,11 @@ func TestPutRandomizedJSONUpload(t *testing.T) { } func TestPutExpireJSONUpload(t *testing.T) { - type RespJSON struct { - Filename string - Url string - Delete_Key string - Expiry string - Size string - } - var myjson RespJSON + var myjson RespOkJSON w := httptest.NewRecorder() - filename := randomString(10) + ".ext" + filename := generateBarename() + ".ext" req, err := http.NewRequest("PUT", "/upload/"+filename, strings.NewReader("File content")) if err != nil { @@ -247,14 +597,7 @@ func TestPutExpireJSONUpload(t *testing.T) { } func TestPutAndDelete(t *testing.T) { - type RespJSON struct { - Filename string - Url string - Delete_Key string - Expiry string - Size string - } - var myjson RespJSON + var myjson RespOkJSON w := httptest.NewRecorder() @@ -302,14 +645,7 @@ func TestPutAndDelete(t *testing.T) { } func TestPutAndSpecificDelete(t *testing.T) { - type RespJSON struct { - Filename string - Url string - Delete_Key string - Expiry string - Size string - } - var myjson RespJSON + var myjson RespOkJSON w := httptest.NewRecorder() diff --git a/upload.go b/upload.go index 06392fc..6ea9247 100644 --- a/upload.go +++ b/upload.go @@ -248,7 +248,6 @@ func processUpload(upReq UploadRequest) (upload Upload, err error) { // Get the rest of the metadata needed for storage if upReq.expiry == 0 { upload.Expiry = neverExpire - } else { upload.Expiry = time.Now().Add(upReq.expiry) } diff --git a/util.go b/util.go index 71016bd..fd463d5 100644 --- a/util.go +++ b/util.go @@ -1,38 +1,5 @@ package main -import ( - "math/rand" - "time" -) - -// from http://stackoverflow.com/a/31832326 -var src = rand.NewSource(time.Now().UnixNano()) - -const letterBytes = "abcdefghijklmnopqrstuvwxyz1234567890" -const ( - letterIdxBits = 6 // 6 bits to represent a letter index - letterIdxMask = 1<= 0; { - if remain == 0 { - cache, remain = src.Int63(), letterIdxMax - } - if idx := int(cache & letterIdxMask); idx < len(letterBytes) { - b[i] = letterBytes[idx] - i-- - } - cache >>= letterIdxBits - remain-- - } - - return string(b) -} - func extensionToHlAndAceLangs(extension string) (hlExt, aceExt string) { hlExt, exists := extensionToHl[extension] if !exists { From a1e3f6f31f96ac1b0cee7bbaf5b93a3e09408ef4 Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Wed, 7 Oct 2015 03:02:07 -0400 Subject: [PATCH 042/345] go vet complaint --- server_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server_test.go b/server_test.go index b117117..b2d41ae 100644 --- a/server_test.go +++ b/server_test.go @@ -357,7 +357,7 @@ func TestPostRandomizeJSONUpload(t *testing.T) { } if myjson.Filename == filename { - t.Fatalf("Filename is not random", filename, myjson.Filename) + t.Fatalf("Filename (%s) is not random (%s)", filename, myjson.Filename) } if myjson.Size != "12" { From 9b07728ddbb32a11f442ecf722107594240ed304 Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Wed, 7 Oct 2015 12:48:44 -0400 Subject: [PATCH 043/345] Added https option + graceful shutdown --- server.go | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/server.go b/server.go index e3f2abf..2e74d85 100644 --- a/server.go +++ b/server.go @@ -14,6 +14,7 @@ import ( "github.com/GeertJohan/go.rice" "github.com/flosch/pongo2" "github.com/zenazn/goji" + "github.com/zenazn/goji/graceful" "github.com/zenazn/goji/web/middleware" ) @@ -23,6 +24,8 @@ var Config struct { metaDir string siteName string siteURL string + certFile string + keyFile string contentSecurityPolicy string fileContentSecurityPolicy string xFrameOptions string @@ -126,6 +129,10 @@ func main() { "name of the site") flag.StringVar(&Config.siteURL, "siteurl", "http://"+Config.bind+"/", "site base url (including trailing slash)") + flag.StringVar(&Config.certFile, "certfile", "", + "path to ssl certificate (for https)") + flag.StringVar(&Config.keyFile, "keyfile", "", + "path to ssl key (for https)") flag.BoolVar(&Config.fastcgi, "fastcgi", false, "serve through fastcgi") flag.BoolVar(&Config.remoteUploads, "remoteuploads", false, @@ -142,14 +149,25 @@ func main() { setup() - listener, err := net.Listen("tcp", Config.bind) - if err != nil { - log.Fatal("Could not bind: ", err) - } - if Config.fastcgi { + listener, err := net.Listen("tcp", Config.bind) + if err != nil { + log.Fatal("Could not bind: ", err) + } + + log.Printf("Serving over fastcgi, bound on %s, using siteurl %s", Config.bind, Config.siteURL) fcgi.Serve(listener, goji.DefaultMux) + } else if Config.certFile != "" { + log.Printf("Serving over https, bound on %s, using siteurl %s", Config.bind, Config.siteURL) + err := graceful.ListenAndServeTLS(Config.bind, Config.certFile, Config.keyFile, goji.DefaultMux) + if err != nil { + log.Fatal(err) + } } else { - goji.ServeListener(listener) + log.Printf("Serving over http, bound on %s, using siteurl %s", Config.bind, Config.siteURL) + err := graceful.ListenAndServe(Config.bind, goji.DefaultMux) + if err != nil { + log.Fatal(err) + } } } From 3c868d8fe5477a4be55d93438488d4089e8b74f5 Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Wed, 7 Oct 2015 13:25:38 -0400 Subject: [PATCH 044/345] Document new usage options --- README.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3398bb5..14450c5 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,8 @@ Command-line options - ```-siteurl "http://mylinx.example.org/"``` -- the site url (for generating links) - ```-filespath files/"``` -- Path to store uploads (default is files/) - ```-metapath meta/``` -- Path to store information about uploads (default is meta/) +- ```-certfile path/to/your.crt``` -- Path to the ssl certificate (required if you want to use the https server) +- ```-keyfile path/to/your.key``` -- Path to the ssl key (required if you want to use the https server) - ```-contentsecuritypolicy "..."``` -- Content-Security-Policy header for pages (default is "default-src 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; referrer none;") - ```-filecontentsecuritypolicy "..."``` -- Content-Security-Policy header for files (default is "default-src 'none'; img-src 'self'; object-src 'self'; media-src 'self'; sandbox; referrer none;"") - ```-xframeoptions "..." ``` -- X-Frame-Options header (default is "SAMEORIGIN") @@ -31,7 +33,11 @@ Command-line options Deployment ---------- -A suggested deployment is running nginx in front of linx-server serving through fastcgi. + +#### 1. Using fastcgi + +A suggested deployment is running nginx in front of linx-server serving through fastcgi. +This allows you to have nginx handle the TLS termination for example. An example configuration: ``` server { @@ -46,6 +52,13 @@ server { } } ``` +And run linx-server with the ```-fastcgi``` option. + +#### 2. Using the built-in https server +Run linx-server with the ```-certfile path/to/cert.file``` and ```-keyfile path/to/key.file``` options. + +#### 3. Using the built-in http server +Run linx-server normally. Development ----------- From edfb80daac383da8a615bb2ac6e39a5b7a69d1b6 Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Wed, 7 Oct 2015 15:00:42 -0400 Subject: [PATCH 045/345] Markdown display handler. Fixes #33 --- display.go | 18 + static/css/github-markdown.css | 650 +++++++++++++++++++++++++++++++++ templates.go | 1 + templates/display/md.html | 11 + 4 files changed, 680 insertions(+) create mode 100644 static/css/github-markdown.css create mode 100644 templates/display/md.html diff --git a/display.go b/display.go index b966077..f21096f 100644 --- a/display.go +++ b/display.go @@ -14,6 +14,8 @@ import ( "bitbucket.org/taruti/mimemagic" "github.com/dustin/go-humanize" "github.com/flosch/pongo2" + "github.com/microcosm-cc/bluemonday" + "github.com/russross/blackfriday" "github.com/zenazn/goji/web" ) @@ -80,6 +82,22 @@ func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { } else { tpl = Templates["display/file.html"] } + } else if extension == "md" { + if fileInfo.Size() < maxDisplayFileSizeBytes { + bytes, err := ioutil.ReadFile(filePath) + if err != nil { + tpl = Templates["display/file.html"] + } else { + unsafe := blackfriday.MarkdownCommon(bytes) + html := bluemonday.UGCPolicy().SanitizeBytes(unsafe) + + extra["contents"] = string(html) + tpl = Templates["display/md.html"] + } + } else { + tpl = Templates["display/file.html"] + } + } else { tpl = Templates["display/file.html"] } diff --git a/static/css/github-markdown.css b/static/css/github-markdown.css new file mode 100644 index 0000000..8072b54 --- /dev/null +++ b/static/css/github-markdown.css @@ -0,0 +1,650 @@ +/* from https://github.com/sindresorhus/github-markdown-css/ */ + +.markdown-body { + -webkit-text-size-adjust: 100%; + text-size-adjust: 100%; + color: #333; + font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif; + font-size: 12px; + line-height: 1.6; + word-wrap: break-word; + width: 680px; + padding: 10px; +} + +.markdown-body a { + background-color: transparent; +} + +.markdown-body a:active, +.markdown-body a:hover { + outline: 0; +} + +.markdown-body strong { + font-weight: bold; +} + +.markdown-body h1 { + font-size: 2em; + margin: 0.67em 0; +} + +.markdown-body img { + border: 0; +} + +.markdown-body hr { + box-sizing: content-box; + height: 0; +} + +.markdown-body pre { + overflow: auto; +} + +.markdown-body code, +.markdown-body kbd, +.markdown-body pre { + font-family: monospace, monospace; + font-size: 1em; +} + +.markdown-body input { + color: inherit; + font: inherit; + margin: 0; +} + +.markdown-body html input[disabled] { + cursor: default; +} + +.markdown-body input { + line-height: normal; +} + +.markdown-body input[type="checkbox"] { + box-sizing: border-box; + padding: 0; +} + +.markdown-body table { + border-collapse: collapse; + border-spacing: 0; +} + +.markdown-body td, +.markdown-body th { + padding: 0; +} + +.markdown-body * { + box-sizing: border-box; +} + +.markdown-body input { + font: 13px/1.4 Helvetica, arial, nimbussansl, liberationsans, freesans, clean, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; +} + +.markdown-body a { + color: #4078c0; + text-decoration: none; +} + +.markdown-body a:hover, +.markdown-body a:active { + text-decoration: underline; +} + +.markdown-body hr { + height: 0; + margin: 15px 0; + overflow: hidden; + background: transparent; + border: 0; + border-bottom: 1px solid #ddd; +} + +.markdown-body hr:before { + display: table; + content: ""; +} + +.markdown-body hr:after { + display: table; + clear: both; + content: ""; +} + +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + margin-top: 15px; + margin-bottom: 15px; + line-height: 1.1; +} + +.markdown-body h1 { + font-size: 30px; +} + +.markdown-body h2 { + font-size: 21px; +} + +.markdown-body h3 { + font-size: 16px; +} + +.markdown-body h4 { + font-size: 14px; +} + +.markdown-body h5 { + font-size: 12px; +} + +.markdown-body h6 { + font-size: 11px; +} + +.markdown-body blockquote { + margin: 0; +} + +.markdown-body ul, +.markdown-body ol { + padding: 0; + margin-top: 0; + margin-bottom: 0; +} + +.markdown-body ol ol, +.markdown-body ul ol { + list-style-type: lower-roman; +} + +.markdown-body ul ul ol, +.markdown-body ul ol ol, +.markdown-body ol ul ol, +.markdown-body ol ol ol { + list-style-type: lower-alpha; +} + +.markdown-body dd { + margin-left: 0; +} + +.markdown-body code { + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 12px; +} + +.markdown-body pre { + margin-top: 0; + margin-bottom: 0; + font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace; +} + +.markdown-body .select::-ms-expand { + opacity: 0; +} + +.markdown-body .octicon { + font: normal normal normal 16px/1 octicons-anchor; + display: inline-block; + text-decoration: none; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.markdown-body .octicon-link:before { + content: '\f05c'; +} + +.markdown-body>*:first-child { + margin-top: 0 !important; +} + +.markdown-body>*:last-child { + margin-bottom: 0 !important; +} + +.markdown-body a:not([href]) { + color: inherit; + text-decoration: none; +} + +.markdown-body .anchor { + position: absolute; + top: 0; + left: 0; + display: block; + padding-right: 6px; + padding-left: 30px; + margin-left: -30px; +} + +.markdown-body .anchor:focus { + outline: none; +} + +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + position: relative; + margin-top: 1em; + margin-bottom: 16px; + font-weight: bold; + line-height: 1.4; +} + +.markdown-body h1 .octicon-link, +.markdown-body h2 .octicon-link, +.markdown-body h3 .octicon-link, +.markdown-body h4 .octicon-link, +.markdown-body h5 .octicon-link, +.markdown-body h6 .octicon-link { + display: none; + color: #000; + vertical-align: middle; +} + +.markdown-body h1:hover .anchor, +.markdown-body h2:hover .anchor, +.markdown-body h3:hover .anchor, +.markdown-body h4:hover .anchor, +.markdown-body h5:hover .anchor, +.markdown-body h6:hover .anchor { + padding-left: 8px; + margin-left: -30px; + text-decoration: none; +} + +.markdown-body h1:hover .anchor .octicon-link, +.markdown-body h2:hover .anchor .octicon-link, +.markdown-body h3:hover .anchor .octicon-link, +.markdown-body h4:hover .anchor .octicon-link, +.markdown-body h5:hover .anchor .octicon-link, +.markdown-body h6:hover .anchor .octicon-link { + display: inline-block; +} + +.markdown-body h1 { + padding-bottom: 0.3em; + font-size: 2.25em; + line-height: 1.2; + border-bottom: 1px solid #eee; +} + +.markdown-body h1 .anchor { + line-height: 1; +} + +.markdown-body h2 { + padding-bottom: 0.3em; + font-size: 1.75em; + line-height: 1.225; + border-bottom: 1px solid #eee; +} + +.markdown-body h2 .anchor { + line-height: 1; +} + +.markdown-body h3 { + font-size: 1.5em; + line-height: 1.43; +} + +.markdown-body h3 .anchor { + line-height: 1.2; +} + +.markdown-body h4 { + font-size: 1.25em; +} + +.markdown-body h4 .anchor { + line-height: 1.2; +} + +.markdown-body h5 { + font-size: 1em; +} + +.markdown-body h5 .anchor { + line-height: 1.1; +} + +.markdown-body h6 { + font-size: 1em; + color: #777; +} + +.markdown-body h6 .anchor { + line-height: 1.1; +} + +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre { + margin-top: 0; + margin-bottom: 16px; +} + +.markdown-body hr { + height: 4px; + padding: 0; + margin: 16px 0; + background-color: #e7e7e7; + border: 0 none; +} + +.markdown-body ul, +.markdown-body ol { + padding-left: 2em; +} + +.markdown-body ul ul, +.markdown-body ul ol, +.markdown-body ol ol, +.markdown-body ol ul { + margin-top: 0; + margin-bottom: 0; +} + +.markdown-body li>p { + margin-top: 16px; +} + +.markdown-body dl { + padding: 0; +} + +.markdown-body dl dt { + padding: 0; + margin-top: 16px; + font-size: 1em; + font-style: italic; + font-weight: bold; +} + +.markdown-body dl dd { + padding: 0 16px; + margin-bottom: 16px; +} + +.markdown-body blockquote { + padding: 0 15px; + color: #777; + border-left: 4px solid #ddd; +} + +.markdown-body blockquote>:first-child { + margin-top: 0; +} + +.markdown-body blockquote>:last-child { + margin-bottom: 0; +} + +.markdown-body table { + display: block; + width: 100%; + overflow: auto; + word-break: normal; + word-break: keep-all; +} + +.markdown-body table th { + font-weight: bold; +} + +.markdown-body table th, +.markdown-body table td { + padding: 6px 13px; + border: 1px solid #ddd; +} + +.markdown-body table tr { + background-color: #fff; + border-top: 1px solid #ccc; +} + +.markdown-body table tr:nth-child(2n) { + background-color: #f8f8f8; +} + +.markdown-body img { + max-width: 100%; + box-sizing: border-box; +} + +.markdown-body code { + padding: 0; + padding-top: 0.2em; + padding-bottom: 0.2em; + margin: 0; + font-size: 85%; + background-color: rgba(0,0,0,0.04); + border-radius: 3px; +} + +.markdown-body code:before, +.markdown-body code:after { + letter-spacing: -0.2em; + content: "\00a0"; +} + +.markdown-body pre>code { + padding: 0; + margin: 0; + font-size: 100%; + word-break: normal; + white-space: pre; + background: transparent; + border: 0; +} + +.markdown-body .highlight { + margin-bottom: 16px; +} + +.markdown-body .highlight pre, +.markdown-body pre { + padding: 16px; + overflow: auto; + font-size: 85%; + line-height: 1.45; + background-color: #f7f7f7; + border-radius: 3px; +} + +.markdown-body .highlight pre { + margin-bottom: 0; + word-break: normal; +} + +.markdown-body pre { + word-wrap: normal; +} + +.markdown-body pre code { + display: inline; + max-width: initial; + padding: 0; + margin: 0; + overflow: initial; + line-height: inherit; + word-wrap: normal; + background-color: transparent; + border: 0; +} + +.markdown-body pre code:before, +.markdown-body pre code:after { + content: normal; +} + +.markdown-body kbd { + display: inline-block; + padding: 3px 5px; + font-size: 11px; + line-height: 10px; + color: #555; + vertical-align: middle; + background-color: #fcfcfc; + border: solid 1px #ccc; + border-bottom-color: #bbb; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #bbb; +} + +.markdown-body .pl-c { + color: #969896; +} + +.markdown-body .pl-c1, +.markdown-body .pl-s .pl-v { + color: #0086b3; +} + +.markdown-body .pl-e, +.markdown-body .pl-en { + color: #795da3; +} + +.markdown-body .pl-s .pl-s1, +.markdown-body .pl-smi { + color: #333; +} + +.markdown-body .pl-ent { + color: #63a35c; +} + +.markdown-body .pl-k { + color: #a71d5d; +} + +.markdown-body .pl-pds, +.markdown-body .pl-s, +.markdown-body .pl-s .pl-pse .pl-s1, +.markdown-body .pl-sr, +.markdown-body .pl-sr .pl-cce, +.markdown-body .pl-sr .pl-sra, +.markdown-body .pl-sr .pl-sre { + color: #183691; +} + +.markdown-body .pl-v { + color: #ed6a43; +} + +.markdown-body .pl-id { + color: #b52a1d; +} + +.markdown-body .pl-ii { + background-color: #b52a1d; + color: #f8f8f8; +} + +.markdown-body .pl-sr .pl-cce { + color: #63a35c; + font-weight: bold; +} + +.markdown-body .pl-ml { + color: #693a17; +} + +.markdown-body .pl-mh, +.markdown-body .pl-mh .pl-en, +.markdown-body .pl-ms { + color: #1d3e81; + font-weight: bold; +} + +.markdown-body .pl-mq { + color: #008080; +} + +.markdown-body .pl-mi { + color: #333; + font-style: italic; +} + +.markdown-body .pl-mb { + color: #333; + font-weight: bold; +} + +.markdown-body .pl-md { + background-color: #ffecec; + color: #bd2c00; +} + +.markdown-body .pl-mi1 { + background-color: #eaffea; + color: #55a532; +} + +.markdown-body .pl-mdr { + color: #795da3; + font-weight: bold; +} + +.markdown-body .pl-mo { + color: #1d3e81; +} + +.markdown-body kbd { + display: inline-block; + padding: 3px 5px; + font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace; + line-height: 10px; + color: #555; + vertical-align: middle; + background-color: #fcfcfc; + border: solid 1px #ccc; + border-bottom-color: #bbb; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #bbb; +} + +.markdown-body .task-list-item { + list-style-type: none; +} + +.markdown-body .task-list-item+.task-list-item { + margin-top: 3px; +} + +.markdown-body .task-list-item input { + margin: 0 0.35em 0.25em -1.6em; + vertical-align: middle; +} + +.markdown-body :checked+.radio-label { + z-index: 1; + position: relative; + border-color: #4078c0; +} diff --git a/templates.go b/templates.go index eb2997d..78c7215 100644 --- a/templates.go +++ b/templates.go @@ -53,6 +53,7 @@ func populateTemplatesMap(tSet *pongo2.TemplateSet, tMap map[string]*pongo2.Temp "display/video.html", "display/pdf.html", "display/bin.html", + "display/md.html", "display/file.html", } diff --git a/templates/display/md.html b/templates/display/md.html new file mode 100644 index 0000000..a0d19a1 --- /dev/null +++ b/templates/display/md.html @@ -0,0 +1,11 @@ +{% extends "base.html" %} + +{% block head %} + +{% endblock %} + +{% block main %} +
    + {{ extra.contents|safe }} +
    +{% endblock %} From d05f0b645bdae41ec504813ce4d53dc9dfa09553 Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Wed, 7 Oct 2015 16:45:41 -0400 Subject: [PATCH 046/345] Display contents of common archives. Fixes #34 --- display.go | 92 ++++++++++++++++++++++++++++++++----- templates/display/file.html | 9 ++++ 2 files changed, 89 insertions(+), 12 deletions(-) diff --git a/display.go b/display.go index f21096f..7a44795 100644 --- a/display.go +++ b/display.go @@ -1,12 +1,18 @@ package main import ( + "archive/tar" + "archive/zip" + "compress/bzip2" + "compress/gzip" "encoding/json" + "io" "io/ioutil" "net/http" "os" "path" "path/filepath" + "sort" "strconv" "strings" "time" @@ -38,11 +44,13 @@ func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { } sizeHuman := humanize.Bytes(uint64(fileInfo.Size())) extra := make(map[string]string) + files := []string{} file, _ := os.Open(filePath) + defer file.Close() + header := make([]byte, 512) file.Read(header) - file.Close() mimetype := mimemagic.Match("", header) extension := strings.TrimPrefix(filepath.Ext(fileName), ".") @@ -68,37 +76,96 @@ func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { tpl = Templates["display/audio.html"] } else if mimetype == "application/pdf" { tpl = Templates["display/pdf.html"] + } else if mimetype == "application/x-tar" { + f, _ := os.Open(filePath) + defer f.Close() + + tReadr := tar.NewReader(f) + for { + header, err := tReadr.Next() + if err == io.EOF || err != nil { + break + } + + if header.Typeflag == tar.TypeDir || header.Typeflag == tar.TypeReg { + files = append(files, header.Name) + } + } + sort.Strings(files) + + } else if mimetype == "application/x-gzip" { + f, _ := os.Open(filePath) + defer f.Close() + + gzf, err := gzip.NewReader(f) + if err == nil { + tReadr := tar.NewReader(gzf) + for { + header, err := tReadr.Next() + if err == io.EOF || err != nil { + break + } + + if header.Typeflag == tar.TypeDir || header.Typeflag == tar.TypeReg { + files = append(files, header.Name) + } + } + sort.Strings(files) + } + } else if mimetype == "application/x-bzip" { + f, _ := os.Open(filePath) + defer f.Close() + + bzf := bzip2.NewReader(f) + tReadr := tar.NewReader(bzf) + for { + header, err := tReadr.Next() + if err == io.EOF || err != nil { + break + } + + if header.Typeflag == tar.TypeDir || header.Typeflag == tar.TypeReg { + files = append(files, header.Name) + } + } + sort.Strings(files) + + } else if mimetype == "application/zip" { + f, _ := os.Open(filePath) + defer f.Close() + + zf, err := zip.NewReader(f, fileInfo.Size()) + if err == nil { + for _, f := range zf.File { + files = append(files, f.Name) + } + } + } else if supportedBinExtension(extension) { if fileInfo.Size() < maxDisplayFileSizeBytes { bytes, err := ioutil.ReadFile(filePath) - if err != nil { - tpl = Templates["display/file.html"] - } else { + if err == nil { extra["extension"] = extension extra["lang_hl"], extra["lang_ace"] = extensionToHlAndAceLangs(extension) extra["contents"] = string(bytes) tpl = Templates["display/bin.html"] } - } else { - tpl = Templates["display/file.html"] } } else if extension == "md" { if fileInfo.Size() < maxDisplayFileSizeBytes { bytes, err := ioutil.ReadFile(filePath) - if err != nil { - tpl = Templates["display/file.html"] - } else { + if err == nil { unsafe := blackfriday.MarkdownCommon(bytes) html := bluemonday.UGCPolicy().SanitizeBytes(unsafe) extra["contents"] = string(html) tpl = Templates["display/md.html"] } - } else { - tpl = Templates["display/file.html"] } + } - } else { + // Catch other files + if tpl == nil { tpl = Templates["display/file.html"] } @@ -108,6 +175,7 @@ func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { "size": sizeHuman, "expiry": expiryHuman, "extra": extra, + "files": files, }, w) if err != nil { diff --git a/templates/display/file.html b/templates/display/file.html index d4f6187..ceabdab 100644 --- a/templates/display/file.html +++ b/templates/display/file.html @@ -3,5 +3,14 @@ {% block main %}

    You are requesting {{ filename }}, click here to download.

    + +{% if files|length > 0 %} +

    Contents of the archive:

    +
      + {% for file in files %} +
    • {{ file }}
    • + {% endfor %} +
    +{% endif %}
    {% endblock %} From 6e33fe6ac8d0f97839fbbb3851064b7a7ee773eb Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Wed, 7 Oct 2015 22:45:34 -0400 Subject: [PATCH 047/345] Metadata holds mimetype, sha256sum, archiveFiles --- delete.go | 5 +- display.go | 119 +++++++--------------------- expiry.go | 10 ++- fileserve.go | 21 +++-- meta.go | 218 +++++++++++++++++++++++++++++++++++++-------------- torrent.go | 6 +- upload.go | 43 +++++----- 7 files changed, 239 insertions(+), 183 deletions(-) diff --git a/delete.go b/delete.go index e70bf22..f727f60 100644 --- a/delete.go +++ b/delete.go @@ -23,14 +23,13 @@ func deleteHandler(c web.C, w http.ResponseWriter, r *http.Request) { } // Ensure delete key is correct - deleteKey, err := metadataGetDeleteKey(filename) - + metadata, err := metadataRead(filename) if err != nil { unauthorizedHandler(c, w, r) // 401 - no metadata available return } - if deleteKey == requestKey { + if metadata.DeleteKey == requestKey { fileDelErr := os.Remove(filePath) metaDelErr := os.Remove(metaPath) diff --git a/display.go b/display.go index 7a44795..b60f9bc 100644 --- a/display.go +++ b/display.go @@ -1,23 +1,16 @@ package main import ( - "archive/tar" - "archive/zip" - "compress/bzip2" - "compress/gzip" "encoding/json" - "io" "io/ioutil" "net/http" "os" "path" "path/filepath" - "sort" "strconv" "strings" "time" - "bitbucket.org/taruti/mimemagic" "github.com/dustin/go-humanize" "github.com/flosch/pongo2" "github.com/microcosm-cc/bluemonday" @@ -30,21 +23,24 @@ const maxDisplayFileSizeBytes = 1024 * 512 func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { fileName := c.URLParams["name"] filePath := path.Join(Config.filesDir, fileName) - fileInfo, err := os.Stat(filePath) - if !fileExistsAndNotExpired(fileName) { + err := checkFile(fileName) + if err == NotFoundErr { notFoundHandler(c, w, r) return } - expiry, _ := metadataGetExpiry(fileName) - var expiryHuman string - if expiry != neverExpire { - expiryHuman = humanize.RelTime(time.Now(), expiry, "", "") + metadata, err := metadataRead(fileName) + if err != nil { + oopsHandler(c, w, r, RespAUTO, "Corrupt metadata.") + return } - sizeHuman := humanize.Bytes(uint64(fileInfo.Size())) + var expiryHuman string + if metadata.Expiry != neverExpire { + expiryHuman = humanize.RelTime(time.Now(), metadata.Expiry, "", "") + } + sizeHuman := humanize.Bytes(uint64(metadata.Size)) extra := make(map[string]string) - files := []string{} file, _ := os.Open(filePath) defer file.Close() @@ -52,15 +48,15 @@ func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { header := make([]byte, 512) file.Read(header) - mimetype := mimemagic.Match("", header) extension := strings.TrimPrefix(filepath.Ext(fileName), ".") if strings.EqualFold("application/json", r.Header.Get("Accept")) { js, _ := json.Marshal(map[string]string{ - "filename": fileName, - "mimetype": mimetype, - "expiry": strconv.FormatInt(expiry.Unix(), 10), - "size": strconv.FormatInt(fileInfo.Size(), 10), + "filename": fileName, + "expiry": strconv.FormatInt(metadata.Expiry.Unix(), 10), + "size": strconv.FormatInt(metadata.Size, 10), + "mimetype": metadata.Mimetype, + "sha256sum": metadata.Sha256sum, }) w.Write(js) return @@ -68,81 +64,20 @@ func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { var tpl *pongo2.Template - if strings.HasPrefix(mimetype, "image/") { + if strings.HasPrefix(metadata.Mimetype, "image/") { tpl = Templates["display/image.html"] - } else if strings.HasPrefix(mimetype, "video/") { + + } else if strings.HasPrefix(metadata.Mimetype, "video/") { tpl = Templates["display/video.html"] - } else if strings.HasPrefix(mimetype, "audio/") { + + } else if strings.HasPrefix(metadata.Mimetype, "audio/") { tpl = Templates["display/audio.html"] - } else if mimetype == "application/pdf" { + + } else if metadata.Mimetype == "application/pdf" { tpl = Templates["display/pdf.html"] - } else if mimetype == "application/x-tar" { - f, _ := os.Open(filePath) - defer f.Close() - - tReadr := tar.NewReader(f) - for { - header, err := tReadr.Next() - if err == io.EOF || err != nil { - break - } - - if header.Typeflag == tar.TypeDir || header.Typeflag == tar.TypeReg { - files = append(files, header.Name) - } - } - sort.Strings(files) - - } else if mimetype == "application/x-gzip" { - f, _ := os.Open(filePath) - defer f.Close() - - gzf, err := gzip.NewReader(f) - if err == nil { - tReadr := tar.NewReader(gzf) - for { - header, err := tReadr.Next() - if err == io.EOF || err != nil { - break - } - - if header.Typeflag == tar.TypeDir || header.Typeflag == tar.TypeReg { - files = append(files, header.Name) - } - } - sort.Strings(files) - } - } else if mimetype == "application/x-bzip" { - f, _ := os.Open(filePath) - defer f.Close() - - bzf := bzip2.NewReader(f) - tReadr := tar.NewReader(bzf) - for { - header, err := tReadr.Next() - if err == io.EOF || err != nil { - break - } - - if header.Typeflag == tar.TypeDir || header.Typeflag == tar.TypeReg { - files = append(files, header.Name) - } - } - sort.Strings(files) - - } else if mimetype == "application/zip" { - f, _ := os.Open(filePath) - defer f.Close() - - zf, err := zip.NewReader(f, fileInfo.Size()) - if err == nil { - for _, f := range zf.File { - files = append(files, f.Name) - } - } } else if supportedBinExtension(extension) { - if fileInfo.Size() < maxDisplayFileSizeBytes { + if metadata.Size < maxDisplayFileSizeBytes { bytes, err := ioutil.ReadFile(filePath) if err == nil { extra["extension"] = extension @@ -152,7 +87,7 @@ func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { } } } else if extension == "md" { - if fileInfo.Size() < maxDisplayFileSizeBytes { + if metadata.Size < maxDisplayFileSizeBytes { bytes, err := ioutil.ReadFile(filePath) if err == nil { unsafe := blackfriday.MarkdownCommon(bytes) @@ -170,12 +105,12 @@ func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { } err = tpl.ExecuteWriter(pongo2.Context{ - "mime": mimetype, + "mime": metadata.Mimetype, "filename": fileName, "size": sizeHuman, "expiry": expiryHuman, "extra": extra, - "files": files, + "files": metadata.ArchiveFiles, }, w) if err != nil { diff --git a/expiry.go b/expiry.go index cea3c3b..9deaf72 100644 --- a/expiry.go +++ b/expiry.go @@ -13,7 +13,11 @@ func isTsExpired(ts time.Time) bool { } // Determine if the given filename is expired -func isFileExpired(filename string) bool { - exp, _ := metadataGetExpiry(filename) - return isTsExpired(exp) +func isFileExpired(filename string) (bool, error) { + metadata, err := metadataRead(filename) + if err != nil { + return false, err + } + + return isTsExpired(metadata.Expiry), nil } diff --git a/fileserve.go b/fileserve.go index e3fd5f0..3983232 100644 --- a/fileserve.go +++ b/fileserve.go @@ -13,9 +13,13 @@ func fileServeHandler(c web.C, w http.ResponseWriter, r *http.Request) { fileName := c.URLParams["name"] filePath := path.Join(Config.filesDir, fileName) - if !fileExistsAndNotExpired(fileName) { + err := checkFile(fileName) + if err == NotFoundErr { notFoundHandler(c, w, r) return + } else if err == BadMetadata { + oopsHandler(c, w, r, RespAUTO, "Corrupt metadata.") + return } if !Config.allowHotlink { @@ -55,19 +59,24 @@ func staticHandler(c web.C, w http.ResponseWriter, r *http.Request) { } } -func fileExistsAndNotExpired(filename string) bool { +func checkFile(filename string) error { filePath := path.Join(Config.filesDir, filename) _, err := os.Stat(filePath) if err != nil { - return false + return NotFoundErr } - if isFileExpired(filename) { + expired, err := isFileExpired(filename) + if err != nil { + return err + } + + if expired { os.Remove(path.Join(Config.filesDir, filename)) os.Remove(path.Join(Config.metaDir, filename)) - return false + return NotFoundErr } - return true + return nil } diff --git a/meta.go b/meta.go index b92171b..9df230f 100644 --- a/meta.go +++ b/meta.go @@ -1,84 +1,188 @@ package main import ( - "bufio" + "archive/tar" + "archive/zip" + "compress/bzip2" + "compress/gzip" + "crypto/sha256" + "encoding/hex" + "encoding/json" "errors" - "fmt" + "io" + "io/ioutil" "os" "path" - "strconv" + "sort" "time" + + "bitbucket.org/taruti/mimemagic" + "github.com/dchest/uniuri" ) -// Write metadata from Upload struct to file -func metadataWrite(filename string, upload *Upload) error { - // Write metadata, overwriting if necessary +type MetadataJSON struct { + DeleteKey string `json:"delete_key"` + Sha256sum string `json:"sha256sum"` + Mimetype string `json:"mimetype"` + Size int64 `json:"size"` + Expiry int64 `json:"expiry"` + ArchiveFiles []string `json:"archive_files,omitempty"` +} - file, err := os.Create(path.Join(Config.metaDir, upload.Filename)) +type Metadata struct { + DeleteKey string + Sha256sum string + Mimetype string + Size int64 + Expiry time.Time + ArchiveFiles []string +} + +var NotFoundErr = errors.New("File not found.") +var BadMetadata = errors.New("Corrupted metadata.") + +func generateMetadata(fName string, exp time.Time, delKey string) (m Metadata, err error) { + file, err := os.Open(path.Join(Config.filesDir, fName)) + fileInfo, err := os.Stat(path.Join(Config.filesDir, fName)) + if err != nil { + return + } + defer file.Close() + + m.Size = fileInfo.Size() + m.Expiry = exp + + if delKey == "" { + m.DeleteKey = uniuri.NewLen(30) + } else { + m.DeleteKey = delKey + } + + // Get first 512 bytes for mimetype detection + header := make([]byte, 512) + file.Read(header) + + m.Mimetype = mimemagic.Match("", header) + + // Compute the sha256sum + hasher := sha256.New() + file.Seek(0, 0) + _, err = io.Copy(hasher, file) + if err == nil { + m.Sha256sum = hex.EncodeToString(hasher.Sum(nil)) + } + file.Seek(0, 0) + + // If archive, grab list of filenames + if m.Mimetype == "application/x-tar" { + tReadr := tar.NewReader(file) + for { + hdr, err := tReadr.Next() + if err == io.EOF || err != nil { + break + } + if hdr.Typeflag == tar.TypeDir || hdr.Typeflag == tar.TypeReg { + m.ArchiveFiles = append(m.ArchiveFiles, hdr.Name) + } + } + sort.Strings(m.ArchiveFiles) + } else if m.Mimetype == "application/x-gzip" { + gzf, err := gzip.NewReader(file) + if err == nil { + tReadr := tar.NewReader(gzf) + for { + hdr, err := tReadr.Next() + if err == io.EOF || err != nil { + break + } + if hdr.Typeflag == tar.TypeDir || hdr.Typeflag == tar.TypeReg { + m.ArchiveFiles = append(m.ArchiveFiles, hdr.Name) + } + } + sort.Strings(m.ArchiveFiles) + } + } else if m.Mimetype == "application/x-bzip" { + bzf := bzip2.NewReader(file) + tReadr := tar.NewReader(bzf) + for { + hdr, err := tReadr.Next() + if err == io.EOF || err != nil { + break + } + if hdr.Typeflag == tar.TypeDir || hdr.Typeflag == tar.TypeReg { + m.ArchiveFiles = append(m.ArchiveFiles, hdr.Name) + } + } + sort.Strings(m.ArchiveFiles) + } else if m.Mimetype == "application/zip" { + zf, err := zip.NewReader(file, m.Size) + if err == nil { + for _, f := range zf.File { + m.ArchiveFiles = append(m.ArchiveFiles, f.Name) + } + } + sort.Strings(m.ArchiveFiles) + } + + return +} + +func metadataWrite(filename string, metadata *Metadata) error { + file, err := os.Create(path.Join(Config.metaDir, filename)) + if err != nil { + return err + } + defer file.Close() + + mjson := MetadataJSON{} + mjson.DeleteKey = metadata.DeleteKey + mjson.Mimetype = metadata.Mimetype + mjson.ArchiveFiles = metadata.ArchiveFiles + mjson.Sha256sum = metadata.Sha256sum + mjson.Expiry = metadata.Expiry.Unix() + mjson.Size = metadata.Size + + byt, err := json.Marshal(mjson) if err != nil { return err } - defer file.Close() + _, err = file.Write(byt) + if err != nil { + return err + } - w := bufio.NewWriter(file) - - fmt.Fprintln(w, upload.Expiry.Unix()) - fmt.Fprintln(w, upload.DeleteKey) - - return w.Flush() + return nil } -// Return list of strings from a filename's metadata source -func metadataRead(filename string) ([]string, error) { - file, err := os.Open(path.Join(Config.metaDir, filename)) - +func metadataRead(filename string) (metadata Metadata, err error) { + b, err := ioutil.ReadFile(path.Join(Config.metaDir, filename)) if err != nil { - return nil, err + // Metadata does not exist, generate one + newMData, err := generateMetadata(filename, neverExpire, "") + if err != nil { + return metadata, err + } + metadataWrite(filename, &newMData) + b, err = ioutil.ReadFile(path.Join(Config.metaDir, filename)) + if err != nil { + return metadata, BadMetadata + } } - defer file.Close() - - var lines []string - scanner := bufio.NewScanner(file) - for scanner.Scan() { - lines = append(lines, scanner.Text()) - } - - return lines, scanner.Err() -} - -func metadataGetExpiry(filename string) (expiry time.Time, err error) { - metadata, err := metadataRead(filename) - - // XXX in this case it's up to the caller to determine proper behavior - // for a nonexistant metadata file or broken file + mjson := MetadataJSON{} + err = json.Unmarshal(b, &mjson) if err != nil { - return + return metadata, BadMetadata } - if len(metadata) < 1 { - err = errors.New("ERR: Metadata file does not contain expiry") - return - } + metadata.DeleteKey = mjson.DeleteKey + metadata.Mimetype = mjson.Mimetype + metadata.ArchiveFiles = mjson.ArchiveFiles + metadata.Sha256sum = mjson.Sha256sum + metadata.Expiry = time.Unix(mjson.Expiry, 0) + metadata.Size = mjson.Size - expirySecs, err := strconv.ParseInt(metadata[0], 10, 64) - expiry = time.Unix(expirySecs, 0) return } - -func metadataGetDeleteKey(filename string) (string, error) { - metadata, err := metadataRead(filename) - - if len(metadata) < 2 { - err := errors.New("ERR: Metadata file does not contain deletion key") - return "", err - } - - if err != nil { - return "", err - } else { - return metadata[1], err - } -} diff --git a/torrent.go b/torrent.go index 3f7405c..e3c4952 100644 --- a/torrent.go +++ b/torrent.go @@ -80,9 +80,13 @@ func fileTorrentHandler(c web.C, w http.ResponseWriter, r *http.Request) { fileName := c.URLParams["name"] filePath := path.Join(Config.filesDir, fileName) - if !fileExistsAndNotExpired(fileName) { + err := checkFile(fileName) + if err == NotFoundErr { notFoundHandler(c, w, r) return + } else if err == BadMetadata { + oopsHandler(c, w, r, RespAUTO, "Corrupt metadata.") + return } encoded, err := createTorrent(fileName, filePath) diff --git a/upload.go b/upload.go index 6ea9247..ef3c9a1 100644 --- a/upload.go +++ b/upload.go @@ -40,10 +40,8 @@ type UploadRequest struct { // Metadata associated with a file as it would actually be stored type Upload struct { - Filename string // Final filename on disk - Size int64 - Expiry time.Time // Unix timestamp of expiry, 0=never - DeleteKey string // Deletion key, one generated if not provided + Filename string // Final filename on disk + Metadata Metadata } func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { @@ -246,34 +244,35 @@ func processUpload(upReq UploadRequest) (upload Upload, err error) { defer dst.Close() // Get the rest of the metadata needed for storage + var expiry time.Time if upReq.expiry == 0 { - upload.Expiry = neverExpire + expiry = neverExpire } else { - upload.Expiry = time.Now().Add(upReq.expiry) + expiry = time.Now().Add(upReq.expiry) } - // If no delete key specified, pick a random one. - if upReq.deletionKey == "" { - upload.DeleteKey = uniuri.NewLen(30) - } else { - upload.DeleteKey = upReq.deletionKey - } - - metadataWrite(upload.Filename, &upload) - bytes, err := io.Copy(dst, io.MultiReader(bytes.NewReader(header), upReq.src)) if bytes == 0 { os.Remove(path.Join(Config.filesDir, upload.Filename)) - os.Remove(path.Join(Config.metaDir, upload.Filename)) return upload, errors.New("Empty file") } else if err != nil { os.Remove(path.Join(Config.filesDir, upload.Filename)) - os.Remove(path.Join(Config.metaDir, upload.Filename)) return } - upload.Size = bytes + upload.Metadata, err = generateMetadata(upload.Filename, expiry, upReq.deletionKey) + if err != nil { + os.Remove(path.Join(Config.filesDir, upload.Filename)) + os.Remove(path.Join(Config.metaDir, upload.Filename)) + return + } + err = metadataWrite(upload.Filename, &upload.Metadata) + if err != nil { + os.Remove(path.Join(Config.filesDir, upload.Filename)) + os.Remove(path.Join(Config.metaDir, upload.Filename)) + return + } return } @@ -285,9 +284,11 @@ func generateJSONresponse(upload Upload) []byte { js, _ := json.Marshal(map[string]string{ "url": Config.siteURL + upload.Filename, "filename": upload.Filename, - "delete_key": upload.DeleteKey, - "expiry": strconv.FormatInt(upload.Expiry.Unix(), 10), - "size": strconv.FormatInt(upload.Size, 10), + "delete_key": upload.Metadata.DeleteKey, + "expiry": strconv.FormatInt(upload.Metadata.Expiry.Unix(), 10), + "size": strconv.FormatInt(upload.Metadata.Size, 10), + "mimetype": upload.Metadata.Mimetype, + "sha256sum": upload.Metadata.Sha256sum, }) return js From a60a7cc9e60eda44dcb04a570a7849e38a12f4dd Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Wed, 7 Oct 2015 23:35:48 -0400 Subject: [PATCH 048/345] Cache static files + Separate CSS more. Fixes #44 --- fileserve.go | 22 ++- static/css/hint.css | 282 +++++++++++++++++++++++++++ static/css/linx.css | 452 +------------------------------------------ templates/paste.html | 52 +++-- 4 files changed, 325 insertions(+), 483 deletions(-) create mode 100644 static/css/hint.css diff --git a/fileserve.go b/fileserve.go index 3983232..d41523d 100644 --- a/fileserve.go +++ b/fileserve.go @@ -1,6 +1,8 @@ package main import ( + "bytes" + "io" "net/http" "os" "path" @@ -35,6 +37,8 @@ func fileServeHandler(c web.C, w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, filePath) } +var staticCache = make(map[string][]byte) + func staticHandler(c web.C, w http.ResponseWriter, r *http.Request) { path := r.URL.Path if path[len(path)-1:] == "/" { @@ -46,15 +50,23 @@ func staticHandler(c web.C, w http.ResponseWriter, r *http.Request) { } filePath := strings.TrimPrefix(path, "/static/") - file, err := staticBox.Open(filePath) - if err != nil { - notFoundHandler(c, w, r) - return + + _, exists := staticCache[filePath] + if !exists { + file, err := staticBox.Open(filePath) + if err != nil { + notFoundHandler(c, w, r) + return + } + + buf := bytes.NewBuffer(nil) + io.Copy(buf, file) + staticCache[filePath] = buf.Bytes() } w.Header().Set("Etag", timeStartedStr) w.Header().Set("Cache-Control", "max-age=86400") - http.ServeContent(w, r, filePath, timeStarted, file) + http.ServeContent(w, r, filePath, timeStarted, bytes.NewReader(staticCache[filePath])) return } } diff --git a/static/css/hint.css b/static/css/hint.css new file mode 100644 index 0000000..9165763 --- /dev/null +++ b/static/css/hint.css @@ -0,0 +1,282 @@ +/*! Hint.css - v1.3.1 - 2013-11-23 +* http://kushagragour.in/lab/hint/ +* Copyright (c) 2013 Kushagra Gour; Licensed MIT */ + +/*-------------------------------------*\ + HINT.css - A CSS tooltip library +\*-------------------------------------*/ +/** + * HINT.css is a tooltip library made in pure CSS. + * + * Source: https://github.com/chinchang/hint.css + * Demo: http://kushagragour.in/lab/hint/ + * + * Release under The MIT License + * + */ +/** + * source: hint-core.scss + * + * Defines the basic styling for the tooltip. + * Each tooltip is made of 2 parts: + * 1) body (:after) + * 2) arrow (:before) + * + * Classes added: + * 1) hint + */ +.hint, [data-hint] { + position: relative; + display: inline-block; + /** + * tooltip arrow + */ + /** + * tooltip body + */ } + .hint:before, .hint:after, [data-hint]:before, [data-hint]:after { + position: absolute; + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + visibility: hidden; + opacity: 0; + z-index: 1000000; + pointer-events: none; + -webkit-transition: 0.3s ease; + -moz-transition: 0.3s ease; + transition: 0.3s ease; } + .hint:hover:before, .hint:hover:after, .hint:focus:before, .hint:focus:after, [data-hint]:hover:before, [data-hint]:hover:after, [data-hint]:focus:before, [data-hint]:focus:after { + visibility: visible; + opacity: 1; } + .hint:before, [data-hint]:before { + content: ''; + position: absolute; + background: transparent; + border: 6px solid transparent; + z-index: 1000001; } + .hint:after, [data-hint]:after { + content: attr(data-hint); + background: #556A7F; + color: white; + text-shadow: 0 -1px 0px black; + padding: 8px 10px; + font-size: 12px; + line-height: 12px; + white-space: nowrap; + box-shadow: 4px 4px 8px rgba(0, 0, 0, 0.3); } + +/** + * source: hint-position.scss + * + * Defines the positoning logic for the tooltips. + * + * Classes added: + * 1) hint--top + * 2) hint--bottom + * 3) hint--left + * 4) hint--right + */ +/** + * set default color for tooltip arrows + */ +.hint--top:before { + border-top-color: #556A7F; } + +.hint--bottom:before { + border-bottom-color: #556A7F; } + +.hint--left:before { + border-left-color: #556A7F; } + +.hint--right:before { + border-right-color: #556A7F; } + +/** + * top tooltip + */ +.hint--top:before { + margin-bottom: -12px; } +.hint--top:after { + margin-left: -18px; } +.hint--top:before, .hint--top:after { + bottom: 100%; + left: 50%; } +.hint--top:hover:after, .hint--top:hover:before, .hint--top:focus:after, .hint--top:focus:before { + -webkit-transform: translateY(-8px); + -moz-transform: translateY(-8px); + transform: translateY(-8px); } + +/** + * bottom tooltip + */ +.hint--bottom:before { + margin-top: -12px; } +.hint--bottom:after { + margin-left: -18px; } +.hint--bottom:before, .hint--bottom:after { + top: 100%; + left: 50%; } +.hint--bottom:hover:after, .hint--bottom:hover:before, .hint--bottom:focus:after, .hint--bottom:focus:before { + -webkit-transform: translateY(8px); + -moz-transform: translateY(8px); + transform: translateY(8px); } + +/** + * right tooltip + */ +.hint--right:before { + margin-left: -12px; + margin-bottom: -6px; } +.hint--right:after { + margin-bottom: -14px; } +.hint--right:before, .hint--right:after { + left: 100%; + bottom: 50%; } +.hint--right:hover:after, .hint--right:hover:before, .hint--right:focus:after, .hint--right:focus:before { + -webkit-transform: translateX(8px); + -moz-transform: translateX(8px); + transform: translateX(8px); } + +/** + * left tooltip + */ +.hint--left:before { + margin-right: -12px; + margin-bottom: -6px; } +.hint--left:after { + margin-bottom: -14px; } +.hint--left:before, .hint--left:after { + right: 100%; + bottom: 50%; } +.hint--left:hover:after, .hint--left:hover:before, .hint--left:focus:after, .hint--left:focus:before { + -webkit-transform: translateX(-8px); + -moz-transform: translateX(-8px); + transform: translateX(-8px); } + +/** + * source: hint-color-types.scss + * + * Contains tooltips of various types based on color differences. + * + * Classes added: + * 1) hint--error + * 2) hint--warning + * 3) hint--info + * 4) hint--success + * + */ +/** + * Error + */ +.hint--error:after { + background-color: #b34e4d; + text-shadow: 0 -1px 0px #592726; } +.hint--error.hint--top:before { + border-top-color: #b34e4d; } +.hint--error.hint--bottom:before { + border-bottom-color: #b34e4d; } +.hint--error.hint--left:before { + border-left-color: #b34e4d; } +.hint--error.hint--right:before { + border-right-color: #b34e4d; } + +/** + * Warning + */ +.hint--warning:after { + background-color: #c09854; + text-shadow: 0 -1px 0px #6c5328; } +.hint--warning.hint--top:before { + border-top-color: #c09854; } +.hint--warning.hint--bottom:before { + border-bottom-color: #c09854; } +.hint--warning.hint--left:before { + border-left-color: #c09854; } +.hint--warning.hint--right:before { + border-right-color: #c09854; } + +/** + * Info + */ +.hint--info:after { + background-color: #3986ac; + text-shadow: 0 -1px 0px #193b4d; } +.hint--info.hint--top:before { + border-top-color: #3986ac; } +.hint--info.hint--bottom:before { + border-bottom-color: #3986ac; } +.hint--info.hint--left:before { + border-left-color: #3986ac; } +.hint--info.hint--right:before { + border-right-color: #3986ac; } + +/** + * Success + */ +.hint--success:after { + background-color: #458746; + text-shadow: 0 -1px 0px #1a321a; } +.hint--success.hint--top:before { + border-top-color: #458746; } +.hint--success.hint--bottom:before { + border-bottom-color: #458746; } +.hint--success.hint--left:before { + border-left-color: #458746; } +.hint--success.hint--right:before { + border-right-color: #458746; } + +/** + * source: hint-always.scss + * + * Defines a persisted tooltip which shows always. + * + * Classes added: + * 1) hint--always + * + */ +.hint--always:after, .hint--always:before { + opacity: 1; + visibility: visible; } +.hint--always.hint--top:after, .hint--always.hint--top:before { + -webkit-transform: translateY(-8px); + -moz-transform: translateY(-8px); + transform: translateY(-8px); } +.hint--always.hint--bottom:after, .hint--always.hint--bottom:before { + -webkit-transform: translateY(8px); + -moz-transform: translateY(8px); + transform: translateY(8px); } +.hint--always.hint--left:after, .hint--always.hint--left:before { + -webkit-transform: translateX(-8px); + -moz-transform: translateX(-8px); + transform: translateX(-8px); } +.hint--always.hint--right:after, .hint--always.hint--right:before { + -webkit-transform: translateX(8px); + -moz-transform: translateX(8px); + transform: translateX(8px); } + +/** + * source: hint-rounded.scss + * + * Defines rounded corner tooltips. + * + * Classes added: + * 1) hint--rounded + * + */ +.hint--rounded:after { + border-radius: 4px; } + +/** + * source: hint-effects.scss + * + * Defines various transition effects for the tooltips. + * + * Classes added: + * 1) hint--bounce + * + */ +.hint--bounce:before, .hint--bounce:after { + -webkit-transition: opacity 0.3s ease, visibility 0.3s ease, -webkit-transform 0.3s cubic-bezier(0.71, 1.7, 0.77, 1.24); + -moz-transition: opacity 0.3s ease, visibility 0.3s ease, -moz-transform 0.3s cubic-bezier(0.71, 1.7, 0.77, 1.24); + transition: opacity 0.3s ease, visibility 0.3s ease, transform 0.3s cubic-bezier(0.71, 1.7, 0.77, 1.24); } diff --git a/static/css/linx.css b/static/css/linx.css index 5329b74..65a488c 100644 --- a/static/css/linx.css +++ b/static/css/linx.css @@ -117,7 +117,7 @@ body { #footer { color: gray; text-align: right; - margin-top: 30px; + margin-top: 10px; margin-bottom: 10px; font-size: 11px; @@ -319,452 +319,4 @@ body { height: 800px; font-size: 13px; } -/* }}} */ - -/* cat.js */ -.qq-uploader { position:relative; width: 100%;} - - -.qq-upload-button { - width: 400px; - padding-top: 60px; - height: 75px; - margin-left:auto; - margin-right:auto; - border: 2px dashed #C9C9C9; - color:#C9C9C9; - font: 14px "helvetica neue", helvetica, arial, sans-serif; - background-color: #FAFBFC; -} - -.qq-upload-button-hover { - background:#EFF4F8; -} -.qq-upload-button-focus {outline:1px dotted black;} - - -.qq-upload-button-depr { - background-color: #8C9CBF; - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #8C9CBF), color-stop(50%, #546A9E), color-stop(50%, #36518F), color-stop(100%, #3D5691)); - background-image: -webkit-linear-gradient(top, #8C9CBF 0%, #546A9E 50%, #36518F 50%, #3D5691 100%); - background-image: -moz-linear-gradient(top, #8C9CBF 0%, #546A9E 50%, #36518F 50%, #3D5691 100%); - background-image: -ms-linear-gradient(top, #8C9CBF 0%, #546A9E 50%, #36518F 50%, #3D5691 100%); - background-image: -o-linear-gradient(top, #8C9CBF 0%, #546A9E 50%, #36518F 50%, #3D5691 100%); - background-image: linear-gradient(top, #8C9CBF 0%, #546A9E 50%, #36518F 50%, #3D5691 100%); - border: 1px solid #172D6E; - border-bottom: 1px solid #0E1D45; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; - -webkit-box-shadow: inset 0 1px 0 0 #b1b9cb; - -moz-box-shadow: inset 0 1px 0 0 #b1b9cb; - box-shadow: inset 0 1px 0 0 #b1b9cb; - color: white; - font: bold 14px "helvetica neue", helvetica, arial, sans-serif; - padding: 7px 0 8px 0; - text-decoration: none; - text-align: center; - text-shadow: 0 -1px 1px #000F4D; - width: 140px; - -} - -.qq-upload-button2 { - display:block; /* or inline-block */ - margin-left:auto; - margin-right:auto; - width: 105px; padding: 7px 0; text-align:center; - background: hsl(212, 77%, 26%); border-bottom:1px solid #ddd;color:#fff; -} - -.qq-upload-drop-area { - - position:absolute; top:0; left:0; width:100%; height:100%; min-height: 50px; z-index:2; - background:#2c89f0; text-align:center; - border: 2px dashed #C9C9C9; - color:white; -} -.qq-upload-drop-area span { - display:block; position:absolute; top: 50%; width:100%; margin-top:-8px; font-size:16px; -} -.qq-upload-drop-area-active {background:#093E7C;} - - -#toggleme{ - display:none; -} - -.qq-upload-list { - margin: 15px 3px 10px 3px; - font-size: 12px; - -} - -.qq-upload-list li { - display: block; - background-color:#E8ECF0; - padding: 8px 5px 8px 5px; - margin: 5px 0 0 0; - border: 1px solid #C9C9C9; - - font-size:13px; - text-align: left; - list-style: none; - line-height: normal; -} - -.qq-upload-list li a:hover { -} - -.qq-upload-list li a { - -} - -.qq-upload-file, .qq-upload-spinner, .qq-upload-size, .qq-upload-cancel, .qq-upload-failed-text { - margin-right: 7px; -} - -.qq-upload-file {} -.qq-upload-spinner {display:inline-block; width:15px; height:15px; vertical-align:text-bottom;} -.qq-upload-size,.qq-upload-cancel {font-size:11px;} - -.qq-upload-failed-text {display:none;} -.qq-upload-fail .qq-upload-failed-text {display:inline;} - -/* -Uploadify v2.1.4 -Release Date: November 8, 2010 - -Copyright (c) 2010 Ronnie Garcia, Travis Nickels - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ -.uploadifyQueueItem { - background-color: #F5F5F5; - border: 2px solid #E5E5E5; - font: 11px Verdana, Geneva, sans-serif; - margin-top: 5px; - padding: 10px; - width: 350px; -} -.uploadifyError { - background-color: #FDE5DD !important; - border: 2px solid #FBCBBC !important; -} -.uploadifyQueueItem .cancel { - float: right; -} -.uploadifyQueue .completed { - background-color: #E5E5E5; -} -.uploadifyProgress { - background-color: #E5E5E5; - margin-top: 10px; - width: 100%; -} -.uploadifyProgressBar { - background-color: #0099FF; - height: 3px; - width: 1px; -} - - - -/*! Hint.css - v1.3.1 - 2013-11-23 -* http://kushagragour.in/lab/hint/ -* Copyright (c) 2013 Kushagra Gour; Licensed MIT */ - -/*-------------------------------------*\ - HINT.css - A CSS tooltip library -\*-------------------------------------*/ -/** - * HINT.css is a tooltip library made in pure CSS. - * - * Source: https://github.com/chinchang/hint.css - * Demo: http://kushagragour.in/lab/hint/ - * - * Release under The MIT License - * - */ -/** - * source: hint-core.scss - * - * Defines the basic styling for the tooltip. - * Each tooltip is made of 2 parts: - * 1) body (:after) - * 2) arrow (:before) - * - * Classes added: - * 1) hint - */ -.hint, [data-hint] { - position: relative; - display: inline-block; - /** - * tooltip arrow - */ - /** - * tooltip body - */ } - .hint:before, .hint:after, [data-hint]:before, [data-hint]:after { - position: absolute; - -webkit-transform: translate3d(0, 0, 0); - -moz-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); - visibility: hidden; - opacity: 0; - z-index: 1000000; - pointer-events: none; - -webkit-transition: 0.3s ease; - -moz-transition: 0.3s ease; - transition: 0.3s ease; } - .hint:hover:before, .hint:hover:after, .hint:focus:before, .hint:focus:after, [data-hint]:hover:before, [data-hint]:hover:after, [data-hint]:focus:before, [data-hint]:focus:after { - visibility: visible; - opacity: 1; } - .hint:before, [data-hint]:before { - content: ''; - position: absolute; - background: transparent; - border: 6px solid transparent; - z-index: 1000001; } - .hint:after, [data-hint]:after { - content: attr(data-hint); - background: #556A7F; - color: white; - text-shadow: 0 -1px 0px black; - padding: 8px 10px; - font-size: 12px; - line-height: 12px; - white-space: nowrap; - box-shadow: 4px 4px 8px rgba(0, 0, 0, 0.3); } - -/** - * source: hint-position.scss - * - * Defines the positoning logic for the tooltips. - * - * Classes added: - * 1) hint--top - * 2) hint--bottom - * 3) hint--left - * 4) hint--right - */ -/** - * set default color for tooltip arrows - */ -.hint--top:before { - border-top-color: #556A7F; } - -.hint--bottom:before { - border-bottom-color: #556A7F; } - -.hint--left:before { - border-left-color: #556A7F; } - -.hint--right:before { - border-right-color: #556A7F; } - -/** - * top tooltip - */ -.hint--top:before { - margin-bottom: -12px; } -.hint--top:after { - margin-left: -18px; } -.hint--top:before, .hint--top:after { - bottom: 100%; - left: 50%; } -.hint--top:hover:after, .hint--top:hover:before, .hint--top:focus:after, .hint--top:focus:before { - -webkit-transform: translateY(-8px); - -moz-transform: translateY(-8px); - transform: translateY(-8px); } - -/** - * bottom tooltip - */ -.hint--bottom:before { - margin-top: -12px; } -.hint--bottom:after { - margin-left: -18px; } -.hint--bottom:before, .hint--bottom:after { - top: 100%; - left: 50%; } -.hint--bottom:hover:after, .hint--bottom:hover:before, .hint--bottom:focus:after, .hint--bottom:focus:before { - -webkit-transform: translateY(8px); - -moz-transform: translateY(8px); - transform: translateY(8px); } - -/** - * right tooltip - */ -.hint--right:before { - margin-left: -12px; - margin-bottom: -6px; } -.hint--right:after { - margin-bottom: -14px; } -.hint--right:before, .hint--right:after { - left: 100%; - bottom: 50%; } -.hint--right:hover:after, .hint--right:hover:before, .hint--right:focus:after, .hint--right:focus:before { - -webkit-transform: translateX(8px); - -moz-transform: translateX(8px); - transform: translateX(8px); } - -/** - * left tooltip - */ -.hint--left:before { - margin-right: -12px; - margin-bottom: -6px; } -.hint--left:after { - margin-bottom: -14px; } -.hint--left:before, .hint--left:after { - right: 100%; - bottom: 50%; } -.hint--left:hover:after, .hint--left:hover:before, .hint--left:focus:after, .hint--left:focus:before { - -webkit-transform: translateX(-8px); - -moz-transform: translateX(-8px); - transform: translateX(-8px); } - -/** - * source: hint-color-types.scss - * - * Contains tooltips of various types based on color differences. - * - * Classes added: - * 1) hint--error - * 2) hint--warning - * 3) hint--info - * 4) hint--success - * - */ -/** - * Error - */ -.hint--error:after { - background-color: #b34e4d; - text-shadow: 0 -1px 0px #592726; } -.hint--error.hint--top:before { - border-top-color: #b34e4d; } -.hint--error.hint--bottom:before { - border-bottom-color: #b34e4d; } -.hint--error.hint--left:before { - border-left-color: #b34e4d; } -.hint--error.hint--right:before { - border-right-color: #b34e4d; } - -/** - * Warning - */ -.hint--warning:after { - background-color: #c09854; - text-shadow: 0 -1px 0px #6c5328; } -.hint--warning.hint--top:before { - border-top-color: #c09854; } -.hint--warning.hint--bottom:before { - border-bottom-color: #c09854; } -.hint--warning.hint--left:before { - border-left-color: #c09854; } -.hint--warning.hint--right:before { - border-right-color: #c09854; } - -/** - * Info - */ -.hint--info:after { - background-color: #3986ac; - text-shadow: 0 -1px 0px #193b4d; } -.hint--info.hint--top:before { - border-top-color: #3986ac; } -.hint--info.hint--bottom:before { - border-bottom-color: #3986ac; } -.hint--info.hint--left:before { - border-left-color: #3986ac; } -.hint--info.hint--right:before { - border-right-color: #3986ac; } - -/** - * Success - */ -.hint--success:after { - background-color: #458746; - text-shadow: 0 -1px 0px #1a321a; } -.hint--success.hint--top:before { - border-top-color: #458746; } -.hint--success.hint--bottom:before { - border-bottom-color: #458746; } -.hint--success.hint--left:before { - border-left-color: #458746; } -.hint--success.hint--right:before { - border-right-color: #458746; } - -/** - * source: hint-always.scss - * - * Defines a persisted tooltip which shows always. - * - * Classes added: - * 1) hint--always - * - */ -.hint--always:after, .hint--always:before { - opacity: 1; - visibility: visible; } -.hint--always.hint--top:after, .hint--always.hint--top:before { - -webkit-transform: translateY(-8px); - -moz-transform: translateY(-8px); - transform: translateY(-8px); } -.hint--always.hint--bottom:after, .hint--always.hint--bottom:before { - -webkit-transform: translateY(8px); - -moz-transform: translateY(8px); - transform: translateY(8px); } -.hint--always.hint--left:after, .hint--always.hint--left:before { - -webkit-transform: translateX(-8px); - -moz-transform: translateX(-8px); - transform: translateX(-8px); } -.hint--always.hint--right:after, .hint--always.hint--right:before { - -webkit-transform: translateX(8px); - -moz-transform: translateX(8px); - transform: translateX(8px); } - -/** - * source: hint-rounded.scss - * - * Defines rounded corner tooltips. - * - * Classes added: - * 1) hint--rounded - * - */ -.hint--rounded:after { - border-radius: 4px; } - -/** - * source: hint-effects.scss - * - * Defines various transition effects for the tooltips. - * - * Classes added: - * 1) hint--bounce - * - */ -.hint--bounce:before, .hint--bounce:after { - -webkit-transition: opacity 0.3s ease, visibility 0.3s ease, -webkit-transform 0.3s cubic-bezier(0.71, 1.7, 0.77, 1.24); - -moz-transition: opacity 0.3s ease, visibility 0.3s ease, -moz-transform 0.3s cubic-bezier(0.71, 1.7, 0.77, 1.24); - transition: opacity 0.3s ease, visibility 0.3s ease, transform 0.3s cubic-bezier(0.71, 1.7, 0.77, 1.24); } +/* }}} */ \ No newline at end of file diff --git a/templates/paste.html b/templates/paste.html index 6e7876e..b7adaf4 100644 --- a/templates/paste.html +++ b/templates/paste.html @@ -1,40 +1,36 @@ {% extends "base.html" %} +{% block head %} + +{% endblock %} + {% block content %}
    -
    -
    - . +
    +
    + . -
    - +
    + - + +
    - +
    + +
    - -
    - -
    - -
    - - - - - {% endblock %} From ed6ce1d1faa2b402c722e9bb16881f870c0dbca1 Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Wed, 7 Oct 2015 23:49:21 -0400 Subject: [PATCH 049/345] Small cosmetic changes --- static/css/dropzone.css | 4 ---- static/css/linx.css | 3 +-- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/static/css/dropzone.css b/static/css/dropzone.css index d410bb6..450084e 100644 --- a/static/css/dropzone.css +++ b/static/css/dropzone.css @@ -3,10 +3,6 @@ margin-right: auto; } -#choices { - padding-bottom: 20px; -} - div.dz-default { border: 2px dashed #C9C9C9; color: #C9C9C9; diff --git a/static/css/linx.css b/static/css/linx.css index 65a488c..39336a5 100644 --- a/static/css/linx.css +++ b/static/css/linx.css @@ -117,9 +117,8 @@ body { #footer { color: gray; text-align: right; - margin-top: 10px; + margin-top: 30px; margin-bottom: 10px; - font-size: 11px; } From 37d3e96e22956cd749f35ef50ce92e7fcf4f8130 Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Thu, 8 Oct 2015 00:19:22 -0400 Subject: [PATCH 050/345] Fix no-javascript fallback ugliness of index page. Fixes #37 --- static/css/dropzone.css | 33 +++++++++++++++++++++++++++++++++ static/js/upload.js | 2 ++ templates/index.html | 4 ++-- 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/static/css/dropzone.css b/static/css/dropzone.css index 450084e..a0985e6 100644 --- a/static/css/dropzone.css +++ b/static/css/dropzone.css @@ -1,3 +1,36 @@ +#dzone { + display: none; +} + +.fallback { + background-color: #FAFBFC; + padding-top: 40px; + padding-bottom: 20px; + text-align: center; + + -moz-box-shadow: 1px 1px 1px 1px #ccc; + -webkit-box-shadow: 1px 1px 1px 1px #ccc; + box-shadow: 1px 1px 1px 1px #ccc; +} + +#fileinput { + margin-top: 20px; +} + +#submitbtn { + margin-top: 30px; + background-color: #FFF; + border: 2px solid #556A7F; + width: 90px; + height: 30px; +} + +#submitbtn:hover { + background-color: #556A7F; + color: white; + border: 2px solid #FAFBFC; +} + #dropzone { width: 400px; margin-left: auto; margin-right: auto; diff --git a/static/js/upload.js b/static/js/upload.js index 60ef981..d78a641 100644 --- a/static/js/upload.js +++ b/static/js/upload.js @@ -2,6 +2,8 @@ Dropzone.options.dropzone = { init: function() { + var dzone = document.getElementById("dzone"); + dzone.style.display = "block"; }, addedfile: function(file) { var upload = document.createElement("div"); diff --git a/templates/index.html b/templates/index.html index 4528ae8..2c49272 100644 --- a/templates/index.html +++ b/templates/index.html @@ -8,8 +8,8 @@
    -
    - +
    +
    From 040ffa89f7dd38126cb6408f265f1491801df236 Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Thu, 8 Oct 2015 01:18:21 -0400 Subject: [PATCH 051/345] Adjust margin --- static/css/dropzone.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/static/css/dropzone.css b/static/css/dropzone.css index a0985e6..18472a6 100644 --- a/static/css/dropzone.css +++ b/static/css/dropzone.css @@ -36,6 +36,10 @@ margin-right: auto; } +#uploads { + margin-top: 20px; +} + div.dz-default { border: 2px dashed #C9C9C9; color: #C9C9C9; From 639d519712ca13a4581f517f64be4ed7c9f096dc Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Thu, 8 Oct 2015 01:38:50 -0400 Subject: [PATCH 052/345] Configurable maximum upload file size. Fixes #35 --- README.md | 1 + csp_test.go | 1 + pages.go | 4 +++- server.go | 3 +++ server_test.go | 1 + static/js/upload.js | 9 +++++++-- templates/index.html | 2 +- upload.go | 3 +++ 8 files changed, 20 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 14450c5..fa116fd 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ Command-line options - ```-siteurl "http://mylinx.example.org/"``` -- the site url (for generating links) - ```-filespath files/"``` -- Path to store uploads (default is files/) - ```-metapath meta/``` -- Path to store information about uploads (default is meta/) +- ```-maxsize 4294967296``` "maximum upload file size in bytes (default 4GB)" - ```-certfile path/to/your.crt``` -- Path to the ssl certificate (required if you want to use the https server) - ```-keyfile path/to/your.key``` -- Path to the ssl key (required if you want to use the https server) - ```-contentsecuritypolicy "..."``` -- Content-Security-Policy header for pages (default is "default-src 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; referrer none;") diff --git a/csp_test.go b/csp_test.go index 87f5dd9..e15ecc3 100644 --- a/csp_test.go +++ b/csp_test.go @@ -19,6 +19,7 @@ func TestContentSecurityPolicy(t *testing.T) { Config.siteURL = "http://linx.example.org/" Config.filesDir = path.Join(os.TempDir(), generateBarename()) Config.metaDir = Config.filesDir + "_meta" + Config.maxSize = 1024 * 1024 * 1024 Config.noLogs = true Config.siteName = "linx" Config.contentSecurityPolicy = "default-src 'none'; style-src 'self';" diff --git a/pages.go b/pages.go index ac1b7f1..de00351 100644 --- a/pages.go +++ b/pages.go @@ -20,7 +20,9 @@ const ( ) func indexHandler(c web.C, w http.ResponseWriter, r *http.Request) { - err := Templates["index.html"].ExecuteWriter(pongo2.Context{}, w) + err := Templates["index.html"].ExecuteWriter(pongo2.Context{ + "maxsize": Config.maxSize, + }, w) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } diff --git a/server.go b/server.go index 2e74d85..b707909 100644 --- a/server.go +++ b/server.go @@ -29,6 +29,7 @@ var Config struct { contentSecurityPolicy string fileContentSecurityPolicy string xFrameOptions string + maxSize int64 noLogs bool allowHotlink bool fastcgi bool @@ -129,6 +130,8 @@ func main() { "name of the site") flag.StringVar(&Config.siteURL, "siteurl", "http://"+Config.bind+"/", "site base url (including trailing slash)") + flag.Int64Var(&Config.maxSize, "maxsize", 4*1024*1024*1024, + "maximum upload file size in bytes (default 4GB)") flag.StringVar(&Config.certFile, "certfile", "", "path to ssl certificate (for https)") flag.StringVar(&Config.keyFile, "keyfile", "", diff --git a/server_test.go b/server_test.go index b2d41ae..9869206 100644 --- a/server_test.go +++ b/server_test.go @@ -33,6 +33,7 @@ func TestSetup(t *testing.T) { Config.siteURL = "http://linx.example.org/" Config.filesDir = path.Join(os.TempDir(), generateBarename()) Config.metaDir = Config.filesDir + "_meta" + Config.maxSize = 1024 * 1024 * 1024 Config.noLogs = true Config.siteName = "linx" setup() diff --git a/static/js/upload.js b/static/js/upload.js index d78a641..1a79be1 100644 --- a/static/js/upload.js +++ b/static/js/upload.js @@ -85,12 +85,17 @@ Dropzone.options.dropzone = { file.fileLabel.innerHTML = file.name + ": Canceled "; } else { - file.fileLabel.innerHTML = file.name + ": " + resp.error; + if (resp.error) { + file.fileLabel.innerHTML = file.name + ": " + resp.error; + } + else { + file.fileLabel.innerHTML = file.name + ": " + resp; + } } file.fileLabel.className = "error"; }, - maxFilesize: 4096, + maxFilesize: Math.round(parseInt(document.getElementById("dropzone").getAttribute("data-maxsize"), 10) / 1024 / 1024), previewsContainer: "#uploads", parallelUploads: 5, headers: {"Accept": "application/json"}, diff --git a/templates/index.html b/templates/index.html index 2c49272..9262cf3 100644 --- a/templates/index.html +++ b/templates/index.html @@ -6,7 +6,7 @@ {% block content %}
    - +

    diff --git a/upload.go b/upload.go index ef3c9a1..ec0fdb3 100644 --- a/upload.go +++ b/upload.go @@ -259,6 +259,9 @@ func processUpload(upReq UploadRequest) (upload Upload, err error) { } else if err != nil { os.Remove(path.Join(Config.filesDir, upload.Filename)) return + } else if bytes > Config.maxSize { + os.Remove(path.Join(Config.filesDir, upload.Filename)) + return upload, errors.New("File too large") } upload.Metadata, err = generateMetadata(upload.Filename, expiry, upReq.deletionKey) From 8ad079ed0a7458a2f5df6e58a3788ff54d7d7684 Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Thu, 8 Oct 2015 01:40:03 -0400 Subject: [PATCH 053/345] Fix readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fa116fd..295bfc3 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ Command-line options - ```-siteurl "http://mylinx.example.org/"``` -- the site url (for generating links) - ```-filespath files/"``` -- Path to store uploads (default is files/) - ```-metapath meta/``` -- Path to store information about uploads (default is meta/) -- ```-maxsize 4294967296``` "maximum upload file size in bytes (default 4GB)" +- ```-maxsize 4294967296``` maximum upload file size in bytes (default 4GB) - ```-certfile path/to/your.crt``` -- Path to the ssl certificate (required if you want to use the https server) - ```-keyfile path/to/your.key``` -- Path to the ssl key (required if you want to use the https server) - ```-contentsecuritypolicy "..."``` -- Content-Security-Policy header for pages (default is "default-src 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; referrer none;") From e9132a1193c56f9df84d1b61709abec00be0b56a Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Thu, 8 Oct 2015 12:49:29 -0400 Subject: [PATCH 054/345] File overwriting support. Fixes #8 --- server_test.go | 43 +++++++++++++++++++++++++++++++++++++++++++ upload.go | 10 ++++++++++ 2 files changed, 53 insertions(+) diff --git a/server_test.go b/server_test.go index 9869206..4bea964 100644 --- a/server_test.go +++ b/server_test.go @@ -645,6 +645,49 @@ func TestPutAndDelete(t *testing.T) { } } +func TestPutAndOverwrite(t *testing.T) { + var myjson RespOkJSON + + w := httptest.NewRecorder() + + req, err := http.NewRequest("PUT", "/upload", strings.NewReader("File content")) + if err != nil { + t.Fatal(err) + } + + req.Header.Set("Accept", "application/json") + + goji.DefaultMux.ServeHTTP(w, req) + + err = json.Unmarshal([]byte(w.Body.String()), &myjson) + if err != nil { + t.Fatal(err) + } + + // Overwrite it + w = httptest.NewRecorder() + req, err = http.NewRequest("PUT", "/upload/"+myjson.Filename, strings.NewReader("New file content")) + req.Header.Set("Linx-Delete-Key", myjson.Delete_Key) + goji.DefaultMux.ServeHTTP(w, req) + + if w.Code != 200 { + t.Fatal("Status code was not 200, but " + strconv.Itoa(w.Code)) + } + + // Make sure it's the new file + w = httptest.NewRecorder() + req, err = http.NewRequest("GET", "/selif/"+myjson.Filename, nil) + goji.DefaultMux.ServeHTTP(w, req) + + if w.Code == 404 { + t.Fatal("Status code was 404") + } + + if w.Body.String() != "New file content" { + t.Fatal("File did not contain 'New file content") + } +} + func TestPutAndSpecificDelete(t *testing.T) { var myjson RespOkJSON diff --git a/upload.go b/upload.go index ec0fdb3..5e7f43b 100644 --- a/upload.go +++ b/upload.go @@ -220,6 +220,16 @@ func processUpload(upReq UploadRequest) (upload Upload, err error) { _, err = os.Stat(path.Join(Config.filesDir, upload.Filename)) fileexists := err == nil + // Check if the delete key matches, in which case overwrite + if fileexists { + metad, merr := metadataRead(upload.Filename) + if merr == nil { + if upReq.deletionKey == metad.DeleteKey { + fileexists = false + } + } + } + for fileexists { counter, err := strconv.Atoi(string(barename[len(barename)-1])) if err != nil { From 62443e984d7f85a0cb049c61f6fb7b259a527248 Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Thu, 8 Oct 2015 21:48:06 -0400 Subject: [PATCH 055/345] API documentation. Fixes #30 --- pages.go | 7 ++++ server.go | 3 ++ templates.go | 1 + templates/API.html | 93 +++++++++++++++++++++++++++++++++++++++++++++ templates/base.html | 3 +- 5 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 templates/API.html diff --git a/pages.go b/pages.go index de00351..d3a2249 100644 --- a/pages.go +++ b/pages.go @@ -35,6 +35,13 @@ func pasteHandler(c web.C, w http.ResponseWriter, r *http.Request) { } } +func apiDocHandler(c web.C, w http.ResponseWriter, r *http.Request) { + err := Templates["api.html"].ExecuteWriter(pongo2.Context{}, w) + if err != nil { + oopsHandler(c, w, r, RespHTML, "") + } +} + func notFoundHandler(c web.C, w http.ResponseWriter, r *http.Request) { w.WriteHeader(404) err := Templates["404.html"].ExecuteWriter(pongo2.Context{}, w) diff --git a/server.go b/server.go index b707909..427186a 100644 --- a/server.go +++ b/server.go @@ -75,6 +75,7 @@ func setup() { } TemplateSet := pongo2.NewSet("templates", p2l) TemplateSet.Globals["sitename"] = Config.siteName + TemplateSet.Globals["siteurl"] = Config.siteURL err = populateTemplatesMap(TemplateSet, Templates) if err != nil { log.Fatal("Error: could not load templates", err) @@ -93,6 +94,8 @@ func setup() { goji.Get("/", indexHandler) goji.Get("/paste/", pasteHandler) goji.Get("/paste", http.RedirectHandler("/paste/", 301)) + goji.Get("/API/", apiDocHandler) + goji.Get("/API", http.RedirectHandler("/API/", 301)) if Config.remoteUploads { goji.Get("/upload", uploadRemote) diff --git a/templates.go b/templates.go index 78c7215..0473505 100644 --- a/templates.go +++ b/templates.go @@ -44,6 +44,7 @@ func populateTemplatesMap(tSet *pongo2.TemplateSet, tMap map[string]*pongo2.Temp templates := []string{ "index.html", "paste.html", + "api.html", "404.html", "401.html", "oops.html", diff --git a/templates/API.html b/templates/API.html new file mode 100644 index 0000000..c4225e1 --- /dev/null +++ b/templates/API.html @@ -0,0 +1,93 @@ +{% extends "base.html" %} + +{% block head %} + +{% endblock %} + +{% block content %} +
    +
    +
    + +

    API

    + +

    Uploading a file

    + +

    To upload a file, make a PUT request to {{ siteurl }}upload/ and you will get the url of your upload back.

    + +

    Optional headers with the request

    + +

    Randomize the filename
    + Linx-Randomize: yes

    + +

    Specify a custom deletion key
    + Linx-Delete-Key: mysecret

    + +

    Specify an expiration time (in seconds)
    + Linx-Expiry: 60

    + +

    Get a json response
    + Accept: application/json

    + +

    The json response will then contain:

    + +
    +

    “url”: the publicly available upload url
    + “filename”: the (optionally generated) filename
    + “delete_key”: the (optionally generated) deletion key,
    + “expiry”: the unix timestamp at which the file will expire (0 if never)
    + “size”: the size in bytes of the file
    + “mimetype”: the guessed mimetype of the file
    + “sha256sum”: the sha256sum of the file,

    +
    + +

    Examples

    + +

    Uploading myphoto.jpg

    + +
    $ curl -T myphoto.jpg {{ siteurl }}upload/  
    +{{ siteurl }}myphoto.jpg
    + +

    Uploading myphoto.jpg with an expiry of 20 minutes

    + +
    $ curl -H "Linx-Expiry: 1200" -T myphoto.jpg {{ siteurl }}upload/
    +{{ siteurl }}myphoto.jpg
    + +

    Uploading myphoto.jpg with a random filename and getting a json response:

    + +
    $ curl -H "Accept: application/json" -H "Linx-Randomize: yes" -T myphoto.jpg {{ siteurl }}/upload/  
    +{"delete_key":"...","expiry":"0","filename":"f34h4iu.jpg","mimetype":"image/jpeg",
    +"sha256sum":"...","size":"...","url":"{{ steurl }}/f34h4iu.jpg"}
    + +

    Deleting a file

    + +

    To delete a file you uploaded, make a DELETE request to {{ siteurl }}yourfile.ext with the delete key set as the Linx-Delete-Key header.

    + +

    Example

    + +

    To delete myphoto.jpg

    + +
    $ curl -H "Linx-Delete-Key: mysecret" -X DELETE {{ siteurl }}myphoto.jpg
    +DELETED
    + +

    Information about a file

    + +

    To retrieve information about a file, make a GET request the public url with Accept: application/json headers and you will receive a json response containing:

    + +
    +

    “url”: the publicly available upload url
    + “filename”: the (optionally generated) filename
    + “expiry”: the unix timestamp at which the file will expire (0 if never)
    + “size”: the size in bytes of the file
    + “mimetype”: the guessed mimetype of the file
    + “sha256sum”: the sha256sum of the file,

    +
    + +

    Example

    + +
    $ curl -H "Accept: application/json" {{ siteurl }}/myphoto.jpg
    +{"expiry":"0","filename":"myphoto.jpg","mimetype":"image/jpeg","sha256sum":"...","size":"..."}
    +
    +
    +
    +{% endblock %} diff --git a/templates/base.html b/templates/base.html index 8187c5a..e62f35f 100644 --- a/templates/base.html +++ b/templates/base.html @@ -14,7 +14,8 @@ From 5885ef0832e714892c45f3532193d3f751aa7ebe Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Thu, 8 Oct 2015 21:50:10 -0400 Subject: [PATCH 056/345] Case-insensitive filesystems... --- templates.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates.go b/templates.go index 0473505..6575881 100644 --- a/templates.go +++ b/templates.go @@ -44,7 +44,7 @@ func populateTemplatesMap(tSet *pongo2.TemplateSet, tMap map[string]*pongo2.Temp templates := []string{ "index.html", "paste.html", - "api.html", + "API.html", "404.html", "401.html", "oops.html", From 6ff181facba9d8213b12557c0947e0076d8c4727 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Thu, 8 Oct 2015 20:27:04 -0700 Subject: [PATCH 057/345] add strict referrer check for POST uploads This should protect against cross-site request forgery without the need for cookies. It continues to allow requests with Linx-Delete-Key, Linx-Expiry, or Linx-Randomize headers as these will not be set in the case of cross-site requests. --- csrf.go | 24 ++++++++++++++ pages.go | 5 +++ server_test.go | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++ upload.go | 5 +++ 4 files changed, 120 insertions(+) create mode 100644 csrf.go diff --git a/csrf.go b/csrf.go new file mode 100644 index 0000000..a743a04 --- /dev/null +++ b/csrf.go @@ -0,0 +1,24 @@ +package main + +import ( + "net/http" + "strings" +) + +func strictReferrerCheck(r *http.Request, prefix string, whitelistHeaders []string) bool { + for _, header := range whitelistHeaders { + if r.Header.Get(header) != "" { + return true + } + } + + if referrer := r.Header.Get("Referer"); !strings.HasPrefix(referrer, prefix) { + return false + } + + if origin := r.Header.Get("Origin"); origin != "" && !strings.HasPrefix(origin, prefix) { + return false + } + + return true +} diff --git a/pages.go b/pages.go index ac1b7f1..4032051 100644 --- a/pages.go +++ b/pages.go @@ -75,6 +75,11 @@ func oopsHandler(c web.C, w http.ResponseWriter, r *http.Request, rt RespType, m } } +func badRequestHandler(c web.C, w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusBadRequest) + http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest) +} + func unauthorizedHandler(c web.C, w http.ResponseWriter, r *http.Request) { w.WriteHeader(401) err := Templates["401.html"].ExecuteWriter(pongo2.Context{}, w) diff --git a/server_test.go b/server_test.go index b2d41ae..aeae386 100644 --- a/server_test.go +++ b/server_test.go @@ -119,6 +119,7 @@ func TestPostCodeUpload(t *testing.T) { } req.PostForm = form req.Header.Set("Content-Type", "application/x-www-form-urlencoded") + req.Header.Set("Referer", Config.siteURL) goji.DefaultMux.ServeHTTP(w, req) @@ -131,6 +132,84 @@ func TestPostCodeUpload(t *testing.T) { } } +func TestPostCodeUploadWhitelistedHeader(t *testing.T) { + w := httptest.NewRecorder() + + filename := generateBarename() + extension := "txt" + + form := url.Values{} + form.Add("content", "File content") + form.Add("filename", filename) + form.Add("extension", extension) + + req, err := http.NewRequest("POST", "/upload/", nil) + if err != nil { + t.Fatal(err) + } + req.PostForm = form + req.Header.Set("Content-Type", "application/x-www-form-urlencoded") + req.Header.Set("Linx-Expiry", "0") + + goji.DefaultMux.ServeHTTP(w, req) + + if w.Code != 301 { + t.Fatalf("Status code is not 301, but %d", w.Code) + } +} + +func TestPostCodeUploadNoReferrer(t *testing.T) { + w := httptest.NewRecorder() + + filename := generateBarename() + extension := "txt" + + form := url.Values{} + form.Add("content", "File content") + form.Add("filename", filename) + form.Add("extension", extension) + + req, err := http.NewRequest("POST", "/upload/", nil) + if err != nil { + t.Fatal(err) + } + req.PostForm = form + req.Header.Set("Content-Type", "application/x-www-form-urlencoded") + + goji.DefaultMux.ServeHTTP(w, req) + + if w.Code != 400 { + t.Fatalf("Status code is not 400, but %d", w.Code) + } +} + +func TestPostCodeUploadBadOrigin(t *testing.T) { + w := httptest.NewRecorder() + + filename := generateBarename() + extension := "txt" + + form := url.Values{} + form.Add("content", "File content") + form.Add("filename", filename) + form.Add("extension", extension) + + req, err := http.NewRequest("POST", "/upload/", nil) + if err != nil { + t.Fatal(err) + } + req.PostForm = form + req.Header.Set("Content-Type", "application/x-www-form-urlencoded") + req.Header.Set("Referer", Config.siteURL) + req.Header.Set("Origin", "http://example.com/") + + goji.DefaultMux.ServeHTTP(w, req) + + if w.Code != 400 { + t.Fatalf("Status code is not 400, but %d", w.Code) + } +} + func TestPostCodeExpiryJSONUpload(t *testing.T) { w := httptest.NewRecorder() @@ -146,6 +225,7 @@ func TestPostCodeExpiryJSONUpload(t *testing.T) { req.PostForm = form req.Header.Set("Content-Type", "application/x-www-form-urlencoded") req.Header.Set("Accept", "application/json") + req.Header.Set("Referer", Config.siteURL) goji.DefaultMux.ServeHTTP(w, req) @@ -192,6 +272,7 @@ func TestPostUpload(t *testing.T) { req, err := http.NewRequest("POST", "/upload/", &b) req.Header.Set("Content-Type", mw.FormDataContentType()) + req.Header.Set("Referer", Config.siteURL) if err != nil { t.Fatal(err) } @@ -225,6 +306,7 @@ func TestPostJSONUpload(t *testing.T) { req, err := http.NewRequest("POST", "/upload/", &b) req.Header.Set("Content-Type", mw.FormDataContentType()) req.Header.Set("Accept", "application/json") + req.Header.Set("Referer", Config.siteURL) if err != nil { t.Fatal(err) } @@ -279,6 +361,7 @@ func TestPostExpiresJSONUpload(t *testing.T) { req, err := http.NewRequest("POST", "/upload/", &b) req.Header.Set("Content-Type", mw.FormDataContentType()) req.Header.Set("Accept", "application/json") + req.Header.Set("Referer", Config.siteURL) if err != nil { t.Fatal(err) } @@ -339,6 +422,7 @@ func TestPostRandomizeJSONUpload(t *testing.T) { req, err := http.NewRequest("POST", "/upload/", &b) req.Header.Set("Content-Type", mw.FormDataContentType()) req.Header.Set("Accept", "application/json") + req.Header.Set("Referer", Config.siteURL) if err != nil { t.Fatal(err) } @@ -382,6 +466,7 @@ func TestPostEmptyUpload(t *testing.T) { req, err := http.NewRequest("POST", "/upload/", &b) req.Header.Set("Content-Type", mw.FormDataContentType()) + req.Header.Set("Referer", Config.siteURL) if err != nil { t.Fatal(err) } @@ -416,6 +501,7 @@ func TestPostEmptyJSONUpload(t *testing.T) { req, err := http.NewRequest("POST", "/upload/", &b) req.Header.Set("Content-Type", mw.FormDataContentType()) req.Header.Set("Accept", "application/json") + req.Header.Set("Referer", Config.siteURL) if err != nil { t.Fatal(err) } diff --git a/upload.go b/upload.go index ef3c9a1..f5ccb01 100644 --- a/upload.go +++ b/upload.go @@ -45,6 +45,11 @@ type Upload struct { } func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { + if !strictReferrerCheck(r, Config.siteURL, []string{"Linx-Delete-Key", "Linx-Expiry", "Linx-Randomize"}) { + badRequestHandler(c, w, r) + return + } + upReq := UploadRequest{} uploadHeaderProcess(r, &upReq) From eeede281a78b657487eacd5f4ed452cd8d51d4e6 Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Thu, 8 Oct 2015 23:58:57 -0400 Subject: [PATCH 058/345] Case insensitive fs again --- pages.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages.go b/pages.go index d16bd9c..7481bc4 100644 --- a/pages.go +++ b/pages.go @@ -36,7 +36,7 @@ func pasteHandler(c web.C, w http.ResponseWriter, r *http.Request) { } func apiDocHandler(c web.C, w http.ResponseWriter, r *http.Request) { - err := Templates["api.html"].ExecuteWriter(pongo2.Context{}, w) + err := Templates["API.html"].ExecuteWriter(pongo2.Context{}, w) if err != nil { oopsHandler(c, w, r, RespHTML, "") } From 874c23087db28fe7c84ae752615065e7b8118ec8 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Fri, 9 Oct 2015 00:06:23 -0700 Subject: [PATCH 059/345] add crossdomain.xml to file blacklist --- upload.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/upload.go b/upload.go index 50694c3..aaf5f0b 100644 --- a/upload.go +++ b/upload.go @@ -22,11 +22,12 @@ import ( ) var fileBlacklist = map[string]bool{ - "favicon.ico": true, - "index.htm": true, - "index.html": true, - "index.php": true, - "robots.txt": true, + "favicon.ico": true, + "index.htm": true, + "index.html": true, + "index.php": true, + "robots.txt": true, + "crossdomain.xml": true, } // Describes metadata directly from the user request From e0d0e403682e9ab95df13bd8a7d75213c831df10 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Fri, 9 Oct 2015 22:20:17 -0700 Subject: [PATCH 060/345] add tab functionality to pastebin (resolves #48) The tab key now inserts a tab instead of changing the focus. --- static/js/bin.js | 5 ++--- static/js/paste.js | 3 +++ static/js/util.js | 18 ++++++++++++++++++ templates/display/bin.html | 1 + templates/paste.html | 3 +++ 5 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 static/js/paste.js create mode 100644 static/js/util.js diff --git a/static/js/bin.js b/static/js/bin.js index 9e8d1a8..6e1bbcc 100644 --- a/static/js/bin.js +++ b/static/js/bin.js @@ -5,7 +5,6 @@ var navlist = document.getElementById("info").getElementsByClassName("right")[0] init(); function init() { - var editA = document.createElement('a'); editA.setAttribute("href", "#"); @@ -23,8 +22,8 @@ function init() { document.getElementById('wordwrap').addEventListener('click', wrap); } - function edit(ev) { + ev.preventDefault(); navlist.remove(); document.getElementById("filename").remove(); @@ -35,9 +34,9 @@ function edit(ev) { var editordiv = document.getElementById("editor"); editordiv.style.display = "block"; + editordiv.addEventListener('keydown', handleTab); } - function paste(ev) { var editordiv = document.getElementById("editor"); document.getElementById("newcontent").value = editordiv.value; diff --git a/static/js/paste.js b/static/js/paste.js new file mode 100644 index 0000000..bd9448a --- /dev/null +++ b/static/js/paste.js @@ -0,0 +1,3 @@ +// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later +document.getElementById('content').addEventListener('keydown', handleTab); +// @license-end diff --git a/static/js/util.js b/static/js/util.js new file mode 100644 index 0000000..cef4eca --- /dev/null +++ b/static/js/util.js @@ -0,0 +1,18 @@ +// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later + +function handleTab(ev) { + // change tab key behavior to insert tab instead of change focus + if(ev.keyCode == 9) { + ev.preventDefault(); + + var val = this.value; + var start = this.selectionStart; + var end = this.selectionEnd; + + this.value = val.substring(0, start) + '\t' + val.substring(end); + this.selectionStart = start + 1; + this.selectionEnd = end + 1; + } +} + +// @license-end diff --git a/templates/display/bin.html b/templates/display/bin.html index 49826d1..9c6382e 100644 --- a/templates/display/bin.html +++ b/templates/display/bin.html @@ -52,5 +52,6 @@ {% endif %} + {% endblock %} diff --git a/templates/paste.html b/templates/paste.html index b7adaf4..1b31aac 100644 --- a/templates/paste.html +++ b/templates/paste.html @@ -33,4 +33,7 @@
    + + + {% endblock %} From a09297389b9a17bc60c9b3f8c6de65c292cd40a8 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Fri, 9 Oct 2015 23:04:08 -0700 Subject: [PATCH 061/345] create our own mux instead of using goji default This is a better way to do things since we were customizing middleware and everything anyway. It's also necessary in order to avoid pulling in the default Goji -bind flag: https://github.com/zenazn/goji/issues/47 --- server.go | 71 +++++++++++++++++++++----------------- server_test.go | 94 +++++++++++++++++++++++++++++++------------------- 2 files changed, 98 insertions(+), 67 deletions(-) diff --git a/server.go b/server.go index 427186a..38f5cda 100644 --- a/server.go +++ b/server.go @@ -13,8 +13,8 @@ import ( "github.com/GeertJohan/go.rice" "github.com/flosch/pongo2" - "github.com/zenazn/goji" "github.com/zenazn/goji/graceful" + "github.com/zenazn/goji/web" "github.com/zenazn/goji/web/middleware" ) @@ -42,16 +42,23 @@ var staticBox *rice.Box var timeStarted time.Time var timeStartedStr string -func setup() { - goji.Use(ContentSecurityPolicy(CSPOptions{ +func setup() *web.Mux { + mux := web.New() + + // middleware + mux.Use(middleware.RequestID) + + if !Config.noLogs { + mux.Use(middleware.Logger) + } + + mux.Use(middleware.Recoverer) + mux.Use(middleware.AutomaticOptions) + mux.Use(ContentSecurityPolicy(CSPOptions{ policy: Config.contentSecurityPolicy, frame: Config.xFrameOptions, })) - if Config.noLogs { - goji.Abandon(middleware.Logger) - } - // make directories if needed err := os.MkdirAll(Config.filesDir, 0755) if err != nil { @@ -91,31 +98,33 @@ func setup() { selifIndexRe := regexp.MustCompile(`^/selif/$`) torrentRe := regexp.MustCompile(`^/(?P[a-z0-9-\.]+)/torrent$`) - goji.Get("/", indexHandler) - goji.Get("/paste/", pasteHandler) - goji.Get("/paste", http.RedirectHandler("/paste/", 301)) - goji.Get("/API/", apiDocHandler) - goji.Get("/API", http.RedirectHandler("/API/", 301)) + mux.Get("/", indexHandler) + mux.Get("/paste/", pasteHandler) + mux.Get("/paste", http.RedirectHandler("/paste/", 301)) + mux.Get("/API/", apiDocHandler) + mux.Get("/API", http.RedirectHandler("/API/", 301)) if Config.remoteUploads { - goji.Get("/upload", uploadRemote) - goji.Get("/upload/", uploadRemote) + mux.Get("/upload", uploadRemote) + mux.Get("/upload/", uploadRemote) } - goji.Post("/upload", uploadPostHandler) - goji.Post("/upload/", uploadPostHandler) - goji.Put("/upload", uploadPutHandler) - goji.Put("/upload/:name", uploadPutHandler) - goji.Delete("/:name", deleteHandler) + mux.Post("/upload", uploadPostHandler) + mux.Post("/upload/", uploadPostHandler) + mux.Put("/upload", uploadPutHandler) + mux.Put("/upload/:name", uploadPutHandler) + mux.Delete("/:name", deleteHandler) - goji.Get("/static/*", staticHandler) - goji.Get("/favicon.ico", staticHandler) - goji.Get("/robots.txt", staticHandler) - goji.Get(nameRe, fileDisplayHandler) - goji.Get(selifRe, fileServeHandler) - goji.Get(selifIndexRe, unauthorizedHandler) - goji.Get(torrentRe, fileTorrentHandler) - goji.NotFound(notFoundHandler) + mux.Get("/static/*", staticHandler) + mux.Get("/favicon.ico", staticHandler) + mux.Get("/robots.txt", staticHandler) + mux.Get(nameRe, fileDisplayHandler) + mux.Get(selifRe, fileServeHandler) + mux.Get(selifIndexRe, unauthorizedHandler) + mux.Get(torrentRe, fileTorrentHandler) + mux.NotFound(notFoundHandler) + + return mux } func main() { @@ -153,7 +162,7 @@ func main() { "value of X-Frame-Options header") flag.Parse() - setup() + mux := setup() if Config.fastcgi { listener, err := net.Listen("tcp", Config.bind) @@ -162,16 +171,16 @@ func main() { } log.Printf("Serving over fastcgi, bound on %s, using siteurl %s", Config.bind, Config.siteURL) - fcgi.Serve(listener, goji.DefaultMux) + fcgi.Serve(listener, mux) } else if Config.certFile != "" { log.Printf("Serving over https, bound on %s, using siteurl %s", Config.bind, Config.siteURL) - err := graceful.ListenAndServeTLS(Config.bind, Config.certFile, Config.keyFile, goji.DefaultMux) + err := graceful.ListenAndServeTLS(Config.bind, Config.certFile, Config.keyFile, mux) if err != nil { log.Fatal(err) } } else { log.Printf("Serving over http, bound on %s, using siteurl %s", Config.bind, Config.siteURL) - err := graceful.ListenAndServe(Config.bind, goji.DefaultMux) + err := graceful.ListenAndServe(Config.bind, mux) if err != nil { log.Fatal(err) } diff --git a/server_test.go b/server_test.go index ced20b3..25da638 100644 --- a/server_test.go +++ b/server_test.go @@ -13,8 +13,6 @@ import ( "strings" "testing" "time" - - "github.com/zenazn/goji" ) type RespOkJSON struct { @@ -36,10 +34,10 @@ func TestSetup(t *testing.T) { Config.maxSize = 1024 * 1024 * 1024 Config.noLogs = true Config.siteName = "linx" - setup() } func TestIndex(t *testing.T) { + mux := setup() w := httptest.NewRecorder() req, err := http.NewRequest("GET", "/", nil) @@ -47,7 +45,7 @@ func TestIndex(t *testing.T) { t.Fatal(err) } - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) if !strings.Contains(w.Body.String(), "Click or Drop file") { t.Fatal("String 'Click or Drop file' not found in index response") @@ -55,6 +53,7 @@ func TestIndex(t *testing.T) { } func TestNotFound(t *testing.T) { + mux := setup() w := httptest.NewRecorder() req, err := http.NewRequest("GET", "/url/should/not/exist", nil) @@ -62,7 +61,7 @@ func TestNotFound(t *testing.T) { t.Fatal(err) } - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) if w.Code != 404 { t.Fatalf("Expected 404, got %d", w.Code) @@ -70,6 +69,7 @@ func TestNotFound(t *testing.T) { } func TestFileNotFound(t *testing.T) { + mux := setup() w := httptest.NewRecorder() filename := generateBarename() @@ -79,7 +79,7 @@ func TestFileNotFound(t *testing.T) { t.Fatal(err) } - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) if w.Code != 404 { t.Fatalf("Expected 404, got %d", w.Code) @@ -87,6 +87,7 @@ func TestFileNotFound(t *testing.T) { } func TestDisplayNotFound(t *testing.T) { + mux := setup() w := httptest.NewRecorder() filename := generateBarename() @@ -96,7 +97,7 @@ func TestDisplayNotFound(t *testing.T) { t.Fatal(err) } - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) if w.Code != 404 { t.Fatalf("Expected 404, got %d", w.Code) @@ -104,6 +105,7 @@ func TestDisplayNotFound(t *testing.T) { } func TestPostCodeUpload(t *testing.T) { + mux := setup() w := httptest.NewRecorder() filename := generateBarename() @@ -122,7 +124,7 @@ func TestPostCodeUpload(t *testing.T) { req.Header.Set("Content-Type", "application/x-www-form-urlencoded") req.Header.Set("Referer", Config.siteURL) - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) if w.Code != 301 { t.Fatalf("Status code is not 301, but %d", w.Code) @@ -134,6 +136,7 @@ func TestPostCodeUpload(t *testing.T) { } func TestPostCodeUploadWhitelistedHeader(t *testing.T) { + mux := setup() w := httptest.NewRecorder() filename := generateBarename() @@ -152,7 +155,7 @@ func TestPostCodeUploadWhitelistedHeader(t *testing.T) { req.Header.Set("Content-Type", "application/x-www-form-urlencoded") req.Header.Set("Linx-Expiry", "0") - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) if w.Code != 301 { t.Fatalf("Status code is not 301, but %d", w.Code) @@ -160,6 +163,7 @@ func TestPostCodeUploadWhitelistedHeader(t *testing.T) { } func TestPostCodeUploadNoReferrer(t *testing.T) { + mux := setup() w := httptest.NewRecorder() filename := generateBarename() @@ -177,7 +181,7 @@ func TestPostCodeUploadNoReferrer(t *testing.T) { req.PostForm = form req.Header.Set("Content-Type", "application/x-www-form-urlencoded") - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) if w.Code != 400 { t.Fatalf("Status code is not 400, but %d", w.Code) @@ -185,6 +189,7 @@ func TestPostCodeUploadNoReferrer(t *testing.T) { } func TestPostCodeUploadBadOrigin(t *testing.T) { + mux := setup() w := httptest.NewRecorder() filename := generateBarename() @@ -204,7 +209,7 @@ func TestPostCodeUploadBadOrigin(t *testing.T) { req.Header.Set("Referer", Config.siteURL) req.Header.Set("Origin", "http://example.com/") - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) if w.Code != 400 { t.Fatalf("Status code is not 400, but %d", w.Code) @@ -212,6 +217,7 @@ func TestPostCodeUploadBadOrigin(t *testing.T) { } func TestPostCodeExpiryJSONUpload(t *testing.T) { + mux := setup() w := httptest.NewRecorder() form := url.Values{} @@ -228,7 +234,7 @@ func TestPostCodeExpiryJSONUpload(t *testing.T) { req.Header.Set("Accept", "application/json") req.Header.Set("Referer", Config.siteURL) - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) if w.Code != 200 { t.Log(w.Body.String()) @@ -257,6 +263,7 @@ func TestPostCodeExpiryJSONUpload(t *testing.T) { } func TestPostUpload(t *testing.T) { + mux := setup() w := httptest.NewRecorder() filename := generateBarename() + ".txt" @@ -278,7 +285,7 @@ func TestPostUpload(t *testing.T) { t.Fatal(err) } - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) if w.Code != 301 { t.Fatalf("Status code is not 301, but %d", w.Code) @@ -290,6 +297,7 @@ func TestPostUpload(t *testing.T) { } func TestPostJSONUpload(t *testing.T) { + mux := setup() w := httptest.NewRecorder() filename := generateBarename() + ".txt" @@ -312,7 +320,7 @@ func TestPostJSONUpload(t *testing.T) { t.Fatal(err) } - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) if w.Code != 200 { t.Log(w.Body.String()) @@ -339,6 +347,7 @@ func TestPostJSONUpload(t *testing.T) { } func TestPostExpiresJSONUpload(t *testing.T) { + mux := setup() w := httptest.NewRecorder() filename := generateBarename() + ".txt" @@ -367,7 +376,7 @@ func TestPostExpiresJSONUpload(t *testing.T) { t.Fatal(err) } - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) if w.Code != 200 { t.Log(w.Body.String()) @@ -400,6 +409,7 @@ func TestPostExpiresJSONUpload(t *testing.T) { } func TestPostRandomizeJSONUpload(t *testing.T) { + mux := setup() w := httptest.NewRecorder() filename := generateBarename() + ".txt" @@ -428,7 +438,7 @@ func TestPostRandomizeJSONUpload(t *testing.T) { t.Fatal(err) } - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) if w.Code != 200 { t.Log(w.Body.String()) @@ -451,6 +461,7 @@ func TestPostRandomizeJSONUpload(t *testing.T) { } func TestPostEmptyUpload(t *testing.T) { + mux := setup() w := httptest.NewRecorder() filename := generateBarename() + ".txt" @@ -472,7 +483,7 @@ func TestPostEmptyUpload(t *testing.T) { t.Fatal(err) } - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) if w.Code != 500 { t.Log(w.Body.String()) @@ -485,6 +496,7 @@ func TestPostEmptyUpload(t *testing.T) { } func TestPostEmptyJSONUpload(t *testing.T) { + mux := setup() w := httptest.NewRecorder() filename := generateBarename() + ".txt" @@ -507,7 +519,7 @@ func TestPostEmptyJSONUpload(t *testing.T) { t.Fatal(err) } - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) if w.Code != 500 { t.Log(w.Body.String()) @@ -526,6 +538,7 @@ func TestPostEmptyJSONUpload(t *testing.T) { } func TestPutUpload(t *testing.T) { + mux := setup() w := httptest.NewRecorder() filename := generateBarename() + ".ext" @@ -535,7 +548,7 @@ func TestPutUpload(t *testing.T) { t.Fatal(err) } - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) if w.Body.String() != Config.siteURL+filename { t.Fatal("Response was not expected URL") @@ -543,6 +556,7 @@ func TestPutUpload(t *testing.T) { } func TestPutRandomizedUpload(t *testing.T) { + mux := setup() w := httptest.NewRecorder() filename := generateBarename() + ".ext" @@ -554,7 +568,7 @@ func TestPutRandomizedUpload(t *testing.T) { req.Header.Set("Linx-Randomize", "yes") - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) if w.Body.String() == Config.siteURL+filename { t.Fatal("Filename was not random") @@ -562,6 +576,7 @@ func TestPutRandomizedUpload(t *testing.T) { } func TestPutNoExtensionUpload(t *testing.T) { + mux := setup() w := httptest.NewRecorder() filename := generateBarename() @@ -573,7 +588,7 @@ func TestPutNoExtensionUpload(t *testing.T) { req.Header.Set("Linx-Randomize", "yes") - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) if w.Body.String() == Config.siteURL+filename { t.Fatal("Filename was not random") @@ -581,6 +596,7 @@ func TestPutNoExtensionUpload(t *testing.T) { } func TestPutEmptyUpload(t *testing.T) { + mux := setup() w := httptest.NewRecorder() filename := generateBarename() + ".ext" @@ -592,7 +608,7 @@ func TestPutEmptyUpload(t *testing.T) { req.Header.Set("Linx-Randomize", "yes") - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) if !strings.Contains(w.Body.String(), "Empty file") { t.Fatal("Response doesn't contain'Empty file'") @@ -602,6 +618,7 @@ func TestPutEmptyUpload(t *testing.T) { func TestPutJSONUpload(t *testing.T) { var myjson RespOkJSON + mux := setup() w := httptest.NewRecorder() filename := generateBarename() + ".ext" @@ -613,7 +630,7 @@ func TestPutJSONUpload(t *testing.T) { req.Header.Set("Accept", "application/json") - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) err = json.Unmarshal([]byte(w.Body.String()), &myjson) if err != nil { @@ -628,6 +645,7 @@ func TestPutJSONUpload(t *testing.T) { func TestPutRandomizedJSONUpload(t *testing.T) { var myjson RespOkJSON + mux := setup() w := httptest.NewRecorder() filename := generateBarename() + ".ext" @@ -640,7 +658,7 @@ func TestPutRandomizedJSONUpload(t *testing.T) { req.Header.Set("Accept", "application/json") req.Header.Set("Linx-Randomize", "yes") - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) err = json.Unmarshal([]byte(w.Body.String()), &myjson) if err != nil { @@ -655,6 +673,7 @@ func TestPutRandomizedJSONUpload(t *testing.T) { func TestPutExpireJSONUpload(t *testing.T) { var myjson RespOkJSON + mux := setup() w := httptest.NewRecorder() filename := generateBarename() + ".ext" @@ -667,7 +686,7 @@ func TestPutExpireJSONUpload(t *testing.T) { req.Header.Set("Accept", "application/json") req.Header.Set("Linx-Expiry", "600") - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) err = json.Unmarshal([]byte(w.Body.String()), &myjson) if err != nil { @@ -686,6 +705,7 @@ func TestPutExpireJSONUpload(t *testing.T) { func TestPutAndDelete(t *testing.T) { var myjson RespOkJSON + mux := setup() w := httptest.NewRecorder() req, err := http.NewRequest("PUT", "/upload", strings.NewReader("File content")) @@ -695,7 +715,7 @@ func TestPutAndDelete(t *testing.T) { req.Header.Set("Accept", "application/json") - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) err = json.Unmarshal([]byte(w.Body.String()), &myjson) if err != nil { @@ -706,7 +726,7 @@ func TestPutAndDelete(t *testing.T) { w = httptest.NewRecorder() req, err = http.NewRequest("DELETE", "/"+myjson.Filename, nil) req.Header.Set("Linx-Delete-Key", myjson.Delete_Key) - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) if w.Code != 200 { t.Fatal("Status code was not 200, but " + strconv.Itoa(w.Code)) @@ -715,7 +735,7 @@ func TestPutAndDelete(t *testing.T) { // Make sure it's actually gone w = httptest.NewRecorder() req, err = http.NewRequest("GET", "/"+myjson.Filename, nil) - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) if w.Code != 404 { t.Fatal("Status code was not 404, but " + strconv.Itoa(w.Code)) @@ -724,7 +744,7 @@ func TestPutAndDelete(t *testing.T) { // Make sure torrent is also gone w = httptest.NewRecorder() req, err = http.NewRequest("GET", "/"+myjson.Filename+"/torrent", nil) - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) if w.Code != 404 { t.Fatal("Status code was not 404, but " + strconv.Itoa(w.Code)) @@ -734,6 +754,7 @@ func TestPutAndDelete(t *testing.T) { func TestPutAndOverwrite(t *testing.T) { var myjson RespOkJSON + mux := setup() w := httptest.NewRecorder() req, err := http.NewRequest("PUT", "/upload", strings.NewReader("File content")) @@ -743,7 +764,7 @@ func TestPutAndOverwrite(t *testing.T) { req.Header.Set("Accept", "application/json") - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) err = json.Unmarshal([]byte(w.Body.String()), &myjson) if err != nil { @@ -754,7 +775,7 @@ func TestPutAndOverwrite(t *testing.T) { w = httptest.NewRecorder() req, err = http.NewRequest("PUT", "/upload/"+myjson.Filename, strings.NewReader("New file content")) req.Header.Set("Linx-Delete-Key", myjson.Delete_Key) - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) if w.Code != 200 { t.Fatal("Status code was not 200, but " + strconv.Itoa(w.Code)) @@ -763,7 +784,7 @@ func TestPutAndOverwrite(t *testing.T) { // Make sure it's the new file w = httptest.NewRecorder() req, err = http.NewRequest("GET", "/selif/"+myjson.Filename, nil) - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) if w.Code == 404 { t.Fatal("Status code was 404") @@ -777,6 +798,7 @@ func TestPutAndOverwrite(t *testing.T) { func TestPutAndSpecificDelete(t *testing.T) { var myjson RespOkJSON + mux := setup() w := httptest.NewRecorder() req, err := http.NewRequest("PUT", "/upload", strings.NewReader("File content")) @@ -787,7 +809,7 @@ func TestPutAndSpecificDelete(t *testing.T) { req.Header.Set("Accept", "application/json") req.Header.Set("Linx-Delete-Key", "supersecret") - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) err = json.Unmarshal([]byte(w.Body.String()), &myjson) if err != nil { @@ -798,7 +820,7 @@ func TestPutAndSpecificDelete(t *testing.T) { w = httptest.NewRecorder() req, err = http.NewRequest("DELETE", "/"+myjson.Filename, nil) req.Header.Set("Linx-Delete-Key", "supersecret") - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) if w.Code != 200 { t.Fatal("Status code was not 200, but " + strconv.Itoa(w.Code)) @@ -807,7 +829,7 @@ func TestPutAndSpecificDelete(t *testing.T) { // Make sure it's actually gone w = httptest.NewRecorder() req, err = http.NewRequest("GET", "/"+myjson.Filename, nil) - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) if w.Code != 404 { t.Fatal("Status code was not 404, but " + strconv.Itoa(w.Code)) @@ -816,7 +838,7 @@ func TestPutAndSpecificDelete(t *testing.T) { // Make sure torrent is gone too w = httptest.NewRecorder() req, err = http.NewRequest("GET", "/"+myjson.Filename+"/torrent", nil) - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) if w.Code != 404 { t.Fatal("Status code was not 404, but " + strconv.Itoa(w.Code)) From 82edabd036197d0e8fd982f9e0c136debcc70474 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Fri, 9 Oct 2015 23:06:28 -0700 Subject: [PATCH 062/345] change -b flag to -bind This is for consistency with Goji's default flag and is more clear. --- server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server.go b/server.go index 38f5cda..caa93a2 100644 --- a/server.go +++ b/server.go @@ -128,7 +128,7 @@ func setup() *web.Mux { } func main() { - flag.StringVar(&Config.bind, "b", "127.0.0.1:8080", + flag.StringVar(&Config.bind, "bind", "127.0.0.1:8080", "host to bind to (default: 127.0.0.1:8080)") flag.StringVar(&Config.filesDir, "filespath", "files/", "path to files directory") From 5600dd1ce3dae4bfea8846690b61c69bebd83ef2 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Fri, 9 Oct 2015 23:16:30 -0700 Subject: [PATCH 063/345] update readme for new -bind flag --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 295bfc3..924480c 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Get release and run Command-line options -------------------- -- ```-b 127.0.0.1:8080``` -- what to bind to (default is 127.0.0.1:8080) +- ```-bind 127.0.0.1:8080``` -- what to bind to (default is 127.0.0.1:8080) - ```-sitename myLinx``` -- the site name displayed on top (default is linx) - ```-siteurl "http://mylinx.example.org/"``` -- the site url (for generating links) - ```-filespath files/"``` -- Path to store uploads (default is files/) From ef13181a2333cec8905e011bb49c8f2eeeb418f4 Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Sat, 10 Oct 2015 11:17:38 -0400 Subject: [PATCH 064/345] Adjust the csp_test to use the new mux --- csp_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/csp_test.go b/csp_test.go index e15ecc3..190c65d 100644 --- a/csp_test.go +++ b/csp_test.go @@ -24,7 +24,7 @@ func TestContentSecurityPolicy(t *testing.T) { Config.siteName = "linx" Config.contentSecurityPolicy = "default-src 'none'; style-src 'self';" Config.xFrameOptions = "SAMEORIGIN" - setup() + mux := setup() w := httptest.NewRecorder() @@ -38,7 +38,7 @@ func TestContentSecurityPolicy(t *testing.T) { frame: testCSPHeaders["X-Frame-Options"], })) - goji.DefaultMux.ServeHTTP(w, req) + mux.ServeHTTP(w, req) for k, v := range testCSPHeaders { if w.HeaderMap[k][0] != v { From 354278d488081fa981d1387fa8f3e977feb6376c Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Sat, 10 Oct 2015 11:22:24 -0400 Subject: [PATCH 065/345] Real-IP middleware for fastcgi + nginx doc update --- README.md | 2 ++ server.go | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/README.md b/README.md index 924480c..ebdc9a8 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,8 @@ server { client_max_body_size 4096M; location / { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; fastcgi_pass 127.0.0.1:8080; include fastcgi_params; } diff --git a/server.go b/server.go index caa93a2..252babd 100644 --- a/server.go +++ b/server.go @@ -48,6 +48,10 @@ func setup() *web.Mux { // middleware mux.Use(middleware.RequestID) + if Config.fastcgi { + mux.Use(middleware.RealIP) + } + if !Config.noLogs { mux.Use(middleware.Logger) } From 52ec9f8e2d6f3fa831dd3f24c37433296d78f1cc Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Sat, 10 Oct 2015 13:10:06 -0700 Subject: [PATCH 066/345] use 303 redirects instead of 301s HTTP status code 301 is for a permanent redirect, which these are not. Although 302 would work here in most browsers, it would not follow the HTTP spec, so instead we use 303 which has a clearly and consistently defined behavior in response to a POST or PUT request. --- server_test.go | 12 ++++++------ upload.go | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/server_test.go b/server_test.go index 25da638..1e382c7 100644 --- a/server_test.go +++ b/server_test.go @@ -126,8 +126,8 @@ func TestPostCodeUpload(t *testing.T) { mux.ServeHTTP(w, req) - if w.Code != 301 { - t.Fatalf("Status code is not 301, but %d", w.Code) + if w.Code != 303 { + t.Fatalf("Status code is not 303, but %d", w.Code) } if w.Header().Get("Location") != "/"+filename+"."+extension { @@ -157,8 +157,8 @@ func TestPostCodeUploadWhitelistedHeader(t *testing.T) { mux.ServeHTTP(w, req) - if w.Code != 301 { - t.Fatalf("Status code is not 301, but %d", w.Code) + if w.Code != 303 { + t.Fatalf("Status code is not 303, but %d", w.Code) } } @@ -287,8 +287,8 @@ func TestPostUpload(t *testing.T) { mux.ServeHTTP(w, req) - if w.Code != 301 { - t.Fatalf("Status code is not 301, but %d", w.Code) + if w.Code != 303 { + t.Fatalf("Status code is not 303, but %d", w.Code) } if w.Header().Get("Location") != "/"+filename { diff --git a/upload.go b/upload.go index aaf5f0b..b24a8ce 100644 --- a/upload.go +++ b/upload.go @@ -103,7 +103,7 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { return } - http.Redirect(w, r, "/"+upload.Filename, 301) + http.Redirect(w, r, "/"+upload.Filename, 303) } } @@ -139,7 +139,7 @@ func uploadPutHandler(c web.C, w http.ResponseWriter, r *http.Request) { func uploadRemote(c web.C, w http.ResponseWriter, r *http.Request) { if r.FormValue("url") == "" { - http.Redirect(w, r, "/", 301) + http.Redirect(w, r, "/", 303) return } @@ -174,7 +174,7 @@ func uploadRemote(c web.C, w http.ResponseWriter, r *http.Request) { return } - http.Redirect(w, r, "/"+upload.Filename, 301) + http.Redirect(w, r, "/"+upload.Filename, 303) } } From 9ac016c3b57aff5de7c3a2e88fb1880fb0eb565d Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Sun, 11 Oct 2015 20:28:46 -0400 Subject: [PATCH 067/345] Document overwriting a file --- templates/API.html | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/templates/API.html b/templates/API.html index c4225e1..68cf035 100644 --- a/templates/API.html +++ b/templates/API.html @@ -59,6 +59,17 @@ {"delete_key":"...","expiry":"0","filename":"f34h4iu.jpg","mimetype":"image/jpeg", "sha256sum":"...","size":"...","url":"{{ steurl }}/f34h4iu.jpg"} +

    Overwriting a file

    + +

    To overwrite a file you uploaded, simply provide the Linx-Delete-Key header with the original file's deletion key.

    + +

    Example

    + +

    To overwrite myphoto.jpg

    + +
    $ curl -H "Linx-Delete-Key: mysecret" -T myphoto.jpg {{ siteurl }}upload/
    +{{ siteurl }}myphoto.jpg
    +

    Deleting a file

    To delete a file you uploaded, make a DELETE request to {{ siteurl }}yourfile.ext with the delete key set as the Linx-Delete-Key header.

    From 2b0135697b8829754b5f05d058da7863e675f61a Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Sun, 11 Oct 2015 20:32:28 -0400 Subject: [PATCH 068/345] Add option for using Real-IP --- README.md | 3 +-- server.go | 5 ++++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ebdc9a8..662403d 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,7 @@ Command-line options - ```-filecontentsecuritypolicy "..."``` -- Content-Security-Policy header for files (default is "default-src 'none'; img-src 'self'; object-src 'self'; media-src 'self'; sandbox; referrer none;"") - ```-xframeoptions "..." ``` -- X-Frame-Options header (default is "SAMEORIGIN") - ```-remoteuploads``` -- (optionally) enable remote uploads (/upload?url=https://...) +- ```-realip``` -- (optionally) let linx-server know you (nginx, etc) are providing the X-Real-IP and/or X-Forwarded-For headers. - ```-fastcgi``` -- (optionally) serve through fastcgi - ```-nologs``` -- (optionally) disable request logs in stdout @@ -48,8 +49,6 @@ server { client_max_body_size 4096M; location / { - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; fastcgi_pass 127.0.0.1:8080; include fastcgi_params; } diff --git a/server.go b/server.go index 252babd..458ac12 100644 --- a/server.go +++ b/server.go @@ -30,6 +30,7 @@ var Config struct { fileContentSecurityPolicy string xFrameOptions string maxSize int64 + realIp bool noLogs bool allowHotlink bool fastcgi bool @@ -48,7 +49,7 @@ func setup() *web.Mux { // middleware mux.Use(middleware.RequestID) - if Config.fastcgi { + if Config.realIp { mux.Use(middleware.RealIP) } @@ -152,6 +153,8 @@ func main() { "path to ssl certificate (for https)") flag.StringVar(&Config.keyFile, "keyfile", "", "path to ssl key (for https)") + flag.BoolVar(&Config.realIp, "realip", false, + "use X-Real-IP/X-Forwarded-For headers as original host") flag.BoolVar(&Config.fastcgi, "fastcgi", false, "serve through fastcgi") flag.BoolVar(&Config.remoteUploads, "remoteuploads", false, From aa7dad3a03426e4507f9059ec1360a4047edb57a Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Sat, 10 Oct 2015 12:26:47 -0700 Subject: [PATCH 069/345] add support for auth keys Add a middleware that requires authorization for all POST, PUT, and DELETE requests. This is done using the Authorization header and the provided auth key is then checked against a file containing scrypted auth keys. These keys are salted the constant string `linx-server`. --- README.md | 1 + auth.go | 111 +++++++++++++++++++++++++++++++++++++++++++++++++ server.go | 20 ++++++++- server_test.go | 20 +++++++++ 4 files changed, 150 insertions(+), 2 deletions(-) create mode 100644 auth.go diff --git a/README.md b/README.md index 662403d..7e46836 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ Command-line options - ```-xframeoptions "..." ``` -- X-Frame-Options header (default is "SAMEORIGIN") - ```-remoteuploads``` -- (optionally) enable remote uploads (/upload?url=https://...) - ```-realip``` -- (optionally) let linx-server know you (nginx, etc) are providing the X-Real-IP and/or X-Forwarded-For headers. +- ````-authfile``` -- (optionally) require authorization for upload/delete by providing a newline-separated file of scrypted auth keys - ```-fastcgi``` -- (optionally) serve through fastcgi - ```-nologs``` -- (optionally) disable request logs in stdout diff --git a/auth.go b/auth.go new file mode 100644 index 0000000..bc7de3e --- /dev/null +++ b/auth.go @@ -0,0 +1,111 @@ +package main + +import ( + "bufio" + "encoding/base64" + "net/http" + "os" + "strings" + + "golang.org/x/crypto/scrypt" +) + +const ( + authPrefix = "Linx " + scryptSalt = "linx-server" + scryptN = 16384 + scryptr = 8 + scryptp = 1 + scryptKeyLen = 32 +) + +type AuthOptions struct { + AuthFile string + UnauthMethods []string +} + +type uploadBasicAuth struct { + successHandler http.Handler + failureHandler http.Handler + o AuthOptions +} + +func checkAuth(authFile string, decodedAuth []byte) (result bool, err error) { + f, err := os.Open(authFile) + if err != nil { + return + } + + checkKey, err := scrypt.Key([]byte(decodedAuth), []byte(scryptSalt), scryptN, scryptr, scryptp, scryptKeyLen) + if err != nil { + return + } + + encodedKey := base64.StdEncoding.EncodeToString(checkKey) + + scanner := bufio.NewScanner(bufio.NewReader(f)) + for scanner.Scan() { + if encodedKey == scanner.Text() { + result = true + return + } + } + + result = false + err = scanner.Err() + return +} + +func (a uploadBasicAuth) ServeHTTP(w http.ResponseWriter, r *http.Request) { + if sliceContains(a.o.UnauthMethods, r.Method) { + // allow unauthenticated methods + a.successHandler.ServeHTTP(w, r) + return + } + + authHeader := r.Header.Get("Authorization") + if !strings.HasPrefix(authHeader, authPrefix) { + a.failureHandler.ServeHTTP(w, r) + return + } + + decodedAuth, err := base64.StdEncoding.DecodeString(authHeader[len(authPrefix):]) + if err != nil { + a.failureHandler.ServeHTTP(w, r) + return + } + + result, err := checkAuth(a.o.AuthFile, decodedAuth) + if err != nil || !result { + a.failureHandler.ServeHTTP(w, r) + return + } + + a.successHandler.ServeHTTP(w, r) +} + +func UploadAuth(o AuthOptions) func(http.Handler) http.Handler { + fn := func(h http.Handler) http.Handler { + return uploadBasicAuth{ + successHandler: h, + failureHandler: http.HandlerFunc(badAuthorizationHandler), + o: o, + } + } + return fn +} + +func badAuthorizationHandler(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusUnauthorized) + http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized) +} + +func sliceContains(slice []string, s string) bool { + for _, v := range slice { + if s == v { + return true + } + } + + return false +} diff --git a/server.go b/server.go index 458ac12..b6e74da 100644 --- a/server.go +++ b/server.go @@ -35,6 +35,7 @@ var Config struct { allowHotlink bool fastcgi bool remoteUploads bool + authFile string } var Templates = make(map[string]*pongo2.Template) @@ -64,6 +65,13 @@ func setup() *web.Mux { frame: Config.xFrameOptions, })) + if Config.authFile != "" { + mux.Use(UploadAuth(AuthOptions{ + AuthFile: Config.authFile, + UnauthMethods: []string{"GET", "HEAD", "OPTIONS", "TRACE"}, + })) + } + // make directories if needed err := os.MkdirAll(Config.filesDir, 0755) if err != nil { @@ -103,9 +111,15 @@ func setup() *web.Mux { selifIndexRe := regexp.MustCompile(`^/selif/$`) torrentRe := regexp.MustCompile(`^/(?P[a-z0-9-\.]+)/torrent$`) - mux.Get("/", indexHandler) - mux.Get("/paste/", pasteHandler) + if Config.authFile == "" { + mux.Get("/", indexHandler) + mux.Get("/paste/", pasteHandler) + } else { + mux.Get("/", http.RedirectHandler("/API", 303)) + mux.Get("/paste/", http.RedirectHandler("/API/", 303)) + } mux.Get("/paste", http.RedirectHandler("/paste/", 301)) + mux.Get("/API/", apiDocHandler) mux.Get("/API", http.RedirectHandler("/API/", 301)) @@ -159,6 +173,8 @@ func main() { "serve through fastcgi") flag.BoolVar(&Config.remoteUploads, "remoteuploads", false, "enable remote uploads") + flag.StringVar(&Config.authFile, "authfile", "", + "path to a file containing newline-separated scrypted auth keys") flag.StringVar(&Config.contentSecurityPolicy, "contentsecuritypolicy", "default-src 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; referrer none;", "value of default Content-Security-Policy header") diff --git a/server_test.go b/server_test.go index 1e382c7..e4c3a3a 100644 --- a/server_test.go +++ b/server_test.go @@ -52,6 +52,26 @@ func TestIndex(t *testing.T) { } } +func TestIndexAuthKeys(t *testing.T) { + Config.authFile = "/dev/null" + + mux := setup() + w := httptest.NewRecorder() + + req, err := http.NewRequest("GET", "/", nil) + if err != nil { + t.Fatal(err) + } + + mux.ServeHTTP(w, req) + + if w.Code != 303 { + t.Fatalf("Status code is not 301, but %d", w.Code) + } + + Config.authFile = "" +} + func TestNotFound(t *testing.T) { mux := setup() w := httptest.NewRecorder() From 3c9e260926732f5bcb464721bada110e29cbe5e7 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Sun, 11 Oct 2015 17:43:31 -0700 Subject: [PATCH 070/345] improve auth tests and rename auth struct --- auth.go | 6 +++--- server_test.go | 28 ++++++++++++++++++---------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/auth.go b/auth.go index bc7de3e..688cea3 100644 --- a/auth.go +++ b/auth.go @@ -24,7 +24,7 @@ type AuthOptions struct { UnauthMethods []string } -type uploadBasicAuth struct { +type auth struct { successHandler http.Handler failureHandler http.Handler o AuthOptions @@ -56,7 +56,7 @@ func checkAuth(authFile string, decodedAuth []byte) (result bool, err error) { return } -func (a uploadBasicAuth) ServeHTTP(w http.ResponseWriter, r *http.Request) { +func (a auth) ServeHTTP(w http.ResponseWriter, r *http.Request) { if sliceContains(a.o.UnauthMethods, r.Method) { // allow unauthenticated methods a.successHandler.ServeHTTP(w, r) @@ -86,7 +86,7 @@ func (a uploadBasicAuth) ServeHTTP(w http.ResponseWriter, r *http.Request) { func UploadAuth(o AuthOptions) func(http.Handler) http.Handler { fn := func(h http.Handler) http.Handler { - return uploadBasicAuth{ + return auth{ successHandler: h, failureHandler: http.HandlerFunc(badAuthorizationHandler), o: o, diff --git a/server_test.go b/server_test.go index e4c3a3a..95c7b57 100644 --- a/server_test.go +++ b/server_test.go @@ -52,21 +52,29 @@ func TestIndex(t *testing.T) { } } -func TestIndexAuthKeys(t *testing.T) { +func TestAuthKeysRedirects(t *testing.T) { Config.authFile = "/dev/null" - mux := setup() - w := httptest.NewRecorder() - - req, err := http.NewRequest("GET", "/", nil) - if err != nil { - t.Fatal(err) + redirects := []string{ + "/", + "/paste/", } - mux.ServeHTTP(w, req) + mux := setup() - if w.Code != 303 { - t.Fatalf("Status code is not 301, but %d", w.Code) + for _, v := range redirects { + w := httptest.NewRecorder() + + req, err := http.NewRequest("GET", v, nil) + if err != nil { + t.Fatal(err) + } + + mux.ServeHTTP(w, req) + + if w.Code != 303 { + t.Fatalf("Status code is not 303, but %d", w.Code) + } } Config.authFile = "" From cc4e2ca0d9fe09081c3930cd1f928a94ee9f6ed9 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Sun, 11 Oct 2015 18:36:27 -0700 Subject: [PATCH 071/345] read authfile once only Read the authfile upon initial server start and store the auth keys in the auth struct, rather than reading the file for each page load. --- auth.go | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/auth.go b/auth.go index 688cea3..84b0586 100644 --- a/auth.go +++ b/auth.go @@ -3,6 +3,7 @@ package main import ( "bufio" "encoding/base64" + "log" "net/http" "os" "strings" @@ -27,32 +28,25 @@ type AuthOptions struct { type auth struct { successHandler http.Handler failureHandler http.Handler + authKeys []string o AuthOptions } -func checkAuth(authFile string, decodedAuth []byte) (result bool, err error) { - f, err := os.Open(authFile) - if err != nil { - return - } - +func checkAuth(authKeys []string, decodedAuth []byte) (result bool, err error) { checkKey, err := scrypt.Key([]byte(decodedAuth), []byte(scryptSalt), scryptN, scryptr, scryptp, scryptKeyLen) if err != nil { return } encodedKey := base64.StdEncoding.EncodeToString(checkKey) - - scanner := bufio.NewScanner(bufio.NewReader(f)) - for scanner.Scan() { - if encodedKey == scanner.Text() { + for _, v := range authKeys { + if encodedKey == v { result = true return } } result = false - err = scanner.Err() return } @@ -75,7 +69,7 @@ func (a auth) ServeHTTP(w http.ResponseWriter, r *http.Request) { return } - result, err := checkAuth(a.o.AuthFile, decodedAuth) + result, err := checkAuth(a.authKeys, decodedAuth) if err != nil || !result { a.failureHandler.ServeHTTP(w, r) return @@ -85,10 +79,29 @@ func (a auth) ServeHTTP(w http.ResponseWriter, r *http.Request) { } func UploadAuth(o AuthOptions) func(http.Handler) http.Handler { + var authKeys []string + + f, err := os.Open(o.AuthFile) + if err != nil { + log.Fatal("Failed to open authfile: ", err) + } + defer f.Close() + + scanner := bufio.NewScanner(f) + for scanner.Scan() { + authKeys = append(authKeys, scanner.Text()) + } + + err = scanner.Err() + if err != nil { + log.Fatal("Scanner error while reading authfile: ", err) + } + fn := func(h http.Handler) http.Handler { return auth{ successHandler: h, failureHandler: http.HandlerFunc(badAuthorizationHandler), + authKeys: authKeys, o: o, } } From adbc1604dc88116b9f192abecf6566660a215d99 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Sun, 11 Oct 2015 18:37:36 -0700 Subject: [PATCH 072/345] add some more auth tests It's going to be difficult to get 100% code coverage, but we can at least ensure that checkAuth works properly. --- auth_test.go | 24 ++++++++++++++++++++++++ server_test.go | 15 ++++++++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 auth_test.go diff --git a/auth_test.go b/auth_test.go new file mode 100644 index 0000000..9cec2ea --- /dev/null +++ b/auth_test.go @@ -0,0 +1,24 @@ +package main + +import ( + "testing" +) + +func TestCheckAuth(t *testing.T) { + authKeys := []string{ + "vhvZ/PT1jeTbTAJ8JdoxddqFtebSxdVb0vwPlYO+4HM=", + "vFpNprT9wbHgwAubpvRxYCCpA2FQMAK6hFqPvAGrdZo=", + } + + if r, err := checkAuth(authKeys, []byte("")); err != nil && r { + t.Fatal("Authorization passed for empty key") + } + + if r, err := checkAuth(authKeys, []byte("thisisnotvalid")); err != nil && r { + t.Fatal("Authorization passed for invalid key") + } + + if r, err := checkAuth(authKeys, []byte("haPVipRnGJ0QovA9nyqK")); err != nil && !r { + t.Fatal("Authorization failed for valid key") + } +} diff --git a/server_test.go b/server_test.go index 95c7b57..ebacfc3 100644 --- a/server_test.go +++ b/server_test.go @@ -52,7 +52,7 @@ func TestIndex(t *testing.T) { } } -func TestAuthKeysRedirects(t *testing.T) { +func TestAuthKeys(t *testing.T) { Config.authFile = "/dev/null" redirects := []string{ @@ -77,6 +77,19 @@ func TestAuthKeysRedirects(t *testing.T) { } } + w := httptest.NewRecorder() + + req, err := http.NewRequest("POST", "/paste/", nil) + if err != nil { + t.Fatal(err) + } + + mux.ServeHTTP(w, req) + + if w.Code != 401 { + t.Fatalf("Status code is not 401, but %d", w.Code) + } + Config.authFile = "" } From ae02f537f777f6147d57b24d5684a96408621520 Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Sun, 11 Oct 2015 21:39:42 -0400 Subject: [PATCH 073/345] Add linx-genkey --- linx-genkey/linx-genkey.go | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 linx-genkey/linx-genkey.go diff --git a/linx-genkey/linx-genkey.go b/linx-genkey/linx-genkey.go new file mode 100644 index 0000000..95389da --- /dev/null +++ b/linx-genkey/linx-genkey.go @@ -0,0 +1,33 @@ +package main + +import ( + "bufio" + "encoding/base64" + "fmt" + "os" + + "golang.org/x/crypto/scrypt" +) + +const ( + authPrefix = "Linx " + scryptSalt = "linx-server" + scryptN = 16384 + scryptr = 8 + scryptp = 1 + scryptKeyLen = 32 +) + +func main() { + fmt.Printf("Enter key to hash: ") + + scanner := bufio.NewScanner(os.Stdin) + scanner.Scan() + + checkKey, err := scrypt.Key([]byte(scanner.Text()), []byte(scryptSalt), scryptN, scryptr, scryptp, scryptKeyLen) + if err != nil { + return + } + + fmt.Println(base64.StdEncoding.EncodeToString(checkKey)) +} From 104f648c0f20fd8e305d910aa75a0cfb58c498d7 Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Sun, 11 Oct 2015 21:42:00 -0400 Subject: [PATCH 074/345] Remove artifact --- linx-genkey/linx-genkey.go | 1 - 1 file changed, 1 deletion(-) diff --git a/linx-genkey/linx-genkey.go b/linx-genkey/linx-genkey.go index 95389da..cb1b8b0 100644 --- a/linx-genkey/linx-genkey.go +++ b/linx-genkey/linx-genkey.go @@ -10,7 +10,6 @@ import ( ) const ( - authPrefix = "Linx " scryptSalt = "linx-server" scryptN = 16384 scryptr = 8 From 3dc4753b7aea958f4a4dfcde0129cd2d534fc140 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Sun, 11 Oct 2015 19:30:01 -0700 Subject: [PATCH 075/345] move reading auth keys into readAuthKeys --- auth.go | 42 +++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/auth.go b/auth.go index 84b0586..c8de59a 100644 --- a/auth.go +++ b/auth.go @@ -32,6 +32,28 @@ type auth struct { o AuthOptions } +func readAuthKeys(authFile string) []string { + var authKeys []string + + f, err := os.Open(authFile) + if err != nil { + log.Fatal("Failed to open authfile: ", err) + } + defer f.Close() + + scanner := bufio.NewScanner(f) + for scanner.Scan() { + authKeys = append(authKeys, scanner.Text()) + } + + err = scanner.Err() + if err != nil { + log.Fatal("Scanner error while reading authfile: ", err) + } + + return authKeys +} + func checkAuth(authKeys []string, decodedAuth []byte) (result bool, err error) { checkKey, err := scrypt.Key([]byte(decodedAuth), []byte(scryptSalt), scryptN, scryptr, scryptp, scryptKeyLen) if err != nil { @@ -79,29 +101,11 @@ func (a auth) ServeHTTP(w http.ResponseWriter, r *http.Request) { } func UploadAuth(o AuthOptions) func(http.Handler) http.Handler { - var authKeys []string - - f, err := os.Open(o.AuthFile) - if err != nil { - log.Fatal("Failed to open authfile: ", err) - } - defer f.Close() - - scanner := bufio.NewScanner(f) - for scanner.Scan() { - authKeys = append(authKeys, scanner.Text()) - } - - err = scanner.Err() - if err != nil { - log.Fatal("Scanner error while reading authfile: ", err) - } - fn := func(h http.Handler) http.Handler { return auth{ successHandler: h, failureHandler: http.HandlerFunc(badAuthorizationHandler), - authKeys: authKeys, + authKeys: readAuthKeys(o.AuthFile), o: o, } } From dd4ac3a7ed85823a1cf48beb6907f99ca5482c7e Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Sun, 11 Oct 2015 19:31:13 -0700 Subject: [PATCH 076/345] add support remote auth keys These are taken as a parameter to the remote upload page. Note that all keys will be logged since this is a GET request. --- server.go | 8 ++++++++ upload.go | 13 +++++++++++++ 2 files changed, 21 insertions(+) diff --git a/server.go b/server.go index b6e74da..4cb88e4 100644 --- a/server.go +++ b/server.go @@ -36,6 +36,7 @@ var Config struct { fastcgi bool remoteUploads bool authFile string + remoteAuthFile string } var Templates = make(map[string]*pongo2.Template) @@ -43,6 +44,7 @@ var TemplateSet *pongo2.TemplateSet var staticBox *rice.Box var timeStarted time.Time var timeStartedStr string +var remoteAuthKeys []string func setup() *web.Mux { mux := web.New() @@ -126,6 +128,10 @@ func setup() *web.Mux { if Config.remoteUploads { mux.Get("/upload", uploadRemote) mux.Get("/upload/", uploadRemote) + + if Config.remoteAuthFile != "" { + remoteAuthKeys = readAuthKeys(Config.remoteAuthFile) + } } mux.Post("/upload", uploadPostHandler) @@ -175,6 +181,8 @@ func main() { "enable remote uploads") flag.StringVar(&Config.authFile, "authfile", "", "path to a file containing newline-separated scrypted auth keys") + flag.StringVar(&Config.remoteAuthFile, "remoteauthfile", "", + "path to a file containing newline-separated scrypted auth keys for remote uploads") flag.StringVar(&Config.contentSecurityPolicy, "contentsecuritypolicy", "default-src 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; referrer none;", "value of default Content-Security-Policy header") diff --git a/upload.go b/upload.go index b24a8ce..63582d9 100644 --- a/upload.go +++ b/upload.go @@ -138,6 +138,19 @@ func uploadPutHandler(c web.C, w http.ResponseWriter, r *http.Request) { } func uploadRemote(c web.C, w http.ResponseWriter, r *http.Request) { + if Config.remoteAuthFile != "" { + result, err := checkAuth(remoteAuthKeys, []byte(r.FormValue("key"))) + if err != nil || !result { + unauthorizedHandler(c, w, r) + } + } else { + // strict referrer checking is mandatory without remote auth keys + if !strictReferrerCheck(r, Config.siteURL, []string{"Linx-Delete-Key", "Linx-Expiry", "Linx-Randomize"}) { + badRequestHandler(c, w, r) + return + } + } + if r.FormValue("url") == "" { http.Redirect(w, r, "/", 303) return From 2cd432b5d3c56473ffa5cae63588399c93b35759 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Sun, 11 Oct 2015 19:33:48 -0700 Subject: [PATCH 077/345] update readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7e46836..48f77fe 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,7 @@ Command-line options - ```-remoteuploads``` -- (optionally) enable remote uploads (/upload?url=https://...) - ```-realip``` -- (optionally) let linx-server know you (nginx, etc) are providing the X-Real-IP and/or X-Forwarded-For headers. - ````-authfile``` -- (optionally) require authorization for upload/delete by providing a newline-separated file of scrypted auth keys +- ````-remoteauthfile``` -- (optionally) require authorization for remote uploads by providing a newline-separated file of scrypted auth keys - ```-fastcgi``` -- (optionally) serve through fastcgi - ```-nologs``` -- (optionally) disable request logs in stdout From 613ab24721bd956b7d777fa3fce9f832f730794f Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Sun, 11 Oct 2015 19:38:04 -0700 Subject: [PATCH 078/345] show usage for -authfile and -remoteauthfile --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 48f77fe..d7e78a3 100644 --- a/README.md +++ b/README.md @@ -30,8 +30,8 @@ Command-line options - ```-xframeoptions "..." ``` -- X-Frame-Options header (default is "SAMEORIGIN") - ```-remoteuploads``` -- (optionally) enable remote uploads (/upload?url=https://...) - ```-realip``` -- (optionally) let linx-server know you (nginx, etc) are providing the X-Real-IP and/or X-Forwarded-For headers. -- ````-authfile``` -- (optionally) require authorization for upload/delete by providing a newline-separated file of scrypted auth keys -- ````-remoteauthfile``` -- (optionally) require authorization for remote uploads by providing a newline-separated file of scrypted auth keys +- ````-authfile path/to/authfile``` -- (optionally) require authorization for upload/delete by providing a newline-separated file of scrypted auth keys +- ````-remoteauthfile path/to/remoteauthfile``` -- (optionally) require authorization for remote uploads by providing a newline-separated file of scrypted auth keys - ```-fastcgi``` -- (optionally) serve through fastcgi - ```-nologs``` -- (optionally) disable request logs in stdout From 39d874374dd60c6452b7edee738d7ddaa2537bc2 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Sun, 11 Oct 2015 20:06:14 -0700 Subject: [PATCH 079/345] trim trailing / for origin checking --- csrf.go | 2 +- server_test.go | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/csrf.go b/csrf.go index a743a04..5f8ca48 100644 --- a/csrf.go +++ b/csrf.go @@ -16,7 +16,7 @@ func strictReferrerCheck(r *http.Request, prefix string, whitelistHeaders []stri return false } - if origin := r.Header.Get("Origin"); origin != "" && !strings.HasPrefix(origin, prefix) { + if origin := r.Header.Get("Origin"); origin != "" && !strings.HasPrefix(origin, strings.TrimSuffix(prefix, "/")) { return false } diff --git a/server_test.go b/server_test.go index ebacfc3..e653dec 100644 --- a/server_test.go +++ b/server_test.go @@ -248,7 +248,7 @@ func TestPostCodeUploadBadOrigin(t *testing.T) { req.PostForm = form req.Header.Set("Content-Type", "application/x-www-form-urlencoded") req.Header.Set("Referer", Config.siteURL) - req.Header.Set("Origin", "http://example.com/") + req.Header.Set("Origin", "http://example.com") mux.ServeHTTP(w, req) @@ -274,6 +274,7 @@ func TestPostCodeExpiryJSONUpload(t *testing.T) { req.Header.Set("Content-Type", "application/x-www-form-urlencoded") req.Header.Set("Accept", "application/json") req.Header.Set("Referer", Config.siteURL) + req.Header.Set("Origin", strings.TrimSuffix(Config.siteURL, "/")) mux.ServeHTTP(w, req) From cd83f9f0ebeefafac6d4be15abda83a0a5e1d1f4 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Sun, 11 Oct 2015 23:31:57 -0700 Subject: [PATCH 080/345] fix CSP referrer policy The policy of "referrer none" was incorrect and was nonfunctional. With this change, the CSP referrer policy is set to origin, which will causes only the origin to be sent for requests made from the main site. A fix was also needed for referrer checks in two places. --- csrf.go | 6 ++++-- fileserve.go | 3 ++- server.go | 4 ++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/csrf.go b/csrf.go index 5f8ca48..61799db 100644 --- a/csrf.go +++ b/csrf.go @@ -12,11 +12,13 @@ func strictReferrerCheck(r *http.Request, prefix string, whitelistHeaders []stri } } - if referrer := r.Header.Get("Referer"); !strings.HasPrefix(referrer, prefix) { + p := strings.TrimSuffix(prefix, "/") + + if referrer := r.Header.Get("Referer"); !strings.HasPrefix(referrer, p) { return false } - if origin := r.Header.Get("Origin"); origin != "" && !strings.HasPrefix(origin, strings.TrimSuffix(prefix, "/")) { + if origin := r.Header.Get("Origin"); origin != "" && !strings.HasPrefix(origin, p) { return false } diff --git a/fileserve.go b/fileserve.go index d41523d..cc682ca 100644 --- a/fileserve.go +++ b/fileserve.go @@ -26,7 +26,8 @@ func fileServeHandler(c web.C, w http.ResponseWriter, r *http.Request) { if !Config.allowHotlink { referer := r.Header.Get("Referer") - if referer != "" && !strings.HasPrefix(referer, Config.siteURL) { + prefix := strings.TrimSuffix(Config.siteURL, "/") + if referer != "" && !strings.HasPrefix(referer, prefix) { w.WriteHeader(403) return } diff --git a/server.go b/server.go index 4cb88e4..6f1b63e 100644 --- a/server.go +++ b/server.go @@ -184,10 +184,10 @@ func main() { flag.StringVar(&Config.remoteAuthFile, "remoteauthfile", "", "path to a file containing newline-separated scrypted auth keys for remote uploads") flag.StringVar(&Config.contentSecurityPolicy, "contentsecuritypolicy", - "default-src 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; referrer none;", + "default-src 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; referrer origin;", "value of default Content-Security-Policy header") flag.StringVar(&Config.fileContentSecurityPolicy, "filecontentsecuritypolicy", - "default-src 'none'; img-src 'self'; object-src 'self'; media-src 'self'; sandbox; referrer none;", + "default-src 'none'; img-src 'self'; object-src 'self'; media-src 'self'; sandbox; referrer origin;", "value of Content-Security-Policy header for file access") flag.StringVar(&Config.xFrameOptions, "xframeoptions", "SAMEORIGIN", "value of X-Frame-Options header") From 61147554a92c3ddfcf68ec05c43802245c56d9a5 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Mon, 12 Oct 2015 00:02:09 -0700 Subject: [PATCH 081/345] update CSP flags in readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d7e78a3..7f765b4 100644 --- a/README.md +++ b/README.md @@ -25,8 +25,8 @@ Command-line options - ```-maxsize 4294967296``` maximum upload file size in bytes (default 4GB) - ```-certfile path/to/your.crt``` -- Path to the ssl certificate (required if you want to use the https server) - ```-keyfile path/to/your.key``` -- Path to the ssl key (required if you want to use the https server) -- ```-contentsecuritypolicy "..."``` -- Content-Security-Policy header for pages (default is "default-src 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; referrer none;") -- ```-filecontentsecuritypolicy "..."``` -- Content-Security-Policy header for files (default is "default-src 'none'; img-src 'self'; object-src 'self'; media-src 'self'; sandbox; referrer none;"") +- ```-contentsecuritypolicy "..."``` -- Content-Security-Policy header for pages (default is "default-src 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; referrer origin;") +- ```-filecontentsecuritypolicy "..."``` -- Content-Security-Policy header for files (default is "default-src 'none'; img-src 'self'; object-src 'self'; media-src 'self'; sandbox; referrer origin;"") - ```-xframeoptions "..." ``` -- X-Frame-Options header (default is "SAMEORIGIN") - ```-remoteuploads``` -- (optionally) enable remote uploads (/upload?url=https://...) - ```-realip``` -- (optionally) let linx-server know you (nginx, etc) are providing the X-Real-IP and/or X-Forwarded-For headers. From a7ae455ac1949388c8dd1f9ee57f714121209162 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Mon, 12 Oct 2015 00:28:01 -0700 Subject: [PATCH 082/345] strict referrer check improvements * Always check Origin if it is present, regardless of headers sent * Whitelist X-Requested-With header --- csrf.go | 11 +++++------ upload.go | 4 ++-- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/csrf.go b/csrf.go index 61799db..fdf3d93 100644 --- a/csrf.go +++ b/csrf.go @@ -6,21 +6,20 @@ import ( ) func strictReferrerCheck(r *http.Request, prefix string, whitelistHeaders []string) bool { + p := strings.TrimSuffix(prefix, "/") + if origin := r.Header.Get("Origin"); origin != "" && !strings.HasPrefix(origin, p) { + return false + } + for _, header := range whitelistHeaders { if r.Header.Get(header) != "" { return true } } - p := strings.TrimSuffix(prefix, "/") - if referrer := r.Header.Get("Referer"); !strings.HasPrefix(referrer, p) { return false } - if origin := r.Header.Get("Origin"); origin != "" && !strings.HasPrefix(origin, p) { - return false - } - return true } diff --git a/upload.go b/upload.go index 63582d9..a4a9032 100644 --- a/upload.go +++ b/upload.go @@ -46,7 +46,7 @@ type Upload struct { } func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { - if !strictReferrerCheck(r, Config.siteURL, []string{"Linx-Delete-Key", "Linx-Expiry", "Linx-Randomize"}) { + if !strictReferrerCheck(r, Config.siteURL, []string{"Linx-Delete-Key", "Linx-Expiry", "Linx-Randomize", "X-Requested-With"}) { badRequestHandler(c, w, r) return } @@ -145,7 +145,7 @@ func uploadRemote(c web.C, w http.ResponseWriter, r *http.Request) { } } else { // strict referrer checking is mandatory without remote auth keys - if !strictReferrerCheck(r, Config.siteURL, []string{"Linx-Delete-Key", "Linx-Expiry", "Linx-Randomize"}) { + if !strictReferrerCheck(r, Config.siteURL, []string{"Linx-Delete-Key", "Linx-Expiry", "Linx-Randomize", "X-Requested-With"}) { badRequestHandler(c, w, r) return } From 0a1aa869e4654092457f57b98fb5fdc582499f0a Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Mon, 12 Oct 2015 01:03:02 -0700 Subject: [PATCH 083/345] nicer 400 error page --- pages.go | 5 ++++- templates.go | 3 ++- templates/400.html | 5 +++++ 3 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 templates/400.html diff --git a/pages.go b/pages.go index 7481bc4..9d24bba 100644 --- a/pages.go +++ b/pages.go @@ -86,7 +86,10 @@ func oopsHandler(c web.C, w http.ResponseWriter, r *http.Request, rt RespType, m func badRequestHandler(c web.C, w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusBadRequest) - http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest) + err := Templates["400.html"].ExecuteWriter(pongo2.Context{}, w) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + } } func unauthorizedHandler(c web.C, w http.ResponseWriter, r *http.Request) { diff --git a/templates.go b/templates.go index 6575881..d8cd7bf 100644 --- a/templates.go +++ b/templates.go @@ -45,8 +45,9 @@ func populateTemplatesMap(tSet *pongo2.TemplateSet, tMap map[string]*pongo2.Temp "index.html", "paste.html", "API.html", - "404.html", + "400.html", "401.html", + "404.html", "oops.html", "display/audio.html", diff --git a/templates/400.html b/templates/400.html new file mode 100644 index 0000000..11f3e87 --- /dev/null +++ b/templates/400.html @@ -0,0 +1,5 @@ +{% extends "base.html" %} + +{% block content %} +400 Bad Request +{% endblock %} From a3723d3665480a784af8dd1c4b181641d2b4f257 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Mon, 12 Oct 2015 01:23:06 -0700 Subject: [PATCH 084/345] short-circuit on origin header If the Origin header is present, we can check it and skip the other checks. --- csrf.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/csrf.go b/csrf.go index fdf3d93..b70215b 100644 --- a/csrf.go +++ b/csrf.go @@ -7,8 +7,9 @@ import ( func strictReferrerCheck(r *http.Request, prefix string, whitelistHeaders []string) bool { p := strings.TrimSuffix(prefix, "/") - if origin := r.Header.Get("Origin"); origin != "" && !strings.HasPrefix(origin, p) { - return false + if origin := r.Header.Get("Origin"); origin != "" { + // if there's an Origin header, check it and ignore the rest + return strings.HasPrefix(origin, p) } for _, header := range whitelistHeaders { From d1387558068f00ac2c82cd66757a69fd6818d8c9 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Tue, 13 Oct 2015 19:52:55 -0700 Subject: [PATCH 085/345] do a proper same-origin check String prefix matching is hacky and provides insufficient checking if it does not end with a /. --- csrf.go | 27 ++++++++++++++++++--------- fileserve.go | 6 ++++-- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/csrf.go b/csrf.go index b70215b..9b8b93e 100644 --- a/csrf.go +++ b/csrf.go @@ -2,14 +2,19 @@ package main import ( "net/http" - "strings" + "net/url" ) +// Do a strict referrer check, matching against both the Origin header (if +// present) and the Referrer header. If a list of headers is specified, then +// Referrer checking will be skipped if any of those headers are present. func strictReferrerCheck(r *http.Request, prefix string, whitelistHeaders []string) bool { - p := strings.TrimSuffix(prefix, "/") + p, _ := url.Parse(prefix) + + // if there's an Origin header, check it and skip other checks if origin := r.Header.Get("Origin"); origin != "" { - // if there's an Origin header, check it and ignore the rest - return strings.HasPrefix(origin, p) + u, _ := url.Parse(origin) + return sameOrigin(u, p) } for _, header := range whitelistHeaders { @@ -18,9 +23,13 @@ func strictReferrerCheck(r *http.Request, prefix string, whitelistHeaders []stri } } - if referrer := r.Header.Get("Referer"); !strings.HasPrefix(referrer, p) { - return false - } - - return true + referrer := r.Header.Get("Referer") + u, _ := url.Parse(referrer) + return sameOrigin(u, p) +} + +// Check if two URLs have the same origin +func sameOrigin(u1, u2 *url.URL) bool { + // host also contains the port if one was specified + return (u1.Scheme == u2.Scheme && u1.Host == u2.Host) } diff --git a/fileserve.go b/fileserve.go index cc682ca..9b0d62f 100644 --- a/fileserve.go +++ b/fileserve.go @@ -4,6 +4,7 @@ import ( "bytes" "io" "net/http" + "net/url" "os" "path" "strings" @@ -26,8 +27,9 @@ func fileServeHandler(c web.C, w http.ResponseWriter, r *http.Request) { if !Config.allowHotlink { referer := r.Header.Get("Referer") - prefix := strings.TrimSuffix(Config.siteURL, "/") - if referer != "" && !strings.HasPrefix(referer, prefix) { + u, _ := url.Parse(referer) + p, _ := url.Parse(Config.siteURL) + if referer != "" && !sameOrigin(u, p) { w.WriteHeader(403) return } From be15ba076d978385c429327c5cecb7a15a17e146 Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Wed, 14 Oct 2015 14:58:27 -0400 Subject: [PATCH 086/345] Removed unnecessary duplicate static caching --- fileserve.go | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/fileserve.go b/fileserve.go index 9b0d62f..8c49278 100644 --- a/fileserve.go +++ b/fileserve.go @@ -1,8 +1,6 @@ package main import ( - "bytes" - "io" "net/http" "net/url" "os" @@ -40,8 +38,6 @@ func fileServeHandler(c web.C, w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, filePath) } -var staticCache = make(map[string][]byte) - func staticHandler(c web.C, w http.ResponseWriter, r *http.Request) { path := r.URL.Path if path[len(path)-1:] == "/" { @@ -53,23 +49,15 @@ func staticHandler(c web.C, w http.ResponseWriter, r *http.Request) { } filePath := strings.TrimPrefix(path, "/static/") - - _, exists := staticCache[filePath] - if !exists { - file, err := staticBox.Open(filePath) - if err != nil { - notFoundHandler(c, w, r) - return - } - - buf := bytes.NewBuffer(nil) - io.Copy(buf, file) - staticCache[filePath] = buf.Bytes() + file, err := staticBox.Open(filePath) + if err != nil { + notFoundHandler(c, w, r) + return } w.Header().Set("Etag", timeStartedStr) w.Header().Set("Cache-Control", "max-age=86400") - http.ServeContent(w, r, filePath, timeStarted, bytes.NewReader(staticCache[filePath])) + http.ServeContent(w, r, filePath, timeStarted, file) return } } From 6987edc0d83e99bef88f3f3895c8576c5a801ae3 Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Wed, 14 Oct 2015 15:20:41 -0400 Subject: [PATCH 087/345] Remove non-API navigation links when using auth --- server.go | 1 + templates/base.html | 2 ++ 2 files changed, 3 insertions(+) diff --git a/server.go b/server.go index 6f1b63e..d28bf86 100644 --- a/server.go +++ b/server.go @@ -98,6 +98,7 @@ func setup() *web.Mux { TemplateSet := pongo2.NewSet("templates", p2l) TemplateSet.Globals["sitename"] = Config.siteName TemplateSet.Globals["siteurl"] = Config.siteURL + TemplateSet.Globals["using_auth"] = Config.authFile != "" err = populateTemplatesMap(TemplateSet, Templates) if err != nil { log.Fatal("Error: could not load templates", err) diff --git a/templates/base.html b/templates/base.html index e62f35f..e171516 100644 --- a/templates/base.html +++ b/templates/base.html @@ -13,8 +13,10 @@
    + + + + {% if shorturlEnabled %} + + {% endif %} {% endblock %} diff --git a/templates/paste.html b/templates/paste.html index 3d71c74..1294b5e 100644 --- a/templates/paste.html +++ b/templates/paste.html @@ -1,9 +1,5 @@ {% extends "base.html" %} -{% block head %} - -{% endblock %} - {% block content %}
    From e6db8553b0e0607faa5cd9d9bdefa5fd7dd8fe4f Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Thu, 16 Jun 2016 22:33:32 -0700 Subject: [PATCH 130/345] Fix line numbers for text --- templates/display/bin.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/templates/display/bin.html b/templates/display/bin.html index a3aab36..12e49c9 100644 --- a/templates/display/bin.html +++ b/templates/display/bin.html @@ -2,8 +2,10 @@ {% block head %} +{% if extra.lang_hl != "text" %} - {% endblock %} +{% endif %} +{% endblock %} {% block innercontentmore %} class="scrollable"{% endblock %} From 9467be97179faae97ea1810062c0119258eeaee5 Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Fri, 17 Jun 2016 21:22:24 -0700 Subject: [PATCH 131/345] No margin/border without line numbers --- static/css/highlight/lines.css | 6 +++--- static/js/bin_hljs.js | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/static/css/highlight/lines.css b/static/css/highlight/lines.css index 68c7a56..107e272 100644 --- a/static/css/highlight/lines.css +++ b/static/css/highlight/lines.css @@ -1,14 +1,14 @@ -#normal-code { +.linenumbers { border-left: 1px solid #ccc; margin-left: 36px; position: relative; } -#normal-code code { +.linenumbers code { counter-reset: linenumbers; } -#normal-code code div:before { +.linenumbers code div:before { content: counter(linenumbers); counter-increment: linenumbers; left: -36px; diff --git a/static/js/bin_hljs.js b/static/js/bin_hljs.js index 083ef4c..bf11657 100644 --- a/static/js/bin_hljs.js +++ b/static/js/bin_hljs.js @@ -12,4 +12,7 @@ for (var i = 0; i < lines.length; i++) { codeb.appendChild(div); }; + +var ncode = document.getElementById("normal-code"); +ncode.className = "linenumbers"; // @license-end From 93d37002ddf2793bf5c3a802f1803375c80f7ce7 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Thu, 7 Jul 2016 19:34:53 -0700 Subject: [PATCH 132/345] remove unnecessary file processing in display.go There is no need to open the file here; nothing is done with the header after it is read. --- display.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/display.go b/display.go index f26b665..b196477 100644 --- a/display.go +++ b/display.go @@ -39,12 +39,6 @@ func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { extra := make(map[string]string) lines := []string{} - file, _ := fileBackend.Open(fileName) - defer file.Close() - - header := make([]byte, 512) - file.Read(header) - extension := strings.TrimPrefix(filepath.Ext(fileName), ".") if strings.EqualFold("application/json", r.Header.Get("Accept")) { From 1e1f28658d6febdb5426379547c34c8248befdd8 Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Fri, 22 Jul 2016 18:08:59 -0700 Subject: [PATCH 133/345] Remove spaces in mime mapping and ensure no spaces in filenames --- upload.go | 1 + util.go | 36 ++++++++++++++++++------------------ 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/upload.go b/upload.go index b8b395b..8c8f9f6 100644 --- a/upload.go +++ b/upload.go @@ -230,6 +230,7 @@ func processUpload(upReq UploadRequest) (upload Upload, err error) { } upload.Filename = strings.Join([]string{barename, extension}, ".") + upload.Filename = strings.Replace(upload.Filename, " ", "", -1) fileexists, _ := fileBackend.Exists(upload.Filename) diff --git a/util.go b/util.go index 37c59a9..c07a5f4 100644 --- a/util.go +++ b/util.go @@ -44,7 +44,7 @@ var mimeToExtension = map[string]string{ "application/gpx+xml": "gpx", "application/gxf": "gxf", "application/hyperstudio": "stk", - "application/inkml+xml": "ink inkml", + "application/inkml+xml": "ink", "application/ipfix": "ipfix", "application/java-archive": "jar", "application/java-serialized-object": "ser", @@ -135,7 +135,7 @@ var mimeToExtension = map[string]string{ "application/vnd.accpac.simply.aso": "aso", "application/vnd.accpac.simply.imp": "imp", "application/vnd.acucobol": "acu", - "application/vnd.acucorp": "atc acutc", + "application/vnd.acucorp": "atc", "application/vnd.adobe.air-application-installer-package+zip": "air", "application/vnd.adobe.formscentral.fcdt": "fcdt", "application/vnd.adobe.fxp": "fxp", @@ -226,14 +226,14 @@ var mimeToExtension = map[string]string{ "application/vnd.genomatix.tuxedo": "txd", "application/vnd.geogebra.file": "ggb", "application/vnd.geogebra.tool": "ggt", - "application/vnd.geometry-explorer": "gex gre", + "application/vnd.geometry-explorer": "gex", "application/vnd.geonext": "gxt", "application/vnd.geoplan": "g2w", "application/vnd.geospace": "g3w", "application/vnd.gmx": "gmx", "application/vnd.google-earth.kml+xml": "kml", "application/vnd.google-earth.kmz": "kmz", - "application/vnd.grafeq": "gqf gqs", + "application/vnd.grafeq": "gqf", "application/vnd.groove-account": "gac", "application/vnd.groove-help": "ghf", "application/vnd.groove-identity-message": "gim", @@ -256,7 +256,7 @@ var mimeToExtension = map[string]string{ "application/vnd.ibm.modcap": "afp", "application/vnd.ibm.rights-management": "irm", "application/vnd.ibm.secure-container": "sc", - "application/vnd.iccprofile": "icc icm", + "application/vnd.iccprofile": "icc", "application/vnd.igloader": "igl", "application/vnd.immervision-ivp": "ivp", "application/vnd.immervision-ivu": "ivu", @@ -284,7 +284,7 @@ var mimeToExtension = map[string]string{ "application/vnd.kde.kword": "kwd", "application/vnd.kenameaapp": "htke", "application/vnd.kidspiration": "kia", - "application/vnd.kinar": "kne knp", + "application/vnd.kinar": "kne", "application/vnd.koan": "skp", "application/vnd.kodak-descriptor": "sse", "application/vnd.las.las+xml": "lasxml", @@ -330,13 +330,13 @@ var mimeToExtension = map[string]string{ "application/vnd.ms-officetheme": "thmx", "application/vnd.ms-pki.seccat": "cat", "application/vnd.ms-pki.stl": "stl", - "application/vnd.ms-powerpoint": "ppt pps pot", + "application/vnd.ms-powerpoint": "ppt", "application/vnd.ms-powerpoint.addin.macroenabled.12": "ppam", "application/vnd.ms-powerpoint.presentation.macroenabled.12": "pptm", "application/vnd.ms-powerpoint.slide.macroenabled.12": "sldm", "application/vnd.ms-powerpoint.slideshow.macroenabled.12": "ppsm", "application/vnd.ms-powerpoint.template.macroenabled.12": "potm", - "application/vnd.ms-project": "mpp mpt", + "application/vnd.ms-project": "mpp", "application/vnd.ms-word.document.macroenabled.12": "docm", "application/vnd.ms-word.template.macroenabled.12": "dotm", "application/vnd.ms-works": "wps", @@ -347,7 +347,7 @@ var mimeToExtension = map[string]string{ "application/vnd.muvee.style": "msty", "application/vnd.mynfc": "taglet", "application/vnd.neurolanguage.nlu": "nlu", - "application/vnd.nitf": "ntf nitf", + "application/vnd.nitf": "ntf", "application/vnd.noblenet-directory": "nnd", "application/vnd.noblenet-sealer": "nns", "application/vnd.noblenet-web": "nnw", @@ -389,7 +389,7 @@ var mimeToExtension = map[string]string{ "application/vnd.osgeo.mapguide.package": "mgp", "application/vnd.osgi.dp": "dp", "application/vnd.osgi.subsystem": "esa", - "application/vnd.palm": "pdb pqa oprc", + "application/vnd.palm": "pdb", "application/vnd.pawaafile": "paw", "application/vnd.pg.format": "str", "application/vnd.pg.osasli": "ei6", @@ -655,8 +655,8 @@ var mimeToExtension = map[string]string{ "image/png": "png", "image/prs.btif": "btif", "image/sgi": "sgi", - "image/svg+xml": "svg svgz", - "image/tiff": "tiff tif", + "image/svg+xml": "svg", + "image/tiff": "tiff", "image/vnd.adobe.photoshop": "psd", "image/vnd.dece.graphic": "uvi", "image/vnd.dvb.subtitle": "sub", @@ -691,7 +691,7 @@ var mimeToExtension = map[string]string{ "image/x-xbitmap": "xbm", "image/x-xpixmap": "xpm", "image/x-xwindowdump": "xwd", - "message/rfc822": "eml mime", + "message/rfc822": "eml", "model/iges": "igs", "model/mesh": "mesh", "model/vnd.collada+xml": "dae", @@ -700,12 +700,12 @@ var mimeToExtension = map[string]string{ "model/vnd.gtw": "gtw", "model/vnd.mts": "mts", "model/vnd.vtu": "vtu", - "model/vrml": "wrl vrml", + "model/vrml": "wrl", "model/x3d+binary": "x3db", "model/x3d+vrml": "x3dv", "model/x3d+xml": "x3d", "text/cache-manifest": "appcache", - "text/calendar": "ics ifb", + "text/calendar": "ics", "text/css": "css", "text/csv": "csv", "text/html": "html", @@ -713,7 +713,7 @@ var mimeToExtension = map[string]string{ "text/plain": "txt", "text/prs.lines.tag": "dsc", "text/richtext": "rtx", - "text/sgml": "sgml sgm", + "text/sgml": "sgml", "text/tab-separated-values": "tsv", "text/troff": "t", "text/turtle": "ttl", @@ -732,12 +732,12 @@ var mimeToExtension = map[string]string{ "text/vnd.sun.j2me.app-descriptor": "jad", "text/vnd.wap.wml": "wml", "text/vnd.wap.wmlscript": "wmls", - "text/x-asm": "s asm", + "text/x-asm": "s", "text/x-c": "c", "text/x-fortran": "f", "text/x-java-source": "java", "text/x-opml": "opml", - "text/x-pascal": "p pas", + "text/x-pascal": "p", "text/x-nfo": "nfo", "text/x-shellscript": "sh", "text/x-setext": "etx", From 81a15138094ee3ec5b48ecb03737bdf73496a064 Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Fri, 22 Jul 2016 18:15:44 -0700 Subject: [PATCH 134/345] Add newline for PUT response --- server_test.go | 3 ++- upload.go | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/server_test.go b/server_test.go index 527e3be..ed45105 100644 --- a/server_test.go +++ b/server_test.go @@ -4,6 +4,7 @@ import ( "bytes" "crypto/tls" "encoding/json" + "fmt" "mime/multipart" "net/http" "net/http/httptest" @@ -611,7 +612,7 @@ func TestPutUpload(t *testing.T) { mux.ServeHTTP(w, req) - if w.Body.String() != Config.siteURL+filename { + if w.Body.String() != fmt.Sprintf("%s\n", Config.siteURL+filename) { t.Fatal("Response was not expected URL") } } diff --git a/upload.go b/upload.go index 8c8f9f6..b0bbd9f 100644 --- a/upload.go +++ b/upload.go @@ -132,7 +132,7 @@ func uploadPutHandler(c web.C, w http.ResponseWriter, r *http.Request) { return } - fmt.Fprintf(w, getSiteURL(r)+upload.Filename) + fmt.Fprintf(w, "%s\n", getSiteURL(r)+upload.Filename) } } From 4ef3f338215229a54811099c7b2444cebebc23b2 Mon Sep 17 00:00:00 2001 From: Thor77 Date: Mon, 22 Aug 2016 23:02:46 +0200 Subject: [PATCH 135/345] Add systemd-service (#96) --- linx-server.service | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 linx-server.service diff --git a/linx-server.service b/linx-server.service new file mode 100644 index 0000000..d764832 --- /dev/null +++ b/linx-server.service @@ -0,0 +1,8 @@ +[Unit] +Description=Self-hosted file/code/media sharing website +After=network.target + +[Service] +User=linx +Group=linx +ExecStart=/usr/bin/linx-server From 2e5521ce7dde35aef0beda44b3ecbba78fa15934 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Thu, 15 Sep 2016 22:26:35 -0700 Subject: [PATCH 136/345] Add Dockerfile This will build the binary directly in the image without a need to have Go installed locally. --- Dockerfile | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..6ff81bd --- /dev/null +++ b/Dockerfile @@ -0,0 +1,13 @@ +FROM golang:alpine + +RUN set -ex \ + && apk add --no-cache --virtual .build-deps git mercurial \ + && go get github.com/andreimarcu/linx-server \ + && apk del .build-deps + +VOLUME ["/data/files", "/data/meta"] + +EXPOSE 8080 +USER nobody +ENTRYPOINT ["/go/bin/linx-server", "-bind=0.0.0.0:8080", "-filespath=/data/files/", "-metapath=/data/meta/"] +CMD ["-sitename=linx", "-allowhotlink"] From 932a470ead2aa7ebc19a62f68339f28c11adbc0b Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Sat, 17 Sep 2016 20:20:46 -0700 Subject: [PATCH 137/345] add Docker instructions to readme --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index af844e3..780384d 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,15 @@ Run linx-server with the ```-certfile path/to/cert.file``` and ```-keyfile path/ #### 3. Using the built-in http server Run linx-server normally. +#### 4. Using Docker with the built-in http server +First, build the image: +```docker build -t linx-server .``` + +You'll need some directories for the persistent storage. For the purposes of this example, we will use `/media/meta` and `/media/files`. + +Then, run it: +```docker run -p 8080:8080 -v /media/meta:/data/meta -v /media/files:/data/files linx-server``` + Development ----------- From fef43d856e115dda758a822964d7596e66640d71 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Sun, 18 Sep 2016 21:45:00 -0700 Subject: [PATCH 138/345] Add option for maximum expiration time (fixes #99) --- README.md | 1 + expiry.go | 53 +++++++++++++++++++++++++ pages.go | 7 +++- server.go | 3 ++ server_test.go | 94 ++++++++++++++++++++++++++++++++++++++++++++ templates/index.html | 11 ++---- templates/paste.html | 14 ++----- upload.go | 9 +++-- 8 files changed, 169 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 780384d..59b978b 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,7 @@ allowhotlink = true - ```-filespath files/"``` -- Path to store uploads (default is files/) - ```-metapath meta/``` -- Path to store information about uploads (default is meta/) - ```-maxsize 4294967296``` -- maximum upload file size in bytes (default 4GB) +- ```-maxexpiry 86400``` -- maximum expiration time in seconds (default is 0, which is no expiry) - ```-allowhotlink``` -- Allow file hotlinking - ```-contentsecuritypolicy "..."``` -- Content-Security-Policy header for pages (default is "default-src 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; frame-ancestors 'self'; referrer origin;") - ```-filecontentsecuritypolicy "..."``` -- Content-Security-Policy header for files (default is "default-src 'none'; img-src 'self'; object-src 'self'; media-src 'self'; style-src 'self' 'unsafe-inline'; frame-ancestors 'self'; referrer origin;") diff --git a/expiry.go b/expiry.go index 9deaf72..4172f51 100644 --- a/expiry.go +++ b/expiry.go @@ -2,8 +2,25 @@ package main import ( "time" + + "github.com/dustin/go-humanize" ) +var defaultExpiryList = []uint64{ + 60, + 300, + 3600, + 86400, + 604800, + 2419200, + 31536000, +} + +type ExpirationTime struct { + Seconds uint64 + Human string +} + var neverExpire = time.Unix(0, 0) // Determine if a file with expiry set to "ts" has expired yet @@ -21,3 +38,39 @@ func isFileExpired(filename string) (bool, error) { return isTsExpired(metadata.Expiry), nil } + +// Return a list of expiration times and their humanized versions +func listExpirationTimes() []ExpirationTime { + epoch := time.Now() + actualExpiryInList := false + var expiryList []ExpirationTime + + for _, expiry := range defaultExpiryList { + if Config.maxExpiry == 0 || expiry <= Config.maxExpiry { + if expiry == Config.maxExpiry { + actualExpiryInList = true + } + + duration := time.Duration(expiry) * time.Second + expiryList = append(expiryList, ExpirationTime{ + expiry, + humanize.RelTime(epoch, epoch.Add(duration), "", ""), + }) + } + } + + if Config.maxExpiry == 0 { + expiryList = append(expiryList, ExpirationTime{ + 0, + "never", + }) + } else if actualExpiryInList == false { + duration := time.Duration(Config.maxExpiry) * time.Second + expiryList = append(expiryList, ExpirationTime{ + Config.maxExpiry, + humanize.RelTime(epoch, epoch.Add(duration), "", ""), + }) + } + + return expiryList +} diff --git a/pages.go b/pages.go index abd2cbd..f58fa88 100644 --- a/pages.go +++ b/pages.go @@ -21,7 +21,8 @@ const ( func indexHandler(c web.C, w http.ResponseWriter, r *http.Request) { err := renderTemplate(Templates["index.html"], pongo2.Context{ - "maxsize": Config.maxSize, + "maxsize": Config.maxSize, + "expirylist": listExpirationTimes(), }, r, w) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) @@ -29,7 +30,9 @@ func indexHandler(c web.C, w http.ResponseWriter, r *http.Request) { } func pasteHandler(c web.C, w http.ResponseWriter, r *http.Request) { - err := renderTemplate(Templates["paste.html"], pongo2.Context{}, r, w) + err := renderTemplate(Templates["paste.html"], pongo2.Context{ + "expirylist": listExpirationTimes(), + }, r, w) if err != nil { oopsHandler(c, w, r, RespHTML, "") } diff --git a/server.go b/server.go index 3ff5c7f..ac229fe 100644 --- a/server.go +++ b/server.go @@ -47,6 +47,7 @@ var Config struct { fileContentSecurityPolicy string xFrameOptions string maxSize int64 + maxExpiry uint64 realIp bool noLogs bool allowHotlink bool @@ -211,6 +212,8 @@ func main() { "site base url (including trailing slash)") flag.Int64Var(&Config.maxSize, "maxsize", 4*1024*1024*1024, "maximum upload file size in bytes (default 4GB)") + flag.Uint64Var(&Config.maxExpiry, "maxexpiry", 0, + "maximum expiration time in seconds (default is 0, which is no expiry)") flag.StringVar(&Config.certFile, "certfile", "", "path to ssl certificate (for https)") flag.StringVar(&Config.keyFile, "keyfile", "", diff --git a/server_test.go b/server_test.go index ed45105..af7abe0 100644 --- a/server_test.go +++ b/server_test.go @@ -54,6 +54,44 @@ func TestIndex(t *testing.T) { } } +func TestIndexStandardMaxExpiry(t *testing.T) { + mux := setup() + Config.maxExpiry = 60 + w := httptest.NewRecorder() + + req, err := http.NewRequest("GET", "/", nil) + if err != nil { + t.Fatal(err) + } + + mux.ServeHTTP(w, req) + + if strings.Contains(w.Body.String(), ">1 hour") { + t.Fatal("String '>1 hour' found in index response") + } + + Config.maxExpiry = 0 +} + +func TestIndexWeirdMaxExpiry(t *testing.T) { + mux := setup() + Config.maxExpiry = 1500 + w := httptest.NewRecorder() + + req, err := http.NewRequest("GET", "/", nil) + if err != nil { + t.Fatal(err) + } + + mux.ServeHTTP(w, req) + + if strings.Contains(w.Body.String(), ">never") { + t.Fatal("String '>never' found in index response") + } + + Config.maxExpiry = 0 +} + func TestAddHeader(t *testing.T) { Config.addHeaders = []string{"Linx-Test: It works!"} @@ -408,6 +446,62 @@ func TestPostJSONUpload(t *testing.T) { } } +func TestPostJSONUploadMaxExpiry(t *testing.T) { + mux := setup() + Config.maxExpiry = 300 + + testExpiries := []string{"86400", "-150"} + for _, expiry := range testExpiries { + w := httptest.NewRecorder() + + filename := generateBarename() + ".txt" + + var b bytes.Buffer + mw := multipart.NewWriter(&b) + fw, err := mw.CreateFormFile("file", filename) + if err != nil { + t.Fatal(err) + } + + fw.Write([]byte("File content")) + mw.Close() + + req, err := http.NewRequest("POST", "/upload/", &b) + req.Header.Set("Content-Type", mw.FormDataContentType()) + req.Header.Set("Accept", "application/json") + req.Header.Set("Linx-Expiry", expiry) + if err != nil { + t.Fatal(err) + } + + mux.ServeHTTP(w, req) + + if w.Code != 200 { + t.Log(w.Body.String()) + t.Fatalf("Status code is not 200, but %d", w.Code) + } + + var myjson RespOkJSON + err = json.Unmarshal([]byte(w.Body.String()), &myjson) + if err != nil { + fmt.Println(w.Body.String()) + t.Fatal(err) + } + + myExp, err := strconv.ParseInt(myjson.Expiry, 10, 64) + if err != nil { + t.Fatal(err) + } + + expected := time.Now().Add(time.Duration(Config.maxExpiry) * time.Second).Unix() + if myExp != expected { + t.Fatalf("File expiry is not %d but %s", expected, myjson.Expiry) + } + } + + Config.maxExpiry = 0 +} + func TestPostExpiresJSONUpload(t *testing.T) { mux := setup() w := httptest.NewRecorder() diff --git a/templates/index.html b/templates/index.html index 240a17d..5e95d01 100644 --- a/templates/index.html +++ b/templates/index.html @@ -20,14 +20,9 @@
    diff --git a/templates/paste.html b/templates/paste.html index 1294b5e..9178ba4 100644 --- a/templates/paste.html +++ b/templates/paste.html @@ -8,19 +8,13 @@
    -
    diff --git a/upload.go b/upload.go index b0bbd9f..e67a20a 100644 --- a/upload.go +++ b/upload.go @@ -343,12 +343,15 @@ func barePlusExt(filename string) (barename, extension string) { func parseExpiry(expStr string) time.Duration { if expStr == "" { - return 0 + return time.Duration(Config.maxExpiry) * time.Second } else { - expiry, err := strconv.ParseInt(expStr, 10, 64) + expiry, err := strconv.ParseUint(expStr, 10, 64) if err != nil { - return 0 + return time.Duration(Config.maxExpiry) * time.Second } else { + if Config.maxExpiry > 0 && expiry > Config.maxExpiry { + expiry = Config.maxExpiry + } return time.Duration(expiry) * time.Second } } From eb036f28199204ab32f841d37e945d402694baf4 Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Sun, 18 Sep 2016 22:13:52 -0700 Subject: [PATCH 139/345] Fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 59b978b..1921855 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ allowhotlink = true - ```-bind 127.0.0.1:8080``` -- what to bind to (default is 127.0.0.1:8080) - ```-sitename myLinx``` -- the site name displayed on top (default is inferred from Host header) - ```-siteurl "http://mylinx.example.org/"``` -- the site url (default is inferred from execution context) -- ```-filespath files/"``` -- Path to store uploads (default is files/) +- ```-filespath files/``` -- Path to store uploads (default is files/) - ```-metapath meta/``` -- Path to store information about uploads (default is meta/) - ```-maxsize 4294967296``` -- maximum upload file size in bytes (default 4GB) - ```-maxexpiry 86400``` -- maximum expiration time in seconds (default is 0, which is no expiry) From c75cd5ef9efcf56f9c8909718daa4e400db837e4 Mon Sep 17 00:00:00 2001 From: Thor77 Date: Sun, 9 Oct 2016 14:56:26 +0200 Subject: [PATCH 140/345] Add Install-section to systemd-service --- linx-server.service | 3 +++ 1 file changed, 3 insertions(+) diff --git a/linx-server.service b/linx-server.service index d764832..13b1465 100644 --- a/linx-server.service +++ b/linx-server.service @@ -6,3 +6,6 @@ After=network.target User=linx Group=linx ExecStart=/usr/bin/linx-server + +[Install] +WantedBy=multi-user.target From 8f384dc5ceac7ee72b2bfd8c0bf284251ee98a0f Mon Sep 17 00:00:00 2001 From: culdev Date: Sun, 23 Oct 2016 21:07:47 +0200 Subject: [PATCH 141/345] Use value instead of selectedOptions. --- static/js/upload.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/js/upload.js b/static/js/upload.js index 6ebcfa6..5e54d62 100644 --- a/static/js/upload.js +++ b/static/js/upload.js @@ -43,7 +43,7 @@ Dropzone.options.dropzone = { }, sending: function(file, xhr, formData) { formData.append("randomize", document.getElementById("randomize").checked); - formData.append("expires", document.getElementById("expires").selectedOptions[0].value); + formData.append("expires", document.getElementById("expires").value); }, success: function(file, resp) { file.fileActions.removeChild(file.progressElement); From 647aa2c0f612cde385a2efb7150d05ea5f442533 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Wed, 2 Nov 2016 19:31:32 -0700 Subject: [PATCH 142/345] Fix max expiry when provided expiry is 0 Previously, we did not properly handle the case where the provided expiry was zero and the max expiry was configured to be nonzero; add an additional check to cover this case. Fixes #111. --- server_test.go | 4 +++- upload.go | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/server_test.go b/server_test.go index af7abe0..a590465 100644 --- a/server_test.go +++ b/server_test.go @@ -450,7 +450,9 @@ func TestPostJSONUploadMaxExpiry(t *testing.T) { mux := setup() Config.maxExpiry = 300 - testExpiries := []string{"86400", "-150"} + // include 0 to test edge case + // https://github.com/andreimarcu/linx-server/issues/111 + testExpiries := []string{"86400", "-150", "0"} for _, expiry := range testExpiries { w := httptest.NewRecorder() diff --git a/upload.go b/upload.go index e67a20a..1233d1a 100644 --- a/upload.go +++ b/upload.go @@ -349,7 +349,7 @@ func parseExpiry(expStr string) time.Duration { if err != nil { return time.Duration(Config.maxExpiry) * time.Second } else { - if Config.maxExpiry > 0 && expiry > Config.maxExpiry { + if Config.maxExpiry > 0 && (expiry > Config.maxExpiry || expiry == 0) { expiry = Config.maxExpiry } return time.Duration(expiry) * time.Second From e6ac89d6dc1b32164617b424689c12a21eaeafb3 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Sat, 25 Mar 2017 01:05:23 -0700 Subject: [PATCH 143/345] Switch to https://github.com/h2non/filetype This library is much better at detecting MIME types properly than the existing one. Fixes #117. --- meta.go | 9 +++++++-- upload.go | 13 +++++-------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/meta.go b/meta.go index df2e0b5..d2fb637 100644 --- a/meta.go +++ b/meta.go @@ -15,8 +15,8 @@ import ( "time" "unicode" - "bitbucket.org/taruti/mimemagic" "github.com/dchest/uniuri" + "gopkg.in/h2non/filetype.v1" ) type MetadataJSON struct { @@ -66,7 +66,12 @@ func generateMetadata(fName string, exp time.Time, delKey string) (m Metadata, e header := make([]byte, 512) file.Read(header) - m.Mimetype = mimemagic.Match("", header) + kind, err := filetype.Match(header) + if err != nil { + m.Mimetype = "application/octet-stream" + } else { + m.Mimetype = kind.MIME.Value + } if m.Mimetype == "" { // Check if the file seems anything like text diff --git a/upload.go b/upload.go index 1233d1a..bd2bed6 100644 --- a/upload.go +++ b/upload.go @@ -15,9 +15,9 @@ import ( "strings" "time" - "bitbucket.org/taruti/mimemagic" "github.com/dchest/uniuri" "github.com/zenazn/goji/web" + "gopkg.in/h2non/filetype.v1" ) var fileBlacklist = map[string]bool{ @@ -218,15 +218,12 @@ func processUpload(upReq UploadRequest) (upload Upload, err error) { header = header[:n] // Determine the type of file from header - mimetype := mimemagic.Match("", header) - - // If the mime type is in our map, use that - // otherwise just use "ext" - if val, exists := mimeToExtension[mimetype]; exists { - extension = val - } else { + kind, err := filetype.Match(header) + if err != nil { extension = "ext" } + + extension = kind.Extension } upload.Filename = strings.Join([]string{barename, extension}, ".") From 37f9a0cbbc53a484ef7a415b1f813e5a5d1620f8 Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Sat, 25 Mar 2017 08:44:18 -0700 Subject: [PATCH 144/345] Change unknown extension from .ext to .file --- server_test.go | 12 ++++++------ upload.go | 8 ++++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/server_test.go b/server_test.go index a590465..6fe363c 100644 --- a/server_test.go +++ b/server_test.go @@ -699,7 +699,7 @@ func TestPutUpload(t *testing.T) { mux := setup() w := httptest.NewRecorder() - filename := generateBarename() + ".ext" + filename := generateBarename() + ".file" req, err := http.NewRequest("PUT", "/upload/"+filename, strings.NewReader("File content")) if err != nil { @@ -717,7 +717,7 @@ func TestPutRandomizedUpload(t *testing.T) { mux := setup() w := httptest.NewRecorder() - filename := generateBarename() + ".ext" + filename := generateBarename() + ".file" req, err := http.NewRequest("PUT", "/upload/"+filename, strings.NewReader("File content")) if err != nil { @@ -757,7 +757,7 @@ func TestPutEmptyUpload(t *testing.T) { mux := setup() w := httptest.NewRecorder() - filename := generateBarename() + ".ext" + filename := generateBarename() + ".file" req, err := http.NewRequest("PUT", "/upload/"+filename, strings.NewReader("")) if err != nil { @@ -779,7 +779,7 @@ func TestPutJSONUpload(t *testing.T) { mux := setup() w := httptest.NewRecorder() - filename := generateBarename() + ".ext" + filename := generateBarename() + ".file" req, err := http.NewRequest("PUT", "/upload/"+filename, strings.NewReader("File content")) if err != nil { @@ -806,7 +806,7 @@ func TestPutRandomizedJSONUpload(t *testing.T) { mux := setup() w := httptest.NewRecorder() - filename := generateBarename() + ".ext" + filename := generateBarename() + ".file" req, err := http.NewRequest("PUT", "/upload/"+filename, strings.NewReader("File content")) if err != nil { @@ -834,7 +834,7 @@ func TestPutExpireJSONUpload(t *testing.T) { mux := setup() w := httptest.NewRecorder() - filename := generateBarename() + ".ext" + filename := generateBarename() + ".file" req, err := http.NewRequest("PUT", "/upload/"+filename, strings.NewReader("File content")) if err != nil { diff --git a/upload.go b/upload.go index bd2bed6..9cf8713 100644 --- a/upload.go +++ b/upload.go @@ -219,11 +219,11 @@ func processUpload(upReq UploadRequest) (upload Upload, err error) { // Determine the type of file from header kind, err := filetype.Match(header) - if err != nil { - extension = "ext" + if err != nil || kind.Extension == "unknown" { + extension = "file" + } else { + extension = kind.Extension } - - extension = kind.Extension } upload.Filename = strings.Join([]string{barename, extension}, ".") From bb7f7a177479896ab9ca8b15a4aee0009097c283 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Sat, 25 Mar 2017 15:10:54 -0700 Subject: [PATCH 145/345] Remove mime type to extension map from util.go This is no longer used, so it can be removed. --- util.go | 770 -------------------------------------------------------- 1 file changed, 770 deletions(-) diff --git a/util.go b/util.go index c07a5f4..3074ebc 100644 --- a/util.go +++ b/util.go @@ -18,776 +18,6 @@ func supportedBinExtension(extension string) bool { return exists } -var mimeToExtension = map[string]string{ - "application/andrew-inset": "ez", - "application/applixware": "aw", - "application/atom+xml": "atom", - "application/atomcat+xml": "atomcat", - "application/atomsvc+xml": "atomsvc", - "application/ccxml+xml": "ccxml", - "application/cdmi-capability": "cdmia", - "application/cdmi-container": "cdmic", - "application/cdmi-domain": "cdmid", - "application/cdmi-object": "cdmio", - "application/cdmi-queue": "cdmiq", - "application/cu-seeme": "cu", - "application/davmount+xml": "davmount", - "application/docbook+xml": "dbk", - "application/dssc+der": "dssc", - "application/dssc+xml": "xdssc", - "application/ecmascript": "ecma", - "application/emma+xml": "emma", - "application/epub+zip": "epub", - "application/exi": "exi", - "application/font-tdpfr": "pfr", - "application/gml+xml": "gml", - "application/gpx+xml": "gpx", - "application/gxf": "gxf", - "application/hyperstudio": "stk", - "application/inkml+xml": "ink", - "application/ipfix": "ipfix", - "application/java-archive": "jar", - "application/java-serialized-object": "ser", - "application/java-vm": "class", - "application/javascript": "js", - "application/json": "json", - "application/jsonml+json": "jsonml", - "application/lost+xml": "lostxml", - "application/mac-binhex40": "hqx", - "application/mac-compactpro": "cpt", - "application/mads+xml": "mads", - "application/marc": "mrc", - "application/marcxml+xml": "mrcx", - "application/mathematica": "ma", - "application/mathml+xml": "mathml", - "application/mbox": "mbox", - "application/mediaservercontrol+xml": "mscml", - "application/metalink+xml": "metalink", - "application/metalink4+xml": "meta4", - "application/mets+xml": "mets", - "application/mods+xml": "mods", - "application/mp21": "mp21", - "application/mp4": "mp4s", - "application/msword": "doc", - "application/mxf": "mxf", - "application/octet-stream": "bin", - "application/oda": "oda", - "application/oebps-package+xml": "opf", - "application/ogg": "ogx", - "application/omdoc+xml": "omdoc", - "application/onenote": "onetoc", - "application/oxps": "oxps", - "application/patch-ops-error+xml": "xer", - "application/pdf": "pdf", - "application/pgp-encrypted": "pgp", - "application/pgp-signature": "asc", - "application/pics-rules": "prf", - "application/pkcs10": "p10", - "application/pkcs7-mime": "p7m", - "application/pkcs7-signature": "p7s", - "application/pkcs8": "p8", - "application/pkix-attr-cert": "ac", - "application/pkix-cert": "cer", - "application/pkix-crl": "crl", - "application/pkix-pkipath": "pkipath", - "application/pkixcmp": "pki", - "application/pls+xml": "pls", - "application/postscript": "ps", - "application/prs.cww": "cww", - "application/pskc+xml": "pskcxml", - "application/rdf+xml": "rdf", - "application/reginfo+xml": "rif", - "application/relax-ng-compact-syntax": "rnc", - "application/resource-lists+xml": "rl", - "application/resource-lists-diff+xml": "rld", - "application/rls-services+xml": "rs", - "application/rpki-ghostbusters": "gbr", - "application/rpki-manifest": "mft", - "application/rpki-roa": "roa", - "application/rsd+xml": "rsd", - "application/rss+xml": "rss", - "application/rtf": "rtf", - "application/sbml+xml": "sbml", - "application/scvp-cv-request": "scq", - "application/scvp-cv-response": "scs", - "application/scvp-vp-request": "spq", - "application/scvp-vp-response": "spp", - "application/sdp": "sdp", - "application/set-payment-initiation": "setpay", - "application/set-registration-initiation": "setreg", - "application/shf+xml": "shf", - "application/smil+xml": "smil", - "application/sparql-query": "rq", - "application/sparql-results+xml": "srx", - "application/srgs": "gram", - "application/srgs+xml": "grxml", - "application/sru+xml": "sru", - "application/ssdl+xml": "ssdl", - "application/ssml+xml": "ssml", - "application/tei+xml": "tei", - "application/thraud+xml": "tfi", - "application/timestamped-data": "tsd", - "application/vnd.3gpp.pic-bw-large": "plb", - "application/vnd.3gpp.pic-bw-small": "psb", - "application/vnd.3gpp.pic-bw-var": "pvb", - "application/vnd.3gpp2.tcap": "tcap", - "application/vnd.3m.post-it-notes": "pwn", - "application/vnd.accpac.simply.aso": "aso", - "application/vnd.accpac.simply.imp": "imp", - "application/vnd.acucobol": "acu", - "application/vnd.acucorp": "atc", - "application/vnd.adobe.air-application-installer-package+zip": "air", - "application/vnd.adobe.formscentral.fcdt": "fcdt", - "application/vnd.adobe.fxp": "fxp", - "application/vnd.adobe.xdp+xml": "xdp", - "application/vnd.adobe.xfdf": "xfdf", - "application/vnd.ahead.space": "ahead", - "application/vnd.airzip.filesecure.azf": "azf", - "application/vnd.airzip.filesecure.azs": "azs", - "application/vnd.amazon.ebook": "azw", - "application/vnd.americandynamics.acc": "acc", - "application/vnd.amiga.ami": "ami", - "application/vnd.android.package-archive": "apk", - "application/vnd.anser-web-certificate-issue-initiation": "cii", - "application/vnd.anser-web-funds-transfer-initiation": "fti", - "application/vnd.antix.game-component": "atx", - "application/vnd.apple.installer+xml": "mpkg", - "application/vnd.apple.mpegurl": "m3u8", - "application/vnd.aristanetworks.swi": "swi", - "application/vnd.astraea-software.iota": "iota", - "application/vnd.audiograph": "aep", - "application/vnd.blueice.multipass": "mpm", - "application/vnd.bmi": "bmi", - "application/vnd.businessobjects": "rep", - "application/vnd.chemdraw+xml": "cdxml", - "application/vnd.chipnuts.karaoke-mmd": "mmd", - "application/vnd.cinderella": "cdy", - "application/vnd.claymore": "cla", - "application/vnd.cloanto.rp9": "rp9", - "application/vnd.clonk.c4group": "c4g", - "application/vnd.cluetrust.cartomobile-config": "c11amc", - "application/vnd.cluetrust.cartomobile-config-pkg": "c11amz", - "application/vnd.commonspace": "csp", - "application/vnd.contact.cmsg": "cdbcmsg", - "application/vnd.cosmocaller": "cmc", - "application/vnd.crick.clicker": "clkx", - "application/vnd.crick.clicker.keyboard": "clkk", - "application/vnd.crick.clicker.palette": "clkp", - "application/vnd.crick.clicker.template": "clkt", - "application/vnd.crick.clicker.wordbank": "clkw", - "application/vnd.criticaltools.wbs+xml": "wbs", - "application/vnd.ctc-posml": "pml", - "application/vnd.cups-ppd": "ppd", - "application/vnd.curl.car": "car", - "application/vnd.curl.pcurl": "pcurl", - "application/vnd.dart": "dart", - "application/vnd.data-vision.rdz": "rdz", - "application/vnd.dece.data": "uvf", - "application/vnd.dece.ttml+xml": "uvt", - "application/vnd.dece.unspecified": "uvx", - "application/vnd.dece.zip": "uvz", - "application/vnd.denovo.fcselayout-link": "fe_launch", - "application/vnd.dna": "dna", - "application/vnd.dolby.mlp": "mlp", - "application/vnd.dpgraph": "dpg", - "application/vnd.dreamfactory": "dfac", - "application/vnd.ds-keypoint": "kpxx", - "application/vnd.dvb.ait": "ait", - "application/vnd.dvb.service": "svc", - "application/vnd.dynageo": "geo", - "application/vnd.ecowin.chart": "mag", - "application/vnd.enliven": "nml", - "application/vnd.epson.esf": "esf", - "application/vnd.epson.msf": "msf", - "application/vnd.epson.quickanime": "qam", - "application/vnd.epson.salt": "slt", - "application/vnd.epson.ssf": "ssf", - "application/vnd.eszigno3+xml": "es3", - "application/vnd.ezpix-album": "ez2", - "application/vnd.ezpix-package": "ez3", - "application/vnd.fdf": "fdf", - "application/vnd.fdsn.mseed": "mseed", - "application/vnd.fdsn.seed": "seed", - "application/vnd.flographit": "gph", - "application/vnd.fluxtime.clip": "ftc", - "application/vnd.framemaker": "fm", - "application/vnd.frogans.fnc": "fnc", - "application/vnd.frogans.ltf": "ltf", - "application/vnd.fsc.weblaunch": "fsc", - "application/vnd.fujitsu.oasys": "oas", - "application/vnd.fujitsu.oasys2": "oa2", - "application/vnd.fujitsu.oasys3": "oa3", - "application/vnd.fujitsu.oasysgp": "fg5", - "application/vnd.fujitsu.oasysprs": "bh2", - "application/vnd.fujixerox.ddd": "ddd", - "application/vnd.fujixerox.docuworks": "xdw", - "application/vnd.fujixerox.docuworks.binder": "xbd", - "application/vnd.fuzzysheet": "fzs", - "application/vnd.genomatix.tuxedo": "txd", - "application/vnd.geogebra.file": "ggb", - "application/vnd.geogebra.tool": "ggt", - "application/vnd.geometry-explorer": "gex", - "application/vnd.geonext": "gxt", - "application/vnd.geoplan": "g2w", - "application/vnd.geospace": "g3w", - "application/vnd.gmx": "gmx", - "application/vnd.google-earth.kml+xml": "kml", - "application/vnd.google-earth.kmz": "kmz", - "application/vnd.grafeq": "gqf", - "application/vnd.groove-account": "gac", - "application/vnd.groove-help": "ghf", - "application/vnd.groove-identity-message": "gim", - "application/vnd.groove-injector": "grv", - "application/vnd.groove-tool-message": "gtm", - "application/vnd.groove-tool-template": "tpl", - "application/vnd.groove-vcard": "vcg", - "application/vnd.hal+xml": "hal", - "application/vnd.handheld-entertainment+xml": "zmm", - "application/vnd.hbci": "hbci", - "application/vnd.hhe.lesson-player": "les", - "application/vnd.hp-hpgl": "hpgl", - "application/vnd.hp-hpid": "hpid", - "application/vnd.hp-hps": "hps", - "application/vnd.hp-jlyt": "jlt", - "application/vnd.hp-pcl": "pcl", - "application/vnd.hp-pclxl": "pclxl", - "application/vnd.hydrostatix.sof-data": "sfd-hdstx", - "application/vnd.ibm.minipay": "mpy", - "application/vnd.ibm.modcap": "afp", - "application/vnd.ibm.rights-management": "irm", - "application/vnd.ibm.secure-container": "sc", - "application/vnd.iccprofile": "icc", - "application/vnd.igloader": "igl", - "application/vnd.immervision-ivp": "ivp", - "application/vnd.immervision-ivu": "ivu", - "application/vnd.insors.igm": "igm", - "application/vnd.intercon.formnet": "xpw", - "application/vnd.intergeo": "i2g", - "application/vnd.intu.qbo": "qbo", - "application/vnd.intu.qfx": "qfx", - "application/vnd.ipunplugged.rcprofile": "rcprofile", - "application/vnd.irepository.package+xml": "irp", - "application/vnd.is-xpr": "xpr", - "application/vnd.isac.fcs": "fcs", - "application/vnd.jam": "jam", - "application/vnd.jcp.javame.midlet-rms": "rms", - "application/vnd.jisp": "jisp", - "application/vnd.joost.joda-archive": "joda", - "application/vnd.kahootz": "ktz", - "application/vnd.kde.karbon": "karbon", - "application/vnd.kde.kchart": "chrt", - "application/vnd.kde.kformula": "kfo", - "application/vnd.kde.kivio": "flw", - "application/vnd.kde.kontour": "kon", - "application/vnd.kde.kpresenter": "kpr", - "application/vnd.kde.kspread": "ksp", - "application/vnd.kde.kword": "kwd", - "application/vnd.kenameaapp": "htke", - "application/vnd.kidspiration": "kia", - "application/vnd.kinar": "kne", - "application/vnd.koan": "skp", - "application/vnd.kodak-descriptor": "sse", - "application/vnd.las.las+xml": "lasxml", - "application/vnd.llamagraphics.life-balance.desktop": "lbd", - "application/vnd.llamagraphics.life-balance.exchange+xml": "lbe", - "application/vnd.lotus-1-2-3": "123", - "application/vnd.lotus-approach": "apr", - "application/vnd.lotus-freelance": "pre", - "application/vnd.lotus-notes": "nsf", - "application/vnd.lotus-organizer": "org", - "application/vnd.lotus-screencam": "scm", - "application/vnd.lotus-wordpro": "lwp", - "application/vnd.macports.portpkg": "portpkg", - "application/vnd.mcd": "mcd", - "application/vnd.medcalcdata": "mc1", - "application/vnd.mediastation.cdkey": "cdkey", - "application/vnd.mfer": "mwf", - "application/vnd.mfmp": "mfm", - "application/vnd.micrografx.flo": "flo", - "application/vnd.micrografx.igx": "igx", - "application/vnd.mif": "mif", - "application/vnd.mobius.daf": "daf", - "application/vnd.mobius.dis": "dis", - "application/vnd.mobius.mbk": "mbk", - "application/vnd.mobius.mqy": "mqy", - "application/vnd.mobius.msl": "msl", - "application/vnd.mobius.plc": "plc", - "application/vnd.mobius.txf": "txf", - "application/vnd.mophun.application": "mpn", - "application/vnd.mophun.certificate": "mpc", - "application/vnd.mozilla.xul+xml": "xul", - "application/vnd.ms-artgalry": "cil", - "application/vnd.ms-cab-compressed": "cab", - "application/vnd.ms-excel": "xls", - "application/vnd.ms-excel.addin.macroenabled.12": "xlam", - "application/vnd.ms-excel.sheet.binary.macroenabled.12": "xlsb", - "application/vnd.ms-excel.sheet.macroenabled.12": "xlsm", - "application/vnd.ms-excel.template.macroenabled.12": "xltm", - "application/vnd.ms-fontobject": "eot", - "application/vnd.ms-htmlhelp": "chm", - "application/vnd.ms-ims": "ims", - "application/vnd.ms-lrm": "lrm", - "application/vnd.ms-officetheme": "thmx", - "application/vnd.ms-pki.seccat": "cat", - "application/vnd.ms-pki.stl": "stl", - "application/vnd.ms-powerpoint": "ppt", - "application/vnd.ms-powerpoint.addin.macroenabled.12": "ppam", - "application/vnd.ms-powerpoint.presentation.macroenabled.12": "pptm", - "application/vnd.ms-powerpoint.slide.macroenabled.12": "sldm", - "application/vnd.ms-powerpoint.slideshow.macroenabled.12": "ppsm", - "application/vnd.ms-powerpoint.template.macroenabled.12": "potm", - "application/vnd.ms-project": "mpp", - "application/vnd.ms-word.document.macroenabled.12": "docm", - "application/vnd.ms-word.template.macroenabled.12": "dotm", - "application/vnd.ms-works": "wps", - "application/vnd.ms-wpl": "wpl", - "application/vnd.ms-xpsdocument": "xps", - "application/vnd.mseq": "mseq", - "application/vnd.musician": "mus", - "application/vnd.muvee.style": "msty", - "application/vnd.mynfc": "taglet", - "application/vnd.neurolanguage.nlu": "nlu", - "application/vnd.nitf": "ntf", - "application/vnd.noblenet-directory": "nnd", - "application/vnd.noblenet-sealer": "nns", - "application/vnd.noblenet-web": "nnw", - "application/vnd.nokia.n-gage.data": "ngdat", - "application/vnd.nokia.n-gage.symbian.install": "n-gage", - "application/vnd.nokia.radio-preset": "rpst", - "application/vnd.nokia.radio-presets": "rpss", - "application/vnd.novadigm.edm": "edm", - "application/vnd.novadigm.edx": "edx", - "application/vnd.novadigm.ext": "ext", - "application/vnd.oasis.opendocument.chart": "odc", - "application/vnd.oasis.opendocument.chart-template": "otc", - "application/vnd.oasis.opendocument.database": "odb", - "application/vnd.oasis.opendocument.formula": "odf", - "application/vnd.oasis.opendocument.formula-template": "odft", - "application/vnd.oasis.opendocument.graphics": "odg", - "application/vnd.oasis.opendocument.graphics-template": "otg", - "application/vnd.oasis.opendocument.image": "odi", - "application/vnd.oasis.opendocument.image-template": "oti", - "application/vnd.oasis.opendocument.presentation": "odp", - "application/vnd.oasis.opendocument.presentation-template": "otp", - "application/vnd.oasis.opendocument.spreadsheet": "ods", - "application/vnd.oasis.opendocument.spreadsheet-template": "ots", - "application/vnd.oasis.opendocument.text": "odt", - "application/vnd.oasis.opendocument.text-master": "odm", - "application/vnd.oasis.opendocument.text-template": "ott", - "application/vnd.oasis.opendocument.text-web": "oth", - "application/vnd.olpc-sugar": "xo", - "application/vnd.oma.dd2+xml": "dd2", - "application/vnd.openofficeorg.extension": "oxt", - "application/vnd.openxmlformats-officedocument.presentationml.presentation": "pptx", - "application/vnd.openxmlformats-officedocument.presentationml.slide": "sldx", - "application/vnd.openxmlformats-officedocument.presentationml.slideshow": "ppsx", - "application/vnd.openxmlformats-officedocument.presentationml.template": "potx", - "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": "xlsx", - "application/vnd.openxmlformats-officedocument.spreadsheetml.template": "xltx", - "application/vnd.openxmlformats-officedocument.wordprocessingml.document": "docx", - "application/vnd.openxmlformats-officedocument.wordprocessingml.template": "dotx", - "application/vnd.osgeo.mapguide.package": "mgp", - "application/vnd.osgi.dp": "dp", - "application/vnd.osgi.subsystem": "esa", - "application/vnd.palm": "pdb", - "application/vnd.pawaafile": "paw", - "application/vnd.pg.format": "str", - "application/vnd.pg.osasli": "ei6", - "application/vnd.picsel": "efif", - "application/vnd.pmi.widget": "wg", - "application/vnd.pocketlearn": "plf", - "application/vnd.powerbuilder6": "pbd", - "application/vnd.previewsystems.box": "box", - "application/vnd.proteus.magazine": "mgz", - "application/vnd.publishare-delta-tree": "qps", - "application/vnd.pvi.ptid1": "ptid", - "application/vnd.quark.quarkxpress": "qxd", - "application/vnd.realvnc.bed": "bed", - "application/vnd.recordare.musicxml": "mxl", - "application/vnd.recordare.musicxml+xml": "musicxml", - "application/vnd.rig.cryptonote": "cryptonote", - "application/vnd.rim.cod": "cod", - "application/vnd.rn-realmedia": "rm", - "application/vnd.rn-realmedia-vbr": "rmvb", - "application/vnd.route66.link66+xml": "link66", - "application/vnd.sailingtracker.track": "st", - "application/vnd.seemail": "see", - "application/vnd.sema": "sema", - "application/vnd.semd": "semd", - "application/vnd.semf": "semf", - "application/vnd.shana.informed.formdata": "ifm", - "application/vnd.shana.informed.formtemplate": "itp", - "application/vnd.shana.informed.interchange": "iif", - "application/vnd.shana.informed.package": "ipk", - "application/vnd.simtech-mindmapper": "twd", - "application/vnd.smaf": "mmf", - "application/vnd.smart.teacher": "teacher", - "application/vnd.solent.sdkm+xml": "sdkm", - "application/vnd.spotfire.dxp": "dxp", - "application/vnd.spotfire.sfs": "sfs", - "application/vnd.stardivision.calc": "sdc", - "application/vnd.stardivision.draw": "sda", - "application/vnd.stardivision.impress": "sdd", - "application/vnd.stardivision.math": "smf", - "application/vnd.stardivision.writer": "sdw", - "application/vnd.stardivision.writer-global": "sgl", - "application/vnd.stepmania.package": "smzip", - "application/vnd.stepmania.stepchart": "sm", - "application/vnd.sun.xml.calc": "sxc", - "application/vnd.sun.xml.calc.template": "stc", - "application/vnd.sun.xml.draw": "sxd", - "application/vnd.sun.xml.draw.template": "std", - "application/vnd.sun.xml.impress": "sxi", - "application/vnd.sun.xml.impress.template": "sti", - "application/vnd.sun.xml.math": "sxm", - "application/vnd.sun.xml.writer": "sxw", - "application/vnd.sun.xml.writer.global": "sxg", - "application/vnd.sun.xml.writer.template": "stw", - "application/vnd.sus-calendar": "sus", - "application/vnd.svd": "svd", - "application/vnd.symbian.install": "sis", - "application/vnd.syncml+xml": "xsm", - "application/vnd.syncml.dm+wbxml": "bdm", - "application/vnd.syncml.dm+xml": "xdm", - "application/vnd.tao.intent-module-archive": "tao", - "application/vnd.tcpdump.pcap": "pcap", - "application/vnd.tmobile-livetv": "tmo", - "application/vnd.trid.tpt": "tpt", - "application/vnd.triscape.mxs": "mxs", - "application/vnd.trueapp": "tra", - "application/vnd.ufdl": "ufdl", - "application/vnd.uiq.theme": "utz", - "application/vnd.umajin": "umj", - "application/vnd.unity": "unityweb", - "application/vnd.uoml+xml": "uoml", - "application/vnd.vcx": "vcx", - "application/vnd.visio": "vsd", - "application/vnd.visionary": "vis", - "application/vnd.vsf": "vsf", - "application/vnd.wap.wbxml": "wbxml", - "application/vnd.wap.wmlc": "wmlc", - "application/vnd.wap.wmlscriptc": "wmlsc", - "application/vnd.webturbo": "wtb", - "application/vnd.wolfram.player": "nbp", - "application/vnd.wordperfect": "wpd", - "application/vnd.wqd": "wqd", - "application/vnd.wt.stf": "stf", - "application/vnd.xara": "xar", - "application/vnd.xfdl": "xfdl", - "application/vnd.yamaha.hv-dic": "hvd", - "application/vnd.yamaha.hv-script": "hvs", - "application/vnd.yamaha.hv-voice": "hvp", - "application/vnd.yamaha.openscoreformat": "osf", - "application/vnd.yamaha.openscoreformat.osfpvg+xml": "osfpvg", - "application/vnd.yamaha.smaf-audio": "saf", - "application/vnd.yamaha.smaf-phrase": "spf", - "application/vnd.yellowriver-custom-menu": "cmp", - "application/vnd.zul": "zir", - "application/vnd.zzazz.deck+xml": "zaz", - "application/voicexml+xml": "vxml", - "application/widget": "wgt", - "application/winhlp": "hlp", - "application/wsdl+xml": "wsdl", - "application/wspolicy+xml": "wspolicy", - "application/x-7z-compressed": "7z", - "application/x-abiword": "abw", - "application/x-ace-compressed": "ace", - "application/x-apple-diskimage": "dmg", - "application/x-authorware-bin": "aab", - "application/x-authorware-map": "aam", - "application/x-authorware-seg": "aas", - "application/x-bcpio": "bcpio", - "application/x-bittorrent": "torrent", - "application/x-blorb": "blb", - "application/x-bzip": "bz", - "application/x-bzip2": "bz2", - "application/x-cbr": "cbr", - "application/x-cdlink": "vcd", - "application/x-cfs-compressed": "cfs", - "application/x-chat": "chat", - "application/x-chess-pgn": "pgn", - "application/x-conference": "nsc", - "application/x-cpio": "cpio", - "application/x-csh": "csh", - "application/x-debian-package": "deb", - "application/x-dgc-compressed": "dgc", - "application/x-director": "dir", - "application/x-doom": "wad", - "application/x-dtbncx+xml": "ncx", - "application/x-dtbook+xml": "dtb", - "application/x-dtbresource+xml": "res", - "application/x-dvi": "dvi", - "application/x-envoy": "evy", - "application/x-eva": "eva", - "application/x-font-bdf": "bdf", - "application/x-font-ghostscript": "gsf", - "application/x-font-linux-psf": "psf", - "application/x-font-otf": "otf", - "application/x-font-pcf": "pcf", - "application/x-font-snf": "snf", - "application/x-font-ttf": "ttf", - "application/x-font-type1": "pfa", - "application/x-font-woff": "woff", - "application/x-freearc": "arc", - "application/x-futuresplash": "spl", - "application/x-gca-compressed": "gca", - "application/x-glulx": "ulx", - "application/x-gnumeric": "gnumeric", - "application/x-gramps-xml": "gramps", - "application/x-gtar": "gtar", - "application/x-hdf": "hdf", - "application/x-install-instructions": "install", - "application/x-iso9660-image": "iso", - "application/x-java-jnlp-file": "jnlp", - "application/x-latex": "latex", - "application/x-lzh-compressed": "lzh", - "application/x-mie": "mie", - "application/x-mobipocket-ebook": "prc", - "application/x-ms-application": "application", - "application/x-ms-shortcut": "lnk", - "application/x-ms-wmd": "wmd", - "application/x-ms-wmz": "wmz", - "application/x-ms-xbap": "xbap", - "application/x-msaccess": "mdb", - "application/x-msbinder": "obd", - "application/x-mscardfile": "crd", - "application/x-msclip": "clp", - "application/x-msdownload": "exe", - "application/x-msmediaview": "mvb", - "application/x-msmetafile": "wmf", - "application/x-msmoney": "mny", - "application/x-mspublisher": "pub", - "application/x-msschedule": "scd", - "application/x-msterminal": "trm", - "application/x-mswrite": "wri", - "application/x-netcdf": "nc", - "application/x-nzb": "nzb", - "application/x-pkcs12": "p12", - "application/x-pkcs7-certificates": "p7b", - "application/x-pkcs7-certreqresp": "p7r", - "application/x-rar-compressed": "rar", - "application/x-research-info-systems": "ris", - "application/x-sh": "sh", - "application/x-shar": "shar", - "application/x-shockwave-flash": "swf", - "application/x-silverlight-app": "xap", - "application/x-sql": "sql", - "application/x-stuffit": "sit", - "application/x-stuffitx": "sitx", - "application/x-subrip": "srt", - "application/x-sv4cpio": "sv4cpio", - "application/x-sv4crc": "sv4crc", - "application/x-t3vm-image": "t3", - "application/x-tads": "gam", - "application/x-tar": "tar", - "application/x-tcl": "tcl", - "application/x-tex": "tex", - "application/x-tex-tfm": "tfm", - "application/x-texinfo": "texinfo", - "application/x-tgif": "obj", - "application/x-ustar": "ustar", - "application/x-wais-source": "src", - "application/x-x509-ca-cert": "der", - "application/x-xfig": "fig", - "application/x-xliff+xml": "xlf", - "application/x-xpinstall": "xpi", - "application/x-xz": "xz", - "application/x-zmachine": "z1", - "application/xaml+xml": "xaml", - "application/xcap-diff+xml": "xdf", - "application/xenc+xml": "xenc", - "application/xhtml+xml": "xhtml", - "application/xml": "xml", - "application/xml-dtd": "dtd", - "application/xop+xml": "xop", - "application/xproc+xml": "xpl", - "application/xslt+xml": "xslt", - "application/xspf+xml": "xspf", - "application/xv+xml": "mxml", - "application/yang": "yang", - "application/yin+xml": "yin", - "application/zip": "zip", - "audio/adpcm": "adp", - "audio/basic": "au", - "audio/midi": "mid", - "audio/mp4": "mp4a", - "audio/mpeg": "mpga", - "audio/ogg": "oga", - "audio/s3m": "s3m", - "audio/silk": "sil", - "audio/vnd.dece.audio": "uva", - "audio/vnd.digital-winds": "eol", - "audio/vnd.dra": "dra", - "audio/vnd.dts": "dts", - "audio/vnd.dts.hd": "dtshd", - "audio/vnd.lucent.voice": "lvp", - "audio/vnd.ms-playready.media.pya": "pya", - "audio/vnd.nuera.ecelp4800": "ecelp4800", - "audio/vnd.nuera.ecelp7470": "ecelp7470", - "audio/vnd.nuera.ecelp9600": "ecelp9600", - "audio/vnd.rip": "rip", - "audio/webm": "weba", - "audio/x-aac": "aac", - "audio/x-aiff": "aif", - "audio/x-caf": "caf", - "audio/x-flac": "flac", - "audio/x-matroska": "mka", - "audio/x-mpegurl": "m3u", - "audio/x-ms-wax": "wax", - "audio/x-ms-wma": "wma", - "audio/x-pn-realaudio": "ram", - "audio/x-pn-realaudio-plugin": "rmp", - "audio/x-wav": "wav", - "audio/xm": "xm", - "chemical/x-cdx": "cdx", - "chemical/x-cif": "cif", - "chemical/x-cmdf": "cmdf", - "chemical/x-cml": "cml", - "chemical/x-csml": "csml", - "chemical/x-xyz": "xyz", - "image/bmp": "bmp", - "image/cgm": "cgm", - "image/g3fax": "g3", - "image/gif": "gif", - "image/ief": "ief", - "image/jpeg": "jpg", - "image/ktx": "ktx", - "image/png": "png", - "image/prs.btif": "btif", - "image/sgi": "sgi", - "image/svg+xml": "svg", - "image/tiff": "tiff", - "image/vnd.adobe.photoshop": "psd", - "image/vnd.dece.graphic": "uvi", - "image/vnd.dvb.subtitle": "sub", - "image/vnd.djvu": "djvu", - "image/vnd.dwg": "dwg", - "image/vnd.dxf": "dxf", - "image/vnd.fastbidsheet": "fbs", - "image/vnd.fpx": "fpx", - "image/vnd.fst": "fst", - "image/vnd.fujixerox.edmics-mmr": "mmr", - "image/vnd.fujixerox.edmics-rlc": "rlc", - "image/vnd.ms-modi": "mdi", - "image/vnd.ms-photo": "wdp", - "image/vnd.net-fpx": "npx", - "image/vnd.wap.wbmp": "wbmp", - "image/vnd.xiff": "xif", - "image/webp": "webp", - "image/x-3ds": "3ds", - "image/x-cmu-raster": "ras", - "image/x-cmx": "cmx", - "image/x-freehand": "fh", - "image/x-icon": "ico", - "image/x-mrsid-image": "sid", - "image/x-pcx": "pcx", - "image/x-pict": "pic", - "image/x-portable-anymap": "pnm", - "image/x-portable-bitmap": "pbm", - "image/x-portable-graymap": "pgm", - "image/x-portable-pixmap": "ppm", - "image/x-rgb": "rgb", - "image/x-tga": "tga", - "image/x-xbitmap": "xbm", - "image/x-xpixmap": "xpm", - "image/x-xwindowdump": "xwd", - "message/rfc822": "eml", - "model/iges": "igs", - "model/mesh": "mesh", - "model/vnd.collada+xml": "dae", - "model/vnd.dwf": "dwf", - "model/vnd.gdl": "gdl", - "model/vnd.gtw": "gtw", - "model/vnd.mts": "mts", - "model/vnd.vtu": "vtu", - "model/vrml": "wrl", - "model/x3d+binary": "x3db", - "model/x3d+vrml": "x3dv", - "model/x3d+xml": "x3d", - "text/cache-manifest": "appcache", - "text/calendar": "ics", - "text/css": "css", - "text/csv": "csv", - "text/html": "html", - "text/n3": "n3", - "text/plain": "txt", - "text/prs.lines.tag": "dsc", - "text/richtext": "rtx", - "text/sgml": "sgml", - "text/tab-separated-values": "tsv", - "text/troff": "t", - "text/turtle": "ttl", - "text/uri-list": "uri", - "text/vcard": "vcard", - "text/vnd.curl": "curl", - "text/vnd.curl.dcurl": "dcurl", - "text/vnd.curl.scurl": "scurl", - "text/vnd.curl.mcurl": "mcurl", - "text/vnd.dvb.subtitle": "sub", - "text/vnd.fly": "fly", - "text/vnd.fmi.flexstor": "flx", - "text/vnd.graphviz": "gv", - "text/vnd.in3d.3dml": "3dml", - "text/vnd.in3d.spot": "spot", - "text/vnd.sun.j2me.app-descriptor": "jad", - "text/vnd.wap.wml": "wml", - "text/vnd.wap.wmlscript": "wmls", - "text/x-asm": "s", - "text/x-c": "c", - "text/x-fortran": "f", - "text/x-java-source": "java", - "text/x-opml": "opml", - "text/x-pascal": "p", - "text/x-nfo": "nfo", - "text/x-shellscript": "sh", - "text/x-setext": "etx", - "text/x-sfv": "sfv", - "text/x-tex": "tex", - "text/x-uuencode": "uu", - "text/x-vcalendar": "vcs", - "text/x-vcard": "vcf", - "video/3gpp": "3gp", - "video/3gpp2": "3g2", - "video/h261": "h261", - "video/h263": "h263", - "video/h264": "h264", - "video/jpeg": "jpgv", - "video/jpm": "jpm", - "video/mj2": "mj2", - "video/mp4": "mp4", - "video/mpeg": "mpeg", - "video/ogg": "ogv", - "video/quicktime": "qt", - "video/vnd.dece.hd": "uvh", - "video/vnd.dece.mobile": "uvm", - "video/vnd.dece.pd": "uvp", - "video/vnd.dece.sd": "uvs", - "video/vnd.dece.video": "uvv", - "video/vnd.dvb.file": "dvb", - "video/vnd.fvt": "fvt", - "video/vnd.mpegurl": "m4u", - "video/vnd.ms-playready.media.pyv": "pyv", - "video/vnd.uvvu.mp4": "uvvu", - "video/vnd.vivo": "viv", - "video/webm": "webm", - "video/x-f4v": "f4v", - "video/x-fli": "fli", - "video/x-flv": "flv", - "video/x-m4v": "m4v", - "video/x-matroska": "mkv", - "video/x-mng": "mng", - "video/x-ms-asf": "asf", - "video/x-ms-vob": "vob", - "video/x-ms-wm": "wm", - "video/x-ms-wmv": "wmv", - "video/x-ms-wmx": "wmx", - "video/x-ms-wvx": "wvx", - "video/x-msvideo": "avi", - "video/x-sgi-movie": "movie", - "video/x-smv": "smv", - "x-conference/x-cooltalk": "ice", -} - var extensionToAce = map[string]string{ "c": "c_cpp", "h": "c_cpp", From b7fadd96765fdcc45e023c6e4c60280b1b5906d5 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Mon, 1 May 2017 21:25:56 -0700 Subject: [PATCH 146/345] Add linx-cleanup tool This doesn't completely fix #116, but it makes setting up a cron job to do cleanup much more pleasant. --- .gitignore | 1 + backends/localfs/localfs.go | 15 ++++++ backends/meta.go | 23 +++++++++ backends/metajson/metajson.go | 73 +++++++++++++++++++++++++++ backends/{backends.go => storage.go} | 5 ++ delete.go | 2 +- display.go | 3 +- expiry.go | 23 +++------ expiry/expiry.go | 13 +++++ fileserve.go | 5 +- linx-cleanup/cleanup.go | 45 +++++++++++++++++ meta.go | 75 ++++------------------------ server.go | 7 ++- torrent.go | 3 +- upload.go | 20 ++++---- 15 files changed, 216 insertions(+), 97 deletions(-) create mode 100644 backends/meta.go create mode 100644 backends/metajson/metajson.go rename backends/{backends.go => storage.go} (84%) create mode 100644 expiry/expiry.go create mode 100644 linx-cleanup/cleanup.go diff --git a/.gitignore b/.gitignore index 79de414..bd9da44 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,4 @@ _testmain.go linx-server files/ meta/ +linx-cleanup diff --git a/backends/localfs/localfs.go b/backends/localfs/localfs.go index 148cf2e..b55c986 100644 --- a/backends/localfs/localfs.go +++ b/backends/localfs/localfs.go @@ -65,6 +65,21 @@ func (b LocalfsBackend) Size(key string) (int64, error) { return fileInfo.Size(), nil } +func (b LocalfsBackend) List() ([]string, error) { + var output []string + + files, err := ioutil.ReadDir(b.basePath) + if err != nil { + return nil, err + } + + for _, file := range files { + output = append(output, file.Name()) + } + + return output, nil +} + func NewLocalfsBackend(basePath string) LocalfsBackend { return LocalfsBackend{basePath: basePath} } diff --git a/backends/meta.go b/backends/meta.go new file mode 100644 index 0000000..eb17d5e --- /dev/null +++ b/backends/meta.go @@ -0,0 +1,23 @@ +package backends + +import ( + "errors" + "time" +) + +type MetaBackend interface { + Get(key string) (Metadata, error) + Put(key string, metadata *Metadata) error +} + +type Metadata struct { + DeleteKey string + Sha256sum string + Mimetype string + Size int64 + Expiry time.Time + ArchiveFiles []string + ShortURL string +} + +var BadMetadata = errors.New("Corrupted metadata.") diff --git a/backends/metajson/metajson.go b/backends/metajson/metajson.go new file mode 100644 index 0000000..6e76dd4 --- /dev/null +++ b/backends/metajson/metajson.go @@ -0,0 +1,73 @@ +package metajson + +import ( + "bytes" + "encoding/json" + "time" + + "github.com/andreimarcu/linx-server/backends" +) + +type MetadataJSON struct { + DeleteKey string `json:"delete_key"` + Sha256sum string `json:"sha256sum"` + Mimetype string `json:"mimetype"` + Size int64 `json:"size"` + Expiry int64 `json:"expiry"` + ArchiveFiles []string `json:"archive_files,omitempty"` + ShortURL string `json:"short_url"` +} + +type MetaJSONBackend struct { + storage backends.MetaStorageBackend +} + +func (m MetaJSONBackend) Put(key string, metadata *backends.Metadata) error { + mjson := MetadataJSON{} + mjson.DeleteKey = metadata.DeleteKey + mjson.Mimetype = metadata.Mimetype + mjson.ArchiveFiles = metadata.ArchiveFiles + mjson.Sha256sum = metadata.Sha256sum + mjson.Expiry = metadata.Expiry.Unix() + mjson.Size = metadata.Size + mjson.ShortURL = metadata.ShortURL + + byt, err := json.Marshal(mjson) + if err != nil { + return err + } + + if _, err := m.storage.Put(key, bytes.NewBuffer(byt)); err != nil { + return err + } + + return nil +} + +func (m MetaJSONBackend) Get(key string) (metadata backends.Metadata, err error) { + b, err := m.storage.Get(key) + if err != nil { + return metadata, backends.BadMetadata + } + + mjson := MetadataJSON{} + + err = json.Unmarshal(b, &mjson) + if err != nil { + return metadata, backends.BadMetadata + } + + metadata.DeleteKey = mjson.DeleteKey + metadata.Mimetype = mjson.Mimetype + metadata.ArchiveFiles = mjson.ArchiveFiles + metadata.Sha256sum = mjson.Sha256sum + metadata.Expiry = time.Unix(mjson.Expiry, 0) + metadata.Size = mjson.Size + metadata.ShortURL = mjson.ShortURL + + return +} + +func NewMetaJSONBackend(storage backends.MetaStorageBackend) MetaJSONBackend { + return MetaJSONBackend{storage: storage} +} diff --git a/backends/backends.go b/backends/storage.go similarity index 84% rename from backends/backends.go rename to backends/storage.go index 42a33f0..2b51a2c 100644 --- a/backends/backends.go +++ b/backends/storage.go @@ -21,3 +21,8 @@ type StorageBackend interface { ServeFile(key string, w http.ResponseWriter, r *http.Request) Size(key string) (int64, error) } + +type MetaStorageBackend interface { + StorageBackend + List() ([]string, error) +} diff --git a/delete.go b/delete.go index e42e623..61c6fa8 100644 --- a/delete.go +++ b/delete.go @@ -28,7 +28,7 @@ func deleteHandler(c web.C, w http.ResponseWriter, r *http.Request) { if metadata.DeleteKey == requestKey { fileDelErr := fileBackend.Delete(filename) - metaDelErr := metaBackend.Delete(filename) + metaDelErr := metaStorageBackend.Delete(filename) if (fileDelErr != nil) || (metaDelErr != nil) { oopsHandler(c, w, r, RespPLAIN, "Could not delete") diff --git a/display.go b/display.go index b196477..c6d8470 100644 --- a/display.go +++ b/display.go @@ -8,6 +8,7 @@ import ( "strings" "time" + "github.com/andreimarcu/linx-server/expiry" "github.com/dustin/go-humanize" "github.com/flosch/pongo2" "github.com/microcosm-cc/bluemonday" @@ -32,7 +33,7 @@ func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { return } var expiryHuman string - if metadata.Expiry != neverExpire { + if metadata.Expiry != expiry.NeverExpire { expiryHuman = humanize.RelTime(time.Now(), metadata.Expiry, "", "") } sizeHuman := humanize.Bytes(uint64(metadata.Size)) diff --git a/expiry.go b/expiry.go index 4172f51..6d8887d 100644 --- a/expiry.go +++ b/expiry.go @@ -3,6 +3,7 @@ package main import ( "time" + "github.com/andreimarcu/linx-server/expiry" "github.com/dustin/go-humanize" ) @@ -21,14 +22,6 @@ type ExpirationTime struct { Human string } -var neverExpire = time.Unix(0, 0) - -// Determine if a file with expiry set to "ts" has expired yet -func isTsExpired(ts time.Time) bool { - now := time.Now() - return ts != neverExpire && now.After(ts) -} - // Determine if the given filename is expired func isFileExpired(filename string) (bool, error) { metadata, err := metadataRead(filename) @@ -36,7 +29,7 @@ func isFileExpired(filename string) (bool, error) { return false, err } - return isTsExpired(metadata.Expiry), nil + return expiry.IsTsExpired(metadata.Expiry), nil } // Return a list of expiration times and their humanized versions @@ -45,16 +38,16 @@ func listExpirationTimes() []ExpirationTime { actualExpiryInList := false var expiryList []ExpirationTime - for _, expiry := range defaultExpiryList { - if Config.maxExpiry == 0 || expiry <= Config.maxExpiry { - if expiry == Config.maxExpiry { + for _, expiryEntry := range defaultExpiryList { + if Config.maxExpiry == 0 || expiryEntry <= Config.maxExpiry { + if expiryEntry == Config.maxExpiry { actualExpiryInList = true } - duration := time.Duration(expiry) * time.Second + duration := time.Duration(expiryEntry) * time.Second expiryList = append(expiryList, ExpirationTime{ - expiry, - humanize.RelTime(epoch, epoch.Add(duration), "", ""), + Seconds: expiryEntry, + Human: humanize.RelTime(epoch, epoch.Add(duration), "", ""), }) } } diff --git a/expiry/expiry.go b/expiry/expiry.go new file mode 100644 index 0000000..a1a4e54 --- /dev/null +++ b/expiry/expiry.go @@ -0,0 +1,13 @@ +package expiry + +import ( + "time" +) + +var NeverExpire = time.Unix(0, 0) + +// Determine if a file with expiry set to "ts" has expired yet +func IsTsExpired(ts time.Time) bool { + now := time.Now() + return ts != NeverExpire && now.After(ts) +} diff --git a/fileserve.go b/fileserve.go index 1a48a74..f7f87a6 100644 --- a/fileserve.go +++ b/fileserve.go @@ -5,6 +5,7 @@ import ( "net/url" "strings" + "github.com/andreimarcu/linx-server/backends" "github.com/zenazn/goji/web" ) @@ -15,7 +16,7 @@ func fileServeHandler(c web.C, w http.ResponseWriter, r *http.Request) { if err == NotFoundErr { notFoundHandler(c, w, r) return - } else if err == BadMetadata { + } else if err == backends.BadMetadata { oopsHandler(c, w, r, RespAUTO, "Corrupt metadata.") return } @@ -72,7 +73,7 @@ func checkFile(filename string) error { if expired { fileBackend.Delete(filename) - metaBackend.Delete(filename) + metaStorageBackend.Delete(filename) return NotFoundErr } diff --git a/linx-cleanup/cleanup.go b/linx-cleanup/cleanup.go new file mode 100644 index 0000000..7607fe6 --- /dev/null +++ b/linx-cleanup/cleanup.go @@ -0,0 +1,45 @@ +package main + +import ( + "flag" + "log" + + "github.com/andreimarcu/linx-server/backends/localfs" + "github.com/andreimarcu/linx-server/backends/metajson" + "github.com/andreimarcu/linx-server/expiry" +) + +func main() { + var filesDir string + var metaDir string + var noLogs bool + + flag.StringVar(&filesDir, "filespath", "files/", + "path to files directory") + flag.StringVar(&metaDir, "metapath", "meta/", + "path to metadata directory") + flag.BoolVar(&noLogs, "nologs", false, + "don't log deleted files") + + metaStorageBackend := localfs.NewLocalfsBackend(metaDir) + metaBackend := metajson.NewMetaJSONBackend(metaStorageBackend) + fileBackend := localfs.NewLocalfsBackend(filesDir) + + files, err := metaStorageBackend.List() + if err != nil { + panic(err) + } + + for _, filename := range files { + metadata, err := metaBackend.Get(filename) + if err != nil { + log.Printf("Failed to find metadata for %s", filename) + } + + if expiry.IsTsExpired(metadata.Expiry) { + log.Printf("Delete %s", filename) + fileBackend.Delete(filename) + metaStorageBackend.Delete(filename) + } + } +} diff --git a/meta.go b/meta.go index d2fb637..10cd4e1 100644 --- a/meta.go +++ b/meta.go @@ -3,46 +3,25 @@ package main import ( "archive/tar" "archive/zip" - "bytes" "compress/bzip2" "compress/gzip" "crypto/sha256" "encoding/hex" - "encoding/json" "errors" "io" "sort" "time" "unicode" + "github.com/andreimarcu/linx-server/backends" + "github.com/andreimarcu/linx-server/expiry" "github.com/dchest/uniuri" "gopkg.in/h2non/filetype.v1" ) -type MetadataJSON struct { - DeleteKey string `json:"delete_key"` - Sha256sum string `json:"sha256sum"` - Mimetype string `json:"mimetype"` - Size int64 `json:"size"` - Expiry int64 `json:"expiry"` - ArchiveFiles []string `json:"archive_files,omitempty"` - ShortURL string `json:"short_url"` -} - -type Metadata struct { - DeleteKey string - Sha256sum string - Mimetype string - Size int64 - Expiry time.Time - ArchiveFiles []string - ShortURL string -} - var NotFoundErr = errors.New("File not found.") -var BadMetadata = errors.New("Corrupted metadata.") -func generateMetadata(fName string, exp time.Time, delKey string) (m Metadata, err error) { +func generateMetadata(fName string, exp time.Time, delKey string) (m backends.Metadata, err error) { file, err := fileBackend.Open(fName) if err != nil { return @@ -145,59 +124,23 @@ func generateMetadata(fName string, exp time.Time, delKey string) (m Metadata, e return } -func metadataWrite(filename string, metadata *Metadata) error { - mjson := MetadataJSON{} - mjson.DeleteKey = metadata.DeleteKey - mjson.Mimetype = metadata.Mimetype - mjson.ArchiveFiles = metadata.ArchiveFiles - mjson.Sha256sum = metadata.Sha256sum - mjson.Expiry = metadata.Expiry.Unix() - mjson.Size = metadata.Size - mjson.ShortURL = metadata.ShortURL - - byt, err := json.Marshal(mjson) - if err != nil { - return err - } - - if _, err := metaBackend.Put(filename, bytes.NewBuffer(byt)); err != nil { - return err - } - - return nil +func metadataWrite(filename string, metadata *backends.Metadata) error { + return metaBackend.Put(filename, metadata) } -func metadataRead(filename string) (metadata Metadata, err error) { - b, err := metaBackend.Get(filename) +func metadataRead(filename string) (metadata backends.Metadata, err error) { + metadata, err = metaBackend.Get(filename) if err != nil { // Metadata does not exist, generate one - newMData, err := generateMetadata(filename, neverExpire, "") + newMData, err := generateMetadata(filename, expiry.NeverExpire, "") if err != nil { return metadata, err } metadataWrite(filename, &newMData) - b, err = metaBackend.Get(filename) - if err != nil { - return metadata, BadMetadata - } + metadata, err = metaBackend.Get(filename) } - mjson := MetadataJSON{} - - err = json.Unmarshal(b, &mjson) - if err != nil { - return metadata, BadMetadata - } - - metadata.DeleteKey = mjson.DeleteKey - metadata.Mimetype = mjson.Mimetype - metadata.ArchiveFiles = mjson.ArchiveFiles - metadata.Sha256sum = mjson.Sha256sum - metadata.Expiry = time.Unix(mjson.Expiry, 0) - metadata.Size = mjson.Size - metadata.ShortURL = mjson.ShortURL - return } diff --git a/server.go b/server.go index ac229fe..daaf89e 100644 --- a/server.go +++ b/server.go @@ -16,6 +16,7 @@ import ( "github.com/GeertJohan/go.rice" "github.com/andreimarcu/linx-server/backends" "github.com/andreimarcu/linx-server/backends/localfs" + "github.com/andreimarcu/linx-server/backends/metajson" "github.com/flosch/pongo2" "github.com/vharitonsky/iniflags" "github.com/zenazn/goji/graceful" @@ -65,7 +66,8 @@ var staticBox *rice.Box var timeStarted time.Time var timeStartedStr string var remoteAuthKeys []string -var metaBackend backends.StorageBackend +var metaStorageBackend backends.MetaStorageBackend +var metaBackend backends.MetaBackend var fileBackend backends.StorageBackend func setup() *web.Mux { @@ -124,7 +126,8 @@ func setup() *web.Mux { Config.sitePath = "/" } - metaBackend = localfs.NewLocalfsBackend(Config.metaDir) + metaStorageBackend = localfs.NewLocalfsBackend(Config.metaDir) + metaBackend = metajson.NewMetaJSONBackend(metaStorageBackend) fileBackend = localfs.NewLocalfsBackend(Config.filesDir) // Template setup diff --git a/torrent.go b/torrent.go index f0f4d48..23361b5 100644 --- a/torrent.go +++ b/torrent.go @@ -8,6 +8,7 @@ import ( "net/http" "time" + "github.com/andreimarcu/linx-server/backends" "github.com/zeebo/bencode" "github.com/zenazn/goji/web" ) @@ -74,7 +75,7 @@ func fileTorrentHandler(c web.C, w http.ResponseWriter, r *http.Request) { if err == NotFoundErr { notFoundHandler(c, w, r) return - } else if err == BadMetadata { + } else if err == backends.BadMetadata { oopsHandler(c, w, r, RespAUTO, "Corrupt metadata.") return } diff --git a/upload.go b/upload.go index 9cf8713..b7195c3 100644 --- a/upload.go +++ b/upload.go @@ -15,6 +15,8 @@ import ( "strings" "time" + "github.com/andreimarcu/linx-server/backends" + "github.com/andreimarcu/linx-server/expiry" "github.com/dchest/uniuri" "github.com/zenazn/goji/web" "gopkg.in/h2non/filetype.v1" @@ -41,7 +43,7 @@ type UploadRequest struct { // Metadata associated with a file as it would actually be stored type Upload struct { Filename string // Final filename on disk - Metadata Metadata + Metadata backends.Metadata } func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { @@ -258,11 +260,11 @@ func processUpload(upReq UploadRequest) (upload Upload, err error) { } // Get the rest of the metadata needed for storage - var expiry time.Time + var fileExpiry time.Time if upReq.expiry == 0 { - expiry = neverExpire + fileExpiry = expiry.NeverExpire } else { - expiry = time.Now().Add(upReq.expiry) + fileExpiry = time.Now().Add(upReq.expiry) } bytes, err := fileBackend.Put(upload.Filename, io.MultiReader(bytes.NewReader(header), upReq.src)) @@ -273,7 +275,7 @@ func processUpload(upReq UploadRequest) (upload Upload, err error) { return upload, errors.New("File too large") } - upload.Metadata, err = generateMetadata(upload.Filename, expiry, upReq.deletionKey) + upload.Metadata, err = generateMetadata(upload.Filename, fileExpiry, upReq.deletionKey) if err != nil { fileBackend.Delete(upload.Filename) return @@ -342,14 +344,14 @@ func parseExpiry(expStr string) time.Duration { if expStr == "" { return time.Duration(Config.maxExpiry) * time.Second } else { - expiry, err := strconv.ParseUint(expStr, 10, 64) + fileExpiry, err := strconv.ParseUint(expStr, 10, 64) if err != nil { return time.Duration(Config.maxExpiry) * time.Second } else { - if Config.maxExpiry > 0 && (expiry > Config.maxExpiry || expiry == 0) { - expiry = Config.maxExpiry + if Config.maxExpiry > 0 && (fileExpiry > Config.maxExpiry || fileExpiry == 0) { + fileExpiry = Config.maxExpiry } - return time.Duration(expiry) * time.Second + return time.Duration(fileExpiry) * time.Second } } } From c6f62fccdf8cfa2926e4cd18eb11be225fa1e5f9 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Mon, 1 May 2017 21:49:27 -0700 Subject: [PATCH 147/345] Drop Mercurial from Dockerfile We no longer have any Mercurial dependencies, so we don't need to install it anymore. --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 6ff81bd..60e189d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM golang:alpine RUN set -ex \ - && apk add --no-cache --virtual .build-deps git mercurial \ + && apk add --no-cache --virtual .build-deps git \ && go get github.com/andreimarcu/linx-server \ && apk del .build-deps From 32b537a057a3e1fe3c8632ba2c32c314fabd3deb Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Wed, 3 May 2017 21:12:41 -0700 Subject: [PATCH 148/345] Add missing `flag.Parse()` call --- linx-cleanup/cleanup.go | 1 + 1 file changed, 1 insertion(+) diff --git a/linx-cleanup/cleanup.go b/linx-cleanup/cleanup.go index 7607fe6..a8dc37f 100644 --- a/linx-cleanup/cleanup.go +++ b/linx-cleanup/cleanup.go @@ -20,6 +20,7 @@ func main() { "path to metadata directory") flag.BoolVar(&noLogs, "nologs", false, "don't log deleted files") + flag.Parse() metaStorageBackend := localfs.NewLocalfsBackend(metaDir) metaBackend := metajson.NewMetaJSONBackend(metaStorageBackend) From a69aa95a87061e575fc5919a678029649fb85bbe Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Thu, 4 May 2017 21:43:52 -0700 Subject: [PATCH 149/345] Add `linx-cleanup` info to readme --- README.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/README.md b/README.md index 1921855..7fa6b68 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,23 @@ allowhotlink = true A helper utility ```linx-genkey``` is provided which hashes keys to the format required in the auth files. +Cleaning up expired files +------------------------- +When files expire, access is disabled immediately, but the files and metadata +will persist on disk until someone attempts to access them. If you'd like to +automatically clean up files that have expired, you can use the included +`linx-cleanup` utility. To run it automatically, use a cronjob or similar type +of scheduled task. + +You should be careful to ensure that only one instance of `linx-client` runs at +a time to avoid unexpected behavior. It does not implement any type of locking. + +#### Options +- ```-filespath files/``` -- Path to stored uploads (default is files/) +- ```-metapath meta/``` -- Path to stored information about uploads (default is meta/) +- ```-nologs``` -- (optionally) disable deletion logs in stdout + + Deployment ---------- Linx-server supports being deployed in a subdirectory (ie. example.com/mylinx/) as well as on its own (example.com/). From e86f19ecb1d674c964aa7af3f99f65f40529431d Mon Sep 17 00:00:00 2001 From: andreimarcu Date: Tue, 10 Oct 2017 22:14:53 -0700 Subject: [PATCH 150/345] Add linx-cleanup to build script --- build.sh | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/build.sh b/build.sh index 9edffd5..f7a4115 100755 --- a/build.sh +++ b/build.sh @@ -64,3 +64,31 @@ GOOS=windows GOARCH=amd64 go build -o "$name"windows-amd64.exe GOOS=windows GOARCH=386 go build -o "$name"windows-386.exe cd .. + + +cd linx-cleanup +name="../binairies/""$version""/linx-cleanup-v""$version""_" + +GOOS=darwin GOARCH=amd64 go build -o "$name"osx-amd64 + +GOOS=darwin GOARCH=386 go build -o "$name"osx-386 + +GOOS=freebsd GOARCH=amd64 go build -o "$name"freebsd-amd64 + +GOOS=freebsd GOARCH=386 go build -o "$name"freebsd-386 + +GOOS=openbsd GOARCH=amd64 go build -o "$name"openbsd-amd64 + +GOOS=openbsd GOARCH=386 go build -o "$name"openbsd-386 + +GOOS=linux GOARCH=arm go build -o "$name"linux-arm + +GOOS=linux GOARCH=amd64 go build -o "$name"linux-amd64 + +GOOS=linux GOARCH=386 go build -o "$name"linux-386 + +GOOS=windows GOARCH=amd64 go build -o "$name"windows-amd64.exe + +GOOS=windows GOARCH=386 go build -o "$name"windows-386.exe + +cd .. From c015b5f1daa60e7bda4df9e84023c87e4a92656f Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Sun, 25 Feb 2018 14:46:20 -0800 Subject: [PATCH 151/345] Fix -nologs on linx-cleanup tool (closes #136) --- linx-cleanup/cleanup.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/linx-cleanup/cleanup.go b/linx-cleanup/cleanup.go index a8dc37f..9ea89ae 100644 --- a/linx-cleanup/cleanup.go +++ b/linx-cleanup/cleanup.go @@ -34,11 +34,15 @@ func main() { for _, filename := range files { metadata, err := metaBackend.Get(filename) if err != nil { - log.Printf("Failed to find metadata for %s", filename) + if !noLogs { + log.Printf("Failed to find metadata for %s", filename) + } } if expiry.IsTsExpired(metadata.Expiry) { - log.Printf("Delete %s", filename) + if !noLogs { + log.Printf("Delete %s", filename) + } fileBackend.Delete(filename) metaStorageBackend.Delete(filename) } From b82371250a73037dfbf03d68bf01c89cf78ea1ee Mon Sep 17 00:00:00 2001 From: "Rodrigo D. L" Date: Sat, 21 Apr 2018 13:01:25 -0300 Subject: [PATCH 152/345] Fix files and meta permissions When running under docker-compose the volume changes the permissions by default to root but its avoided if the directory where it is mounted is created first with the correct owner. --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index 60e189d..8f02dcc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,6 +5,8 @@ RUN set -ex \ && go get github.com/andreimarcu/linx-server \ && apk del .build-deps +RUN mkdir -p /data/files && mkdir -p /data/meta && chown -R 65534:65534 /data + VOLUME ["/data/files", "/data/meta"] EXPOSE 8080 From 5d8a0ef605e535f838000ce21f0de581f287a133 Mon Sep 17 00:00:00 2001 From: Thor77 Date: Wed, 7 Nov 2018 19:13:27 +0100 Subject: [PATCH 153/345] Serve file directly for curl and wget user agents (#145) * Serve file directly for curl and wget user agents Fix #127 * Add test for get with wget user agent * Add -nodirectagents flag to disable serving files directly for wget/curl user agents * Fix TestPutAndGetCLI failing for Go 1.5 It failed because it doesn't include the Content-Type header for every response. --- display.go | 8 ++++++++ server.go | 3 +++ server_test.go | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+) diff --git a/display.go b/display.go index c6d8470..4220c76 100644 --- a/display.go +++ b/display.go @@ -4,6 +4,7 @@ import ( "encoding/json" "net/http" "path/filepath" + "regexp" "strconv" "strings" "time" @@ -18,7 +19,14 @@ import ( const maxDisplayFileSizeBytes = 1024 * 512 +var cliUserAgentRe = regexp.MustCompile("(?i)(lib)?curl|wget") + func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { + if !Config.noDirectAgents && cliUserAgentRe.MatchString(r.Header.Get("User-Agent")) { + fileServeHandler(c, w, r) + return + } + fileName := c.URLParams["name"] err := checkFile(fileName) diff --git a/server.go b/server.go index daaf89e..ba0efb8 100644 --- a/server.go +++ b/server.go @@ -58,6 +58,7 @@ var Config struct { remoteAuthFile string addHeaders headerList googleShorterAPIKey string + noDirectAgents bool } var Templates = make(map[string]*pongo2.Template) @@ -243,6 +244,8 @@ func main() { "Add an arbitrary header to the response. This option can be used multiple times.") flag.StringVar(&Config.googleShorterAPIKey, "googleapikey", "", "API Key for Google's URL Shortener.") + flag.BoolVar(&Config.noDirectAgents, "nodirectagents", false, + "disable serving files directly for wget/curl user agents") iniflags.Parse() diff --git a/server_test.go b/server_test.go index 6fe363c..7727f0c 100644 --- a/server_test.go +++ b/server_test.go @@ -1121,3 +1121,50 @@ func TestShutdown(t *testing.T) { os.RemoveAll(Config.filesDir) os.RemoveAll(Config.metaDir) } + +func TestPutAndGetCLI(t *testing.T) { + var myjson RespOkJSON + mux := setup() + + // upload file + w := httptest.NewRecorder() + req, err := http.NewRequest("PUT", "/upload", strings.NewReader("File content")) + if err != nil { + t.Fatal(err) + } + req.Header.Set("Accept", "application/json") + mux.ServeHTTP(w, req) + + err = json.Unmarshal([]byte(w.Body.String()), &myjson) + if err != nil { + t.Fatal(err) + } + + // request file without wget user agent + w = httptest.NewRecorder() + req, err = http.NewRequest("GET", myjson.Url, nil) + if err != nil { + t.Fatal(err) + } + mux.ServeHTTP(w, req) + + contentType := w.Header().Get("Content-Type") + if strings.HasPrefix(contentType, "text/plain") { + t.Fatalf("Didn't receive file display page but %s", contentType) + } + + // request file with wget user agent + w = httptest.NewRecorder() + req, err = http.NewRequest("GET", myjson.Url, nil) + req.Header.Set("User-Agent", "wget") + if err != nil { + t.Fatal(err) + } + mux.ServeHTTP(w, req) + + contentType = w.Header().Get("Content-Type") + if !strings.HasPrefix(contentType, "text/plain") { + t.Fatalf("Didn't receive file directly but %s", contentType) + } + +} From f19247a79059590b76c98274c24002917efef017 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Tue, 8 Jan 2019 11:18:57 -0800 Subject: [PATCH 154/345] Update Travis to 1.10 and 1.11 --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index eaf499f..cd71721 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,8 @@ language: go go: - - 1.5 - - 1.6 + - 1.10 + - 1.11 before_script: - go vet ./... From 19a95e36a6549313c0d3fbb44112d0417d327b45 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Tue, 8 Jan 2019 11:28:10 -0800 Subject: [PATCH 155/345] Fix Travis parsing of 1.10 as 1.1 --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index cd71721..7baaebc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,8 @@ language: go go: - - 1.10 - - 1.11 + - "1.10" + - "1.11" before_script: - go vet ./... From bad7d2666e053cb9bb1381e3d4f6fdf6107cf3f8 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Tue, 8 Jan 2019 19:56:09 +0000 Subject: [PATCH 156/345] Switch to Referrer-Policy header (#149) Use of the Content-Security-Policy header to specify a referrer policy was deprecated in favor of a [new header](https://github.com/w3c/webappsec-referrer-policy/commit/fc55d917bee0d5636f52a19a5aefa65f8995c766). This change changes the existing referrer policy directives to use this header and adds corresponding config options/command line flags. --- README.md | 6 ++++-- csp.go | 11 +++++++++-- csp_test.go | 11 +++++++---- fileserve.go | 1 + server.go | 17 +++++++++++++---- 5 files changed, 34 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 7fa6b68..e1a5c8a 100644 --- a/README.md +++ b/README.md @@ -47,8 +47,10 @@ allowhotlink = true - ```-maxsize 4294967296``` -- maximum upload file size in bytes (default 4GB) - ```-maxexpiry 86400``` -- maximum expiration time in seconds (default is 0, which is no expiry) - ```-allowhotlink``` -- Allow file hotlinking -- ```-contentsecuritypolicy "..."``` -- Content-Security-Policy header for pages (default is "default-src 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; frame-ancestors 'self'; referrer origin;") -- ```-filecontentsecuritypolicy "..."``` -- Content-Security-Policy header for files (default is "default-src 'none'; img-src 'self'; object-src 'self'; media-src 'self'; style-src 'self' 'unsafe-inline'; frame-ancestors 'self'; referrer origin;") +- ```-contentsecuritypolicy "..."``` -- Content-Security-Policy header for pages (default is "default-src 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; frame-ancestors 'self';") +- ```-filecontentsecuritypolicy "..."``` -- Content-Security-Policy header for files (default is "default-src 'none'; img-src 'self'; object-src 'self'; media-src 'self'; style-src 'self' 'unsafe-inline'; frame-ancestors 'self';") +- ```-refererpolicy "..."``` -- Referrer-Policy header for pages (default is "same-origin") +- ```-filereferrerpolicy "..."``` -- Referrer-Policy header for files (default is "same-origin") - ```-xframeoptions "..." ``` -- X-Frame-Options header (default is "SAMEORIGIN") - ```-remoteuploads``` -- (optionally) enable remote uploads (/upload?url=https://...) - ```-nologs``` -- (optionally) disable request logs in stdout diff --git a/csp.go b/csp.go index 098e271..34b73b4 100644 --- a/csp.go +++ b/csp.go @@ -6,6 +6,7 @@ import ( const ( cspHeader = "Content-Security-Policy" + rpHeader = "Referrer-Policy" frameOptionsHeader = "X-Frame-Options" ) @@ -15,8 +16,9 @@ type csp struct { } type CSPOptions struct { - policy string - frame string + policy string + referrerPolicy string + frame string } func (c csp) ServeHTTP(w http.ResponseWriter, r *http.Request) { @@ -25,6 +27,11 @@ func (c csp) ServeHTTP(w http.ResponseWriter, r *http.Request) { w.Header().Add(cspHeader, c.opts.policy) } + // only add a Referrer Policy if one is not already set + if existing := w.Header().Get(rpHeader); existing == "" { + w.Header().Add(rpHeader, c.opts.referrerPolicy) + } + w.Header().Set(frameOptionsHeader, c.opts.frame) c.h.ServeHTTP(w, r) diff --git a/csp_test.go b/csp_test.go index 190c65d..3d1d499 100644 --- a/csp_test.go +++ b/csp_test.go @@ -12,6 +12,7 @@ import ( var testCSPHeaders = map[string]string{ "Content-Security-Policy": "default-src 'none'; style-src 'self';", + "Referrer-Policy": "strict-origin-when-cross-origin", "X-Frame-Options": "SAMEORIGIN", } @@ -22,8 +23,9 @@ func TestContentSecurityPolicy(t *testing.T) { Config.maxSize = 1024 * 1024 * 1024 Config.noLogs = true Config.siteName = "linx" - Config.contentSecurityPolicy = "default-src 'none'; style-src 'self';" - Config.xFrameOptions = "SAMEORIGIN" + Config.contentSecurityPolicy = testCSPHeaders["Content-Security-Policy"] + Config.referrerPolicy = testCSPHeaders["Referrer-Policy"] + Config.xFrameOptions = testCSPHeaders["X-Frame-Options"] mux := setup() w := httptest.NewRecorder() @@ -34,8 +36,9 @@ func TestContentSecurityPolicy(t *testing.T) { } goji.Use(ContentSecurityPolicy(CSPOptions{ - policy: testCSPHeaders["Content-Security-Policy"], - frame: testCSPHeaders["X-Frame-Options"], + policy: testCSPHeaders["Content-Security-Policy"], + referrerPolicy: testCSPHeaders["Referrer-Policy"], + frame: testCSPHeaders["X-Frame-Options"], })) mux.ServeHTTP(w, req) diff --git a/fileserve.go b/fileserve.go index f7f87a6..951bea2 100644 --- a/fileserve.go +++ b/fileserve.go @@ -32,6 +32,7 @@ func fileServeHandler(c web.C, w http.ResponseWriter, r *http.Request) { } w.Header().Set("Content-Security-Policy", Config.fileContentSecurityPolicy) + w.Header().Set("Referrer-Policy", Config.fileReferrerPolicy) fileBackend.ServeFile(fileName, w, r) } diff --git a/server.go b/server.go index ba0efb8..5280503 100644 --- a/server.go +++ b/server.go @@ -46,6 +46,8 @@ var Config struct { keyFile string contentSecurityPolicy string fileContentSecurityPolicy string + referrerPolicy string + fileReferrerPolicy string xFrameOptions string maxSize int64 maxExpiry uint64 @@ -88,8 +90,9 @@ func setup() *web.Mux { mux.Use(middleware.Recoverer) mux.Use(middleware.AutomaticOptions) mux.Use(ContentSecurityPolicy(CSPOptions{ - policy: Config.contentSecurityPolicy, - frame: Config.xFrameOptions, + policy: Config.contentSecurityPolicy, + referrerPolicy: Config.referrerPolicy, + frame: Config.xFrameOptions, })) mux.Use(AddHeaders(Config.addHeaders)) @@ -233,11 +236,17 @@ func main() { flag.StringVar(&Config.remoteAuthFile, "remoteauthfile", "", "path to a file containing newline-separated scrypted auth keys for remote uploads") flag.StringVar(&Config.contentSecurityPolicy, "contentsecuritypolicy", - "default-src 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; frame-ancestors 'self'; referrer origin;", + "default-src 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; frame-ancestors 'self';", "value of default Content-Security-Policy header") flag.StringVar(&Config.fileContentSecurityPolicy, "filecontentsecuritypolicy", - "default-src 'none'; img-src 'self'; object-src 'self'; media-src 'self'; style-src 'self' 'unsafe-inline'; frame-ancestors 'self'; referrer origin;", + "default-src 'none'; img-src 'self'; object-src 'self'; media-src 'self'; style-src 'self' 'unsafe-inline'; frame-ancestors 'self';", "value of Content-Security-Policy header for file access") + flag.StringVar(&Config.referrerPolicy, "referrerpolicy", + "same-origin", + "value of default Referrer-Policy header") + flag.StringVar(&Config.fileReferrerPolicy, "filereferrerpolicy", + "same-origin", + "value of Referrer-Policy header for file access") flag.StringVar(&Config.xFrameOptions, "xframeoptions", "SAMEORIGIN", "value of X-Frame-Options header") flag.Var(&Config.addHeaders, "addheader", From 10938a3e0b72ab6f0d66381ca2e4fa7ff339140f Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Tue, 8 Jan 2019 19:56:32 +0000 Subject: [PATCH 157/345] Remove Google URL shortener (fix #146) (#150) --- README.md | 1 - backends/meta.go | 1 - backends/metajson/metajson.go | 3 -- display.go | 16 +++---- server.go | 8 ---- shorturl.go | 89 ----------------------------------- static/js/shorturl.js | 39 --------------- templates/display/base.html | 13 ----- 8 files changed, 7 insertions(+), 163 deletions(-) delete mode 100644 shorturl.go delete mode 100644 static/js/shorturl.js diff --git a/README.md b/README.md index e1a5c8a..df13b18 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,6 @@ allowhotlink = true - ```-xframeoptions "..." ``` -- X-Frame-Options header (default is "SAMEORIGIN") - ```-remoteuploads``` -- (optionally) enable remote uploads (/upload?url=https://...) - ```-nologs``` -- (optionally) disable request logs in stdout -- ```-googleapikey``` -- (optionally) API Key for Google's URL Shortener. ([How to create one](https://developers.google.com/url-shortener/v1/getting_started#APIKey)) #### SSL with built-in server - ```-certfile path/to/your.crt``` -- Path to the ssl certificate (required if you want to use the https server) diff --git a/backends/meta.go b/backends/meta.go index eb17d5e..27c3e41 100644 --- a/backends/meta.go +++ b/backends/meta.go @@ -17,7 +17,6 @@ type Metadata struct { Size int64 Expiry time.Time ArchiveFiles []string - ShortURL string } var BadMetadata = errors.New("Corrupted metadata.") diff --git a/backends/metajson/metajson.go b/backends/metajson/metajson.go index 6e76dd4..8ec53c4 100644 --- a/backends/metajson/metajson.go +++ b/backends/metajson/metajson.go @@ -15,7 +15,6 @@ type MetadataJSON struct { Size int64 `json:"size"` Expiry int64 `json:"expiry"` ArchiveFiles []string `json:"archive_files,omitempty"` - ShortURL string `json:"short_url"` } type MetaJSONBackend struct { @@ -30,7 +29,6 @@ func (m MetaJSONBackend) Put(key string, metadata *backends.Metadata) error { mjson.Sha256sum = metadata.Sha256sum mjson.Expiry = metadata.Expiry.Unix() mjson.Size = metadata.Size - mjson.ShortURL = metadata.ShortURL byt, err := json.Marshal(mjson) if err != nil { @@ -63,7 +61,6 @@ func (m MetaJSONBackend) Get(key string) (metadata backends.Metadata, err error) metadata.Sha256sum = mjson.Sha256sum metadata.Expiry = time.Unix(mjson.Expiry, 0) metadata.Size = mjson.Size - metadata.ShortURL = mjson.ShortURL return } diff --git a/display.go b/display.go index 4220c76..c17fea6 100644 --- a/display.go +++ b/display.go @@ -116,15 +116,13 @@ func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { } err = renderTemplate(tpl, pongo2.Context{ - "mime": metadata.Mimetype, - "filename": fileName, - "size": sizeHuman, - "expiry": expiryHuman, - "extra": extra, - "lines": lines, - "files": metadata.ArchiveFiles, - "shorturlEnabled": Config.googleShorterAPIKey != "", - "shorturl": metadata.ShortURL, + "mime": metadata.Mimetype, + "filename": fileName, + "size": sizeHuman, + "expiry": expiryHuman, + "extra": extra, + "lines": lines, + "files": metadata.ArchiveFiles, }, r, w) if err != nil { diff --git a/server.go b/server.go index 5280503..1dd1f09 100644 --- a/server.go +++ b/server.go @@ -59,7 +59,6 @@ var Config struct { authFile string remoteAuthFile string addHeaders headerList - googleShorterAPIKey string noDirectAgents bool } @@ -154,7 +153,6 @@ func setup() *web.Mux { selifRe := regexp.MustCompile("^" + Config.sitePath + `selif/(?P[a-z0-9-\.]+)$`) selifIndexRe := regexp.MustCompile("^" + Config.sitePath + `selif/$`) torrentRe := regexp.MustCompile("^" + Config.sitePath + `(?P[a-z0-9-\.]+)/torrent$`) - shortRe := regexp.MustCompile("^" + Config.sitePath + `(?P[a-z0-9-\.]+)/short$`) if Config.authFile == "" { mux.Get(Config.sitePath, indexHandler) @@ -193,10 +191,6 @@ func setup() *web.Mux { mux.Get(selifIndexRe, unauthorizedHandler) mux.Get(torrentRe, fileTorrentHandler) - if Config.googleShorterAPIKey != "" { - mux.Get(shortRe, shortURLHandler) - } - mux.NotFound(notFoundHandler) return mux @@ -251,8 +245,6 @@ func main() { "value of X-Frame-Options header") flag.Var(&Config.addHeaders, "addheader", "Add an arbitrary header to the response. This option can be used multiple times.") - flag.StringVar(&Config.googleShorterAPIKey, "googleapikey", "", - "API Key for Google's URL Shortener.") flag.BoolVar(&Config.noDirectAgents, "nodirectagents", false, "disable serving files directly for wget/curl user agents") diff --git a/shorturl.go b/shorturl.go deleted file mode 100644 index afdaf00..0000000 --- a/shorturl.go +++ /dev/null @@ -1,89 +0,0 @@ -package main - -import ( - "bytes" - "encoding/json" - "errors" - "net/http" - - "github.com/zenazn/goji/web" -) - -type shortenerRequest struct { - LongURL string `json:"longUrl"` -} - -type shortenerResponse struct { - Kind string `json:"kind"` - ID string `json:"id"` - LongURL string `json:"longUrl"` - Error struct { - Code int `json:"code"` - Message string `json:"message"` - } `json:"error"` -} - -func shortURLHandler(c web.C, w http.ResponseWriter, r *http.Request) { - fileName := c.URLParams["name"] - - err := checkFile(fileName) - if err == NotFoundErr { - notFoundHandler(c, w, r) - return - } - - metadata, err := metadataRead(fileName) - if err != nil { - oopsHandler(c, w, r, RespJSON, "Corrupt metadata.") - return - } - - if metadata.ShortURL == "" { - url, err := shortenURL(getSiteURL(r) + fileName) - if err != nil { - oopsHandler(c, w, r, RespJSON, err.Error()) - return - } - - metadata.ShortURL = url - - err = metadataWrite(fileName, &metadata) - if err != nil { - oopsHandler(c, w, r, RespJSON, "Corrupt metadata.") - return - } - } - - js, _ := json.Marshal(map[string]string{ - "shortUrl": metadata.ShortURL, - }) - w.Write(js) - return -} - -func shortenURL(url string) (string, error) { - apiURL := "https://www.googleapis.com/urlshortener/v1/url?key=" + Config.googleShorterAPIKey - jsonStr, _ := json.Marshal(shortenerRequest{LongURL: url}) - - req, err := http.NewRequest("POST", apiURL, bytes.NewBuffer(jsonStr)) - req.Header.Set("Content-Type", "application/json") - - client := &http.Client{} - resp, err := client.Do(req) - if err != nil { - return "", err - } - defer resp.Body.Close() - - shortenerResponse := new(shortenerResponse) - err = json.NewDecoder(resp.Body).Decode(shortenerResponse) - if err != nil { - return "", err - } - - if shortenerResponse.Error.Message != "" { - return "", errors.New(shortenerResponse.Error.Message) - } - - return shortenerResponse.ID, nil -} diff --git a/static/js/shorturl.js b/static/js/shorturl.js deleted file mode 100644 index 26e0c77..0000000 --- a/static/js/shorturl.js +++ /dev/null @@ -1,39 +0,0 @@ -document.getElementById('shorturl').addEventListener('click', function (e) { - e.preventDefault(); - - if (e.target.href !== "") return; - - xhr = new XMLHttpRequest(); - xhr.open("GET", e.target.dataset.url, true); - xhr.setRequestHeader('Accept', 'application/json'); - xhr.onreadystatechange = function () { - if (xhr.readyState === 4) { - var resp = JSON.parse(xhr.responseText); - - if (xhr.status === 200 && resp.error == null) { - e.target.innerText = resp.shortUrl; - e.target.href = resp.shortUrl; - e.target.setAttribute('aria-label', 'Click to copy into clipboard') - } else { - e.target.setAttribute('aria-label', resp.error) - } - } - }; - xhr.send(); -}); - -var clipboard = new Clipboard("#shorturl", { - text: function (trigger) { - if (trigger.href == null) return; - - return trigger.href; - } -}); - -clipboard.on('success', function (e) { - e.trigger.setAttribute('aria-label', 'Successfully copied') -}); - -clipboard.on('error', function (e) { - e.trigger.setAttribute('aria-label', 'Your browser does not support coping to clipboard') -}); diff --git a/templates/display/base.html b/templates/display/base.html index 587e76f..8f33b46 100644 --- a/templates/display/base.html +++ b/templates/display/base.html @@ -17,15 +17,6 @@ {% endif %} {% block infomore %}{% endblock %} {{ size }} | - {% if shorturlEnabled %} - {% if shorturl %} - {{shorturl}} | - {% else %} - short url | - {% endif %} - {% endif %} torrent | get
    @@ -43,8 +34,4 @@
    - - {% if shorturlEnabled %} - - {% endif %} {% endblock %} From 5f4f16e08be7935eba4d4c465ae97eb10aa1af53 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Wed, 9 Jan 2019 04:28:01 +0000 Subject: [PATCH 158/345] Add file ETag support (fix #138) (#152) --- display.go | 2 +- fileserve.go | 27 ++++++++++++++++++--------- torrent.go | 2 +- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/display.go b/display.go index c17fea6..d897e5a 100644 --- a/display.go +++ b/display.go @@ -29,7 +29,7 @@ func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { fileName := c.URLParams["name"] - err := checkFile(fileName) + _, err := checkFile(fileName) if err == NotFoundErr { notFoundHandler(c, w, r) return diff --git a/fileserve.go b/fileserve.go index 951bea2..3b20c4c 100644 --- a/fileserve.go +++ b/fileserve.go @@ -6,19 +6,23 @@ import ( "strings" "github.com/andreimarcu/linx-server/backends" + "github.com/andreimarcu/linx-server/expiry" "github.com/zenazn/goji/web" ) func fileServeHandler(c web.C, w http.ResponseWriter, r *http.Request) { fileName := c.URLParams["name"] - err := checkFile(fileName) + metadata, err := checkFile(fileName) if err == NotFoundErr { notFoundHandler(c, w, r) return } else if err == backends.BadMetadata { oopsHandler(c, w, r, RespAUTO, "Corrupt metadata.") return + } else if err != nil { + oopsHandler(c, w, r, RespAUTO, err.Error()) + return } if !Config.allowHotlink { @@ -34,6 +38,9 @@ func fileServeHandler(c web.C, w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Security-Policy", Config.fileContentSecurityPolicy) w.Header().Set("Referrer-Policy", Config.fileReferrerPolicy) + w.Header().Set("Etag", metadata.Sha256sum) + w.Header().Set("Cache-Control", "max-age=0") + fileBackend.ServeFile(fileName, w, r) } @@ -61,22 +68,24 @@ func staticHandler(c web.C, w http.ResponseWriter, r *http.Request) { } } -func checkFile(filename string) error { - _, err := fileBackend.Exists(filename) +func checkFile(filename string) (metadata backends.Metadata, err error) { + _, err = fileBackend.Exists(filename) if err != nil { - return NotFoundErr + err = NotFoundErr + return } - expired, err := isFileExpired(filename) + metadata, err = metadataRead(filename) if err != nil { - return err + return } - if expired { + if expiry.IsTsExpired(metadata.Expiry) { fileBackend.Delete(filename) metaStorageBackend.Delete(filename) - return NotFoundErr + err = NotFoundErr + return } - return nil + return } diff --git a/torrent.go b/torrent.go index 23361b5..77cd2fd 100644 --- a/torrent.go +++ b/torrent.go @@ -71,7 +71,7 @@ func createTorrent(fileName string, f io.ReadCloser, r *http.Request) ([]byte, e func fileTorrentHandler(c web.C, w http.ResponseWriter, r *http.Request) { fileName := c.URLParams["name"] - err := checkFile(fileName) + _, err := checkFile(fileName) if err == NotFoundErr { notFoundHandler(c, w, r) return From 6290f408ff7e995e24b39094ad1fec9449c8da2f Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Fri, 11 Jan 2019 18:09:54 +0100 Subject: [PATCH 159/345] Allow to paste images (#153) dropzone.js doesn't support pasting itself yet, so adding it externally and calling `.addFile()` to upload the pasted image. Fixes #130 --- static/js/upload.js | 12 +++++++++++- templates/index.html | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/static/js/upload.js b/static/js/upload.js index 5e54d62..159bad2 100644 --- a/static/js/upload.js +++ b/static/js/upload.js @@ -102,8 +102,18 @@ Dropzone.options.dropzone = { previewsContainer: "#uploads", parallelUploads: 5, headers: {"Accept": "application/json"}, - dictDefaultMessage: "Click or Drop file(s)", + dictDefaultMessage: "Click or Drop file(s) or Paste image", dictFallbackMessage: "" }; +document.onpaste = function(event) { + var items = (event.clipboardData || event.originalEvent.clipboardData).items; + for (index in items) { + var item = items[index]; + if (item.kind === "file") { + Dropzone.forElement("#dropzone").addFile(item.getAsFile()); + } + } +}; + // @end-license diff --git a/templates/index.html b/templates/index.html index 5e95d01..87d821d 100644 --- a/templates/index.html +++ b/templates/index.html @@ -13,7 +13,7 @@
    - Click or Drop file(s) + Click or Drop file(s) or Paste image
    From c746f70c10e1406a1d59c20086ef962e9c398e4f Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Mon, 14 Jan 2019 14:51:02 -0800 Subject: [PATCH 160/345] Allow changing the "selif" path name --- README.md | 1 + csp_test.go | 1 + server.go | 12 ++++++++++-- server_test.go | 4 ++-- templates.go | 1 + templates/display/audio.html | 4 ++-- templates/display/base.html | 2 +- templates/display/file.html | 2 +- templates/display/image.html | 4 ++-- templates/display/pdf.html | 4 ++-- templates/display/video.html | 4 ++-- torrent.go | 2 +- torrent_test.go | 2 +- 13 files changed, 27 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index df13b18..8d4ef11 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,7 @@ allowhotlink = true - ```-bind 127.0.0.1:8080``` -- what to bind to (default is 127.0.0.1:8080) - ```-sitename myLinx``` -- the site name displayed on top (default is inferred from Host header) - ```-siteurl "http://mylinx.example.org/"``` -- the site url (default is inferred from execution context) +- ```-selifpath "selif"``` -- path relative to site base url (the "selif" in https://mylinx.example.org/selif/image.jpg) where files are accessed directly (default: selif) - ```-filespath files/``` -- Path to store uploads (default is files/) - ```-metapath meta/``` -- Path to store information about uploads (default is meta/) - ```-maxsize 4294967296``` -- maximum upload file size in bytes (default 4GB) diff --git a/csp_test.go b/csp_test.go index 3d1d499..e3dbbdd 100644 --- a/csp_test.go +++ b/csp_test.go @@ -23,6 +23,7 @@ func TestContentSecurityPolicy(t *testing.T) { Config.maxSize = 1024 * 1024 * 1024 Config.noLogs = true Config.siteName = "linx" + Config.selifPath = "selif" Config.contentSecurityPolicy = testCSPHeaders["Content-Security-Policy"] Config.referrerPolicy = testCSPHeaders["Referrer-Policy"] Config.xFrameOptions = testCSPHeaders["X-Frame-Options"] diff --git a/server.go b/server.go index 1dd1f09..c7b4342 100644 --- a/server.go +++ b/server.go @@ -42,6 +42,7 @@ var Config struct { siteName string siteURL string sitePath string + selifPath string certFile string keyFile string contentSecurityPolicy string @@ -129,6 +130,11 @@ func setup() *web.Mux { Config.sitePath = "/" } + Config.selifPath = strings.TrimLeft(Config.selifPath, "/") + if lastChar := Config.selifPath[len(Config.selifPath)-1:]; lastChar != "/" { + Config.selifPath = Config.selifPath + "/" + } + metaStorageBackend = localfs.NewLocalfsBackend(Config.metaDir) metaBackend = metajson.NewMetaJSONBackend(metaStorageBackend) fileBackend = localfs.NewLocalfsBackend(Config.filesDir) @@ -150,8 +156,8 @@ func setup() *web.Mux { // Routing setup nameRe := regexp.MustCompile("^" + Config.sitePath + `(?P[a-z0-9-\.]+)$`) - selifRe := regexp.MustCompile("^" + Config.sitePath + `selif/(?P[a-z0-9-\.]+)$`) - selifIndexRe := regexp.MustCompile("^" + Config.sitePath + `selif/$`) + selifRe := regexp.MustCompile("^" + Config.sitePath + Config.selifPath + `(?P[a-z0-9-\.]+)$`) + selifIndexRe := regexp.MustCompile("^" + Config.sitePath + Config.selifPath + `$`) torrentRe := regexp.MustCompile("^" + Config.sitePath + `(?P[a-z0-9-\.]+)/torrent$`) if Config.authFile == "" { @@ -211,6 +217,8 @@ func main() { "name of the site") flag.StringVar(&Config.siteURL, "siteurl", "", "site base url (including trailing slash)") + flag.StringVar(&Config.selifPath, "selifpath", "selif", + "path relative to site base url where files are accessed directly") flag.Int64Var(&Config.maxSize, "maxsize", 4*1024*1024*1024, "maximum upload file size in bytes (default 4GB)") flag.Uint64Var(&Config.maxExpiry, "maxexpiry", 0, diff --git a/server_test.go b/server_test.go index 7727f0c..d9374ab 100644 --- a/server_test.go +++ b/server_test.go @@ -173,7 +173,7 @@ func TestFileNotFound(t *testing.T) { filename := generateBarename() - req, err := http.NewRequest("GET", "/selif/"+filename, nil) + req, err := http.NewRequest("GET", "/"+Config.selifPath+filename, nil) if err != nil { t.Fatal(err) } @@ -941,7 +941,7 @@ func TestPutAndOverwrite(t *testing.T) { // Make sure it's the new file w = httptest.NewRecorder() - req, err = http.NewRequest("GET", "/selif/"+myjson.Filename, nil) + req, err = http.NewRequest("GET", "/"+Config.selifPath+myjson.Filename, nil) mux.ServeHTTP(w, req) if w.Code == 404 { diff --git a/templates.go b/templates.go index 0687bce..79c90ce 100644 --- a/templates.go +++ b/templates.go @@ -83,6 +83,7 @@ func renderTemplate(tpl *pongo2.Template, context pongo2.Context, r *http.Reques } context["sitepath"] = Config.sitePath + context["selifpath"] = Config.selifPath context["using_auth"] = Config.authFile != "" return tpl.ExecuteWriter(context, writer) diff --git a/templates/display/audio.html b/templates/display/audio.html index 689bab3..b5ae1e3 100644 --- a/templates/display/audio.html +++ b/templates/display/audio.html @@ -2,8 +2,8 @@ {% block main %} {% endblock %} diff --git a/templates/display/base.html b/templates/display/base.html index 8f33b46..172e17a 100644 --- a/templates/display/base.html +++ b/templates/display/base.html @@ -18,7 +18,7 @@ {% block infomore %}{% endblock %} {{ size }} | torrent | - get + get
    {% block infoleft %}{% endblock %} diff --git a/templates/display/file.html b/templates/display/file.html index 5eeb424..670651e 100644 --- a/templates/display/file.html +++ b/templates/display/file.html @@ -2,7 +2,7 @@ {% block main %}
    -

    You are requesting {{ filename }}, click here to download.

    +

    You are requesting {{ filename }}, click here to download.

    {% if files|length > 0 %}

    Contents of the archive:

    diff --git a/templates/display/image.html b/templates/display/image.html index b1ea7dd..807b7ad 100644 --- a/templates/display/image.html +++ b/templates/display/image.html @@ -1,7 +1,7 @@ {% extends "base.html" %} {% block main %} - - + + {% endblock %} diff --git a/templates/display/pdf.html b/templates/display/pdf.html index 7ad20f1..69501f7 100644 --- a/templates/display/pdf.html +++ b/templates/display/pdf.html @@ -1,10 +1,10 @@ {% extends "base.html" %} {% block main %} - +

    It appears your Web browser is not configured to display PDF files. -No worries, just click here to download the PDF file.

    +No worries, just click here to download the PDF file.

    {% endblock %} diff --git a/templates/display/video.html b/templates/display/video.html index 9fc90d5..317664b 100644 --- a/templates/display/video.html +++ b/templates/display/video.html @@ -2,7 +2,7 @@ {% block main %} {% endblock %} diff --git a/torrent.go b/torrent.go index 77cd2fd..4155872 100644 --- a/torrent.go +++ b/torrent.go @@ -45,7 +45,7 @@ func createTorrent(fileName string, f io.ReadCloser, r *http.Request) ([]byte, e PieceLength: TORRENT_PIECE_LENGTH, Name: fileName, }, - UrlList: []string{fmt.Sprintf("%sselif/%s", getSiteURL(r), fileName)}, + UrlList: []string{fmt.Sprintf("%s%s%s", getSiteURL(r), Config.selifPath, fileName)}, } for { diff --git a/torrent_test.go b/torrent_test.go index 38132f2..b553231 100644 --- a/torrent_test.go +++ b/torrent_test.go @@ -45,7 +45,7 @@ func TestCreateTorrent(t *testing.T) { t.Fatal("Length was less than or equal to 0, expected more") } - tracker := fmt.Sprintf("%sselif/%s", Config.siteURL, fileName) + tracker := fmt.Sprintf("%s%s%s", Config.siteURL, Config.selifPath, fileName) if decoded.UrlList[0] != tracker { t.Fatalf("First entry in URL list was %s, expected %s", decoded.UrlList[0], tracker) } From 1fb92ffce30270ba46f7d7ba6aa0620b518edda6 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Mon, 14 Jan 2019 15:23:37 -0800 Subject: [PATCH 161/345] Fix bug where using curl with json headers would return the file instead --- display.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/display.go b/display.go index d897e5a..70d8dee 100644 --- a/display.go +++ b/display.go @@ -22,7 +22,7 @@ const maxDisplayFileSizeBytes = 1024 * 512 var cliUserAgentRe = regexp.MustCompile("(?i)(lib)?curl|wget") func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { - if !Config.noDirectAgents && cliUserAgentRe.MatchString(r.Header.Get("User-Agent")) { + if !Config.noDirectAgents && cliUserAgentRe.MatchString(r.Header.Get("User-Agent")) && !strings.EqualFold("application/json", r.Header.Get("Accept")) { fileServeHandler(c, w, r) return } From e506304b844d67f3860fd127605beb8ba3bc2244 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Mon, 14 Jan 2019 15:23:56 -0800 Subject: [PATCH 162/345] Return direct URL in json responses --- display.go | 11 ++++++----- upload.go | 1 + 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/display.go b/display.go index 70d8dee..ca5bc6f 100644 --- a/display.go +++ b/display.go @@ -52,11 +52,12 @@ func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { if strings.EqualFold("application/json", r.Header.Get("Accept")) { js, _ := json.Marshal(map[string]string{ - "filename": fileName, - "expiry": strconv.FormatInt(metadata.Expiry.Unix(), 10), - "size": strconv.FormatInt(metadata.Size, 10), - "mimetype": metadata.Mimetype, - "sha256sum": metadata.Sha256sum, + "filename": fileName, + "direct_url": getSiteURL(r) + Config.selifPath + fileName, + "expiry": strconv.FormatInt(metadata.Expiry.Unix(), 10), + "size": strconv.FormatInt(metadata.Size, 10), + "mimetype": metadata.Mimetype, + "sha256sum": metadata.Sha256sum, }) w.Write(js) return diff --git a/upload.go b/upload.go index b7195c3..acdd204 100644 --- a/upload.go +++ b/upload.go @@ -295,6 +295,7 @@ func generateBarename() string { func generateJSONresponse(upload Upload, r *http.Request) []byte { js, _ := json.Marshal(map[string]string{ "url": getSiteURL(r) + upload.Filename, + "direct_url": getSiteURL(r) + Config.selifPath + upload.Filename, "filename": upload.Filename, "delete_key": upload.Metadata.DeleteKey, "expiry": strconv.FormatInt(upload.Metadata.Expiry.Unix(), 10), From 9d7f698c70be785a46dbe061ef649805c724c219 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Mon, 14 Jan 2019 16:16:15 -0800 Subject: [PATCH 163/345] Add direct_url info to API page --- templates/API.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/templates/API.html b/templates/API.html index 045f4c2..64404b6 100644 --- a/templates/API.html +++ b/templates/API.html @@ -41,6 +41,7 @@

    “url”: the publicly available upload url
    + “direct_url”: the url to access the file directly
    “filename”: the (optionally generated) filename
    “delete_key”: the (optionally generated) deletion key,
    “expiry”: the unix timestamp at which the file will expire (0 if never)
    @@ -121,6 +122,7 @@ DELETED

    “url”: the publicly available upload url
    + “direct_url”: the url to access the file directly
    “filename”: the (optionally generated) filename
    “expiry”: the unix timestamp at which the file will expire (0 if never)
    “size”: the size in bytes of the file
    From 5340f23f4d32af329509c6e2fceb6600f85610d3 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Tue, 15 Jan 2019 06:41:03 +0000 Subject: [PATCH 164/345] Add new multi-stage slim Dockerfile (#154) --- Dockerfile | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 8f02dcc..addad3f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,15 +1,26 @@ -FROM golang:alpine +FROM golang:alpine3.8 AS build + +COPY . /go/src/github.com/andreimarcu/linx-server +WORKDIR /go/src/github.com/andreimarcu/linx-server RUN set -ex \ && apk add --no-cache --virtual .build-deps git \ - && go get github.com/andreimarcu/linx-server \ + && go get -v . \ && apk del .build-deps +FROM alpine:3.8 + +COPY --from=build /go/bin/linx-server /usr/local/bin/linx-server + +ENV GOPATH /go +COPY static /go/src/github.com/andreimarcu/linx-server/static/ +COPY templates /go/src/github.com/andreimarcu/linx-server/templates/ + RUN mkdir -p /data/files && mkdir -p /data/meta && chown -R 65534:65534 /data VOLUME ["/data/files", "/data/meta"] EXPOSE 8080 USER nobody -ENTRYPOINT ["/go/bin/linx-server", "-bind=0.0.0.0:8080", "-filespath=/data/files/", "-metapath=/data/meta/"] +ENTRYPOINT ["/usr/local/bin/linx-server", "-bind=0.0.0.0:8080", "-filespath=/data/files/", "-metapath=/data/meta/"] CMD ["-sitename=linx", "-allowhotlink"] From fd0f3d9e46af8729e6c00d88d0726b7ed8159c79 Mon Sep 17 00:00:00 2001 From: Simon Alfassa Date: Sat, 9 Jun 2018 19:31:44 +0200 Subject: [PATCH 165/345] Make the web page mobile friendly --- static/css/dropzone.css | 9 +++++- static/css/github-markdown.css | 3 +- static/css/linx.css | 58 +++++++++++++++++++++------------- static/js/bin.js | 2 +- templates/404.html | 4 ++- templates/base.html | 1 + templates/display/base.html | 5 ++- templates/index.html | 4 +-- templates/paste.html | 10 +++--- 9 files changed, 60 insertions(+), 36 deletions(-) diff --git a/static/css/dropzone.css b/static/css/dropzone.css index 18472a6..f3c4cb2 100644 --- a/static/css/dropzone.css +++ b/static/css/dropzone.css @@ -31,11 +31,18 @@ border: 2px solid #FAFBFC; } -#dropzone { width: 400px; +#dropzone { + width: 400px; margin-left: auto; margin-right: auto; } +@media(max-width: 450px) { + #dropzone { + width: auto; + } +} + #uploads { margin-top: 20px; } diff --git a/static/css/github-markdown.css b/static/css/github-markdown.css index 8072b54..6823d9c 100644 --- a/static/css/github-markdown.css +++ b/static/css/github-markdown.css @@ -8,7 +8,8 @@ font-size: 12px; line-height: 1.6; word-wrap: break-word; - width: 680px; + width: 80vw; + max-width: 680px; padding: 10px; } diff --git a/static/css/linx.css b/static/css/linx.css index 193cbec..a759dc6 100644 --- a/static/css/linx.css +++ b/static/css/linx.css @@ -71,32 +71,26 @@ body { -webkit-box-shadow: 1px 1px 1px 1px #ccc; box-shadow: 1px 1px 1px 1px #ccc; margin-bottom: 15px; +} +.dinfo #filename { + margin: 2px 15px 0 0; } #info { - text-align: left; - + display: flex; + flex-wrap: wrap; + justify-content: space-between; background-color: white; padding: 5px 5px 5px 5px; } -#info #filename, -#editform #filename { - width: 232px; -} - #info #extension, #editform #extension { width: 40px; } -#info .float-left { - margin-top: 2px; - margin-right: 20px; -} - -#info .right { +#info .text-right { font-size: 13px; } @@ -115,6 +109,11 @@ body { color: #556A7F; } +#info input[type=checkbox] { + margin: 0; + vertical-align: bottom; +} + #footer { color: gray; text-align: right; @@ -158,7 +157,8 @@ body { } .fixed { - width: 800px; + width: 80vw; + max-width: 800px; } .needs-border { @@ -245,19 +245,28 @@ body { } #choices { - float: left; - width: 100%; - text-align: left; - vertical-align: bottom; - margin-top: 5px; + display: flex; + align-items: center; + flex-wrap: wrap; + justify-content: space-between; + width: 100%; + margin-top: 5px; font-size:13px; } +#choices label:first-child { + margin-right: 15px; +} + #expiry { - float: right; padding-top: 1px; } +#randomize { + vertical-align: bottom; + margin: 0; +} + .oopscontent { width: 400px; } @@ -267,8 +276,13 @@ body { border: 0; } +.error-404 img { + max-width: 90vw; +} + .editor { - width: 705px; + width: 90vw; + max-width: 705px; height: 450px; border-color: #cccccc; font-family: monospace; @@ -287,7 +301,7 @@ body { /* Content display {{{ */ .display-audio, .display-file { - width: 500px; + width: 100%; } .display-image { diff --git a/static/js/bin.js b/static/js/bin.js index 6e1bbcc..bcaf4f1 100644 --- a/static/js/bin.js +++ b/static/js/bin.js @@ -1,6 +1,6 @@ // @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later -var navlist = document.getElementById("info").getElementsByClassName("right")[0]; +var navlist = document.getElementById("info").getElementsByClassName("text-right")[0]; init(); diff --git a/templates/404.html b/templates/404.html index c1728e5..3b3d64e 100644 --- a/templates/404.html +++ b/templates/404.html @@ -1,5 +1,7 @@ {% extends "base.html" %} {% block content %} - +

    + +
    {% endblock %} diff --git a/templates/base.html b/templates/base.html index d750cb4..5392f8d 100644 --- a/templates/base.html +++ b/templates/base.html @@ -3,6 +3,7 @@ {% block title %}{{ sitename }}{% endblock %} + diff --git a/templates/display/base.html b/templates/display/base.html index 172e17a..29d21b8 100644 --- a/templates/display/base.html +++ b/templates/display/base.html @@ -7,11 +7,11 @@ {% block content %}
    -
    +
    {{ filename }}
    -
    +
    {% if expiry %} file expires in {{ expiry }} | {% endif %} @@ -22,7 +22,6 @@
    {% block infoleft %}{% endblock %} -
    diff --git a/templates/index.html b/templates/index.html index 87d821d..d423879 100644 --- a/templates/index.html +++ b/templates/index.html @@ -17,8 +17,9 @@
    +
    -
    -
    diff --git a/templates/paste.html b/templates/paste.html index 9178ba4..c4e88e9 100644 --- a/templates/paste.html +++ b/templates/paste.html @@ -4,17 +4,17 @@
    - . - -
    +
    + . +
    +
    + - -
    From b731e17c1ef56373f93eb760c45c0c1cf647cf8b Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Wed, 16 Jan 2019 01:15:24 -0800 Subject: [PATCH 166/345] Cosmetic tweaks & fixes --- display.go | 1 + static/css/dropzone.css | 1 + static/css/linx.css | 176 +++++++++++++++++++---------------- static/js/bin.js | 4 +- templates/display/base.html | 2 +- templates/display/bin.html | 20 ++-- templates/display/story.html | 20 ++-- templates/paste.html | 10 +- 8 files changed, 120 insertions(+), 114 deletions(-) diff --git a/display.go b/display.go index ca5bc6f..63ba765 100644 --- a/display.go +++ b/display.go @@ -121,6 +121,7 @@ func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { "filename": fileName, "size": sizeHuman, "expiry": expiryHuman, + "expirylist": listExpirationTimes(), "extra": extra, "lines": lines, "files": metadata.ArchiveFiles, diff --git a/static/css/dropzone.css b/static/css/dropzone.css index f3c4cb2..e19794f 100644 --- a/static/css/dropzone.css +++ b/static/css/dropzone.css @@ -49,6 +49,7 @@ div.dz-default { border: 2px dashed #C9C9C9; + border-radius: 5px; color: #C9C9C9; font: 14px "helvetica neue",helvetica,arial,sans-serif; background-color: #FAFBFC; diff --git a/static/css/linx.css b/static/css/linx.css index a759dc6..82e256a 100644 --- a/static/css/linx.css +++ b/static/css/linx.css @@ -1,56 +1,56 @@ body { - background-color: #E8ECF0; - color: #556A7F; + background-color: #E8ECF0; + color: #556A7F; - font-family: Arial, Helvetica, sans-serif; - font-size: 14px; + font-family: Arial, Helvetica, sans-serif; + font-size: 14px; } #container_container { - display: table; - table-layout: fixed; - margin-left: auto; - margin-right: auto; + display: table; + table-layout: fixed; + margin-left: auto; + margin-right: auto; } #container { - display: table-cell; - min-width: 200px; + display: table-cell; + min-width: 200px; } #header a { - text-decoration: none; - color: #556A7F; + text-decoration: none; + color: #556A7F; } #navigation { - margin-top: 4px; + margin-top: 4px; } #navigation a { - text-decoration: none; - border-bottom: 1px dotted #556A7F; - color: #556A7F; + text-decoration: none; + border-bottom: 1px dotted #556A7F; + color: #556A7F; } #navigation a:hover { - background-color: #C7D1EB; + background-color: #C7D1EB; } #main { - background-color: white; + background-color: white; - padding: 6px 5px 8px 5px; + padding: 6px 5px 8px 5px; - -moz-box-shadow: 1px 1px 1px 1px #ccc; - -webkit-box-shadow: 1px 1px 1px 1px #ccc; - box-shadow: 1px 1px 1px 1px #ccc; + -moz-box-shadow: 1px 1px 1px 1px #ccc; + -webkit-box-shadow: 1px 1px 1px 1px #ccc; + box-shadow: 1px 1px 1px 1px #ccc; - text-align: center; + text-align: center; } #main a { - color: #556A7F; + color: #556A7F; } #normal-content { @@ -62,10 +62,6 @@ body { margin-bottom: 0; } -.ninfo { - margin-bottom: 5px; -} - .dinfo { -moz-box-shadow: 1px 1px 1px 1px #ccc; -webkit-box-shadow: 1px 1px 1px 1px #ccc; @@ -73,16 +69,12 @@ body { margin-bottom: 15px; } -.dinfo #filename { - margin: 2px 15px 0 0; -} - #info { - display: flex; - flex-wrap: wrap; - justify-content: space-between; + display: flex; + flex-wrap: wrap; + justify-content: space-between; background-color: white; - padding: 5px 5px 5px 5px; + padding: 5px 5px 5px 5px; } #info #extension, @@ -91,7 +83,7 @@ body { } #info .text-right { - font-size: 13px; + font-size: 13px; } #info a { @@ -104,56 +96,50 @@ body { background-color: #E8ECF0; } -#info input[type=text] { - border: 0; - color: #556A7F; -} - #info input[type=checkbox] { - margin: 0; - vertical-align: bottom; + margin: 0; + vertical-align: bottom; } #footer { - color: gray; - text-align: right; - margin-top: 30px; - margin-bottom: 10px; - font-size: 11px; + color: gray; + text-align: right; + margin-top: 30px; + margin-bottom: 10px; + font-size: 11px; } #footer a { - color: gray; - text-decoration: none; + color: gray; + text-decoration: none; } - .normal { - text-align: left; - font-size: 13px; + text-align: left; + font-size: 13px; } .normal a { - text-decoration: none; - border-bottom: 1px dotted gray; + text-decoration: none; + border-bottom: 1px dotted gray; } .normal a:hover { - color: black; - background-color: #E8ECF0; + color: black; + background-color: #E8ECF0; } .normal ul { - padding-left: 15px; + padding-left: 15px; } .normal li { - margin-bottom: 3px; - list-style: none; + margin-bottom: 3px; + list-style: none; } .normal li a { - font-weight: bold; + font-weight: bold; } .fixed { @@ -161,37 +147,46 @@ body { max-width: 800px; } +.paste { + width: 70vw; + max-width: 700px; +} + .needs-border { - border-top: 1px solid rgb(214, 214, 214); + border-top: 1px solid rgb(214, 214, 214); } .left { - text-align: left; + text-align: left; } .float-left { - float: left; + float: left; +} + +.pad-left { + padding-left: 10px; } .pad-right { - padding-right: 10px; + padding-right: 10px; } .text-right { - text-align: right; + text-align: right; } .center { - text-align: center; + text-align: center; } .float-right, .right { - float: right; + float: right; } .clear { - clear: both; + clear: both; } #upload_header { @@ -255,7 +250,7 @@ body { } #choices label:first-child { - margin-right: 15px; + margin-right: 15px; } #expiry { @@ -280,14 +275,34 @@ body { max-width: 90vw; } +.padme { + padding-left: 5px; + padding-right: 5px; +} + .editor { - width: 90vw; - max-width: 705px; - height: 450px; - border-color: #cccccc; - font-family: monospace; - resize: none; - overflow: auto; + width: 100%; + height: 450px; + border: 1px solid #eaeaea; + font-family: monospace; + resize: none; + overflow: auto; + border-radius: 2px; + padding: 2px; + box-sizing: border-box; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + } + + + +#info input[type=text] { + border: 1px solid #eaeaea; + color: #556A7F; + border-radius: 4px 4px 4px 4px; + padding-left: 4px; + padding-right: 4px; + height: 15px; } .storygreen { @@ -329,15 +344,16 @@ body { #editform, #editform .editor { display: none; + width: 100% } #codeb { white-space: pre-wrap; } -#editor { +#inplace-editor { display: none; - width: 794px; + width: 100%; height: 800px; font-size: 13px; } diff --git a/static/js/bin.js b/static/js/bin.js index bcaf4f1..7aed334 100644 --- a/static/js/bin.js +++ b/static/js/bin.js @@ -32,13 +32,13 @@ function edit(ev) { var normalcontent = document.getElementById("normal-content"); normalcontent.removeChild(document.getElementById("normal-code")); - var editordiv = document.getElementById("editor"); + var editordiv = document.getElementById("inplace-editor"); editordiv.style.display = "block"; editordiv.addEventListener('keydown', handleTab); } function paste(ev) { - var editordiv = document.getElementById("editor"); + var editordiv = document.getElementById("inplace-editor"); document.getElementById("newcontent").value = editordiv.value; document.forms["reply"].submit(); } diff --git a/templates/display/base.html b/templates/display/base.html index 29d21b8..011534c 100644 --- a/templates/display/base.html +++ b/templates/display/base.html @@ -11,7 +11,7 @@ {{ filename }}
    -
    +
    {% if expiry %} file expires in {{ expiry }} | {% endif %} diff --git a/templates/display/bin.html b/templates/display/bin.html index 12e49c9..bd029a2 100644 --- a/templates/display/bin.html +++ b/templates/display/bin.html @@ -12,23 +12,17 @@ {% block infoleft %}
    -
    +
    + - -
    - . + .
    @@ -41,7 +35,7 @@ {% block main %}
    {{ extra.contents }}
    - +
    diff --git a/templates/display/story.html b/templates/display/story.html index 763fd4a..20e772c 100644 --- a/templates/display/story.html +++ b/templates/display/story.html @@ -10,23 +10,17 @@ {% block infoleft %}
    -
    +
    + - -
    - . + .
    @@ -39,7 +33,7 @@ {% block main %}
    {% for line in lines %}{% if line|make_list|first == ">" %}{{ line }}{% else %}{{ line }}{% endif %}{% endfor %}
    - +
    diff --git a/templates/paste.html b/templates/paste.html index c4e88e9..7737760 100644 --- a/templates/paste.html +++ b/templates/paste.html @@ -2,10 +2,10 @@ {% block content %}
    -
    -
    +
    +
    - . + .
    @@ -18,8 +18,8 @@
    -
    - +
    +
    From 0fb5fa1c517a12ca60d548ccadc45301d5bf6679 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20S=C3=A4nger?= Date: Fri, 25 Jan 2019 08:21:49 +0100 Subject: [PATCH 167/345] use sha256-simd (#155) --- meta.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta.go b/meta.go index 10cd4e1..2fc7b81 100644 --- a/meta.go +++ b/meta.go @@ -5,7 +5,6 @@ import ( "archive/zip" "compress/bzip2" "compress/gzip" - "crypto/sha256" "encoding/hex" "errors" "io" @@ -16,6 +15,7 @@ import ( "github.com/andreimarcu/linx-server/backends" "github.com/andreimarcu/linx-server/expiry" "github.com/dchest/uniuri" + "github.com/minio/sha256-simd" "gopkg.in/h2non/filetype.v1" ) From 5d9a93b1e285fe36b827ec74a2186f8623408b25 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Fri, 25 Jan 2019 07:33:11 +0000 Subject: [PATCH 168/345] Add S3 backend (#156) --- Dockerfile | 2 + backends/localfs/localfs.go | 143 ++++++++++++++++++++----- backends/meta.go | 5 - backends/metajson/metajson.go | 70 ------------- backends/s3/s3.go | 192 ++++++++++++++++++++++++++++++++++ backends/storage.go | 20 ++-- delete.go | 19 ++-- display.go | 46 +++++--- expiry.go | 2 +- fileserve.go | 37 ++++--- helpers/archive.go | 70 +++++++++++++ helpers/helpers.go | 67 ++++++++++++ linx-cleanup/cleanup.go | 10 +- meta.go | 165 ----------------------------- pages.go | 35 +++++-- server.go | 22 ++-- server_test.go | 80 ++++++++++++-- torrent.go | 66 +++++------- torrent/torrent.go | 28 +++++ torrent_test.go | 5 +- upload.go | 95 +++++++++-------- 21 files changed, 738 insertions(+), 441 deletions(-) delete mode 100644 backends/metajson/metajson.go create mode 100644 backends/s3/s3.go create mode 100644 helpers/archive.go create mode 100644 helpers/helpers.go delete mode 100644 meta.go create mode 100644 torrent/torrent.go diff --git a/Dockerfile b/Dockerfile index addad3f..c1a2f2e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,6 +13,8 @@ FROM alpine:3.8 COPY --from=build /go/bin/linx-server /usr/local/bin/linx-server ENV GOPATH /go +ENV SSL_CERT_FILE /etc/ssl/cert.pem + COPY static /go/src/github.com/andreimarcu/linx-server/static/ COPY templates /go/src/github.com/andreimarcu/linx-server/templates/ diff --git a/backends/localfs/localfs.go b/backends/localfs/localfs.go index b55c986..3f6f5ad 100644 --- a/backends/localfs/localfs.go +++ b/backends/localfs/localfs.go @@ -1,63 +1,149 @@ package localfs import ( - "errors" + "encoding/json" "io" "io/ioutil" - "net/http" "os" "path" + "time" "github.com/andreimarcu/linx-server/backends" + "github.com/andreimarcu/linx-server/helpers" ) type LocalfsBackend struct { - basePath string + metaPath string + filesPath string } -func (b LocalfsBackend) Delete(key string) error { - return os.Remove(path.Join(b.basePath, key)) +type MetadataJSON struct { + DeleteKey string `json:"delete_key"` + Sha256sum string `json:"sha256sum"` + Mimetype string `json:"mimetype"` + Size int64 `json:"size"` + Expiry int64 `json:"expiry"` + ArchiveFiles []string `json:"archive_files,omitempty"` +} + +func (b LocalfsBackend) Delete(key string) (err error) { + err = os.Remove(path.Join(b.filesPath, key)) + if err != nil { + return + } + err = os.Remove(path.Join(b.metaPath, key)) + return } func (b LocalfsBackend) Exists(key string) (bool, error) { - _, err := os.Stat(path.Join(b.basePath, key)) + _, err := os.Stat(path.Join(b.filesPath, key)) return err == nil, err } -func (b LocalfsBackend) Get(key string) ([]byte, error) { - return ioutil.ReadFile(path.Join(b.basePath, key)) +func (b LocalfsBackend) Head(key string) (metadata backends.Metadata, err error) { + f, err := os.Open(path.Join(b.metaPath, key)) + if os.IsNotExist(err) { + return metadata, backends.NotFoundErr + } else if err != nil { + return metadata, backends.BadMetadata + } + defer f.Close() + + decoder := json.NewDecoder(f) + + mjson := MetadataJSON{} + if err := decoder.Decode(&mjson); err != nil { + return metadata, backends.BadMetadata + } + + metadata.DeleteKey = mjson.DeleteKey + metadata.Mimetype = mjson.Mimetype + metadata.ArchiveFiles = mjson.ArchiveFiles + metadata.Sha256sum = mjson.Sha256sum + metadata.Expiry = time.Unix(mjson.Expiry, 0) + metadata.Size = mjson.Size + + return } -func (b LocalfsBackend) Put(key string, r io.Reader) (int64, error) { - dst, err := os.Create(path.Join(b.basePath, key)) +func (b LocalfsBackend) Get(key string) (metadata backends.Metadata, f io.ReadCloser, err error) { + metadata, err = b.Head(key) if err != nil { - return 0, err + return + } + + f, err = os.Open(path.Join(b.filesPath, key)) + if err != nil { + return + } + + return +} + +func (b LocalfsBackend) writeMetadata(key string, metadata backends.Metadata) error { + metaPath := path.Join(b.metaPath, key) + + mjson := MetadataJSON{ + DeleteKey: metadata.DeleteKey, + Mimetype: metadata.Mimetype, + ArchiveFiles: metadata.ArchiveFiles, + Sha256sum: metadata.Sha256sum, + Expiry: metadata.Expiry.Unix(), + Size: metadata.Size, + } + + dst, err := os.Create(metaPath) + if err != nil { + return err + } + defer dst.Close() + + encoder := json.NewEncoder(dst) + err = encoder.Encode(mjson) + if err != nil { + os.Remove(metaPath) + return err + } + + return nil +} + +func (b LocalfsBackend) Put(key string, r io.Reader, expiry time.Time, deleteKey string) (m backends.Metadata, err error) { + filePath := path.Join(b.filesPath, key) + + dst, err := os.Create(filePath) + if err != nil { + return } defer dst.Close() bytes, err := io.Copy(dst, r) if bytes == 0 { - b.Delete(key) - return bytes, errors.New("Empty file") + os.Remove(filePath) + return m, backends.FileEmptyError } else if err != nil { - b.Delete(key) - return bytes, err + os.Remove(filePath) + return m, err } - return bytes, err -} + m.Expiry = expiry + m.DeleteKey = deleteKey + m.Size = bytes + m.Mimetype, _ = helpers.DetectMime(dst) + m.Sha256sum, _ = helpers.Sha256sum(dst) + m.ArchiveFiles, _ = helpers.ListArchiveFiles(m.Mimetype, m.Size, dst) -func (b LocalfsBackend) Open(key string) (backends.ReadSeekCloser, error) { - return os.Open(path.Join(b.basePath, key)) -} + err = b.writeMetadata(key, m) + if err != nil { + os.Remove(filePath) + return + } -func (b LocalfsBackend) ServeFile(key string, w http.ResponseWriter, r *http.Request) { - filePath := path.Join(b.basePath, key) - http.ServeFile(w, r, filePath) + return } func (b LocalfsBackend) Size(key string) (int64, error) { - fileInfo, err := os.Stat(path.Join(b.basePath, key)) + fileInfo, err := os.Stat(path.Join(b.filesPath, key)) if err != nil { return 0, err } @@ -68,7 +154,7 @@ func (b LocalfsBackend) Size(key string) (int64, error) { func (b LocalfsBackend) List() ([]string, error) { var output []string - files, err := ioutil.ReadDir(b.basePath) + files, err := ioutil.ReadDir(b.filesPath) if err != nil { return nil, err } @@ -80,6 +166,9 @@ func (b LocalfsBackend) List() ([]string, error) { return output, nil } -func NewLocalfsBackend(basePath string) LocalfsBackend { - return LocalfsBackend{basePath: basePath} +func NewLocalfsBackend(metaPath string, filesPath string) LocalfsBackend { + return LocalfsBackend{ + metaPath: metaPath, + filesPath: filesPath, + } } diff --git a/backends/meta.go b/backends/meta.go index 27c3e41..7ba522d 100644 --- a/backends/meta.go +++ b/backends/meta.go @@ -5,11 +5,6 @@ import ( "time" ) -type MetaBackend interface { - Get(key string) (Metadata, error) - Put(key string, metadata *Metadata) error -} - type Metadata struct { DeleteKey string Sha256sum string diff --git a/backends/metajson/metajson.go b/backends/metajson/metajson.go deleted file mode 100644 index 8ec53c4..0000000 --- a/backends/metajson/metajson.go +++ /dev/null @@ -1,70 +0,0 @@ -package metajson - -import ( - "bytes" - "encoding/json" - "time" - - "github.com/andreimarcu/linx-server/backends" -) - -type MetadataJSON struct { - DeleteKey string `json:"delete_key"` - Sha256sum string `json:"sha256sum"` - Mimetype string `json:"mimetype"` - Size int64 `json:"size"` - Expiry int64 `json:"expiry"` - ArchiveFiles []string `json:"archive_files,omitempty"` -} - -type MetaJSONBackend struct { - storage backends.MetaStorageBackend -} - -func (m MetaJSONBackend) Put(key string, metadata *backends.Metadata) error { - mjson := MetadataJSON{} - mjson.DeleteKey = metadata.DeleteKey - mjson.Mimetype = metadata.Mimetype - mjson.ArchiveFiles = metadata.ArchiveFiles - mjson.Sha256sum = metadata.Sha256sum - mjson.Expiry = metadata.Expiry.Unix() - mjson.Size = metadata.Size - - byt, err := json.Marshal(mjson) - if err != nil { - return err - } - - if _, err := m.storage.Put(key, bytes.NewBuffer(byt)); err != nil { - return err - } - - return nil -} - -func (m MetaJSONBackend) Get(key string) (metadata backends.Metadata, err error) { - b, err := m.storage.Get(key) - if err != nil { - return metadata, backends.BadMetadata - } - - mjson := MetadataJSON{} - - err = json.Unmarshal(b, &mjson) - if err != nil { - return metadata, backends.BadMetadata - } - - metadata.DeleteKey = mjson.DeleteKey - metadata.Mimetype = mjson.Mimetype - metadata.ArchiveFiles = mjson.ArchiveFiles - metadata.Sha256sum = mjson.Sha256sum - metadata.Expiry = time.Unix(mjson.Expiry, 0) - metadata.Size = mjson.Size - - return -} - -func NewMetaJSONBackend(storage backends.MetaStorageBackend) MetaJSONBackend { - return MetaJSONBackend{storage: storage} -} diff --git a/backends/s3/s3.go b/backends/s3/s3.go new file mode 100644 index 0000000..7ae326c --- /dev/null +++ b/backends/s3/s3.go @@ -0,0 +1,192 @@ +package s3 + +import ( + "io" + "io/ioutil" + "os" + "strconv" + "time" + + "github.com/andreimarcu/linx-server/backends" + "github.com/andreimarcu/linx-server/helpers" + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/s3" + "github.com/aws/aws-sdk-go/service/s3/s3manager" +) + +type S3Backend struct { + bucket string + svc *s3.S3 +} + +func (b S3Backend) Delete(key string) error { + _, err := b.svc.DeleteObject(&s3.DeleteObjectInput{ + Bucket: aws.String(b.bucket), + Key: aws.String(key), + }) + if err != nil { + return err + } + return nil +} + +func (b S3Backend) Exists(key string) (bool, error) { + _, err := b.svc.HeadObject(&s3.HeadObjectInput{ + Bucket: aws.String(b.bucket), + Key: aws.String(key), + }) + return err == nil, err +} + +func (b S3Backend) Head(key string) (metadata backends.Metadata, err error) { + var result *s3.HeadObjectOutput + result, err = b.svc.HeadObject(&s3.HeadObjectInput{ + Bucket: aws.String(b.bucket), + Key: aws.String(key), + }) + if err != nil { + if aerr, ok := err.(awserr.Error); ok { + if aerr.Code() == s3.ErrCodeNoSuchKey || aerr.Code() == "NotFound" { + err = backends.NotFoundErr + } + } + return + } + + metadata, err = unmapMetadata(result.Metadata) + return +} + +func (b S3Backend) Get(key string) (metadata backends.Metadata, r io.ReadCloser, err error) { + var result *s3.GetObjectOutput + result, err = b.svc.GetObject(&s3.GetObjectInput{ + Bucket: aws.String(b.bucket), + Key: aws.String(key), + }) + if err != nil { + if aerr, ok := err.(awserr.Error); ok { + if aerr.Code() == s3.ErrCodeNoSuchKey || aerr.Code() == "NotFound" { + err = backends.NotFoundErr + } + } + return + } + + metadata, err = unmapMetadata(result.Metadata) + r = result.Body + return +} + +func mapMetadata(m backends.Metadata) map[string]*string { + return map[string]*string{ + "Expiry": aws.String(strconv.FormatInt(m.Expiry.Unix(), 10)), + "Delete_key": aws.String(m.DeleteKey), + "Size": aws.String(strconv.FormatInt(m.Size, 10)), + "Mimetype": aws.String(m.Mimetype), + "Sha256sum": aws.String(m.Sha256sum), + } +} + +func unmapMetadata(input map[string]*string) (m backends.Metadata, err error) { + expiry, err := strconv.ParseInt(aws.StringValue(input["Expiry"]), 10, 64) + if err != nil { + return m, err + } + m.Expiry = time.Unix(expiry, 0) + + m.Size, err = strconv.ParseInt(aws.StringValue(input["Size"]), 10, 64) + if err != nil { + return + } + + m.DeleteKey = aws.StringValue(input["Delete_key"]) + m.Mimetype = aws.StringValue(input["Mimetype"]) + m.Sha256sum = aws.StringValue(input["Sha256sum"]) + return +} + +func (b S3Backend) Put(key string, r io.Reader, expiry time.Time, deleteKey string) (m backends.Metadata, err error) { + tmpDst, err := ioutil.TempFile("", "linx-server-upload") + if err != nil { + return m, err + } + defer tmpDst.Close() + defer os.Remove(tmpDst.Name()) + + bytes, err := io.Copy(tmpDst, r) + if bytes == 0 { + return m, backends.FileEmptyError + } else if err != nil { + return m, err + } + + m.Expiry = expiry + m.DeleteKey = deleteKey + m.Size = bytes + m.Mimetype, _ = helpers.DetectMime(tmpDst) + m.Sha256sum, _ = helpers.Sha256sum(tmpDst) + // XXX: we may not be able to write this to AWS easily + //m.ArchiveFiles, _ = helpers.ListArchiveFiles(m.Mimetype, m.Size, tmpDst) + + uploader := s3manager.NewUploaderWithClient(b.svc) + input := &s3manager.UploadInput{ + Bucket: aws.String(b.bucket), + Key: aws.String(key), + Body: tmpDst, + Metadata: mapMetadata(m), + } + _, err = uploader.Upload(input) + if err != nil { + return + } + + return +} + +func (b S3Backend) Size(key string) (int64, error) { + input := &s3.HeadObjectInput{ + Bucket: aws.String(b.bucket), + Key: aws.String(key), + } + result, err := b.svc.HeadObject(input) + if err != nil { + return 0, err + } + + return *result.ContentLength, nil +} + +func (b S3Backend) List() ([]string, error) { + var output []string + input := &s3.ListObjectsInput{ + Bucket: aws.String(b.bucket), + } + + results, err := b.svc.ListObjects(input) + if err != nil { + return nil, err + } + + + for _, object := range results.Contents { + output = append(output, *object.Key) + } + + return output, nil +} + +func NewS3Backend(bucket string, region string, endpoint string) S3Backend { + awsConfig := &aws.Config{} + if region != "" { + awsConfig.Region = aws.String(region) + } + if endpoint != "" { + awsConfig.Endpoint = aws.String(endpoint) + } + + sess := session.Must(session.NewSession(awsConfig)) + svc := s3.New(sess) + return S3Backend{bucket: bucket, svc: svc} +} diff --git a/backends/storage.go b/backends/storage.go index 2b51a2c..d40a2b9 100644 --- a/backends/storage.go +++ b/backends/storage.go @@ -1,24 +1,17 @@ package backends import ( + "errors" "io" - "net/http" + "time" ) -type ReadSeekCloser interface { - io.Reader - io.Closer - io.Seeker - io.ReaderAt -} - type StorageBackend interface { Delete(key string) error Exists(key string) (bool, error) - Get(key string) ([]byte, error) - Put(key string, r io.Reader) (int64, error) - Open(key string) (ReadSeekCloser, error) - ServeFile(key string, w http.ResponseWriter, r *http.Request) + Head(key string) (Metadata, error) + Get(key string) (Metadata, io.ReadCloser, error) + Put(key string, r io.Reader, expiry time.Time, deleteKey string) (Metadata, error) Size(key string) (int64, error) } @@ -26,3 +19,6 @@ type MetaStorageBackend interface { StorageBackend List() ([]string, error) } + +var NotFoundErr = errors.New("File not found.") +var FileEmptyError = errors.New("Empty file") diff --git a/delete.go b/delete.go index 61c6fa8..38e36e3 100644 --- a/delete.go +++ b/delete.go @@ -3,8 +3,8 @@ package main import ( "fmt" "net/http" - "os" + "github.com/andreimarcu/linx-server/backends" "github.com/zenazn/goji/web" ) @@ -13,24 +13,19 @@ func deleteHandler(c web.C, w http.ResponseWriter, r *http.Request) { filename := c.URLParams["name"] - // Ensure requested file actually exists - if _, readErr := fileBackend.Exists(filename); os.IsNotExist(readErr) { + // Ensure that file exists and delete key is correct + metadata, err := storageBackend.Head(filename) + if err == backends.NotFoundErr { notFoundHandler(c, w, r) // 404 - file doesn't exist return - } - - // Ensure delete key is correct - metadata, err := metadataRead(filename) - if err != nil { + } else if err != nil { unauthorizedHandler(c, w, r) // 401 - no metadata available return } if metadata.DeleteKey == requestKey { - fileDelErr := fileBackend.Delete(filename) - metaDelErr := metaStorageBackend.Delete(filename) - - if (fileDelErr != nil) || (metaDelErr != nil) { + err := storageBackend.Delete(filename) + if err != nil { oopsHandler(c, w, r, RespPLAIN, "Could not delete") return } diff --git a/display.go b/display.go index 63ba765..7258904 100644 --- a/display.go +++ b/display.go @@ -2,6 +2,7 @@ package main import ( "encoding/json" + "io/ioutil" "net/http" "path/filepath" "regexp" @@ -9,6 +10,7 @@ import ( "strings" "time" + "github.com/andreimarcu/linx-server/backends" "github.com/andreimarcu/linx-server/expiry" "github.com/dustin/go-humanize" "github.com/flosch/pongo2" @@ -29,14 +31,11 @@ func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { fileName := c.URLParams["name"] - _, err := checkFile(fileName) - if err == NotFoundErr { + metadata, err := checkFile(fileName) + if err == backends.NotFoundErr { notFoundHandler(c, w, r) return - } - - metadata, err := metadataRead(fileName) - if err != nil { + } else if err != nil { oopsHandler(c, w, r, RespAUTO, "Corrupt metadata.") return } @@ -78,8 +77,13 @@ func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { tpl = Templates["display/pdf.html"] } else if extension == "story" { + metadata, reader, err := storageBackend.Get(fileName) + if err != nil { + oopsHandler(c, w, r, RespHTML, err.Error()) + } + if metadata.Size < maxDisplayFileSizeBytes { - bytes, err := fileBackend.Get(fileName) + bytes, err := ioutil.ReadAll(reader) if err == nil { extra["contents"] = string(bytes) lines = strings.Split(extra["contents"], "\n") @@ -88,8 +92,13 @@ func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { } } else if extension == "md" { + metadata, reader, err := storageBackend.Get(fileName) + if err != nil { + oopsHandler(c, w, r, RespHTML, err.Error()) + } + if metadata.Size < maxDisplayFileSizeBytes { - bytes, err := fileBackend.Get(fileName) + bytes, err := ioutil.ReadAll(reader) if err == nil { unsafe := blackfriday.MarkdownCommon(bytes) html := bluemonday.UGCPolicy().SanitizeBytes(unsafe) @@ -100,8 +109,13 @@ func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { } } else if strings.HasPrefix(metadata.Mimetype, "text/") || supportedBinExtension(extension) { + metadata, reader, err := storageBackend.Get(fileName) + if err != nil { + oopsHandler(c, w, r, RespHTML, err.Error()) + } + if metadata.Size < maxDisplayFileSizeBytes { - bytes, err := fileBackend.Get(fileName) + bytes, err := ioutil.ReadAll(reader) if err == nil { extra["extension"] = extension extra["lang_hl"], extra["lang_ace"] = extensionToHlAndAceLangs(extension) @@ -117,14 +131,14 @@ func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { } err = renderTemplate(tpl, pongo2.Context{ - "mime": metadata.Mimetype, - "filename": fileName, - "size": sizeHuman, - "expiry": expiryHuman, + "mime": metadata.Mimetype, + "filename": fileName, + "size": sizeHuman, + "expiry": expiryHuman, "expirylist": listExpirationTimes(), - "extra": extra, - "lines": lines, - "files": metadata.ArchiveFiles, + "extra": extra, + "lines": lines, + "files": metadata.ArchiveFiles, }, r, w) if err != nil { diff --git a/expiry.go b/expiry.go index 6d8887d..63b7757 100644 --- a/expiry.go +++ b/expiry.go @@ -24,7 +24,7 @@ type ExpirationTime struct { // Determine if the given filename is expired func isFileExpired(filename string) (bool, error) { - metadata, err := metadataRead(filename) + metadata, err := storageBackend.Head(filename) if err != nil { return false, err } diff --git a/fileserve.go b/fileserve.go index 3b20c4c..a3a249e 100644 --- a/fileserve.go +++ b/fileserve.go @@ -1,8 +1,10 @@ package main import ( + "io" "net/http" "net/url" + "strconv" "strings" "github.com/andreimarcu/linx-server/backends" @@ -14,14 +16,11 @@ func fileServeHandler(c web.C, w http.ResponseWriter, r *http.Request) { fileName := c.URLParams["name"] metadata, err := checkFile(fileName) - if err == NotFoundErr { + if err == backends.NotFoundErr { notFoundHandler(c, w, r) return - } else if err == backends.BadMetadata { - oopsHandler(c, w, r, RespAUTO, "Corrupt metadata.") - return } else if err != nil { - oopsHandler(c, w, r, RespAUTO, err.Error()) + oopsHandler(c, w, r, RespAUTO, "Corrupt metadata.") return } @@ -38,10 +37,23 @@ func fileServeHandler(c web.C, w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Security-Policy", Config.fileContentSecurityPolicy) w.Header().Set("Referrer-Policy", Config.fileReferrerPolicy) + _, reader, err := storageBackend.Get(fileName) + if err != nil { + oopsHandler(c, w, r, RespAUTO, err.Error()) + } + + w.Header().Set("Content-Type", metadata.Mimetype) + w.Header().Set("Content-Length", strconv.FormatInt(metadata.Size, 10)) w.Header().Set("Etag", metadata.Sha256sum) w.Header().Set("Cache-Control", "max-age=0") - fileBackend.ServeFile(fileName, w, r) + if r.Method != "HEAD" { + defer reader.Close() + + if _, err = io.CopyN(w, reader, metadata.Size); err != nil { + oopsHandler(c, w, r, RespAUTO, err.Error()) + } + } } func staticHandler(c web.C, w http.ResponseWriter, r *http.Request) { @@ -69,21 +81,14 @@ func staticHandler(c web.C, w http.ResponseWriter, r *http.Request) { } func checkFile(filename string) (metadata backends.Metadata, err error) { - _, err = fileBackend.Exists(filename) - if err != nil { - err = NotFoundErr - return - } - - metadata, err = metadataRead(filename) + metadata, err = storageBackend.Head(filename) if err != nil { return } if expiry.IsTsExpired(metadata.Expiry) { - fileBackend.Delete(filename) - metaStorageBackend.Delete(filename) - err = NotFoundErr + storageBackend.Delete(filename) + err = backends.NotFoundErr return } diff --git a/helpers/archive.go b/helpers/archive.go new file mode 100644 index 0000000..2a4380b --- /dev/null +++ b/helpers/archive.go @@ -0,0 +1,70 @@ +package helpers + +import ( + "archive/tar" + "archive/zip" + "compress/bzip2" + "compress/gzip" + "io" + "sort" +) + +type ReadSeekerAt interface { + io.Reader + io.Seeker + io.ReaderAt +} + +func ListArchiveFiles(mimetype string, size int64, r ReadSeekerAt) (files []string, err error) { + if mimetype == "application/x-tar" { + tReadr := tar.NewReader(r) + for { + hdr, err := tReadr.Next() + if err == io.EOF || err != nil { + break + } + if hdr.Typeflag == tar.TypeDir || hdr.Typeflag == tar.TypeReg { + files = append(files, hdr.Name) + } + } + sort.Strings(files) + } else if mimetype == "application/x-gzip" { + gzf, err := gzip.NewReader(r) + if err == nil { + tReadr := tar.NewReader(gzf) + for { + hdr, err := tReadr.Next() + if err == io.EOF || err != nil { + break + } + if hdr.Typeflag == tar.TypeDir || hdr.Typeflag == tar.TypeReg { + files = append(files, hdr.Name) + } + } + sort.Strings(files) + } + } else if mimetype == "application/x-bzip" { + bzf := bzip2.NewReader(r) + tReadr := tar.NewReader(bzf) + for { + hdr, err := tReadr.Next() + if err == io.EOF || err != nil { + break + } + if hdr.Typeflag == tar.TypeDir || hdr.Typeflag == tar.TypeReg { + files = append(files, hdr.Name) + } + } + sort.Strings(files) + } else if mimetype == "application/zip" { + zf, err := zip.NewReader(r, size) + if err == nil { + for _, f := range zf.File { + files = append(files, f.Name) + } + } + sort.Strings(files) + } + + return +} diff --git a/helpers/helpers.go b/helpers/helpers.go new file mode 100644 index 0000000..aef68ff --- /dev/null +++ b/helpers/helpers.go @@ -0,0 +1,67 @@ +package helpers + +import ( + "encoding/hex" + "io" + "unicode" + + "github.com/minio/sha256-simd" + "gopkg.in/h2non/filetype.v1" +) + +func DetectMime(r io.ReadSeeker) (string, error) { + // Get first 512 bytes for mimetype detection + header := make([]byte, 512) + + r.Seek(0, 0) + r.Read(header) + r.Seek(0, 0) + + kind, err := filetype.Match(header) + if err != nil { + return "application/octet-stream", err + } else if kind.MIME.Value != "" { + return kind.MIME.Value, nil + } + + // Check if the file seems anything like text + if printable(header) { + return "text/plain", nil + } else { + return "application/octet-stream", nil + } +} + +func Sha256sum(r io.ReadSeeker) (string, error) { + hasher := sha256.New() + + r.Seek(0, 0) + _, err := io.Copy(hasher, r) + if err != nil { + return "", err + } + + r.Seek(0, 0) + + return hex.EncodeToString(hasher.Sum(nil)), nil +} + +func printable(data []byte) bool { + for i, b := range data { + r := rune(b) + + // A null terminator that's not at the beginning of the file + if r == 0 && i == 0 { + return false + } else if r == 0 && i < 0 { + continue + } + + if r > unicode.MaxASCII { + return false + } + + } + + return true +} diff --git a/linx-cleanup/cleanup.go b/linx-cleanup/cleanup.go index 9ea89ae..88c2bce 100644 --- a/linx-cleanup/cleanup.go +++ b/linx-cleanup/cleanup.go @@ -5,7 +5,6 @@ import ( "log" "github.com/andreimarcu/linx-server/backends/localfs" - "github.com/andreimarcu/linx-server/backends/metajson" "github.com/andreimarcu/linx-server/expiry" ) @@ -22,17 +21,15 @@ func main() { "don't log deleted files") flag.Parse() - metaStorageBackend := localfs.NewLocalfsBackend(metaDir) - metaBackend := metajson.NewMetaJSONBackend(metaStorageBackend) - fileBackend := localfs.NewLocalfsBackend(filesDir) + fileBackend := localfs.NewLocalfsBackend(metaDir, filesDir) - files, err := metaStorageBackend.List() + files, err := fileBackend.List() if err != nil { panic(err) } for _, filename := range files { - metadata, err := metaBackend.Get(filename) + metadata, err := fileBackend.Head(filename) if err != nil { if !noLogs { log.Printf("Failed to find metadata for %s", filename) @@ -44,7 +41,6 @@ func main() { log.Printf("Delete %s", filename) } fileBackend.Delete(filename) - metaStorageBackend.Delete(filename) } } } diff --git a/meta.go b/meta.go deleted file mode 100644 index 2fc7b81..0000000 --- a/meta.go +++ /dev/null @@ -1,165 +0,0 @@ -package main - -import ( - "archive/tar" - "archive/zip" - "compress/bzip2" - "compress/gzip" - "encoding/hex" - "errors" - "io" - "sort" - "time" - "unicode" - - "github.com/andreimarcu/linx-server/backends" - "github.com/andreimarcu/linx-server/expiry" - "github.com/dchest/uniuri" - "github.com/minio/sha256-simd" - "gopkg.in/h2non/filetype.v1" -) - -var NotFoundErr = errors.New("File not found.") - -func generateMetadata(fName string, exp time.Time, delKey string) (m backends.Metadata, err error) { - file, err := fileBackend.Open(fName) - if err != nil { - return - } - defer file.Close() - - m.Size, err = fileBackend.Size(fName) - if err != nil { - return - } - - m.Expiry = exp - - if delKey == "" { - m.DeleteKey = uniuri.NewLen(30) - } else { - m.DeleteKey = delKey - } - - // Get first 512 bytes for mimetype detection - header := make([]byte, 512) - file.Read(header) - - kind, err := filetype.Match(header) - if err != nil { - m.Mimetype = "application/octet-stream" - } else { - m.Mimetype = kind.MIME.Value - } - - if m.Mimetype == "" { - // Check if the file seems anything like text - if printable(header) { - m.Mimetype = "text/plain" - } else { - m.Mimetype = "application/octet-stream" - } - } - - // Compute the sha256sum - hasher := sha256.New() - file.Seek(0, 0) - _, err = io.Copy(hasher, file) - if err == nil { - m.Sha256sum = hex.EncodeToString(hasher.Sum(nil)) - } - file.Seek(0, 0) - - // If archive, grab list of filenames - if m.Mimetype == "application/x-tar" { - tReadr := tar.NewReader(file) - for { - hdr, err := tReadr.Next() - if err == io.EOF || err != nil { - break - } - if hdr.Typeflag == tar.TypeDir || hdr.Typeflag == tar.TypeReg { - m.ArchiveFiles = append(m.ArchiveFiles, hdr.Name) - } - } - sort.Strings(m.ArchiveFiles) - } else if m.Mimetype == "application/x-gzip" { - gzf, err := gzip.NewReader(file) - if err == nil { - tReadr := tar.NewReader(gzf) - for { - hdr, err := tReadr.Next() - if err == io.EOF || err != nil { - break - } - if hdr.Typeflag == tar.TypeDir || hdr.Typeflag == tar.TypeReg { - m.ArchiveFiles = append(m.ArchiveFiles, hdr.Name) - } - } - sort.Strings(m.ArchiveFiles) - } - } else if m.Mimetype == "application/x-bzip" { - bzf := bzip2.NewReader(file) - tReadr := tar.NewReader(bzf) - for { - hdr, err := tReadr.Next() - if err == io.EOF || err != nil { - break - } - if hdr.Typeflag == tar.TypeDir || hdr.Typeflag == tar.TypeReg { - m.ArchiveFiles = append(m.ArchiveFiles, hdr.Name) - } - } - sort.Strings(m.ArchiveFiles) - } else if m.Mimetype == "application/zip" { - zf, err := zip.NewReader(file, m.Size) - if err == nil { - for _, f := range zf.File { - m.ArchiveFiles = append(m.ArchiveFiles, f.Name) - } - } - sort.Strings(m.ArchiveFiles) - } - - return -} - -func metadataWrite(filename string, metadata *backends.Metadata) error { - return metaBackend.Put(filename, metadata) -} - -func metadataRead(filename string) (metadata backends.Metadata, err error) { - metadata, err = metaBackend.Get(filename) - if err != nil { - // Metadata does not exist, generate one - newMData, err := generateMetadata(filename, expiry.NeverExpire, "") - if err != nil { - return metadata, err - } - metadataWrite(filename, &newMData) - - metadata, err = metaBackend.Get(filename) - } - - return -} - -func printable(data []byte) bool { - for i, b := range data { - r := rune(b) - - // A null terminator that's not at the beginning of the file - if r == 0 && i == 0 { - return false - } else if r == 0 && i < 0 { - continue - } - - if r > unicode.MaxASCII { - return false - } - - } - - return true -} diff --git a/pages.go b/pages.go index f58fa88..bb38f37 100644 --- a/pages.go +++ b/pages.go @@ -64,12 +64,10 @@ func oopsHandler(c web.C, w http.ResponseWriter, r *http.Request, rt RespType, m w.WriteHeader(500) renderTemplate(Templates["oops.html"], pongo2.Context{"msg": msg}, r, w) return - } else if rt == RespPLAIN { w.WriteHeader(500) fmt.Fprintf(w, "%s", msg) return - } else if rt == RespJSON { js, _ := json.Marshal(map[string]string{ "error": msg, @@ -79,7 +77,6 @@ func oopsHandler(c web.C, w http.ResponseWriter, r *http.Request, rt RespType, m w.WriteHeader(500) w.Write(js) return - } else if rt == RespAUTO { if strings.EqualFold("application/json", r.Header.Get("Accept")) { oopsHandler(c, w, r, RespJSON, msg) @@ -89,11 +86,33 @@ func oopsHandler(c web.C, w http.ResponseWriter, r *http.Request, rt RespType, m } } -func badRequestHandler(c web.C, w http.ResponseWriter, r *http.Request) { - w.WriteHeader(http.StatusBadRequest) - err := renderTemplate(Templates["400.html"], pongo2.Context{}, r, w) - if err != nil { - http.Error(w, err.Error(), http.StatusInternalServerError) +func badRequestHandler(c web.C, w http.ResponseWriter, r *http.Request, rt RespType, msg string) { + if rt == RespHTML { + w.WriteHeader(http.StatusBadRequest) + err := renderTemplate(Templates["400.html"], pongo2.Context{"msg": msg}, r, w) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + } + return + } else if rt == RespPLAIN { + w.WriteHeader(http.StatusBadRequest) + fmt.Fprintf(w, "%s", msg) + return + } else if rt == RespJSON { + js, _ := json.Marshal(map[string]string{ + "error": msg, + }) + + w.Header().Set("Content-Type", "application/json; charset=UTF-8") + w.WriteHeader(http.StatusBadRequest) + w.Write(js) + return + } else if rt == RespAUTO { + if strings.EqualFold("application/json", r.Header.Get("Accept")) { + badRequestHandler(c, w, r, RespJSON, msg) + } else { + badRequestHandler(c, w, r, RespHTML, msg) + } } } diff --git a/server.go b/server.go index c7b4342..851a7cf 100644 --- a/server.go +++ b/server.go @@ -16,7 +16,7 @@ import ( "github.com/GeertJohan/go.rice" "github.com/andreimarcu/linx-server/backends" "github.com/andreimarcu/linx-server/backends/localfs" - "github.com/andreimarcu/linx-server/backends/metajson" + "github.com/andreimarcu/linx-server/backends/s3" "github.com/flosch/pongo2" "github.com/vharitonsky/iniflags" "github.com/zenazn/goji/graceful" @@ -61,6 +61,9 @@ var Config struct { remoteAuthFile string addHeaders headerList noDirectAgents bool + s3Endpoint string + s3Region string + s3Bucket string } var Templates = make(map[string]*pongo2.Template) @@ -70,8 +73,7 @@ var timeStarted time.Time var timeStartedStr string var remoteAuthKeys []string var metaStorageBackend backends.MetaStorageBackend -var metaBackend backends.MetaBackend -var fileBackend backends.StorageBackend +var storageBackend backends.StorageBackend func setup() *web.Mux { mux := web.New() @@ -135,9 +137,11 @@ func setup() *web.Mux { Config.selifPath = Config.selifPath + "/" } - metaStorageBackend = localfs.NewLocalfsBackend(Config.metaDir) - metaBackend = metajson.NewMetaJSONBackend(metaStorageBackend) - fileBackend = localfs.NewLocalfsBackend(Config.filesDir) + if Config.s3Bucket != "" { + storageBackend = s3.NewS3Backend(Config.s3Bucket, Config.s3Region, Config.s3Endpoint) + } else { + storageBackend = localfs.NewLocalfsBackend(Config.metaDir, Config.filesDir) + } // Template setup p2l, err := NewPongo2TemplatesLoader() @@ -255,6 +259,12 @@ func main() { "Add an arbitrary header to the response. This option can be used multiple times.") flag.BoolVar(&Config.noDirectAgents, "nodirectagents", false, "disable serving files directly for wget/curl user agents") + flag.StringVar(&Config.s3Endpoint, "s3-endpoint", "", + "S3 endpoint") + flag.StringVar(&Config.s3Region, "s3-region", "", + "S3 region") + flag.StringVar(&Config.s3Bucket, "s3-bucket", "", + "S3 bucket to use for files and metadata") iniflags.Parse() diff --git a/server_test.go b/server_test.go index d9374ab..a1ec853 100644 --- a/server_test.go +++ b/server_test.go @@ -486,7 +486,6 @@ func TestPostJSONUploadMaxExpiry(t *testing.T) { var myjson RespOkJSON err = json.Unmarshal([]byte(w.Body.String()), &myjson) if err != nil { - fmt.Println(w.Body.String()) t.Fatal(err) } @@ -643,14 +642,45 @@ func TestPostEmptyUpload(t *testing.T) { mux.ServeHTTP(w, req) - if w.Code != 500 { + if w.Code != 400 { t.Log(w.Body.String()) - t.Fatalf("Status code is not 500, but %d", w.Code) + t.Fatalf("Status code is not 400, but %d", w.Code) + } +} + +func TestPostTooLargeUpload(t *testing.T) { + mux := setup() + oldMaxSize := Config.maxSize + Config.maxSize = 2 + w := httptest.NewRecorder() + + filename := generateBarename() + ".txt" + + var b bytes.Buffer + mw := multipart.NewWriter(&b) + fw, err := mw.CreateFormFile("file", filename) + if err != nil { + t.Fatal(err) } - if !strings.Contains(w.Body.String(), "Empty file") { - t.Fatal("Response did not contain 'Empty file'") + fw.Write([]byte("test content")) + mw.Close() + + req, err := http.NewRequest("POST", "/upload/", &b) + req.Header.Set("Content-Type", mw.FormDataContentType()) + req.Header.Set("Referer", Config.siteURL) + if err != nil { + t.Fatal(err) } + + mux.ServeHTTP(w, req) + + if w.Code != 400 { + t.Log(w.Body.String()) + t.Fatalf("Status code is not 400, but %d", w.Code) + } + + Config.maxSize = oldMaxSize } func TestPostEmptyJSONUpload(t *testing.T) { @@ -679,9 +709,9 @@ func TestPostEmptyJSONUpload(t *testing.T) { mux.ServeHTTP(w, req) - if w.Code != 500 { + if w.Code != 400 { t.Log(w.Body.String()) - t.Fatalf("Status code is not 500, but %d", w.Code) + t.Fatalf("Status code is not 400, but %d", w.Code) } var myjson RespErrJSON @@ -690,7 +720,7 @@ func TestPostEmptyJSONUpload(t *testing.T) { t.Fatal(err) } - if myjson.Error != "Could not upload file: Empty file" { + if myjson.Error != "Empty file" { t.Fatal("Json 'error' was not 'Empty file' but " + myjson.Error) } } @@ -768,11 +798,41 @@ func TestPutEmptyUpload(t *testing.T) { mux.ServeHTTP(w, req) - if !strings.Contains(w.Body.String(), "Empty file") { - t.Fatal("Response doesn't contain'Empty file'") + if w.Code != 400 { + t.Fatalf("Status code is not 400, but %d", w.Code) } } +func TestPutTooLargeUpload(t *testing.T) { + mux := setup() + oldMaxSize := Config.maxSize + Config.maxSize = 2 + + w := httptest.NewRecorder() + + filename := generateBarename() + ".file" + + req, err := http.NewRequest("PUT", "/upload/"+filename, strings.NewReader("File too big")) + if err != nil { + t.Fatal(err) + } + + req.Header.Set("Linx-Randomize", "yes") + + mux.ServeHTTP(w, req) + + if w.Code != 500 { + t.Log(w.Body.String()) + t.Fatalf("Status code is not 500, but %d", w.Code) + } + + if !strings.Contains(w.Body.String(), "request body too large") { + t.Fatal("Response did not contain 'request body too large'") + } + + Config.maxSize = oldMaxSize +} + func TestPutJSONUpload(t *testing.T) { var myjson RespOkJSON diff --git a/torrent.go b/torrent.go index 4155872..c5e7a58 100644 --- a/torrent.go +++ b/torrent.go @@ -2,65 +2,44 @@ package main import ( "bytes" - "crypto/sha1" "fmt" "io" "net/http" "time" "github.com/andreimarcu/linx-server/backends" + "github.com/andreimarcu/linx-server/expiry" + "github.com/andreimarcu/linx-server/torrent" "github.com/zeebo/bencode" "github.com/zenazn/goji/web" ) -const ( - TORRENT_PIECE_LENGTH = 262144 -) +func createTorrent(fileName string, f io.Reader, r *http.Request) ([]byte, error) { + url := getSiteURL(r) + Config.selifPath + fileName + chunk := make([]byte, torrent.TORRENT_PIECE_LENGTH) -type TorrentInfo struct { - PieceLength int `bencode:"piece length"` - Pieces string `bencode:"pieces"` - Name string `bencode:"name"` - Length int `bencode:"length"` -} - -type Torrent struct { - Encoding string `bencode:"encoding"` - Info TorrentInfo `bencode:"info"` - UrlList []string `bencode:"url-list"` -} - -func hashPiece(piece []byte) []byte { - h := sha1.New() - h.Write(piece) - return h.Sum(nil) -} - -func createTorrent(fileName string, f io.ReadCloser, r *http.Request) ([]byte, error) { - chunk := make([]byte, TORRENT_PIECE_LENGTH) - - torrent := Torrent{ + t := torrent.Torrent{ Encoding: "UTF-8", - Info: TorrentInfo{ - PieceLength: TORRENT_PIECE_LENGTH, + Info: torrent.TorrentInfo{ + PieceLength: torrent.TORRENT_PIECE_LENGTH, Name: fileName, }, - UrlList: []string{fmt.Sprintf("%s%s%s", getSiteURL(r), Config.selifPath, fileName)}, + UrlList: []string{url}, } for { - n, err := f.Read(chunk) + n, err := io.ReadFull(f, chunk) if err == io.EOF { break - } else if err != nil { + } else if err != nil && err != io.ErrUnexpectedEOF { return []byte{}, err } - torrent.Info.Length += n - torrent.Info.Pieces += string(hashPiece(chunk[:n])) + t.Info.Length += n + t.Info.Pieces += string(torrent.HashPiece(chunk[:n])) } - data, err := bencode.EncodeBytes(&torrent) + data, err := bencode.EncodeBytes(&t) if err != nil { return []byte{}, err } @@ -71,22 +50,25 @@ func createTorrent(fileName string, f io.ReadCloser, r *http.Request) ([]byte, e func fileTorrentHandler(c web.C, w http.ResponseWriter, r *http.Request) { fileName := c.URLParams["name"] - _, err := checkFile(fileName) - if err == NotFoundErr { + metadata, f, err := storageBackend.Get(fileName) + if err == backends.NotFoundErr { notFoundHandler(c, w, r) return } else if err == backends.BadMetadata { oopsHandler(c, w, r, RespAUTO, "Corrupt metadata.") return - } - - f, err := fileBackend.Open(fileName) - if err != nil { - oopsHandler(c, w, r, RespHTML, "Could not create torrent.") + } else if err != nil { + oopsHandler(c, w, r, RespAUTO, err.Error()) return } defer f.Close() + if expiry.IsTsExpired(metadata.Expiry) { + storageBackend.Delete(fileName) + notFoundHandler(c, w, r) + return + } + encoded, err := createTorrent(fileName, f, r) if err != nil { oopsHandler(c, w, r, RespHTML, "Could not create torrent.") diff --git a/torrent/torrent.go b/torrent/torrent.go new file mode 100644 index 0000000..a47d884 --- /dev/null +++ b/torrent/torrent.go @@ -0,0 +1,28 @@ +package torrent + +import ( + "crypto/sha1" +) + +const ( + TORRENT_PIECE_LENGTH = 262144 +) + +type TorrentInfo struct { + PieceLength int `bencode:"piece length"` + Pieces string `bencode:"pieces"` + Name string `bencode:"name"` + Length int `bencode:"length"` +} + +type Torrent struct { + Encoding string `bencode:"encoding"` + Info TorrentInfo `bencode:"info"` + UrlList []string `bencode:"url-list"` +} + +func HashPiece(piece []byte) []byte { + h := sha1.New() + h.Write(piece) + return h.Sum(nil) +} diff --git a/torrent_test.go b/torrent_test.go index b553231..1d227fd 100644 --- a/torrent_test.go +++ b/torrent_test.go @@ -5,12 +5,13 @@ import ( "os" "testing" + "github.com/andreimarcu/linx-server/torrent" "github.com/zeebo/bencode" ) func TestCreateTorrent(t *testing.T) { fileName := "server.go" - var decoded Torrent + var decoded torrent.Torrent f, err := os.Open("server.go") if err != nil { @@ -52,7 +53,7 @@ func TestCreateTorrent(t *testing.T) { } func TestCreateTorrentWithImage(t *testing.T) { - var decoded Torrent + var decoded torrent.Torrent f, err := os.Open("static/images/404.jpg") if err != nil { diff --git a/upload.go b/upload.go index acdd204..d46c4d5 100644 --- a/upload.go +++ b/upload.go @@ -22,6 +22,7 @@ import ( "gopkg.in/h2non/filetype.v1" ) +var FileTooLargeError = errors.New("File too large.") var fileBlacklist = map[string]bool{ "favicon.ico": true, "index.htm": true, @@ -34,10 +35,11 @@ var fileBlacklist = map[string]bool{ // Describes metadata directly from the user request type UploadRequest struct { src io.Reader + size int64 filename string expiry time.Duration // Seconds until expiry, 0 = never + deleteKey string // Empty string if not defined randomBarename bool - deletionKey string // Empty string if not defined } // Metadata associated with a file as it would actually be stored @@ -48,7 +50,7 @@ type Upload struct { func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { if !strictReferrerCheck(r, getSiteURL(r), []string{"Linx-Delete-Key", "Linx-Expiry", "Linx-Randomize", "X-Requested-With"}) { - badRequestHandler(c, w, r) + badRequestHandler(c, w, r, RespAUTO, "") return } @@ -65,32 +67,39 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { } defer file.Close() - r.ParseForm() - if r.Form.Get("randomize") == "true" { - upReq.randomBarename = true - } - upReq.expiry = parseExpiry(r.Form.Get("expires")) upReq.src = file + upReq.size = headers.Size upReq.filename = headers.Filename } else { - if r.FormValue("content") == "" { - oopsHandler(c, w, r, RespHTML, "Empty file") + if r.PostFormValue("content") == "" { + badRequestHandler(c, w, r, RespAUTO, "Empty file") return } - extension := r.FormValue("extension") + extension := r.PostFormValue("extension") if extension == "" { extension = "txt" } - upReq.src = strings.NewReader(r.FormValue("content")) - upReq.expiry = parseExpiry(r.FormValue("expires")) - upReq.filename = r.FormValue("filename") + "." + extension + content := r.PostFormValue("content") + + upReq.src = strings.NewReader(content) + upReq.size = int64(len(content)) + upReq.filename = r.PostFormValue("filename") + "." + extension + } + + upReq.expiry = parseExpiry(r.PostFormValue("expires")) + + if r.PostFormValue("randomize") == "true" { + upReq.randomBarename = true } upload, err := processUpload(upReq) if strings.EqualFold("application/json", r.Header.Get("Accept")) { - if err != nil { + if err == FileTooLargeError || err == backends.FileEmptyError { + badRequestHandler(c, w, r, RespJSON, err.Error()) + return + } else if err != nil { oopsHandler(c, w, r, RespJSON, "Could not upload file: "+err.Error()) return } @@ -99,14 +108,16 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json; charset=UTF-8") w.Write(js) } else { - if err != nil { + if err == FileTooLargeError || err == backends.FileEmptyError { + badRequestHandler(c, w, r, RespHTML, err.Error()) + return + } else if err != nil { oopsHandler(c, w, r, RespHTML, "Could not upload file: "+err.Error()) return } http.Redirect(w, r, Config.sitePath+upload.Filename, 303) } - } func uploadPutHandler(c web.C, w http.ResponseWriter, r *http.Request) { @@ -115,12 +126,15 @@ func uploadPutHandler(c web.C, w http.ResponseWriter, r *http.Request) { defer r.Body.Close() upReq.filename = c.URLParams["name"] - upReq.src = r.Body + upReq.src = http.MaxBytesReader(w, r.Body, Config.maxSize) upload, err := processUpload(upReq) if strings.EqualFold("application/json", r.Header.Get("Accept")) { - if err != nil { + if err == FileTooLargeError || err == backends.FileEmptyError { + badRequestHandler(c, w, r, RespJSON, err.Error()) + return + } else if err != nil { oopsHandler(c, w, r, RespJSON, "Could not upload file: "+err.Error()) return } @@ -129,7 +143,10 @@ func uploadPutHandler(c web.C, w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json; charset=UTF-8") w.Write(js) } else { - if err != nil { + if err == FileTooLargeError || err == backends.FileEmptyError { + badRequestHandler(c, w, r, RespPLAIN, err.Error()) + return + } else if err != nil { oopsHandler(c, w, r, RespPLAIN, "Could not upload file: "+err.Error()) return } @@ -162,8 +179,8 @@ func uploadRemote(c web.C, w http.ResponseWriter, r *http.Request) { } upReq.filename = filepath.Base(grabUrl.Path) - upReq.src = resp.Body - upReq.deletionKey = r.FormValue("deletekey") + upReq.src = http.MaxBytesReader(w, resp.Body, Config.maxSize) + upReq.deleteKey = r.FormValue("deletekey") upReq.randomBarename = r.FormValue("randomize") == "yes" upReq.expiry = parseExpiry(r.FormValue("expiry")) @@ -193,15 +210,18 @@ func uploadHeaderProcess(r *http.Request, upReq *UploadRequest) { upReq.randomBarename = true } - upReq.deletionKey = r.Header.Get("Linx-Delete-Key") + upReq.deleteKey = r.Header.Get("Linx-Delete-Key") // Get seconds until expiry. Non-integer responses never expire. expStr := r.Header.Get("Linx-Expiry") upReq.expiry = parseExpiry(expStr) - } func processUpload(upReq UploadRequest) (upload Upload, err error) { + if upReq.size > Config.maxSize { + return upload, FileTooLargeError + } + // Determine the appropriate filename, then write to disk barename, extension := barePlusExt(upReq.filename) @@ -215,7 +235,7 @@ func processUpload(upReq UploadRequest) (upload Upload, err error) { header = make([]byte, 512) n, _ := upReq.src.Read(header) if n == 0 { - return upload, errors.New("Empty file") + return upload, backends.FileEmptyError } header = header[:n] @@ -231,13 +251,13 @@ func processUpload(upReq UploadRequest) (upload Upload, err error) { upload.Filename = strings.Join([]string{barename, extension}, ".") upload.Filename = strings.Replace(upload.Filename, " ", "", -1) - fileexists, _ := fileBackend.Exists(upload.Filename) + fileexists, _ := storageBackend.Exists(upload.Filename) // Check if the delete key matches, in which case overwrite if fileexists { - metad, merr := metadataRead(upload.Filename) + metad, merr := storageBackend.Head(upload.Filename) if merr == nil { - if upReq.deletionKey == metad.DeleteKey { + if upReq.deleteKey == metad.DeleteKey { fileexists = false } } @@ -252,7 +272,7 @@ func processUpload(upReq UploadRequest) (upload Upload, err error) { } upload.Filename = strings.Join([]string{barename, extension}, ".") - fileexists, err = fileBackend.Exists(upload.Filename) + fileexists, err = storageBackend.Exists(upload.Filename) } if fileBlacklist[strings.ToLower(upload.Filename)] { @@ -267,24 +287,15 @@ func processUpload(upReq UploadRequest) (upload Upload, err error) { fileExpiry = time.Now().Add(upReq.expiry) } - bytes, err := fileBackend.Put(upload.Filename, io.MultiReader(bytes.NewReader(header), upReq.src)) - if err != nil { - return upload, err - } else if bytes > Config.maxSize { - fileBackend.Delete(upload.Filename) - return upload, errors.New("File too large") + if upReq.deleteKey == "" { + upReq.deleteKey = uniuri.NewLen(30) } - upload.Metadata, err = generateMetadata(upload.Filename, fileExpiry, upReq.deletionKey) + upload.Metadata, err = storageBackend.Put(upload.Filename, io.MultiReader(bytes.NewReader(header), upReq.src), fileExpiry, upReq.deleteKey) if err != nil { - fileBackend.Delete(upload.Filename) - return - } - err = metadataWrite(upload.Filename, &upload.Metadata) - if err != nil { - fileBackend.Delete(upload.Filename) - return + return upload, err } + return } From 35c4415f8d1e96843fb65a469533062738ccb39e Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Thu, 24 Jan 2019 23:39:17 -0800 Subject: [PATCH 169/345] Document storage backend usage --- README.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8d4ef11..957757c 100644 --- a/README.md +++ b/README.md @@ -42,9 +42,7 @@ allowhotlink = true - ```-bind 127.0.0.1:8080``` -- what to bind to (default is 127.0.0.1:8080) - ```-sitename myLinx``` -- the site name displayed on top (default is inferred from Host header) - ```-siteurl "http://mylinx.example.org/"``` -- the site url (default is inferred from execution context) -- ```-selifpath "selif"``` -- path relative to site base url (the "selif" in https://mylinx.example.org/selif/image.jpg) where files are accessed directly (default: selif) -- ```-filespath files/``` -- Path to store uploads (default is files/) -- ```-metapath meta/``` -- Path to store information about uploads (default is meta/) +- ```-selifpath "selif"``` -- path relative to site base url (the "selif" in mylinx.example.org/selif/image.jpg) where files are accessed directly (default: selif) - ```-maxsize 4294967296``` -- maximum upload file size in bytes (default 4GB) - ```-maxexpiry 86400``` -- maximum expiration time in seconds (default is 0, which is no expiry) - ```-allowhotlink``` -- Allow file hotlinking @@ -56,6 +54,15 @@ allowhotlink = true - ```-remoteuploads``` -- (optionally) enable remote uploads (/upload?url=https://...) - ```-nologs``` -- (optionally) disable request logs in stdout +#### Storage backends +The following storage backends are available: + +|Name|Options|Notes +|----|-------|----- +|LocalFS|```-filespath files/``` -- Path to store uploads (default is files/)
    ```-metapath meta/``` -- Path to store information about uploads (default is meta/)|Enabled by default, this backend uses the filesystem| +|S3|```-s3-endpoint https://...``` -- S3 endpoint
    ```-s3-region us-east-1``` -- S3 region
    ```-s3-bucket mybucket``` -- S3 bucket to use for files and metadata

    Environment variables to provide:
    ```AWS_ACCESS_KEY_ID``` -- the S3 access key
    ```AWS_SECRET_ACCESS_KEY ``` -- the S3 secret key
    ```AWS_SESSION_TOKEN``` (optional) -- the S3 session token|Use with any S3-compatible provider.
    This implementation will stream files through the linx instance (every download will request and stream the file from the S3 bucket).

    For high-traffic environments, one might consider using an external caching layer such as described [in this article](https://blog.sentry.io/2017/03/01/dodging-s3-downtime-with-nginx-and-haproxy.html).| + + #### SSL with built-in server - ```-certfile path/to/your.crt``` -- Path to the ssl certificate (required if you want to use the https server) - ```-keyfile path/to/your.key``` -- Path to the ssl key (required if you want to use the https server) From 207c19e3df34837489cee90ba4e2fa97f150f4a1 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Fri, 25 Jan 2019 08:10:06 +0000 Subject: [PATCH 170/345] Add -s3-force-path-style flag and config option (#157) This option forces path-style addressing instead of using a subdomain. This appears to be needed by Minio. --- README.md | 2 +- backends/s3/s3.go | 5 ++++- server.go | 5 ++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 957757c..0ad244b 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ The following storage backends are available: |Name|Options|Notes |----|-------|----- |LocalFS|```-filespath files/``` -- Path to store uploads (default is files/)
    ```-metapath meta/``` -- Path to store information about uploads (default is meta/)|Enabled by default, this backend uses the filesystem| -|S3|```-s3-endpoint https://...``` -- S3 endpoint
    ```-s3-region us-east-1``` -- S3 region
    ```-s3-bucket mybucket``` -- S3 bucket to use for files and metadata

    Environment variables to provide:
    ```AWS_ACCESS_KEY_ID``` -- the S3 access key
    ```AWS_SECRET_ACCESS_KEY ``` -- the S3 secret key
    ```AWS_SESSION_TOKEN``` (optional) -- the S3 session token|Use with any S3-compatible provider.
    This implementation will stream files through the linx instance (every download will request and stream the file from the S3 bucket).

    For high-traffic environments, one might consider using an external caching layer such as described [in this article](https://blog.sentry.io/2017/03/01/dodging-s3-downtime-with-nginx-and-haproxy.html).| +|S3|```-s3-endpoint https://...``` -- S3 endpoint
    ```-s3-region us-east-1``` -- S3 region
    ```-s3-bucket mybucket``` -- S3 bucket to use for files and metadata
    ```-s3-use-path-style``` -- force path-style addresing (e.g. https://s3.amazonaws.com/linx/example.txt)

    Environment variables to provide:
    ```AWS_ACCESS_KEY_ID``` -- the S3 access key
    ```AWS_SECRET_ACCESS_KEY ``` -- the S3 secret key
    ```AWS_SESSION_TOKEN``` (optional) -- the S3 session token|Use with any S3-compatible provider.
    This implementation will stream files through the linx instance (every download will request and stream the file from the S3 bucket).

    For high-traffic environments, one might consider using an external caching layer such as described [in this article](https://blog.sentry.io/2017/03/01/dodging-s3-downtime-with-nginx-and-haproxy.html).| #### SSL with built-in server diff --git a/backends/s3/s3.go b/backends/s3/s3.go index 7ae326c..45067c1 100644 --- a/backends/s3/s3.go +++ b/backends/s3/s3.go @@ -177,7 +177,7 @@ func (b S3Backend) List() ([]string, error) { return output, nil } -func NewS3Backend(bucket string, region string, endpoint string) S3Backend { +func NewS3Backend(bucket string, region string, endpoint string, forcePathStyle bool) S3Backend { awsConfig := &aws.Config{} if region != "" { awsConfig.Region = aws.String(region) @@ -185,6 +185,9 @@ func NewS3Backend(bucket string, region string, endpoint string) S3Backend { if endpoint != "" { awsConfig.Endpoint = aws.String(endpoint) } + if forcePathStyle == true { + awsConfig.S3ForcePathStyle = aws.Bool(true) + } sess := session.Must(session.NewSession(awsConfig)) svc := s3.New(sess) diff --git a/server.go b/server.go index 851a7cf..7883a07 100644 --- a/server.go +++ b/server.go @@ -64,6 +64,7 @@ var Config struct { s3Endpoint string s3Region string s3Bucket string + s3ForcePathStyle bool } var Templates = make(map[string]*pongo2.Template) @@ -138,7 +139,7 @@ func setup() *web.Mux { } if Config.s3Bucket != "" { - storageBackend = s3.NewS3Backend(Config.s3Bucket, Config.s3Region, Config.s3Endpoint) + storageBackend = s3.NewS3Backend(Config.s3Bucket, Config.s3Region, Config.s3Endpoint, Config.s3ForcePathStyle) } else { storageBackend = localfs.NewLocalfsBackend(Config.metaDir, Config.filesDir) } @@ -265,6 +266,8 @@ func main() { "S3 region") flag.StringVar(&Config.s3Bucket, "s3-bucket", "", "S3 bucket to use for files and metadata") + flag.BoolVar(&Config.s3ForcePathStyle, "s3-force-path-style", false, + "Force path-style addressing for S3 (e.g. https://s3.amazonaws.com/linx/example.txt)") iniflags.Parse() From f6cd7fc6fe6f5d9dc6bc27cabb47671250222b5b Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Fri, 25 Jan 2019 00:20:52 -0800 Subject: [PATCH 171/345] Tweak documentation --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 0ad244b..6cb85ab 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ allowhotlink = true #### Options - ```-bind 127.0.0.1:8080``` -- what to bind to (default is 127.0.0.1:8080) - ```-sitename myLinx``` -- the site name displayed on top (default is inferred from Host header) -- ```-siteurl "http://mylinx.example.org/"``` -- the site url (default is inferred from execution context) +- ```-siteurl "https://mylinx.example.org/"``` -- the site url (default is inferred from execution context) - ```-selifpath "selif"``` -- path relative to site base url (the "selif" in mylinx.example.org/selif/image.jpg) where files are accessed directly (default: selif) - ```-maxsize 4294967296``` -- maximum upload file size in bytes (default 4GB) - ```-maxexpiry 86400``` -- maximum expiration time in seconds (default is 0, which is no expiry) @@ -57,10 +57,10 @@ allowhotlink = true #### Storage backends The following storage backends are available: -|Name|Options|Notes -|----|-------|----- -|LocalFS|```-filespath files/``` -- Path to store uploads (default is files/)
    ```-metapath meta/``` -- Path to store information about uploads (default is meta/)|Enabled by default, this backend uses the filesystem| -|S3|```-s3-endpoint https://...``` -- S3 endpoint
    ```-s3-region us-east-1``` -- S3 region
    ```-s3-bucket mybucket``` -- S3 bucket to use for files and metadata
    ```-s3-use-path-style``` -- force path-style addresing (e.g. https://s3.amazonaws.com/linx/example.txt)

    Environment variables to provide:
    ```AWS_ACCESS_KEY_ID``` -- the S3 access key
    ```AWS_SECRET_ACCESS_KEY ``` -- the S3 secret key
    ```AWS_SESSION_TOKEN``` (optional) -- the S3 session token|Use with any S3-compatible provider.
    This implementation will stream files through the linx instance (every download will request and stream the file from the S3 bucket).

    For high-traffic environments, one might consider using an external caching layer such as described [in this article](https://blog.sentry.io/2017/03/01/dodging-s3-downtime-with-nginx-and-haproxy.html).| +|Name|Notes|Options +|----|-----|------- +|LocalFS|Enabled by default, this backend uses the filesystem|```-filespath files/``` -- Path to store uploads (default is files/)
    ```-metapath meta/``` -- Path to store information about uploads (default is meta/)| +|S3|Use with any S3-compatible provider.
    This implementation will stream files through the linx instance (every download will request and stream the file from the S3 bucket).

    For high-traffic environments, one might consider using an external caching layer such as described [in this article](https://blog.sentry.io/2017/03/01/dodging-s3-downtime-with-nginx-and-haproxy.html).|```-s3-endpoint https://...``` -- S3 endpoint
    ```-s3-region us-east-1``` -- S3 region
    ```-s3-bucket mybucket``` -- S3 bucket to use for files and metadata
    ```-s3-force-path-style``` (optional) -- force path-style addresing (e.g. https://s3.amazonaws.com/linx/example.txt)

    Environment variables to provide:
    ```AWS_ACCESS_KEY_ID``` -- the S3 access key
    ```AWS_SECRET_ACCESS_KEY ``` -- the S3 secret key
    ```AWS_SESSION_TOKEN``` (optional) -- the S3 session token| #### SSL with built-in server From d5aa09a65c1949dbf3d8feee5a1a6da77c4b1f15 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Fri, 25 Jan 2019 01:10:09 -0800 Subject: [PATCH 172/345] Update screenshots in readme --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 6cb85ab..8b55687 100644 --- a/README.md +++ b/README.md @@ -16,8 +16,7 @@ Self-hosted file/media sharing website. ### Screenshots - - + Get release and run From 5037573eab449305d5b5d6ee672bb5c2da285bfe Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Sat, 26 Jan 2019 08:56:35 +0000 Subject: [PATCH 173/345] Clean up build.sh and build for linux/arm64 (#158) * Clean up build.sh and build for linux/arm64 --- build.sh | 141 ++++++++++++++++++++++--------------------------------- 1 file changed, 57 insertions(+), 84 deletions(-) diff --git a/build.sh b/build.sh index f7a4115..c4fc7f4 100755 --- a/build.sh +++ b/build.sh @@ -1,94 +1,67 @@ #!/bin/bash +function build_binary_rice { + name="$1" + + for arch in amd64 386; do + GOOS=darwin GOARCH=$arch go build -o "$name"osx-$arch + rice append --exec "$name"osx-$arch + done + + for arch in amd64 386; do + GOOS=freebsd GOARCH=$arch go build -o "$name"freebsd-$arch + rice append --exec "$name"freebsd-$arch + done + + for arch in amd64 386; do + GOOS=openbsd GOARCH=$arch go build -o "$name"openbsd-$arch + rice append --exec "$name"openbsd-$arch + done + + for arch in arm arm64 amd64 386; do + GOOS=linux GOARCH=$arch go build -o "$name"linux-$arch + rice append --exec "$name"linux-$arch + done + + for arch in amd64 386; do + GOOS=windows GOARCH=$arch go build -o "$name"windows-$arch.exe + rice append --exec "$name"windows-$arch.exe + done +} + +function build_binary { + name="$1" + + for arch in amd64 386; do + GOOS=darwin GOARCH=$arch go build -o "$name"osx-$arch + done + + for arch in amd64 386; do + GOOS=freebsd GOARCH=$arch go build -o "$name"freebsd-$arch + done + + for arch in amd64 386; do + GOOS=openbsd GOARCH=$arch go build -o "$name"openbsd-$arch + done + + for arch in arm arm64 amd64 386; do + GOOS=linux GOARCH=$arch go build -o "$name"linux-$arch + done + + for arch in amd64 386; do + GOOS=windows GOARCH=$arch go build -o "$name"windows-$arch.exe + done +} + version="$1" -mkdir -p "binairies/""$version" -name="binairies/""$version""/linx-server-v""$version""_" - -GOOS=darwin GOARCH=amd64 go build -o "$name"osx-amd64 -rice append --exec "$name"osx-amd64 - -GOOS=darwin GOARCH=386 go build -o "$name"osx-386 -rice append --exec "$name"osx-386 - -GOOS=freebsd GOARCH=amd64 go build -o "$name"freebsd-amd64 -rice append --exec "$name"freebsd-amd64 - -GOOS=freebsd GOARCH=386 go build -o "$name"freebsd-386 -rice append --exec "$name"freebsd-386 - -GOOS=openbsd GOARCH=amd64 go build -o "$name"openbsd-amd64 -rice append --exec "$name"openbsd-amd64 - -GOOS=openbsd GOARCH=386 go build -o "$name"openbsd-386 -rice append --exec "$name"openbsd-386 - -GOOS=linux GOARCH=arm go build -o "$name"linux-arm -rice append --exec "$name"linux-arm - -GOOS=linux GOARCH=amd64 go build -o "$name"linux-amd64 -rice append --exec "$name"linux-amd64 - -GOOS=linux GOARCH=386 go build -o "$name"linux-386 -rice append --exec "$name"linux-386 - -GOOS=windows GOARCH=amd64 go build -o "$name"windows-amd64.exe -rice append --exec "$name"windows-amd64.exe - -GOOS=windows GOARCH=386 go build -o "$name"windows-386.exe -rice append --exec "$name"windows-386.exe +mkdir -p "binaries/""$version" +build_binary_rice "binaries/""$version""/linx-server-v""$version""_" cd linx-genkey -name="../binairies/""$version""/linx-genkey-v""$version""_" - -GOOS=darwin GOARCH=amd64 go build -o "$name"osx-amd64 - -GOOS=darwin GOARCH=386 go build -o "$name"osx-386 - -GOOS=freebsd GOARCH=amd64 go build -o "$name"freebsd-amd64 - -GOOS=freebsd GOARCH=386 go build -o "$name"freebsd-386 - -GOOS=openbsd GOARCH=amd64 go build -o "$name"openbsd-amd64 - -GOOS=openbsd GOARCH=386 go build -o "$name"openbsd-386 - -GOOS=linux GOARCH=arm go build -o "$name"linux-arm - -GOOS=linux GOARCH=amd64 go build -o "$name"linux-amd64 - -GOOS=linux GOARCH=386 go build -o "$name"linux-386 - -GOOS=windows GOARCH=amd64 go build -o "$name"windows-amd64.exe - -GOOS=windows GOARCH=386 go build -o "$name"windows-386.exe - +build_binary "../binaries/""$version""/linx-genkey-v""$version""_" cd .. - cd linx-cleanup -name="../binairies/""$version""/linx-cleanup-v""$version""_" - -GOOS=darwin GOARCH=amd64 go build -o "$name"osx-amd64 - -GOOS=darwin GOARCH=386 go build -o "$name"osx-386 - -GOOS=freebsd GOARCH=amd64 go build -o "$name"freebsd-amd64 - -GOOS=freebsd GOARCH=386 go build -o "$name"freebsd-386 - -GOOS=openbsd GOARCH=amd64 go build -o "$name"openbsd-amd64 - -GOOS=openbsd GOARCH=386 go build -o "$name"openbsd-386 - -GOOS=linux GOARCH=arm go build -o "$name"linux-arm - -GOOS=linux GOARCH=amd64 go build -o "$name"linux-amd64 - -GOOS=linux GOARCH=386 go build -o "$name"linux-386 - -GOOS=windows GOARCH=amd64 go build -o "$name"windows-amd64.exe - -GOOS=windows GOARCH=386 go build -o "$name"windows-386.exe - +build_binary "../binaries/""$version""/linx-cleanup-v""$version""_" cd .. From a79bc1898ac34dfa727dade2e80b41d535eb54f4 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Sat, 26 Jan 2019 01:00:04 -0800 Subject: [PATCH 174/345] Add binaries/ to .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index bd9da44..37e1e54 100644 --- a/.gitignore +++ b/.gitignore @@ -29,4 +29,5 @@ _testmain.go linx-server files/ meta/ +binaries/ linx-cleanup From 8f3108148b53f078fb19e0d2c9ac04acba8f7c8d Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Sat, 26 Jan 2019 10:04:32 +0000 Subject: [PATCH 175/345] Add option to force random filenames (fixes #86) (#159) --- README.md | 1 + pages.go | 11 ++- server.go | 3 + server_test.go | 75 +++++++++++++++++++ static/js/upload.js | 175 ++++++++++++++++++++++--------------------- templates/API.html | 14 ++-- templates/index.html | 2 +- templates/paste.html | 2 +- upload.go | 29 +++++-- 9 files changed, 209 insertions(+), 103 deletions(-) diff --git a/README.md b/README.md index 8b55687..bd1d9eb 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,7 @@ allowhotlink = true - ```-xframeoptions "..." ``` -- X-Frame-Options header (default is "SAMEORIGIN") - ```-remoteuploads``` -- (optionally) enable remote uploads (/upload?url=https://...) - ```-nologs``` -- (optionally) disable request logs in stdout +- ```-force-random-filename``` -- (optionally) force the use of random filenames #### Storage backends The following storage backends are available: diff --git a/pages.go b/pages.go index bb38f37..6fcc934 100644 --- a/pages.go +++ b/pages.go @@ -21,8 +21,9 @@ const ( func indexHandler(c web.C, w http.ResponseWriter, r *http.Request) { err := renderTemplate(Templates["index.html"], pongo2.Context{ - "maxsize": Config.maxSize, - "expirylist": listExpirationTimes(), + "maxsize": Config.maxSize, + "expirylist": listExpirationTimes(), + "forcerandom": Config.forceRandomFilename, }, r, w) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) @@ -31,7 +32,8 @@ func indexHandler(c web.C, w http.ResponseWriter, r *http.Request) { func pasteHandler(c web.C, w http.ResponseWriter, r *http.Request) { err := renderTemplate(Templates["paste.html"], pongo2.Context{ - "expirylist": listExpirationTimes(), + "expirylist": listExpirationTimes(), + "forcerandom": Config.forceRandomFilename, }, r, w) if err != nil { oopsHandler(c, w, r, RespHTML, "") @@ -40,7 +42,8 @@ func pasteHandler(c web.C, w http.ResponseWriter, r *http.Request) { func apiDocHandler(c web.C, w http.ResponseWriter, r *http.Request) { err := renderTemplate(Templates["API.html"], pongo2.Context{ - "siteurl": getSiteURL(r), + "siteurl": getSiteURL(r), + "forcerandom": Config.forceRandomFilename, }, r, w) if err != nil { oopsHandler(c, w, r, RespHTML, "") diff --git a/server.go b/server.go index 7883a07..e4e1661 100644 --- a/server.go +++ b/server.go @@ -65,6 +65,7 @@ var Config struct { s3Region string s3Bucket string s3ForcePathStyle bool + forceRandomFilename bool } var Templates = make(map[string]*pongo2.Template) @@ -268,6 +269,8 @@ func main() { "S3 bucket to use for files and metadata") flag.BoolVar(&Config.s3ForcePathStyle, "s3-force-path-style", false, "Force path-style addressing for S3 (e.g. https://s3.amazonaws.com/linx/example.txt)") + flag.BoolVar(&Config.forceRandomFilename, "force-random-filename", false, + "Force all uploads to use a random filename") iniflags.Parse() diff --git a/server_test.go b/server_test.go index a1ec853..fc225ce 100644 --- a/server_test.go +++ b/server_test.go @@ -763,6 +763,32 @@ func TestPutRandomizedUpload(t *testing.T) { } } +func TestPutForceRandomUpload(t *testing.T) { + mux := setup() + w := httptest.NewRecorder() + + oldFRF := Config.forceRandomFilename + Config.forceRandomFilename = true + filename := "randomizeme.file" + + req, err := http.NewRequest("PUT", "/upload/"+filename, strings.NewReader("File content")) + if err != nil { + t.Fatal(err) + } + + // while this should also work without this header, let's try to force + // the randomized filename off to be sure + req.Header.Set("Linx-Randomize", "no") + + mux.ServeHTTP(w, req) + + if w.Body.String() == Config.siteURL+filename { + t.Fatal("Filename was not random") + } + + Config.forceRandomFilename = oldFRF +} + func TestPutNoExtensionUpload(t *testing.T) { mux := setup() w := httptest.NewRecorder() @@ -1013,6 +1039,55 @@ func TestPutAndOverwrite(t *testing.T) { } } +func TestPutAndOverwriteForceRandom(t *testing.T) { + var myjson RespOkJSON + + mux := setup() + w := httptest.NewRecorder() + + oldFRF := Config.forceRandomFilename + Config.forceRandomFilename = true + + req, err := http.NewRequest("PUT", "/upload", strings.NewReader("File content")) + if err != nil { + t.Fatal(err) + } + + req.Header.Set("Accept", "application/json") + + mux.ServeHTTP(w, req) + + err = json.Unmarshal([]byte(w.Body.String()), &myjson) + if err != nil { + t.Fatal(err) + } + + // Overwrite it + w = httptest.NewRecorder() + req, err = http.NewRequest("PUT", "/upload/"+myjson.Filename, strings.NewReader("New file content")) + req.Header.Set("Linx-Delete-Key", myjson.Delete_Key) + mux.ServeHTTP(w, req) + + if w.Code != 200 { + t.Fatal("Status code was not 200, but " + strconv.Itoa(w.Code)) + } + + // Make sure it's the new file + w = httptest.NewRecorder() + req, err = http.NewRequest("GET", "/"+Config.selifPath+myjson.Filename, nil) + mux.ServeHTTP(w, req) + + if w.Code == 404 { + t.Fatal("Status code was 404") + } + + if w.Body.String() != "New file content" { + t.Fatal("File did not contain 'New file content") + } + + Config.forceRandomFilename = oldFRF +} + func TestPutAndSpecificDelete(t *testing.T) { var myjson RespOkJSON diff --git a/static/js/upload.js b/static/js/upload.js index 159bad2..125123c 100644 --- a/static/js/upload.js +++ b/static/js/upload.js @@ -1,51 +1,54 @@ // @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later Dropzone.options.dropzone = { - init: function() { - var dzone = document.getElementById("dzone"); - dzone.style.display = "block"; - }, - addedfile: function(file) { - var upload = document.createElement("div"); - upload.className = "upload"; + init: function() { + var dzone = document.getElementById("dzone"); + dzone.style.display = "block"; + }, + addedfile: function(file) { + var upload = document.createElement("div"); + upload.className = "upload"; - var fileLabel = document.createElement("span"); - fileLabel.innerHTML = file.name; - file.fileLabel = fileLabel; - upload.appendChild(fileLabel); + var fileLabel = document.createElement("span"); + fileLabel.innerHTML = file.name; + file.fileLabel = fileLabel; + upload.appendChild(fileLabel); - var fileActions = document.createElement("div"); - fileActions.className = "right"; - file.fileActions = fileActions; - upload.appendChild(fileActions); + var fileActions = document.createElement("div"); + fileActions.className = "right"; + file.fileActions = fileActions; + upload.appendChild(fileActions); - var cancelAction = document.createElement("span"); - cancelAction.className = "cancel"; - cancelAction.innerHTML = "Cancel"; - cancelAction.addEventListener('click', function(ev) { - this.removeFile(file); - }.bind(this)); - file.cancelActionElement = cancelAction; - fileActions.appendChild(cancelAction); + var cancelAction = document.createElement("span"); + cancelAction.className = "cancel"; + cancelAction.innerHTML = "Cancel"; + cancelAction.addEventListener('click', function(ev) { + this.removeFile(file); + }.bind(this)); + file.cancelActionElement = cancelAction; + fileActions.appendChild(cancelAction); - var progress = document.createElement("span"); - file.progressElement = progress; - fileActions.appendChild(progress); + var progress = document.createElement("span"); + file.progressElement = progress; + fileActions.appendChild(progress); - file.uploadElement = upload; + file.uploadElement = upload; - document.getElementById("uploads").appendChild(upload); - }, - uploadprogress: function(file, p, bytesSent) { - p = parseInt(p); - file.progressElement.innerHTML = p + "%"; - file.uploadElement.setAttribute("style", 'background-image: -webkit-linear-gradient(left, #F2F4F7 ' + p + '%, #E2E2E2 ' + p + '%); background-image: -moz-linear-gradient(left, #F2F4F7 ' + p + '%, #E2E2E2 ' + p + '%); background-image: -ms-linear-gradient(left, #F2F4F7 ' + p + '%, #E2E2E2 ' + p + '%); background-image: -o-linear-gradient(left, #F2F4F7 ' + p + '%, #E2E2E2 ' + p + '%); background-image: linear-gradient(left, #F2F4F7 ' + p + '%, #E2E2E2 ' + p + '%)'); - }, - sending: function(file, xhr, formData) { - formData.append("randomize", document.getElementById("randomize").checked); - formData.append("expires", document.getElementById("expires").value); - }, - success: function(file, resp) { + document.getElementById("uploads").appendChild(upload); + }, + uploadprogress: function(file, p, bytesSent) { + p = parseInt(p); + file.progressElement.innerHTML = p + "%"; + file.uploadElement.setAttribute("style", 'background-image: -webkit-linear-gradient(left, #F2F4F7 ' + p + '%, #E2E2E2 ' + p + '%); background-image: -moz-linear-gradient(left, #F2F4F7 ' + p + '%, #E2E2E2 ' + p + '%); background-image: -ms-linear-gradient(left, #F2F4F7 ' + p + '%, #E2E2E2 ' + p + '%); background-image: -o-linear-gradient(left, #F2F4F7 ' + p + '%, #E2E2E2 ' + p + '%); background-image: linear-gradient(left, #F2F4F7 ' + p + '%, #E2E2E2 ' + p + '%)'); + }, + sending: function(file, xhr, formData) { + var randomize = document.getElementById("randomize"); + if(randomize != null) { + formData.append("randomize", randomize.checked); + } + formData.append("expires", document.getElementById("expires").value); + }, + success: function(file, resp) { file.fileActions.removeChild(file.progressElement); var fileLabelLink = document.createElement("a"); @@ -59,61 +62,61 @@ Dropzone.options.dropzone = { var deleteAction = document.createElement("span"); deleteAction.innerHTML = "Delete"; deleteAction.className = "cancel"; - deleteAction.addEventListener('click', function(ev) { - xhr = new XMLHttpRequest(); - xhr.open("DELETE", resp.url, true); - xhr.setRequestHeader("Linx-Delete-Key", resp.delete_key); - xhr.onreadystatechange = function(file) { - if (xhr.readyState == 4 && xhr.status === 200) { - var text = document.createTextNode("Deleted "); - file.fileLabel.insertBefore(text, file.fileLabelLink); - file.fileLabel.className = "deleted"; - file.fileActions.removeChild(file.cancelActionElement); - } - }.bind(this, file); - xhr.send(); - }); - file.fileActions.removeChild(file.cancelActionElement); - file.cancelActionElement = deleteAction; - file.fileActions.appendChild(deleteAction); - }, - error: function(file, resp, xhrO) { + deleteAction.addEventListener('click', function(ev) { + xhr = new XMLHttpRequest(); + xhr.open("DELETE", resp.url, true); + xhr.setRequestHeader("Linx-Delete-Key", resp.delete_key); + xhr.onreadystatechange = function(file) { + if (xhr.readyState == 4 && xhr.status === 200) { + var text = document.createTextNode("Deleted "); + file.fileLabel.insertBefore(text, file.fileLabelLink); + file.fileLabel.className = "deleted"; + file.fileActions.removeChild(file.cancelActionElement); + } + }.bind(this, file); + xhr.send(); + }); + file.fileActions.removeChild(file.cancelActionElement); + file.cancelActionElement = deleteAction; + file.fileActions.appendChild(deleteAction); + }, + error: function(file, resp, xhrO) { file.fileActions.removeChild(file.cancelActionElement); file.fileActions.removeChild(file.progressElement); - if (file.status === "canceled") { - file.fileLabel.innerHTML = file.name + ": Canceled "; - } - else { - if (resp.error) { - file.fileLabel.innerHTML = file.name + ": " + resp.error; - } - else if (resp.includes("Optional headers with the request

    +{% if not forcerandom %}

    Randomize the filename
    Linx-Randomize: yes

    +{% endif %}

    Specify a custom deletion key
    Linx-Delete-Key: mysecret

    @@ -56,30 +58,30 @@ {% if using_auth %}
    $ curl -H "Linx-Api-Key: mysecretkey" -T myphoto.jpg {{ siteurl }}upload/  
    -{{ siteurl }}myphoto.jpg
    +{{ siteurl }}{% if not forcerandom %}myphoto.jpg{% else %}7z4h4ut.jpg{% endif %} {% else %}
    $ curl -T myphoto.jpg {{ siteurl }}upload/  
    -{{ siteurl }}myphoto.jpg
    +{{ siteurl }}{% if not forcerandom %}myphoto.jpg{% else %}wtq7pan.jpg{% endif %} {% endif %}

    Uploading myphoto.jpg with an expiry of 20 minutes

    {% if using_auth %}
    $ curl -H "Linx-Api-Key: mysecretkey" -H "Linx-Expiry: 1200" -T myphoto.jpg {{ siteurl }}upload/
    -{{ siteurl }}myphoto.jpg
    +{{ siteurl }}{% if not forcerandom %}myphoto.jpg{% else %}jm295snf.jpg{% endif %} {% else %}
    $ curl -H "Linx-Expiry: 1200" -T myphoto.jpg {{ siteurl }}upload/
    -{{ siteurl }}myphoto.jpg
    +{{ siteurl }}{% if not forcerandom %}myphoto.jpg{% else %}1doym9u2.jpg{% endif %} {% endif %}

    Uploading myphoto.jpg with a random filename and getting a json response:

    {% if using_auth %} -
    $ curl -H "Linx-Api-Key: mysecretkey" -H "Accept: application/json" -H "Linx-Randomize: yes" -T myphoto.jpg {{ siteurl }}upload/  
    +			
    $ curl -H "Linx-Api-Key: mysecretkey" -H "Accept: application/json"{% if not forcerandom %} -H "Linx-Randomize: yes"{% endif %} -T myphoto.jpg {{ siteurl }}upload/  
     {"delete_key":"...","expiry":"0","filename":"f34h4iu.jpg","mimetype":"image/jpeg",
     "sha256sum":"...","size":"...","url":"{{ siteurl }}f34h4iu.jpg"}
    {% else %} -
    $ curl -H "Accept: application/json" -H "Linx-Randomize: yes" -T myphoto.jpg {{ siteurl }}upload/  
    +			
    $ curl -H "Accept: application/json"{% if not forcerandom %} -H "Linx-Randomize: yes"{% endif %} -T myphoto.jpg {{ siteurl }}upload/  
     {"delete_key":"...","expiry":"0","filename":"f34h4iu.jpg","mimetype":"image/jpeg",
     "sha256sum":"...","size":"...","url":"{{ siteurl }}f34h4iu.jpg"}
    {% endif %} diff --git a/templates/index.html b/templates/index.html index d423879..2843109 100644 --- a/templates/index.html +++ b/templates/index.html @@ -17,7 +17,7 @@
    - +
    diff --git a/upload.go b/upload.go index d46c4d5..6533bfe 100644 --- a/upload.go +++ b/upload.go @@ -222,11 +222,14 @@ func processUpload(upReq UploadRequest) (upload Upload, err error) { return upload, FileTooLargeError } - // Determine the appropriate filename, then write to disk + // Determine the appropriate filename barename, extension := barePlusExt(upReq.filename) + randomize := false + // Randomize the "barename" (filename without extension) if needed if upReq.randomBarename || len(barename) == 0 { barename = generateBarename() + randomize = true } var header []byte @@ -259,16 +262,32 @@ func processUpload(upReq UploadRequest) (upload Upload, err error) { if merr == nil { if upReq.deleteKey == metad.DeleteKey { fileexists = false + } else if Config.forceRandomFilename == true { + // the file exists + // the delete key doesn't match + // force random filenames is enabled + randomize = true } } + } else if Config.forceRandomFilename == true { + // the file doesn't exist + // force random filenames is enabled + randomize = true + + // set fileexists to true to generate a new barename + fileexists = true } for fileexists { - counter, err := strconv.Atoi(string(barename[len(barename)-1])) - if err != nil { - barename = barename + "1" + if randomize { + barename = generateBarename() } else { - barename = barename[:len(barename)-1] + strconv.Itoa(counter+1) + counter, err := strconv.Atoi(string(barename[len(barename)-1])) + if err != nil { + barename = barename + "1" + } else { + barename = barename[:len(barename)-1] + strconv.Itoa(counter+1) + } } upload.Filename = strings.Join([]string{barename, extension}, ".") From cde964ffe063a613b47b2c47c6a024431ead8f56 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Sat, 26 Jan 2019 02:12:49 -0800 Subject: [PATCH 176/345] Hide filename input when force random is on --- display.go | 17 +++++++++-------- templates/display/bin.html | 2 +- templates/display/story.html | 2 +- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/display.go b/display.go index 7258904..feb16da 100644 --- a/display.go +++ b/display.go @@ -131,14 +131,15 @@ func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { } err = renderTemplate(tpl, pongo2.Context{ - "mime": metadata.Mimetype, - "filename": fileName, - "size": sizeHuman, - "expiry": expiryHuman, - "expirylist": listExpirationTimes(), - "extra": extra, - "lines": lines, - "files": metadata.ArchiveFiles, + "mime": metadata.Mimetype, + "filename": fileName, + "size": sizeHuman, + "expiry": expiryHuman, + "expirylist": listExpirationTimes(), + "extra": extra, + "forcerandom": Config.forceRandomFilename, + "lines": lines, + "files": metadata.ArchiveFiles, }, r, w) if err != nil { diff --git a/templates/display/bin.html b/templates/display/bin.html index bd029a2..dee64d8 100644 --- a/templates/display/bin.html +++ b/templates/display/bin.html @@ -22,7 +22,7 @@
    - . + {% if not forcerandom %}{% endif %}.
    diff --git a/templates/display/story.html b/templates/display/story.html index 20e772c..1ef96b1 100644 --- a/templates/display/story.html +++ b/templates/display/story.html @@ -20,7 +20,7 @@
    - . + {% if not forcerandom %}{% endif %}.
    From f46b61399bade712f0f77eef5d7762450613c4f3 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Sun, 27 Jan 2019 00:32:37 +0000 Subject: [PATCH 177/345] Fix broken page when file is missing (#160) With the localfs backend, it's possible for a file to be removed but its metadata file to remain intact. In this case, viewing the selif URL for that file would return a broken page with two error pages stacked on top of each other. This changes fixes that by replacing the output in that case with a single "Unable to open file." error message. --- fileserve.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/fileserve.go b/fileserve.go index a3a249e..8948d45 100644 --- a/fileserve.go +++ b/fileserve.go @@ -38,8 +38,12 @@ func fileServeHandler(c web.C, w http.ResponseWriter, r *http.Request) { w.Header().Set("Referrer-Policy", Config.fileReferrerPolicy) _, reader, err := storageBackend.Get(fileName) - if err != nil { - oopsHandler(c, w, r, RespAUTO, err.Error()) + if err == backends.NotFoundErr { + notFoundHandler(c, w, r) + return + } else if err != nil { + oopsHandler(c, w, r, RespAUTO, "Unable to open file.") + return } w.Header().Set("Content-Type", metadata.Mimetype) From 73f127306c15789eb1da4b37b6f2bc49061d0fcf Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Tue, 29 Jan 2019 07:00:08 +0000 Subject: [PATCH 178/345] Improve UI a bit (#161) * Remove right margin from expiration dropdown on index * Use flexbox for bin/story display * Move Paste/Save button after expire dropdown, instead of before --- static/css/linx.css | 33 +++++----- static/js/bin.js | 116 +++++++++++++++++------------------ templates/base.html | 2 +- templates/display/base.html | 4 +- templates/display/bin.html | 23 ++++--- templates/display/story.html | 20 +++--- templates/paste.html | 6 +- 7 files changed, 105 insertions(+), 99 deletions(-) diff --git a/static/css/linx.css b/static/css/linx.css index 82e256a..15abee4 100644 --- a/static/css/linx.css +++ b/static/css/linx.css @@ -70,11 +70,21 @@ body { } #info { + background-color: white; + padding: 5px; +} + +.info-flex { display: flex; flex-wrap: wrap; + align-items: baseline; justify-content: space-between; - background-color: white; - padding: 5px 5px 5px 5px; +} + +.info-actions { + margin-left: 15px; + font-size: 13px; + text-align: right; } #info #extension, @@ -82,10 +92,6 @@ body { width: 40px; } -#info .text-right { - font-size: 13px; -} - #info a { text-decoration: none; color: #556A7F; @@ -246,11 +252,7 @@ body { justify-content: space-between; width: 100%; margin-top: 5px; - font-size:13px; -} - -#choices label:first-child { - margin-right: 15px; + font-size: 13px; } #expiry { @@ -295,14 +297,11 @@ body { } - #info input[type=text] { border: 1px solid #eaeaea; color: #556A7F; - border-radius: 4px 4px 4px 4px; - padding-left: 4px; - padding-right: 4px; - height: 15px; + padding: 2px 4px; + font-family: Arial, Helvetica, sans-serif; } .storygreen { @@ -357,4 +356,4 @@ body { height: 800px; font-size: 13px; } -/* }}} */ \ No newline at end of file +/* }}} */ diff --git a/static/js/bin.js b/static/js/bin.js index 7aed334..11c6c21 100644 --- a/static/js/bin.js +++ b/static/js/bin.js @@ -1,58 +1,58 @@ -// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later - -var navlist = document.getElementById("info").getElementsByClassName("text-right")[0]; - -init(); - -function init() { - var editA = document.createElement('a'); - - editA.setAttribute("href", "#"); - editA.addEventListener('click', function(ev) { - edit(ev); - return false; - }); - editA.innerHTML = "edit"; - - var separator = document.createTextNode(" | "); - navlist.insertBefore(editA, navlist.firstChild); - navlist.insertBefore(separator, navlist.children[1]); - - document.getElementById('save').addEventListener('click', paste); - document.getElementById('wordwrap').addEventListener('click', wrap); -} - -function edit(ev) { - ev.preventDefault(); - - navlist.remove(); - document.getElementById("filename").remove(); - document.getElementById("editform").style.display = "block"; - - var normalcontent = document.getElementById("normal-content"); - normalcontent.removeChild(document.getElementById("normal-code")); - - var editordiv = document.getElementById("inplace-editor"); - editordiv.style.display = "block"; - editordiv.addEventListener('keydown', handleTab); -} - -function paste(ev) { - var editordiv = document.getElementById("inplace-editor"); - document.getElementById("newcontent").value = editordiv.value; - document.forms["reply"].submit(); -} - -function wrap(ev) { - if (document.getElementById("wordwrap").checked) { - document.getElementById("codeb").style.wordWrap = "break-word"; - document.getElementById("codeb").style.whiteSpace = "pre-wrap"; - } - - else { - document.getElementById("codeb").style.wordWrap = "normal"; - document.getElementById("codeb").style.whiteSpace = "pre"; - } -} - -// @license-end +// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later + +var navlist = document.getElementById("info").getElementsByClassName("info-actions")[0]; + +init(); + +function init() { + var editA = document.createElement('a'); + + editA.setAttribute("href", "#"); + editA.addEventListener('click', function(ev) { + edit(ev); + return false; + }); + editA.innerHTML = "edit"; + + var separator = document.createTextNode(" | "); + navlist.insertBefore(editA, navlist.firstChild); + navlist.insertBefore(separator, navlist.children[1]); + + document.getElementById('save').addEventListener('click', paste); + document.getElementById('wordwrap').addEventListener('click', wrap); +} + +function edit(ev) { + ev.preventDefault(); + + navlist.remove(); + document.getElementById("filename").remove(); + document.getElementById("editform").style.display = "block"; + + var normalcontent = document.getElementById("normal-content"); + normalcontent.removeChild(document.getElementById("normal-code")); + + var editordiv = document.getElementById("inplace-editor"); + editordiv.style.display = "block"; + editordiv.addEventListener('keydown', handleTab); +} + +function paste(ev) { + var editordiv = document.getElementById("inplace-editor"); + document.getElementById("newcontent").value = editordiv.value; + document.forms["reply"].submit(); +} + +function wrap(ev) { + if (document.getElementById("wordwrap").checked) { + document.getElementById("codeb").style.wordWrap = "break-word"; + document.getElementById("codeb").style.whiteSpace = "pre-wrap"; + } + + else { + document.getElementById("codeb").style.wordWrap = "normal"; + document.getElementById("codeb").style.whiteSpace = "pre"; + } +} + +// @license-end diff --git a/templates/base.html b/templates/base.html index 5392f8d..d1411d4 100644 --- a/templates/base.html +++ b/templates/base.html @@ -4,7 +4,7 @@ {% block title %}{{ sitename }}{% endblock %} - + {% block head %}{% endblock %} diff --git a/templates/display/base.html b/templates/display/base.html index 011534c..935979f 100644 --- a/templates/display/base.html +++ b/templates/display/base.html @@ -6,12 +6,12 @@ {% block content %} -
    +
    {{ filename }}
    -
    +
    {% if expiry %} file expires in {{ expiry }} | {% endif %} diff --git a/templates/display/bin.html b/templates/display/bin.html index dee64d8..c3ee97c 100644 --- a/templates/display/bin.html +++ b/templates/display/bin.html @@ -11,24 +11,27 @@ {% block infoleft %}
    -
    -
    - - {% endif %}. +
    +
    + + + +
    - - {% if not forcerandom %}{% endif %}.
    {% endblock %} -{%block infomore %} +{% block infomore %} | {% endblock %} @@ -45,5 +48,5 @@ {% endif %} - + {% endblock %} diff --git a/templates/display/story.html b/templates/display/story.html index 1ef96b1..cb30323 100644 --- a/templates/display/story.html +++ b/templates/display/story.html @@ -9,18 +9,22 @@ {% block infoleft %}
    -
    -
    - - {% endif %}. +
    +
    + + + +
    - {% if not forcerandom %}{% endif %}.
    @@ -38,5 +42,5 @@ - + {% endblock %} diff --git a/templates/paste.html b/templates/paste.html index ab7965f..245b7a3 100644 --- a/templates/paste.html +++ b/templates/paste.html @@ -3,18 +3,18 @@ {% block content %}
    -
    +
    {% if not forcerandom %}{% endif %}.
    - +
    From 770cb204793a823057c15a53e85b222af6178f34 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Thu, 31 Jan 2019 06:52:43 +0000 Subject: [PATCH 179/345] Add support for conditional requests (#162) This change pulls in some code copied from net/http's fs.go so that we can support If-Match/If-None-Match requests. This will make it easy to put a caching proxy in front of linx-server instances. Request validation will still happen as long as the proxy can contact the origin, so expiration and deletion will still work as expected under normal circumstances. --- fileserve.go | 30 +++--- httputil/LICENSE | 27 +++++ httputil/conditional.go | 218 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 262 insertions(+), 13 deletions(-) create mode 100644 httputil/LICENSE create mode 100644 httputil/conditional.go diff --git a/fileserve.go b/fileserve.go index 8948d45..202e477 100644 --- a/fileserve.go +++ b/fileserve.go @@ -1,14 +1,17 @@ package main import ( + "fmt" "io" "net/http" "net/url" "strconv" "strings" + "time" "github.com/andreimarcu/linx-server/backends" "github.com/andreimarcu/linx-server/expiry" + "github.com/andreimarcu/linx-server/httputil" "github.com/zenazn/goji/web" ) @@ -37,21 +40,22 @@ func fileServeHandler(c web.C, w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Security-Policy", Config.fileContentSecurityPolicy) w.Header().Set("Referrer-Policy", Config.fileReferrerPolicy) - _, reader, err := storageBackend.Get(fileName) - if err == backends.NotFoundErr { - notFoundHandler(c, w, r) - return - } else if err != nil { - oopsHandler(c, w, r, RespAUTO, "Unable to open file.") + w.Header().Set("Content-Type", metadata.Mimetype) + w.Header().Set("Content-Length", strconv.FormatInt(metadata.Size, 10)) + w.Header().Set("Etag", fmt.Sprintf("\"%s\"", metadata.Sha256sum)) + w.Header().Set("Cache-Control", "public, no-cache") + + modtime := time.Unix(0, 0) + if done := httputil.CheckPreconditions(w, r, modtime); done == true { return } - w.Header().Set("Content-Type", metadata.Mimetype) - w.Header().Set("Content-Length", strconv.FormatInt(metadata.Size, 10)) - w.Header().Set("Etag", metadata.Sha256sum) - w.Header().Set("Cache-Control", "max-age=0") - if r.Method != "HEAD" { + _, reader, err := storageBackend.Get(fileName) + if err != nil { + oopsHandler(c, w, r, RespAUTO, "Unable to open file.") + return + } defer reader.Close() if _, err = io.CopyN(w, reader, metadata.Size); err != nil { @@ -77,8 +81,8 @@ func staticHandler(c web.C, w http.ResponseWriter, r *http.Request) { return } - w.Header().Set("Etag", timeStartedStr) - w.Header().Set("Cache-Control", "max-age=86400") + w.Header().Set("Etag", fmt.Sprintf("\"%s\"", timeStartedStr)) + w.Header().Set("Cache-Control", "public, max-age=86400") http.ServeContent(w, r, filePath, timeStarted, file) return } diff --git a/httputil/LICENSE b/httputil/LICENSE new file mode 100644 index 0000000..6a66aea --- /dev/null +++ b/httputil/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/httputil/conditional.go b/httputil/conditional.go new file mode 100644 index 0000000..999b1ac --- /dev/null +++ b/httputil/conditional.go @@ -0,0 +1,218 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// HTTP file system request handler + +package httputil + +import ( + "net/http" + "net/textproto" + "strings" + "time" +) + +// scanETag determines if a syntactically valid ETag is present at s. If so, +// the ETag and remaining text after consuming ETag is returned. Otherwise, +// it returns "", "". +func scanETag(s string) (etag string, remain string) { + s = textproto.TrimString(s) + start := 0 + if strings.HasPrefix(s, "W/") { + start = 2 + } + if len(s[start:]) < 2 || s[start] != '"' { + return "", "" + } + // ETag is either W/"text" or "text". + // See RFC 7232 2.3. + for i := start + 1; i < len(s); i++ { + c := s[i] + switch { + // Character values allowed in ETags. + case c == 0x21 || c >= 0x23 && c <= 0x7E || c >= 0x80: + case c == '"': + return s[:i+1], s[i+1:] + default: + return "", "" + } + } + return "", "" +} + +// etagStrongMatch reports whether a and b match using strong ETag comparison. +// Assumes a and b are valid ETags. +func etagStrongMatch(a, b string) bool { + return a == b && a != "" && a[0] == '"' +} + +// etagWeakMatch reports whether a and b match using weak ETag comparison. +// Assumes a and b are valid ETags. +func etagWeakMatch(a, b string) bool { + return strings.TrimPrefix(a, "W/") == strings.TrimPrefix(b, "W/") +} + +// condResult is the result of an HTTP request precondition check. +// See https://tools.ietf.org/html/rfc7232 section 3. +type condResult int + +const ( + condNone condResult = iota + condTrue + condFalse +) + +func checkIfMatch(w http.ResponseWriter, r *http.Request) condResult { + im := r.Header.Get("If-Match") + if im == "" { + return condNone + } + for { + im = textproto.TrimString(im) + if len(im) == 0 { + break + } + if im[0] == ',' { + im = im[1:] + continue + } + if im[0] == '*' { + return condTrue + } + etag, remain := scanETag(im) + if etag == "" { + break + } + if etagStrongMatch(etag, w.Header().Get("Etag")) { + return condTrue + } + im = remain + } + + return condFalse +} + +func checkIfUnmodifiedSince(r *http.Request, modtime time.Time) condResult { + ius := r.Header.Get("If-Unmodified-Since") + if ius == "" || isZeroTime(modtime) { + return condNone + } + if t, err := http.ParseTime(ius); err == nil { + // The Date-Modified header truncates sub-second precision, so + // use mtime < t+1s instead of mtime <= t to check for unmodified. + if modtime.Before(t.Add(1 * time.Second)) { + return condTrue + } + return condFalse + } + return condNone +} + +func checkIfNoneMatch(w http.ResponseWriter, r *http.Request) condResult { + inm := r.Header.Get("If-None-Match") + if inm == "" { + return condNone + } + buf := inm + for { + buf = textproto.TrimString(buf) + if len(buf) == 0 { + break + } + if buf[0] == ',' { + buf = buf[1:] + } + if buf[0] == '*' { + return condFalse + } + etag, remain := scanETag(buf) + if etag == "" { + break + } + if etagWeakMatch(etag, w.Header().Get("Etag")) { + return condFalse + } + buf = remain + } + return condTrue +} + +func checkIfModifiedSince(r *http.Request, modtime time.Time) condResult { + if r.Method != "GET" && r.Method != "HEAD" { + return condNone + } + ims := r.Header.Get("If-Modified-Since") + if ims == "" || isZeroTime(modtime) { + return condNone + } + t, err := http.ParseTime(ims) + if err != nil { + return condNone + } + // The Date-Modified header truncates sub-second precision, so + // use mtime < t+1s instead of mtime <= t to check for unmodified. + if modtime.Before(t.Add(1 * time.Second)) { + return condFalse + } + return condTrue +} + +var unixEpochTime = time.Unix(0, 0) + +// isZeroTime reports whether t is obviously unspecified (either zero or Unix()=0). +func isZeroTime(t time.Time) bool { + return t.IsZero() || t.Equal(unixEpochTime) +} + +func setLastModified(w http.ResponseWriter, modtime time.Time) { + if !isZeroTime(modtime) { + w.Header().Set("Last-Modified", modtime.UTC().Format(http.TimeFormat)) + } +} + +func writeNotModified(w http.ResponseWriter) { + // RFC 7232 section 4.1: + // a sender SHOULD NOT generate representation metadata other than the + // above listed fields unless said metadata exists for the purpose of + // guiding cache updates (e.g., Last-Modified might be useful if the + // response does not have an ETag field). + h := w.Header() + delete(h, "Content-Type") + delete(h, "Content-Length") + if h.Get("Etag") != "" { + delete(h, "Last-Modified") + } + w.WriteHeader(http.StatusNotModified) +} + +// CheckPreconditions evaluates request preconditions and reports whether a precondition +// resulted in sending StatusNotModified or StatusPreconditionFailed. +func CheckPreconditions(w http.ResponseWriter, r *http.Request, modtime time.Time) (done bool) { + // This function carefully follows RFC 7232 section 6. + ch := checkIfMatch(w, r) + if ch == condNone { + ch = checkIfUnmodifiedSince(r, modtime) + } + if ch == condFalse { + w.WriteHeader(http.StatusPreconditionFailed) + return true + } + switch checkIfNoneMatch(w, r) { + case condFalse: + if r.Method == "GET" || r.Method == "HEAD" { + writeNotModified(w) + return true + } else { + w.WriteHeader(http.StatusPreconditionFailed) + return true + } + case condNone: + if checkIfModifiedSince(r, modtime) == condFalse { + writeNotModified(w) + return true + } + } + + return false +} From 2c0b2b2e79518b54dbd2ed4ae93919f7fc379221 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Thu, 14 Mar 2019 10:58:17 -0700 Subject: [PATCH 180/345] README reordering --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index bd1d9eb..3b46bb6 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,12 @@ allowhotlink = true - ```-nologs``` -- (optionally) disable request logs in stdout - ```-force-random-filename``` -- (optionally) force the use of random filenames +#### Require API Keys for uploads +- ```-authfile path/to/authfile``` -- (optionally) require authorization for upload/delete by providing a newline-separated file of scrypted auth keys +- ```-remoteauthfile path/to/remoteauthfile``` -- (optionally) require authorization for remote uploads by providing a newline-separated file of scrypted auth keys + +A helper utility ```linx-genkey``` is provided which hashes keys to the format required in the auth files. + #### Storage backends The following storage backends are available: @@ -73,12 +79,6 @@ The following storage backends are available: #### Use with fastcgi - ```-fastcgi``` -- serve through fastcgi -#### Require API Keys for uploads -- ```-authfile path/to/authfile``` -- (optionally) require authorization for upload/delete by providing a newline-separated file of scrypted auth keys -- ```-remoteauthfile path/to/remoteauthfile``` -- (optionally) require authorization for remote uploads by providing a newline-separated file of scrypted auth keys - -A helper utility ```linx-genkey``` is provided which hashes keys to the format required in the auth files. - Cleaning up expired files ------------------------- From 8098b7e39e2fea603d1b9fbe4883e858bd5b5f45 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Tue, 9 Apr 2019 13:28:18 -0700 Subject: [PATCH 181/345] Add PutMetadata function to storage backends (#171) * Add PutMetadata function to storage backends This function is not currently used, but it will be useful for helper scripts that need to regenerate metadata on the fly, especially scripts to migrate between storage backends. In the future, we can also use it to automatically regenerate metadata if it is found to be missing or corrupted. * Add PutMetadata function to storage backend interface and implementations * Rework metadata generation to be more efficient and work better with the PutMetadata function * Add a basic test for metadata generation * Change PutMetadata to take a Metadata type instead It's unlikely that this function is useful if it always regenerates the metadata. Instead, the caller should do that if it needs. --- backends/localfs/localfs.go | 20 +++++++++-- backends/s3/s3.go | 48 +++++++++++++++++---------- backends/storage.go | 1 + helpers/helpers.go | 66 +++++++++++++++++++++++-------------- helpers/helpers_test.go | 29 ++++++++++++++++ 5 files changed, 119 insertions(+), 45 deletions(-) create mode 100644 helpers/helpers_test.go diff --git a/backends/localfs/localfs.go b/backends/localfs/localfs.go index 3f6f5ad..47187b6 100644 --- a/backends/localfs/localfs.go +++ b/backends/localfs/localfs.go @@ -126,11 +126,16 @@ func (b LocalfsBackend) Put(key string, r io.Reader, expiry time.Time, deleteKey return m, err } + dst.Seek(0 ,0) + m, err = helpers.GenerateMetadata(dst) + if err != nil { + os.Remove(filePath) + return + } + dst.Seek(0 ,0) + m.Expiry = expiry m.DeleteKey = deleteKey - m.Size = bytes - m.Mimetype, _ = helpers.DetectMime(dst) - m.Sha256sum, _ = helpers.Sha256sum(dst) m.ArchiveFiles, _ = helpers.ListArchiveFiles(m.Mimetype, m.Size, dst) err = b.writeMetadata(key, m) @@ -142,6 +147,15 @@ func (b LocalfsBackend) Put(key string, r io.Reader, expiry time.Time, deleteKey return } +func (b LocalfsBackend) PutMetadata(key string, m backends.Metadata) (err error) { + err = b.writeMetadata(key, m) + if err != nil { + return + } + + return +} + func (b LocalfsBackend) Size(key string) (int64, error) { fileInfo, err := os.Stat(path.Join(b.filesPath, key)) if err != nil { diff --git a/backends/s3/s3.go b/backends/s3/s3.go index 45067c1..ad040e1 100644 --- a/backends/s3/s3.go +++ b/backends/s3/s3.go @@ -18,13 +18,13 @@ import ( type S3Backend struct { bucket string - svc *s3.S3 + svc *s3.S3 } func (b S3Backend) Delete(key string) error { _, err := b.svc.DeleteObject(&s3.DeleteObjectInput{ Bucket: aws.String(b.bucket), - Key: aws.String(key), + Key: aws.String(key), }) if err != nil { return err @@ -35,7 +35,7 @@ func (b S3Backend) Delete(key string) error { func (b S3Backend) Exists(key string) (bool, error) { _, err := b.svc.HeadObject(&s3.HeadObjectInput{ Bucket: aws.String(b.bucket), - Key: aws.String(key), + Key: aws.String(key), }) return err == nil, err } @@ -44,7 +44,7 @@ func (b S3Backend) Head(key string) (metadata backends.Metadata, err error) { var result *s3.HeadObjectOutput result, err = b.svc.HeadObject(&s3.HeadObjectInput{ Bucket: aws.String(b.bucket), - Key: aws.String(key), + Key: aws.String(key), }) if err != nil { if aerr, ok := err.(awserr.Error); ok { @@ -63,7 +63,7 @@ func (b S3Backend) Get(key string) (metadata backends.Metadata, r io.ReadCloser, var result *s3.GetObjectOutput result, err = b.svc.GetObject(&s3.GetObjectInput{ Bucket: aws.String(b.bucket), - Key: aws.String(key), + Key: aws.String(key), }) if err != nil { if aerr, ok := err.(awserr.Error); ok { @@ -81,11 +81,11 @@ func (b S3Backend) Get(key string) (metadata backends.Metadata, r io.ReadCloser, func mapMetadata(m backends.Metadata) map[string]*string { return map[string]*string{ - "Expiry": aws.String(strconv.FormatInt(m.Expiry.Unix(), 10)), + "Expiry": aws.String(strconv.FormatInt(m.Expiry.Unix(), 10)), "Delete_key": aws.String(m.DeleteKey), - "Size": aws.String(strconv.FormatInt(m.Size, 10)), - "Mimetype": aws.String(m.Mimetype), - "Sha256sum": aws.String(m.Sha256sum), + "Size": aws.String(strconv.FormatInt(m.Size, 10)), + "Mimetype": aws.String(m.Mimetype), + "Sha256sum": aws.String(m.Sha256sum), } } @@ -122,19 +122,20 @@ func (b S3Backend) Put(key string, r io.Reader, expiry time.Time, deleteKey stri return m, err } + m, err = helpers.GenerateMetadata(r) + if err != nil { + return + } m.Expiry = expiry m.DeleteKey = deleteKey - m.Size = bytes - m.Mimetype, _ = helpers.DetectMime(tmpDst) - m.Sha256sum, _ = helpers.Sha256sum(tmpDst) // XXX: we may not be able to write this to AWS easily //m.ArchiveFiles, _ = helpers.ListArchiveFiles(m.Mimetype, m.Size, tmpDst) uploader := s3manager.NewUploaderWithClient(b.svc) input := &s3manager.UploadInput{ - Bucket: aws.String(b.bucket), - Key: aws.String(key), - Body: tmpDst, + Bucket: aws.String(b.bucket), + Key: aws.String(key), + Body: tmpDst, Metadata: mapMetadata(m), } _, err = uploader.Upload(input) @@ -145,10 +146,24 @@ func (b S3Backend) Put(key string, r io.Reader, expiry time.Time, deleteKey stri return } +func (b S3Backend) PutMetadata(key string, m backends.Metadata) (err error) { + _, err = b.svc.CopyObject(&s3.CopyObjectInput{ + Bucket: aws.String(b.bucket), + Key: aws.String(key), + CopySource: aws.String("/" + b.bucket + "/" + key), + Metadata: mapMetadata(m), + }) + if err != nil { + return + } + + return +} + func (b S3Backend) Size(key string) (int64, error) { input := &s3.HeadObjectInput{ Bucket: aws.String(b.bucket), - Key: aws.String(key), + Key: aws.String(key), } result, err := b.svc.HeadObject(input) if err != nil { @@ -169,7 +184,6 @@ func (b S3Backend) List() ([]string, error) { return nil, err } - for _, object := range results.Contents { output = append(output, *object.Key) } diff --git a/backends/storage.go b/backends/storage.go index d40a2b9..fdd8cd6 100644 --- a/backends/storage.go +++ b/backends/storage.go @@ -12,6 +12,7 @@ type StorageBackend interface { Head(key string) (Metadata, error) Get(key string) (Metadata, io.ReadCloser, error) Put(key string, r io.Reader, expiry time.Time, deleteKey string) (Metadata, error) + PutMetadata(key string, m Metadata) error Size(key string) (int64, error) } diff --git a/helpers/helpers.go b/helpers/helpers.go index aef68ff..f51d998 100644 --- a/helpers/helpers.go +++ b/helpers/helpers.go @@ -1,49 +1,65 @@ package helpers import ( + "bytes" "encoding/hex" "io" "unicode" + "github.com/andreimarcu/linx-server/backends" "github.com/minio/sha256-simd" "gopkg.in/h2non/filetype.v1" ) -func DetectMime(r io.ReadSeeker) (string, error) { +func GenerateMetadata(r io.Reader) (m backends.Metadata, err error) { + // Since we don't have the ability to seek within a file, we can use a + // Buffer in combination with a TeeReader to keep a copy of the bytes + // we read when detecting the file type. These bytes are still needed + // to hash the file and determine its size and cannot be discarded. + var buf bytes.Buffer + teeReader := io.TeeReader(r, &buf) + // Get first 512 bytes for mimetype detection header := make([]byte, 512) + _, err = teeReader.Read(header) + if err != nil { + return + } - r.Seek(0, 0) - r.Read(header) - r.Seek(0, 0) + // Create a Hash and a MultiReader that includes the Buffer we created + // above along with the original Reader, which will have the rest of + // the file. + hasher := sha256.New() + multiReader := io.MultiReader(&buf, r) + // Copy everything into the Hash, then use the number of bytes written + // as the file size. + var readLen int64 + readLen, err = io.Copy(hasher, multiReader) + if err != nil { + return + } else { + m.Size += readLen + } + + // Get the hex-encoded string version of the Hash checksum + m.Sha256sum = hex.EncodeToString(hasher.Sum(nil)) + + // Use the bytes we extracted earlier and attempt to determine the file + // type kind, err := filetype.Match(header) if err != nil { - return "application/octet-stream", err + m.Mimetype = "application/octet-stream" + return m, err } else if kind.MIME.Value != "" { - return kind.MIME.Value, nil - } - - // Check if the file seems anything like text - if printable(header) { - return "text/plain", nil + m.Mimetype = kind.MIME.Value + } else if printable(header) { + m.Mimetype = "text/plain" } else { - return "application/octet-stream", nil - } -} - -func Sha256sum(r io.ReadSeeker) (string, error) { - hasher := sha256.New() - - r.Seek(0, 0) - _, err := io.Copy(hasher, r) - if err != nil { - return "", err + m.Mimetype = "application/octet-stream" } - r.Seek(0, 0) - - return hex.EncodeToString(hasher.Sum(nil)), nil + return } func printable(data []byte) bool { diff --git a/helpers/helpers_test.go b/helpers/helpers_test.go new file mode 100644 index 0000000..800d0d2 --- /dev/null +++ b/helpers/helpers_test.go @@ -0,0 +1,29 @@ +package helpers + +import ( + "strings" + "testing" +) + +func TestGenerateMetadata(t *testing.T) { + r := strings.NewReader("This is my test content") + m, err := GenerateMetadata(r) + if err != nil { + t.Fatal(err) + } + + expectedSha256sum := "966152d20a77e739716a625373ee15af16e8f4aec631a329a27da41c204b0171" + if m.Sha256sum != expectedSha256sum { + t.Fatalf("Sha256sum was %q instead of expected value of %q", m.Sha256sum, expectedSha256sum) + } + + expectedMimetype := "text/plain" + if m.Mimetype != expectedMimetype { + t.Fatalf("Mimetype was %q instead of expected value of %q", m.Mimetype, expectedMimetype) + } + + expectedSize := int64(23) + if m.Size != expectedSize { + t.Fatalf("Size was %d instead of expected value of %d", m.Size, expectedSize) + } +} From 872340e0dc6f76fe2997520d276207ff8cd6da1c Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Thu, 9 May 2019 16:13:58 +0000 Subject: [PATCH 182/345] Fix PutMetadata with S3 backend (#176) It turns out that the S3 API expects the additional `MetadataDirective: REPLACE` option in order to update metadata. If this is not provided, then metadata will simply be copied from the source object, which is not what we wanted. --- backends/s3/s3.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/backends/s3/s3.go b/backends/s3/s3.go index ad040e1..e39786a 100644 --- a/backends/s3/s3.go +++ b/backends/s3/s3.go @@ -148,10 +148,11 @@ func (b S3Backend) Put(key string, r io.Reader, expiry time.Time, deleteKey stri func (b S3Backend) PutMetadata(key string, m backends.Metadata) (err error) { _, err = b.svc.CopyObject(&s3.CopyObjectInput{ - Bucket: aws.String(b.bucket), - Key: aws.String(key), - CopySource: aws.String("/" + b.bucket + "/" + key), - Metadata: mapMetadata(m), + Bucket: aws.String(b.bucket), + Key: aws.String(key), + CopySource: aws.String("/" + b.bucket + "/" + key), + Metadata: mapMetadata(m), + MetadataDirective: aws.String("REPLACE"), }) if err != nil { return From 50c1bdc018653f83720830f01465cee5e2c726b3 Mon Sep 17 00:00:00 2001 From: mutantmonkey Date: Tue, 4 Jun 2019 16:35:52 +0000 Subject: [PATCH 183/345] Fix S3 uploads (#178) My previous change that reworked how metadata generation worked was not correct for two reasons: * It passed the original `io.Reader` (with no bytes remaining) to `GenerateMetadata` * It did not seek back to the beginning of the temporary file after writing to it, causing any subsequent reads to return EOF. This change fixes both issues and S3 uploads now work fine. We really ought to investigate adding test coverage to our S3 backend to avoid similar recurrences. --- backends/s3/s3.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/backends/s3/s3.go b/backends/s3/s3.go index e39786a..fc2a1b0 100644 --- a/backends/s3/s3.go +++ b/backends/s3/s3.go @@ -122,7 +122,12 @@ func (b S3Backend) Put(key string, r io.Reader, expiry time.Time, deleteKey stri return m, err } - m, err = helpers.GenerateMetadata(r) + _, err = tmpDst.Seek(0, 0) + if err != nil { + return m, err + } + + m, err = helpers.GenerateMetadata(tmpDst) if err != nil { return } @@ -131,6 +136,11 @@ func (b S3Backend) Put(key string, r io.Reader, expiry time.Time, deleteKey stri // XXX: we may not be able to write this to AWS easily //m.ArchiveFiles, _ = helpers.ListArchiveFiles(m.Mimetype, m.Size, tmpDst) + _, err = tmpDst.Seek(0, 0) + if err != nil { + return m, err + } + uploader := s3manager.NewUploaderWithClient(b.svc) input := &s3manager.UploadInput{ Bucket: aws.String(b.bucket), From bf090c51193490738b7cf08d3ac2643e19d6ac62 Mon Sep 17 00:00:00 2001 From: nia <29542929+niacat@users.noreply.github.com> Date: Thu, 13 Jun 2019 20:50:59 +0100 Subject: [PATCH 184/345] build.sh: build for netbsd (#181) --- build.sh | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/build.sh b/build.sh index c4fc7f4..a34085e 100755 --- a/build.sh +++ b/build.sh @@ -13,6 +13,11 @@ function build_binary_rice { rice append --exec "$name"freebsd-$arch done + for arch in arm amd64 386; do + GOOS=netbsd GOARCH=$arch go build -o "$name"netbsd-$arch + rice append --exec "$name"netbsd-$arch + done + for arch in amd64 386; do GOOS=openbsd GOARCH=$arch go build -o "$name"openbsd-$arch rice append --exec "$name"openbsd-$arch @@ -40,6 +45,10 @@ function build_binary { GOOS=freebsd GOARCH=$arch go build -o "$name"freebsd-$arch done + for arch in arm amd64 386; do + GOOS=netbsd GOARCH=$arch go build -o "$name"netbsd-$arch + done + for arch in amd64 386; do GOOS=openbsd GOARCH=$arch go build -o "$name"openbsd-$arch done From 0e763cb776ddfe1bd3252c3964f0e8f2a99f61e0 Mon Sep 17 00:00:00 2001 From: PaulC <212168+paulc@users.noreply.github.com> Date: Tue, 3 Dec 2019 02:24:11 +0000 Subject: [PATCH 185/345] Allow UNIX socket in FastCGI mode (check if bind starts with /) (#190) Allow UNIX socket in FastCGI mode (check if bind starts with /) --- server.go | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/server.go b/server.go index e4e1661..71a9c4d 100644 --- a/server.go +++ b/server.go @@ -8,9 +8,11 @@ import ( "net/http/fcgi" "net/url" "os" + "os/signal" "regexp" "strconv" "strings" + "syscall" "time" "github.com/GeertJohan/go.rice" @@ -277,7 +279,27 @@ func main() { mux := setup() if Config.fastcgi { - listener, err := net.Listen("tcp", Config.bind) + var listener net.Listener + var err error + if Config.bind[0] == '/' { + // UNIX path + listener, err = net.ListenUnix("unix", &net.UnixAddr{Name: Config.bind, Net: "unix"}) + cleanup := func() { + log.Print("Removing FastCGI socket") + os.Remove(Config.bind) + } + defer cleanup() + sigs := make(chan os.Signal, 1) + signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) + go func() { + sig := <-sigs + log.Print("Signal: ", sig) + cleanup() + os.Exit(0) + }() + } else { + listener, err = net.Listen("tcp", Config.bind) + } if err != nil { log.Fatal("Could not bind: ", err) } From 85be5b078d9767f2b97ac7180d84e84aef2e19a5 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Mon, 2 Dec 2019 18:30:15 -0800 Subject: [PATCH 186/345] Add a max-height for videos display --- static/css/linx.css | 1 + 1 file changed, 1 insertion(+) diff --git a/static/css/linx.css b/static/css/linx.css index 15abee4..646c83b 100644 --- a/static/css/linx.css +++ b/static/css/linx.css @@ -330,6 +330,7 @@ body { .display-video { width: 800px; + max-height: 70vh; } .scrollable { From 1d583bcb489cefa0be3774080718aae2b00f9de2 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Mon, 2 Dec 2019 18:38:07 -0800 Subject: [PATCH 187/345] Fix #189 - Markdown lists don't show numbers/bullets --- static/css/github-markdown.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/static/css/github-markdown.css b/static/css/github-markdown.css index 6823d9c..6a27ed0 100644 --- a/static/css/github-markdown.css +++ b/static/css/github-markdown.css @@ -44,6 +44,10 @@ overflow: auto; } +.markdown-body li { + list-style: unset; +} + .markdown-body code, .markdown-body kbd, .markdown-body pre { From cf0a30f46a030859033e89006be3b96b8645886d Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Thu, 16 Jan 2020 16:26:25 -0800 Subject: [PATCH 188/345] Add URL to demo --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 3b46bb6..24ef4ea 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,9 @@ linx-server Self-hosted file/media sharing website. +### Demo +You can see what it looks like using the demo: [https://demo.linx-server.net/](https://demo.linx-server.net/) + ### Features From b63274ad01e0ec2fe12742bece7881d9cc80ce39 Mon Sep 17 00:00:00 2001 From: Viktor Oreshkin Date: Mon, 17 Feb 2020 17:58:56 +0300 Subject: [PATCH 189/345] allow limiting access by passwords (fix #194) --- access.go | 138 ++++++++++++++++++++++++++++++++++++ backends/localfs/localfs.go | 20 +++--- backends/meta.go | 1 + backends/s3/s3.go | 9 ++- backends/storage.go | 2 +- display.go | 22 +----- fileserve.go | 10 +++ server.go | 7 +- templates.go | 3 +- templates/access.html | 11 +++ templates/index.html | 1 + upload.go | 7 +- 12 files changed, 197 insertions(+), 34 deletions(-) create mode 100644 access.go create mode 100644 templates/access.html diff --git a/access.go b/access.go new file mode 100644 index 0000000..bacea24 --- /dev/null +++ b/access.go @@ -0,0 +1,138 @@ +package main + +import ( + "encoding/json" + "errors" + "net/http" + "regexp" + "strings" + "time" + + "github.com/andreimarcu/linx-server/backends" + "github.com/flosch/pongo2" + "github.com/zenazn/goji/web" +) + +type accessKeySource int + +const ( + accessKeySourceNone accessKeySource = iota + accessKeySourceCookie + accessKeySourceHeader + accessKeySourceForm + accessKeySourceQuery +) + +const accessKeyHeaderName = "Linx-Access-Key" +const accessKeyParamName = "access_key" + +var ( + errInvalidAccessKey = errors.New("invalid access key") + + cliUserAgentRe = regexp.MustCompile("(?i)(lib)?curl|wget") +) + +func checkAccessKey(r *http.Request, metadata *backends.Metadata) (accessKeySource, error) { + key := metadata.AccessKey + if key == "" { + return accessKeySourceNone, nil + } + + cookieKey, err := r.Cookie(accessKeyHeaderName) + if err == nil { + if cookieKey.Value == key { + return accessKeySourceCookie, nil + } + return accessKeySourceCookie, errInvalidAccessKey + } + + headerKey := r.Header.Get(accessKeyHeaderName) + if headerKey == key { + return accessKeySourceHeader, nil + } else if headerKey != "" { + return accessKeySourceHeader, errInvalidAccessKey + } + + formKey := r.PostFormValue(accessKeyParamName) + if formKey == key { + return accessKeySourceForm, nil + } else if formKey != "" { + return accessKeySourceForm, errInvalidAccessKey + } + + queryKey := r.URL.Query().Get(accessKeyParamName) + if queryKey == key { + return accessKeySourceQuery, nil + } else if formKey != "" { + return accessKeySourceQuery, errInvalidAccessKey + } + + return accessKeySourceNone, errInvalidAccessKey +} + +func setAccessKeyCookies(w http.ResponseWriter, domain, fileName, value string, expires time.Time) { + cookie := http.Cookie{ + Name: accessKeyHeaderName, + Value: value, + HttpOnly: true, + Domain: domain, + Expires: expires, + } + + cookie.Path = Config.sitePath + fileName + http.SetCookie(w, &cookie) + + cookie.Path = Config.sitePath + Config.selifPath + fileName + http.SetCookie(w, &cookie) +} + +func fileAccessHandler(c web.C, w http.ResponseWriter, r *http.Request) { + if !Config.noDirectAgents && cliUserAgentRe.MatchString(r.Header.Get("User-Agent")) && !strings.EqualFold("application/json", r.Header.Get("Accept")) { + fileServeHandler(c, w, r) + return + } + + fileName := c.URLParams["name"] + + metadata, err := checkFile(fileName) + if err == backends.NotFoundErr { + notFoundHandler(c, w, r) + return + } else if err != nil { + oopsHandler(c, w, r, RespAUTO, "Corrupt metadata.") + return + } + + if src, err := checkAccessKey(r, &metadata); err != nil { + // remove invalid cookie + if src == accessKeySourceCookie { + setAccessKeyCookies(w, getSiteURL(r), fileName, "", time.Unix(0, 0)) + } + + if strings.EqualFold("application/json", r.Header.Get("Accept")) { + dec := json.NewEncoder(w) + _ = dec.Encode(map[string]string{ + "error": errInvalidAccessKey.Error(), + }) + + return + } + + _ = renderTemplate(Templates["access.html"], pongo2.Context{ + "filename": fileName, + "accesspath": fileName, + }, r, w) + + return + } + + if metadata.AccessKey != "" { + var expiry time.Time + if Config.accessKeyCookieExpiry != 0 { + expiry = time.Now().Add(time.Duration(Config.accessKeyCookieExpiry) * time.Second) + } + setAccessKeyCookies(w, getSiteURL(r), fileName, metadata.AccessKey, expiry) + } + + fileDisplayHandler(c, w, r, fileName, metadata) +} diff --git a/backends/localfs/localfs.go b/backends/localfs/localfs.go index 47187b6..42e32b8 100644 --- a/backends/localfs/localfs.go +++ b/backends/localfs/localfs.go @@ -19,6 +19,7 @@ type LocalfsBackend struct { type MetadataJSON struct { DeleteKey string `json:"delete_key"` + AccessKey string `json:"access_key,omitempty"` Sha256sum string `json:"sha256sum"` Mimetype string `json:"mimetype"` Size int64 `json:"size"` @@ -57,6 +58,7 @@ func (b LocalfsBackend) Head(key string) (metadata backends.Metadata, err error) } metadata.DeleteKey = mjson.DeleteKey + metadata.AccessKey = mjson.AccessKey metadata.Mimetype = mjson.Mimetype metadata.ArchiveFiles = mjson.ArchiveFiles metadata.Sha256sum = mjson.Sha256sum @@ -84,12 +86,13 @@ func (b LocalfsBackend) writeMetadata(key string, metadata backends.Metadata) er metaPath := path.Join(b.metaPath, key) mjson := MetadataJSON{ - DeleteKey: metadata.DeleteKey, - Mimetype: metadata.Mimetype, + DeleteKey: metadata.DeleteKey, + AccessKey: metadata.AccessKey, + Mimetype: metadata.Mimetype, ArchiveFiles: metadata.ArchiveFiles, - Sha256sum: metadata.Sha256sum, - Expiry: metadata.Expiry.Unix(), - Size: metadata.Size, + Sha256sum: metadata.Sha256sum, + Expiry: metadata.Expiry.Unix(), + Size: metadata.Size, } dst, err := os.Create(metaPath) @@ -108,7 +111,7 @@ func (b LocalfsBackend) writeMetadata(key string, metadata backends.Metadata) er return nil } -func (b LocalfsBackend) Put(key string, r io.Reader, expiry time.Time, deleteKey string) (m backends.Metadata, err error) { +func (b LocalfsBackend) Put(key string, r io.Reader, expiry time.Time, deleteKey, accessKey string) (m backends.Metadata, err error) { filePath := path.Join(b.filesPath, key) dst, err := os.Create(filePath) @@ -126,16 +129,17 @@ func (b LocalfsBackend) Put(key string, r io.Reader, expiry time.Time, deleteKey return m, err } - dst.Seek(0 ,0) + dst.Seek(0, 0) m, err = helpers.GenerateMetadata(dst) if err != nil { os.Remove(filePath) return } - dst.Seek(0 ,0) + dst.Seek(0, 0) m.Expiry = expiry m.DeleteKey = deleteKey + m.AccessKey = accessKey m.ArchiveFiles, _ = helpers.ListArchiveFiles(m.Mimetype, m.Size, dst) err = b.writeMetadata(key, m) diff --git a/backends/meta.go b/backends/meta.go index 7ba522d..b22276e 100644 --- a/backends/meta.go +++ b/backends/meta.go @@ -7,6 +7,7 @@ import ( type Metadata struct { DeleteKey string + AccessKey string Sha256sum string Mimetype string Size int64 diff --git a/backends/s3/s3.go b/backends/s3/s3.go index fc2a1b0..afdabf0 100644 --- a/backends/s3/s3.go +++ b/backends/s3/s3.go @@ -86,6 +86,7 @@ func mapMetadata(m backends.Metadata) map[string]*string { "Size": aws.String(strconv.FormatInt(m.Size, 10)), "Mimetype": aws.String(m.Mimetype), "Sha256sum": aws.String(m.Sha256sum), + "AccessKey": aws.String(m.AccessKey), } } @@ -104,10 +105,15 @@ func unmapMetadata(input map[string]*string) (m backends.Metadata, err error) { m.DeleteKey = aws.StringValue(input["Delete_key"]) m.Mimetype = aws.StringValue(input["Mimetype"]) m.Sha256sum = aws.StringValue(input["Sha256sum"]) + + if key, ok := input["AccessKey"]; ok { + m.AccessKey = aws.StringValue(key) + } + return } -func (b S3Backend) Put(key string, r io.Reader, expiry time.Time, deleteKey string) (m backends.Metadata, err error) { +func (b S3Backend) Put(key string, r io.Reader, expiry time.Time, deleteKey, accessKey string) (m backends.Metadata, err error) { tmpDst, err := ioutil.TempFile("", "linx-server-upload") if err != nil { return m, err @@ -133,6 +139,7 @@ func (b S3Backend) Put(key string, r io.Reader, expiry time.Time, deleteKey stri } m.Expiry = expiry m.DeleteKey = deleteKey + m.AccessKey = accessKey // XXX: we may not be able to write this to AWS easily //m.ArchiveFiles, _ = helpers.ListArchiveFiles(m.Mimetype, m.Size, tmpDst) diff --git a/backends/storage.go b/backends/storage.go index fdd8cd6..5d973c4 100644 --- a/backends/storage.go +++ b/backends/storage.go @@ -11,7 +11,7 @@ type StorageBackend interface { Exists(key string) (bool, error) Head(key string) (Metadata, error) Get(key string) (Metadata, io.ReadCloser, error) - Put(key string, r io.Reader, expiry time.Time, deleteKey string) (Metadata, error) + Put(key string, r io.Reader, expiry time.Time, deleteKey, accessKey string) (Metadata, error) PutMetadata(key string, m Metadata) error Size(key string) (int64, error) } diff --git a/display.go b/display.go index feb16da..e15b1b6 100644 --- a/display.go +++ b/display.go @@ -5,7 +5,6 @@ import ( "io/ioutil" "net/http" "path/filepath" - "regexp" "strconv" "strings" "time" @@ -21,24 +20,7 @@ import ( const maxDisplayFileSizeBytes = 1024 * 512 -var cliUserAgentRe = regexp.MustCompile("(?i)(lib)?curl|wget") - -func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { - if !Config.noDirectAgents && cliUserAgentRe.MatchString(r.Header.Get("User-Agent")) && !strings.EqualFold("application/json", r.Header.Get("Accept")) { - fileServeHandler(c, w, r) - return - } - - fileName := c.URLParams["name"] - - metadata, err := checkFile(fileName) - if err == backends.NotFoundErr { - notFoundHandler(c, w, r) - return - } else if err != nil { - oopsHandler(c, w, r, RespAUTO, "Corrupt metadata.") - return - } +func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request, fileName string, metadata backends.Metadata) { var expiryHuman string if metadata.Expiry != expiry.NeverExpire { expiryHuman = humanize.RelTime(time.Now(), metadata.Expiry, "", "") @@ -130,7 +112,7 @@ func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request) { tpl = Templates["display/file.html"] } - err = renderTemplate(tpl, pongo2.Context{ + err := renderTemplate(tpl, pongo2.Context{ "mime": metadata.Mimetype, "filename": fileName, "size": sizeHuman, diff --git a/fileserve.go b/fileserve.go index 202e477..27a28a9 100644 --- a/fileserve.go +++ b/fileserve.go @@ -27,6 +27,16 @@ func fileServeHandler(c web.C, w http.ResponseWriter, r *http.Request) { return } + if src, err := checkAccessKey(r, &metadata); err != nil { + // remove invalid cookie + if src == accessKeySourceCookie { + setAccessKeyCookies(w, getSiteURL(r), fileName, "", time.Unix(0, 0)) + } + unauthorizedHandler(c, w, r) + + return + } + if !Config.allowHotlink { referer := r.Header.Get("Referer") u, _ := url.Parse(referer) diff --git a/server.go b/server.go index 71a9c4d..50c4465 100644 --- a/server.go +++ b/server.go @@ -15,7 +15,7 @@ import ( "syscall" "time" - "github.com/GeertJohan/go.rice" + rice "github.com/GeertJohan/go.rice" "github.com/andreimarcu/linx-server/backends" "github.com/andreimarcu/linx-server/backends/localfs" "github.com/andreimarcu/linx-server/backends/s3" @@ -68,6 +68,7 @@ var Config struct { s3Bucket string s3ForcePathStyle bool forceRandomFilename bool + accessKeyCookieExpiry uint64 } var Templates = make(map[string]*pongo2.Template) @@ -200,7 +201,8 @@ func setup() *web.Mux { mux.Get(Config.sitePath+"static/*", staticHandler) mux.Get(Config.sitePath+"favicon.ico", staticHandler) mux.Get(Config.sitePath+"robots.txt", staticHandler) - mux.Get(nameRe, fileDisplayHandler) + mux.Get(nameRe, fileAccessHandler) + mux.Post(nameRe, fileAccessHandler) mux.Get(selifRe, fileServeHandler) mux.Get(selifIndexRe, unauthorizedHandler) mux.Get(torrentRe, fileTorrentHandler) @@ -273,6 +275,7 @@ func main() { "Force path-style addressing for S3 (e.g. https://s3.amazonaws.com/linx/example.txt)") flag.BoolVar(&Config.forceRandomFilename, "force-random-filename", false, "Force all uploads to use a random filename") + flag.Uint64Var(&Config.accessKeyCookieExpiry, "access-cookie-expiry", 0, "Expiration time for access key cookies in seconds (set 0 to use session cookies)") iniflags.Parse() diff --git a/templates.go b/templates.go index 79c90ce..acd9980 100644 --- a/templates.go +++ b/templates.go @@ -8,7 +8,7 @@ import ( "path/filepath" "strings" - "github.com/GeertJohan/go.rice" + rice "github.com/GeertJohan/go.rice" "github.com/flosch/pongo2" ) @@ -51,6 +51,7 @@ func populateTemplatesMap(tSet *pongo2.TemplateSet, tMap map[string]*pongo2.Temp "401.html", "404.html", "oops.html", + "access.html", "display/audio.html", "display/image.html", diff --git a/templates/access.html b/templates/access.html new file mode 100644 index 0000000..be3ada9 --- /dev/null +++ b/templates/access.html @@ -0,0 +1,11 @@ +{% extends "base.html" %} + +{% block content %} +
    + + {{ filename }} is protected with password
    + + + +
    +{% endblock %} diff --git a/templates/index.html b/templates/index.html index 2843109..30b281b 100644 --- a/templates/index.html +++ b/templates/index.html @@ -27,6 +27,7 @@
    +
    diff --git a/upload.go b/upload.go index 6533bfe..254e0eb 100644 --- a/upload.go +++ b/upload.go @@ -40,6 +40,7 @@ type UploadRequest struct { expiry time.Duration // Seconds until expiry, 0 = never deleteKey string // Empty string if not defined randomBarename bool + accessKey string // Empty string if not defined } // Metadata associated with a file as it would actually be stored @@ -88,6 +89,7 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { } upReq.expiry = parseExpiry(r.PostFormValue("expires")) + upReq.accessKey = r.PostFormValue(accessKeyParamName) if r.PostFormValue("randomize") == "true" { upReq.randomBarename = true @@ -181,6 +183,7 @@ func uploadRemote(c web.C, w http.ResponseWriter, r *http.Request) { upReq.filename = filepath.Base(grabUrl.Path) upReq.src = http.MaxBytesReader(w, resp.Body, Config.maxSize) upReq.deleteKey = r.FormValue("deletekey") + upReq.accessKey = r.FormValue(accessKeyParamName) upReq.randomBarename = r.FormValue("randomize") == "yes" upReq.expiry = parseExpiry(r.FormValue("expiry")) @@ -211,6 +214,7 @@ func uploadHeaderProcess(r *http.Request, upReq *UploadRequest) { } upReq.deleteKey = r.Header.Get("Linx-Delete-Key") + upReq.accessKey = r.Header.Get(accessKeyHeaderName) // Get seconds until expiry. Non-integer responses never expire. expStr := r.Header.Get("Linx-Expiry") @@ -310,7 +314,7 @@ func processUpload(upReq UploadRequest) (upload Upload, err error) { upReq.deleteKey = uniuri.NewLen(30) } - upload.Metadata, err = storageBackend.Put(upload.Filename, io.MultiReader(bytes.NewReader(header), upReq.src), fileExpiry, upReq.deleteKey) + upload.Metadata, err = storageBackend.Put(upload.Filename, io.MultiReader(bytes.NewReader(header), upReq.src), fileExpiry, upReq.deleteKey, upReq.accessKey) if err != nil { return upload, err } @@ -328,6 +332,7 @@ func generateJSONresponse(upload Upload, r *http.Request) []byte { "direct_url": getSiteURL(r) + Config.selifPath + upload.Filename, "filename": upload.Filename, "delete_key": upload.Metadata.DeleteKey, + "access_key": upload.Metadata.AccessKey, "expiry": strconv.FormatInt(upload.Metadata.Expiry.Unix(), 10), "size": strconv.FormatInt(upload.Metadata.Size, 10), "mimetype": upload.Metadata.Mimetype, From 4361c44128f3a2312df32c8d6b20a2f4c432ec79 Mon Sep 17 00:00:00 2001 From: Viktor Oreshkin Date: Sun, 1 Mar 2020 03:23:54 +0300 Subject: [PATCH 190/345] fix domain field in setAccessKeyCookies --- access.go | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/access.go b/access.go index bacea24..bf32013 100644 --- a/access.go +++ b/access.go @@ -3,7 +3,10 @@ package main import ( "encoding/json" "errors" + "log" "net/http" + "net/url" + "path" "regexp" "strings" "time" @@ -70,19 +73,25 @@ func checkAccessKey(r *http.Request, metadata *backends.Metadata) (accessKeySour return accessKeySourceNone, errInvalidAccessKey } -func setAccessKeyCookies(w http.ResponseWriter, domain, fileName, value string, expires time.Time) { +func setAccessKeyCookies(w http.ResponseWriter, siteURL, fileName, value string, expires time.Time) { + u, err := url.Parse(siteURL) + if err != nil { + log.Printf("cant parse siteURL (%v): %v", siteURL, err) + return + } + cookie := http.Cookie{ Name: accessKeyHeaderName, Value: value, HttpOnly: true, - Domain: domain, + Domain: u.Hostname(), Expires: expires, } - cookie.Path = Config.sitePath + fileName + cookie.Path = path.Join(u.Path, fileName) http.SetCookie(w, &cookie) - cookie.Path = Config.sitePath + Config.selifPath + fileName + cookie.Path = path.Join(u.Path, Config.selifPath, fileName) http.SetCookie(w, &cookie) } From 5a6e589500f5232e9c1b91fc57576e65adc70e05 Mon Sep 17 00:00:00 2001 From: Viktor Oreshkin Date: Sun, 1 Mar 2020 03:43:53 +0300 Subject: [PATCH 191/345] redesign access key input box in uploader --- static/css/linx.css | 18 ++++++++++++++++++ templates/index.html | 7 ++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/static/css/linx.css b/static/css/linx.css index 646c83b..4d7bc7c 100644 --- a/static/css/linx.css +++ b/static/css/linx.css @@ -264,6 +264,24 @@ body { margin: 0; } +#access_key_checkbox { + margin: 0; +} + +#access_key_checkbox:checked ~ #access_key { + display: inline-block; +} +#access_key_checkbox:checked ~ #access_key_label { + display: none; +} + +#access_key { + line-height: 1em; + padding: 1px; + border: 3px; + display: none; +} + .oopscontent { width: 400px; } diff --git a/templates/index.html b/templates/index.html index 30b281b..616e1a6 100644 --- a/templates/index.html +++ b/templates/index.html @@ -27,7 +27,12 @@
    - + +
    + + + +
    From 3947197225ac6b6f15d0b4c70b2da862f3a49593 Mon Sep 17 00:00:00 2001 From: Viktor Oreshkin Date: Sun, 1 Mar 2020 03:47:28 +0300 Subject: [PATCH 192/345] wrap access.html in white container --- templates/access.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/access.html b/templates/access.html index be3ada9..4fd65cc 100644 --- a/templates/access.html +++ b/templates/access.html @@ -1,10 +1,10 @@ {% extends "base.html" %} {% block content %} -
    +
    {{ filename }} is protected with password
    - +
    From 4baaa0a15f6044491ed9999e17273e923caea5a4 Mon Sep 17 00:00:00 2001 From: Viktor Oreshkin Date: Sun, 1 Mar 2020 03:56:43 +0300 Subject: [PATCH 193/345] add access_key to paste --- templates/paste.html | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/templates/paste.html b/templates/paste.html index 245b7a3..eead748 100644 --- a/templates/paste.html +++ b/templates/paste.html @@ -8,6 +8,10 @@ {% if not forcerandom %}{% endif %}.
    + + + +
    diff --git a/upload.go b/upload.go index 6533bfe..70ff08b 100644 --- a/upload.go +++ b/upload.go @@ -157,9 +157,20 @@ func uploadPutHandler(c web.C, w http.ResponseWriter, r *http.Request) { func uploadRemote(c web.C, w http.ResponseWriter, r *http.Request) { if Config.remoteAuthFile != "" { - result, err := checkAuth(remoteAuthKeys, r.FormValue("key")) + key := r.FormValue("key") + if key == "" && Config.basicAuth { + _, password, ok := r.BasicAuth() + if ok { + key = password + } + } + result, err := checkAuth(remoteAuthKeys, key) if err != nil || !result { - unauthorizedHandler(c, w, r) + if Config.basicAuth { + badAuthorizationHandler(w, r) + } else { + unauthorizedHandler(c, w, r) + } return } } From 779fc5c42592f8a9aff246a0c48f9c7fd677bdd9 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Fri, 6 Mar 2020 15:26:10 -0800 Subject: [PATCH 198/345] Readme: Clarify basic auth usage --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 144dd40..8564e01 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ allowhotlink = true #### Require API Keys for uploads - ```-authfile path/to/authfile``` -- (optionally) require authorization for upload/delete by providing a newline-separated file of scrypted auth keys - ```-remoteauthfile path/to/remoteauthfile``` -- (optionally) require authorization for remote uploads by providing a newline-separated file of scrypted auth keys -- ```-basicauth``` -- (optionally) allow basic authorization to upload or paste files from browser when `-authfile` is enabled +- ```-basicauth``` -- (optionally) allow basic authorization to upload or paste files from browser when `-authfile` is enabled. When uploading, you will be prompted to enter a user and password - leave the user blank and use your auth key as the password A helper utility ```linx-genkey``` is provided which hashes keys to the format required in the auth files. From e06e9ad6fe73cf8aa8c14cfb301fecaa6947e7cc Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Sat, 7 Mar 2020 17:52:07 -0800 Subject: [PATCH 199/345] Access key: Some cosmetic changes --- README.md | 2 +- static/css/linx.css | 19 +++++++++++++------ static/js/upload.js | 36 +++++++++++++++++++++--------------- templates/API.html | 2 +- templates/access.html | 5 +++-- templates/index.html | 28 +++++++++++++++++----------- 6 files changed, 56 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index 8564e01..84da53d 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ You can see what it looks like using the demo: [https://demo.linx-server.net/](h - Display syntax-highlighted code with in-place editing - Documented API with keys if need to restrict uploads (can use [linx-client](https://github.com/andreimarcu/linx-client) for uploading through command-line) - Torrent download of files using web seeding -- File expiry, deletion key, and random filename options +- File expiry, deletion key, file access key, and random filename options ### Screenshots diff --git a/static/css/linx.css b/static/css/linx.css index 4d7bc7c..edb88c4 100644 --- a/static/css/linx.css +++ b/static/css/linx.css @@ -264,21 +264,28 @@ body { margin: 0; } +#access_key { + min-width: 100%; + line-height: 1.3em; +} + +#access_key input, span { + vertical-align: middle; +} + #access_key_checkbox { margin: 0; } -#access_key_checkbox:checked ~ #access_key { +#access_key_checkbox:checked ~ #access_key_input { display: inline-block; } -#access_key_checkbox:checked ~ #access_key_label { +#access_key_checkbox:checked ~ #access_key_text { display: none; } -#access_key { - line-height: 1em; - padding: 1px; - border: 3px; +#access_key_input { + padding: 0; display: none; } diff --git a/static/js/upload.js b/static/js/upload.js index fce6e77..c5ac28a 100644 --- a/static/js/upload.js +++ b/static/js/upload.js @@ -1,15 +1,15 @@ // @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later Dropzone.options.dropzone = { - init: function() { + init: function () { var dzone = document.getElementById("dzone"); dzone.style.display = "block"; }, - addedfile: function(file) { + addedfile: function (file) { if (!this.options.autoProcessQueue) { var dropzone = this; var xhr = new XMLHttpRequest(); - xhr.onload = function() { + xhr.onload = function () { if (xhr.readyState !== XMLHttpRequest.DONE) { return; } @@ -39,7 +39,7 @@ Dropzone.options.dropzone = { var cancelAction = document.createElement("span"); cancelAction.className = "cancel"; cancelAction.innerHTML = "Cancel"; - cancelAction.addEventListener('click', function(ev) { + cancelAction.addEventListener('click', function (ev) { this.removeFile(file); }.bind(this)); file.cancelActionElement = cancelAction; @@ -53,19 +53,19 @@ Dropzone.options.dropzone = { document.getElementById("uploads").appendChild(upload); }, - uploadprogress: function(file, p, bytesSent) { + uploadprogress: function (file, p, bytesSent) { p = parseInt(p); file.progressElement.innerHTML = p + "%"; file.uploadElement.setAttribute("style", 'background-image: -webkit-linear-gradient(left, #F2F4F7 ' + p + '%, #E2E2E2 ' + p + '%); background-image: -moz-linear-gradient(left, #F2F4F7 ' + p + '%, #E2E2E2 ' + p + '%); background-image: -ms-linear-gradient(left, #F2F4F7 ' + p + '%, #E2E2E2 ' + p + '%); background-image: -o-linear-gradient(left, #F2F4F7 ' + p + '%, #E2E2E2 ' + p + '%); background-image: linear-gradient(left, #F2F4F7 ' + p + '%, #E2E2E2 ' + p + '%)'); }, - sending: function(file, xhr, formData) { + sending: function (file, xhr, formData) { var randomize = document.getElementById("randomize"); - if(randomize != null) { + if (randomize != null) { formData.append("randomize", randomize.checked); } formData.append("expires", document.getElementById("expires").value); }, - success: function(file, resp) { + success: function (file, resp) { file.fileActions.removeChild(file.progressElement); var fileLabelLink = document.createElement("a"); @@ -79,11 +79,11 @@ Dropzone.options.dropzone = { var deleteAction = document.createElement("span"); deleteAction.innerHTML = "Delete"; deleteAction.className = "cancel"; - deleteAction.addEventListener('click', function(ev) { + deleteAction.addEventListener('click', function (ev) { xhr = new XMLHttpRequest(); xhr.open("DELETE", resp.url, true); xhr.setRequestHeader("Linx-Delete-Key", resp.delete_key); - xhr.onreadystatechange = function(file) { + xhr.onreadystatechange = function (file) { if (xhr.readyState == 4 && xhr.status === 200) { var text = document.createTextNode("Deleted "); file.fileLabel.insertBefore(text, file.fileLabelLink); @@ -97,15 +97,15 @@ Dropzone.options.dropzone = { file.cancelActionElement = deleteAction; file.fileActions.appendChild(deleteAction); }, - canceled: function(file) { + canceled: function (file) { this.options.error(file); }, - error: function(file, resp, xhrO) { + error: function (file, resp, xhrO) { file.fileActions.removeChild(file.cancelActionElement); file.fileActions.removeChild(file.progressElement); if (file.status === "canceled") { - file.fileLabel.innerHTML = file.name + ": Canceled "; + file.fileLabel.innerHTML = file.name + ": Canceled "; } else { if (resp.error) { @@ -125,12 +125,12 @@ Dropzone.options.dropzone = { maxFilesize: Math.round(parseInt(document.getElementById("dropzone").getAttribute("data-maxsize"), 10) / 1024 / 1024), previewsContainer: "#uploads", parallelUploads: 5, - headers: {"Accept": "application/json"}, + headers: { "Accept": "application/json" }, dictDefaultMessage: "Click or Drop file(s) or Paste image", dictFallbackMessage: "" }; -document.onpaste = function(event) { +document.onpaste = function (event) { var items = (event.clipboardData || event.originalEvent.clipboardData).items; for (index in items) { var item = items[index]; @@ -140,4 +140,10 @@ document.onpaste = function(event) { } }; +document.getElementById("access_key_checkbox").onchange = function (event) { + if (event.target.checked == false) { + document.getElementById("access_key_input").value = ""; + } +}; + // @end-license diff --git a/templates/API.html b/templates/API.html index 0a395f2..11d9ab1 100644 --- a/templates/API.html +++ b/templates/API.html @@ -49,7 +49,7 @@ “direct_url”: the url to access the file directly
    “filename”: the (optionally generated) filename
    “delete_key”: the (optionally generated) deletion key,
    - “access_key”: the (optionally generated) access key,
    + “access_key”: the (optionally supplied) access key,
    “expiry”: the unix timestamp at which the file will expire (0 if never)
    “size”: the size in bytes of the file
    “mimetype”: the guessed mimetype of the file
    diff --git a/templates/access.html b/templates/access.html index 4fd65cc..c61cf51 100644 --- a/templates/access.html +++ b/templates/access.html @@ -1,11 +1,12 @@ {% extends "base.html" %} {% block content %} -
    +
    - {{ filename }} is protected with password
    + {{ filename }} is protected with a password:

    +

    {% endblock %} diff --git a/templates/index.html b/templates/index.html index 132a488..9e73457 100644 --- a/templates/index.html +++ b/templates/index.html @@ -17,21 +17,27 @@
    - + + + +
    - -
    - - - +
    + + +
    From 7ca33310447b7cb176f707c217c33fbc23cebb47 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Sat, 7 Mar 2020 18:52:29 -0800 Subject: [PATCH 200/345] Access Key: Fix mobile access --- static/css/linx.css | 7 ------- static/js/upload.js | 7 ++++++- templates/index.html | 23 ++++++++++++++--------- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/static/css/linx.css b/static/css/linx.css index edb88c4..e47f48f 100644 --- a/static/css/linx.css +++ b/static/css/linx.css @@ -277,13 +277,6 @@ body { margin: 0; } -#access_key_checkbox:checked ~ #access_key_input { - display: inline-block; -} -#access_key_checkbox:checked ~ #access_key_text { - display: none; -} - #access_key_input { padding: 0; display: none; diff --git a/static/js/upload.js b/static/js/upload.js index c5ac28a..db2010c 100644 --- a/static/js/upload.js +++ b/static/js/upload.js @@ -141,8 +141,13 @@ document.onpaste = function (event) { }; document.getElementById("access_key_checkbox").onchange = function (event) { - if (event.target.checked == false) { + if (event.target.checked) { + document.getElementById("access_key_input").style.display = "inline-block"; + document.getElementById("access_key_text").style.display = "none"; + } else { document.getElementById("access_key_input").value = ""; + document.getElementById("access_key_input").style.display = "none"; + document.getElementById("access_key_text").style.display = "inline-block"; } }; diff --git a/templates/index.html b/templates/index.html index 9e73457..34e5d86 100644 --- a/templates/index.html +++ b/templates/index.html @@ -4,9 +4,10 @@ {% endblock %} -{% block content %} +{% block content %}
    -
    +

    @@ -17,26 +18,30 @@
    - - + +
    - + +
    @@ -48,4 +53,4 @@ -{% endblock %} +{% endblock %} \ No newline at end of file From 773eb877bd02a6678599737e10c826775ecba128 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Tue, 10 Mar 2020 22:45:24 -0700 Subject: [PATCH 201/345] Basic auth: Fix #201 - broken uploads --- auth.go | 2 +- server.go | 6 ++---- static/js/upload.js | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/auth.go b/auth.go index 463dddb..3dc5ba6 100644 --- a/auth.go +++ b/auth.go @@ -115,7 +115,7 @@ func badAuthorizationHandler(w http.ResponseWriter, r *http.Request) { if Config.siteName != "" { rs = fmt.Sprintf(` realm="%s"`, Config.siteName) } - w.Header().Set("WWW-Authenticate", `Basic` + rs) + w.Header().Set("WWW-Authenticate", `Basic`+rs) } http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized) } diff --git a/server.go b/server.go index 907b719..661c2ea 100644 --- a/server.go +++ b/server.go @@ -196,20 +196,18 @@ func setup() *web.Mux { AuthFile: Config.authFile, UnauthMethods: []string{}, } - okFunc := func (w http.ResponseWriter, r *http.Request) { + okFunc := func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Location", Config.sitePath) w.WriteHeader(http.StatusFound) } - authHandler := auth { + authHandler := auth{ successHandler: http.HandlerFunc(okFunc), failureHandler: http.HandlerFunc(badAuthorizationHandler), authKeys: readAuthKeys(Config.authFile), o: options, } mux.Head(Config.sitePath+"auth", authHandler) - mux.Head(Config.sitePath+"auth/", authHandler) mux.Get(Config.sitePath+"auth", authHandler) - mux.Get(Config.sitePath+"auth/", authHandler) } mux.Post(Config.sitePath+"upload", uploadPostHandler) diff --git a/static/js/upload.js b/static/js/upload.js index db2010c..7ad8da6 100644 --- a/static/js/upload.js +++ b/static/js/upload.js @@ -20,7 +20,7 @@ Dropzone.options.dropzone = { dropzone.cancelUpload(file) } }; - xhr.open("HEAD", "auth/", true); + xhr.open("HEAD", "/auth", true); xhr.send() } var upload = document.createElement("div"); From 9a8bb1bb7fbe2ec845a4ba9802cead802b2d824d Mon Sep 17 00:00:00 2001 From: Thor77 Date: Sun, 8 Mar 2020 15:17:37 +0100 Subject: [PATCH 202/345] Add support for go modules --- go.mod | 19 +++++++++++++++ go.sum | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 go.mod create mode 100644 go.sum diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..0c3a2b7 --- /dev/null +++ b/go.mod @@ -0,0 +1,19 @@ +module github.com/andreimarcu/linx-server + +go 1.13 + +require ( + github.com/GeertJohan/go.rice v1.0.0 + github.com/aws/aws-sdk-go v1.29.19 + github.com/dchest/uniuri v0.0.0-20200228104902-7aecb25e1fe5 + github.com/dustin/go-humanize v1.0.0 + github.com/flosch/pongo2 v0.0.0-20190707114632-bbf5a6c351f4 + github.com/microcosm-cc/bluemonday v1.0.2 + github.com/minio/sha256-simd v0.1.1 + github.com/russross/blackfriday v1.5.1 + github.com/vharitonsky/iniflags v0.0.0-20180513140207-a33cd0b5f3de + github.com/zeebo/bencode v1.0.0 + github.com/zenazn/goji v0.9.0 + golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073 + gopkg.in/h2non/filetype.v1 v1.0.5 +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..15a736c --- /dev/null +++ b/go.sum @@ -0,0 +1,76 @@ +github.com/GeertJohan/go.incremental v1.0.0/go.mod h1:6fAjUhbVuX1KcMD3c8TEgVUqmo4seqhv0i0kdATSkM0= +github.com/GeertJohan/go.rice v1.0.0 h1:KkI6O9uMaQU3VEKaj01ulavtF7o1fWT7+pk/4voiMLQ= +github.com/GeertJohan/go.rice v1.0.0/go.mod h1:eH6gbSOAUv07dQuZVnBmoDP8mgsM1rtixis4Tib9if0= +github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= +github.com/aws/aws-sdk-go v1.29.19 h1:+jifYixffn6kzWygtGWFWQMv0tDGyISZHNwugF9V2sE= +github.com/aws/aws-sdk-go v1.29.19/go.mod h1:1KvfttTE3SPKMpo8g2c6jL3ZKfXtFvKscTgahTma5Xg= +github.com/daaku/go.zipexe v1.0.0 h1:VSOgZtH418pH9L16hC/JrgSNJbbAL26pj7lmD1+CGdY= +github.com/daaku/go.zipexe v1.0.0/go.mod h1:z8IiR6TsVLEYKwXAoE/I+8ys/sDkgTzSL0CLnGVd57E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dchest/uniuri v0.0.0-20200228104902-7aecb25e1fe5 h1:RAV05c0xOkJ3dZGS0JFybxFKZ2WMLabgx3uXnd7rpGs= +github.com/dchest/uniuri v0.0.0-20200228104902-7aecb25e1fe5/go.mod h1:GgB8SF9nRG+GqaDtLcwJZsQFhcogVCJ79j4EdT0c2V4= +github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/flosch/pongo2 v0.0.0-20190707114632-bbf5a6c351f4 h1:GY1+t5Dr9OKADM64SYnQjw/w99HMYvQ0A8/JoUkxVmc= +github.com/flosch/pongo2 v0.0.0-20190707114632-bbf5a6c351f4/go.mod h1:T9YF2M40nIgbVgp3rreNmTged+9HrbNTIQf1PsaIiTA= +github.com/go-check/check v0.0.0-20180628173108-788fd7840127 h1:0gkP6mzaMqkmpcJYCFOLkIBwI7xFExG03bbkOkCvUPI= +github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5 h1:rhqTjzJlm7EbkELJDKMTU7udov+Se0xZkWmugr6zGok= +github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q= +github.com/juju/loggo v0.0.0-20180524022052-584905176618 h1:MK144iBQF9hTSwBW/9eJm034bVoG30IshVm688T2hi8= +github.com/juju/loggo v0.0.0-20180524022052-584905176618/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U= +github.com/juju/testing v0.0.0-20180920084828-472a3e8b2073 h1:WQM1NildKThwdP7qWrNAFGzp4ijNLw8RlgENkaI4MJs= +github.com/juju/testing v0.0.0-20180920084828-472a3e8b2073/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= +github.com/microcosm-cc/bluemonday v1.0.2 h1:5lPfLTTAvAbtS0VqT+94yOtFnGfUWYyx0+iToC3Os3s= +github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= +github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= +github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= +github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229/go.mod h1:0aYXnNPJ8l7uZxf45rWW1a/uME32OF0rhiYGNQ2oF2E= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/russross/blackfriday v1.5.1 h1:B8ZN6pD4PVofmlDCDUdELeYrbsVIDM/bpjW3v3zgcRc= +github.com/russross/blackfriday v1.5.1/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= +github.com/vharitonsky/iniflags v0.0.0-20180513140207-a33cd0b5f3de h1:fkw+7JkxF3U1GzQoX9h69Wvtvxajo5Rbzy6+YMMzPIg= +github.com/vharitonsky/iniflags v0.0.0-20180513140207-a33cd0b5f3de/go.mod h1:irMhzlTz8+fVFj6CH2AN2i+WI5S6wWFtK3MBCIxIpyI= +github.com/zeebo/bencode v1.0.0 h1:zgop0Wu1nu4IexAZeCZ5qbsjU4O1vMrfCrVgUjbHVuA= +github.com/zeebo/bencode v1.0.0/go.mod h1:Ct7CkrWIQuLWAy9M3atFHYq4kG9Ao/SsY5cdtCXmp9Y= +github.com/zenazn/goji v0.9.0 h1:RSQQAbXGArQ0dIDEq+PI6WqN6if+5KHu6x2Cx/GXLTQ= +github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073 h1:xMPOj6Pz6UipU1wXLkrtqpHbR0AVFnyPEQq/wRWz9lM= +golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/h2non/filetype.v1 v1.0.5 h1:CC1jjJjoEhNVbMhXYalmGBhOBK2V70Q1N850wt/98/Y= +gopkg.in/h2non/filetype.v1 v1.0.5/go.mod h1:M0yem4rwSX5lLVrkEuRRp2/NinFMD5vgJ4DlAhZcfNo= +gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce h1:xcEWjVhvbDy+nHP67nPDDpbYrY+ILlfndk4bRioVHaU= +gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= +gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= From 68a80d36983c265fba45a83b463b6603889abd72 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Wed, 11 Mar 2020 02:00:37 -0700 Subject: [PATCH 203/345] Go mod: update to 1.14 --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 0c3a2b7..50a48ab 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/andreimarcu/linx-server -go 1.13 +go 1.14 require ( github.com/GeertJohan/go.rice v1.0.0 From a4c0e0ac37da12a29d322a5c53a581e6bb3dd7a8 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Wed, 11 Mar 2020 02:01:38 -0700 Subject: [PATCH 204/345] .gitignore: Add ignore entries --- .gitignore | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 37e1e54..25b0cd6 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,8 @@ _cgo_defun.c _cgo_gotypes.go _cgo_export.* +.DS_Store + _testmain.go *.exe @@ -27,7 +29,9 @@ _testmain.go *.prof linx-server +linx-cleanup +linx-genkey files/ meta/ binaries/ -linx-cleanup +authfile From 9f6346a373dba25c4570f8e7dcb8f79f11ac964e Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Thu, 12 Mar 2020 01:20:56 -0700 Subject: [PATCH 205/345] Basic auth: fix for using different paths --- static/js/upload.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/static/js/upload.js b/static/js/upload.js index 7ad8da6..c39edc7 100644 --- a/static/js/upload.js +++ b/static/js/upload.js @@ -20,7 +20,7 @@ Dropzone.options.dropzone = { dropzone.cancelUpload(file) } }; - xhr.open("HEAD", "/auth", true); + xhr.open("HEAD", "auth", true); xhr.send() } var upload = document.createElement("div"); From fb0d44f132d64a7cc68fda0fd9020a4e3e4348f7 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Thu, 12 Mar 2020 13:32:35 -0700 Subject: [PATCH 206/345] Custom pages: Implement adding custom markdown pages to the site navigation --- .gitignore | 1 + README.md | 1 + custom_pages.go | 40 ++++++++++++++++++ pages.go | 15 +++++++ server.go | 13 ++++++ static/images/404.jpg | Bin 18323 -> 19742 bytes templates.go | 3 ++ templates/404.html | 4 +- templates/API.html | 82 ++++++++++++++++++++---------------- templates/access.html | 4 +- templates/base.html | 13 ++++-- templates/custom_page.html | 19 +++++++++ templates/display/base.html | 50 +++++++++++----------- templates/paste.html | 53 +++++++++++++---------- 14 files changed, 207 insertions(+), 91 deletions(-) create mode 100644 custom_pages.go create mode 100644 templates/custom_page.html diff --git a/.gitignore b/.gitignore index 25b0cd6..c6750eb 100644 --- a/.gitignore +++ b/.gitignore @@ -34,4 +34,5 @@ linx-genkey files/ meta/ binaries/ +custom_pages/ authfile diff --git a/README.md b/README.md index 84da53d..98bf585 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,7 @@ allowhotlink = true - ```-remoteuploads``` -- (optionally) enable remote uploads (/upload?url=https://...) - ```-nologs``` -- (optionally) disable request logs in stdout - ```-force-random-filename``` -- (optionally) force the use of random filenames +- ```-custompagespath "custom_pages"``` -- (optionally) specify path to directory containing markdown pages (must end in .md) that will be added to the site navigation (this can be useful for providing contact/support information and so on). For example, custom_pages/My_Page.md will become My Page in the site navigation #### Require API Keys for uploads - ```-authfile path/to/authfile``` -- (optionally) require authorization for upload/delete by providing a newline-separated file of scrypted auth keys diff --git a/custom_pages.go b/custom_pages.go new file mode 100644 index 0000000..105a04a --- /dev/null +++ b/custom_pages.go @@ -0,0 +1,40 @@ +package main + +import ( + "io/ioutil" + "log" + "path" + "strings" + + "github.com/microcosm-cc/bluemonday" + "github.com/russross/blackfriday" +) + +func initializeCustomPages(customPagesDir string) { + files, err := ioutil.ReadDir(customPagesDir) + if err != nil { + log.Fatal("Error reading the custom pages directory: ", err) + } + + for _, file := range files { + fileName := file.Name() + + if len(fileName) <= 3 { + continue + } + + if strings.EqualFold(string(fileName[len(fileName)-3:len(fileName)]), ".md") { + contents, err := ioutil.ReadFile(path.Join(customPagesDir, fileName)) + if err != nil { + log.Fatalf("Error reading file %s", fileName) + } + + unsafe := blackfriday.MarkdownCommon(contents) + html := bluemonday.UGCPolicy().SanitizeBytes(unsafe) + + fileName := fileName[0 : len(fileName)-3] + customPages[fileName] = string(html) + customPagesNames[fileName] = strings.ReplaceAll(fileName, "_", " ") + } + } +} diff --git a/pages.go b/pages.go index 6fcc934..ae8de42 100644 --- a/pages.go +++ b/pages.go @@ -50,6 +50,21 @@ func apiDocHandler(c web.C, w http.ResponseWriter, r *http.Request) { } } +func makeCustomPageHandler(fileName string) func(c web.C, w http.ResponseWriter, r *http.Request) { + return func(c web.C, w http.ResponseWriter, r *http.Request) { + err := renderTemplate(Templates["custom_page.html"], pongo2.Context{ + "siteurl": getSiteURL(r), + "forcerandom": Config.forceRandomFilename, + "contents": customPages[fileName], + "filename": fileName, + "pagename": customPagesNames[fileName], + }, r, w) + if err != nil { + oopsHandler(c, w, r, RespHTML, "") + } + } +} + func notFoundHandler(c web.C, w http.ResponseWriter, r *http.Request) { w.WriteHeader(404) err := renderTemplate(Templates["404.html"], pongo2.Context{}, r, w) diff --git a/server.go b/server.go index 661c2ea..e1f0c0a 100644 --- a/server.go +++ b/server.go @@ -70,6 +70,7 @@ var Config struct { s3ForcePathStyle bool forceRandomFilename bool accessKeyCookieExpiry uint64 + customPagesDir string } var Templates = make(map[string]*pongo2.Template) @@ -80,6 +81,8 @@ var timeStartedStr string var remoteAuthKeys []string var metaStorageBackend backends.MetaStorageBackend var storageBackend backends.StorageBackend +var customPages = make(map[string]string) +var customPagesNames = make(map[string]string) func setup() *web.Mux { mux := web.New() @@ -227,6 +230,14 @@ func setup() *web.Mux { mux.Get(selifIndexRe, unauthorizedHandler) mux.Get(torrentRe, fileTorrentHandler) + if Config.customPagesDir != "" { + initializeCustomPages(Config.customPagesDir) + for fileName := range customPagesNames { + mux.Get(Config.sitePath+fileName, makeCustomPageHandler(fileName)) + mux.Get(Config.sitePath+fileName+"/", makeCustomPageHandler(fileName)) + } + } + mux.NotFound(notFoundHandler) return mux @@ -298,6 +309,8 @@ func main() { flag.BoolVar(&Config.forceRandomFilename, "force-random-filename", false, "Force all uploads to use a random filename") flag.Uint64Var(&Config.accessKeyCookieExpiry, "access-cookie-expiry", 0, "Expiration time for access key cookies in seconds (set 0 to use session cookies)") + flag.StringVar(&Config.customPagesDir, "custompagespath", "", + "path to directory containing .md files to render as custom pages") iniflags.Parse() diff --git a/static/images/404.jpg b/static/images/404.jpg index 16ed400d7844ca4485db66802be08e112162f184..57bf16f0bb2a590f15c9c77c7baf5c660b0b2e0e 100644 GIT binary patch literal 19742 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 literal 18323 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 diff --git a/templates.go b/templates.go index ccd90c7..7d38b51 100644 --- a/templates.go +++ b/templates.go @@ -52,6 +52,7 @@ func populateTemplatesMap(tSet *pongo2.TemplateSet, tMap map[string]*pongo2.Temp "404.html", "oops.html", "access.html", + "custom_page.html", "display/audio.html", "display/image.html", @@ -85,6 +86,8 @@ func renderTemplate(tpl *pongo2.Template, context pongo2.Context, r *http.Reques context["sitepath"] = Config.sitePath context["selifpath"] = Config.selifPath + context["custom_pages_names"] = customPagesNames + var a string if Config.authFile == "" { a = "none" diff --git a/templates/404.html b/templates/404.html index 3b3d64e..bfdf439 100644 --- a/templates/404.html +++ b/templates/404.html @@ -1,7 +1,9 @@ {% extends "base.html" %} +{% block title %}{{sitename}} - 404 Not Found{% endblock %} + {% block content %}

    -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/templates/API.html b/templates/API.html index 11d9ab1..d58e398 100644 --- a/templates/API.html +++ b/templates/API.html @@ -1,59 +1,64 @@ {% extends "base.html" %} +{% block title %}{{sitename}} - API{% endblock %} + {% block head %} {% endblock %} {% block content %}
    -
    +

    API

    Client

    -

    To simplify uploading and deleting files, you can use linx-client, which uses this API.

    +

    To simplify uploading and deleting files, you can use linx-client, which uses this API.

    {% if auth != "none" %}

    Keys

    -

    This instance uses API Keys, therefore you will need to provide a key for uploading and deleting files.
    To do so, add the Linx-Api-Key header with your key.

    +

    This instance uses API Keys, therefore you will need to provide a key for uploading and deleting + files.
    To do so, add the Linx-Api-Key header with your key.

    {% endif %}

    Uploading a file

    -

    To upload a file, make a PUT request to {{ siteurl }}upload/ and you will get the url of your upload back.

    +

    To upload a file, make a PUT request to {{ siteurl }}upload/ and you will get the url of + your upload back.

    Optional headers with the request

    -{% if not forcerandom %} -

    Randomize the filename
    - Linx-Randomize: yes

    -{% endif %} + {% if not forcerandom %} +

    Randomize the filename
    + Linx-Randomize: yes

    + {% endif %} -

    Specify a custom deletion key
    - Linx-Delete-Key: mysecret

    +

    Specify a custom deletion key
    + Linx-Delete-Key: mysecret

    -

    Protect file with password
    - Linx-Access-Key: mysecret

    +

    Protect file with password
    + Linx-Access-Key: mysecret

    -

    Specify an expiration time (in seconds)
    - Linx-Expiry: 60

    +

    Specify an expiration time (in seconds)
    + Linx-Expiry: 60

    -

    Get a json response
    - Accept: application/json

    +

    Get a json response
    + Accept: application/json

    The json response will then contain:

    -

    “url”: the publicly available upload url
    - “direct_url”: the url to access the file directly
    - “filename”: the (optionally generated) filename
    - “delete_key”: the (optionally generated) deletion key,
    - “access_key”: the (optionally supplied) access key,
    - “expiry”: the unix timestamp at which the file will expire (0 if never)
    - “size”: the size in bytes of the file
    - “mimetype”: the guessed mimetype of the file
    - “sha256sum”: the sha256sum of the file,

    +

    “url”: the publicly available upload url
    + “direct_url”: the url to access the file directly
    + “filename”: the (optionally generated) filename
    + “delete_key”: the (optionally generated) deletion key,
    + “access_key”: the (optionally supplied) access key,
    + “expiry”: the unix timestamp at which the file will expire (0 if never)
    + “size”: the size in bytes of the file
    + “mimetype”: the guessed mimetype of the file
    + “sha256sum”: the sha256sum of the file,

    Examples

    @@ -92,7 +97,8 @@

    Overwriting a file

    -

    To overwrite a file you uploaded, simply provide the Linx-Delete-Key header with the original file's deletion key.

    +

    To overwrite a file you uploaded, simply provide the Linx-Delete-Key header with the + original file's deletion key.

    Example

    @@ -108,7 +114,8 @@

    Deleting a file

    -

    To delete a file you uploaded, make a DELETE request to {{ siteurl }}yourfile.ext with the delete key set as the Linx-Delete-Key header.

    +

    To delete a file you uploaded, make a DELETE request to {{ siteurl }}yourfile.ext with the + delete key set as the Linx-Delete-Key header.

    Example

    @@ -124,16 +131,17 @@ DELETED

    Information about a file

    -

    To retrieve information about a file, make a GET request the public url with Accept: application/json headers and you will receive a json response containing:

    +

    To retrieve information about a file, make a GET request the public url with + Accept: application/json headers and you will receive a json response containing:

    -

    “url”: the publicly available upload url
    - “direct_url”: the url to access the file directly
    - “filename”: the (optionally generated) filename
    - “expiry”: the unix timestamp at which the file will expire (0 if never)
    - “size”: the size in bytes of the file
    - “mimetype”: the guessed mimetype of the file
    - “sha256sum”: the sha256sum of the file,

    +

    “url”: the publicly available upload url
    + “direct_url”: the url to access the file directly
    + “filename”: the (optionally generated) filename
    + “expiry”: the unix timestamp at which the file will expire (0 if never)
    + “size”: the size in bytes of the file
    + “mimetype”: the guessed mimetype of the file
    + “sha256sum”: the sha256sum of the file,

    Example

    @@ -141,6 +149,6 @@ DELETED
    $ curl -H "Accept: application/json" {{ siteurl }}myphoto.jpg
     {"expiry":"0","filename":"myphoto.jpg","mimetype":"image/jpeg","sha256sum":"...","size":"..."}
    -
    +
    -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/templates/access.html b/templates/access.html index c61cf51..908ed06 100644 --- a/templates/access.html +++ b/templates/access.html @@ -1,5 +1,7 @@ {% extends "base.html" %} +{% block title %}{{sitename}} - Password protected file{% endblock %} + {% block content %}
    @@ -9,4 +11,4 @@

    -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/templates/base.html b/templates/base.html index cda6746..86c5a29 100644 --- a/templates/base.html +++ b/templates/base.html @@ -1,5 +1,6 @@ + {% block title %}{{ sitename }}{% endblock %} @@ -16,12 +17,15 @@ {% block content %}{% endblock %} @@ -33,4 +37,5 @@
    - + + \ No newline at end of file diff --git a/templates/custom_page.html b/templates/custom_page.html new file mode 100644 index 0000000..ac00341 --- /dev/null +++ b/templates/custom_page.html @@ -0,0 +1,19 @@ +{% extends "base.html" %} + +{% block title %}{{sitename}} - {{ pagename }}{% endblock %} + +{% block head %} + +{% endblock %} + +{% block content %} +
    +
    +
    +

    {{ pagename }}

    + + {{ contents|safe }} +
    +
    +
    +{% endblock %} \ No newline at end of file diff --git a/templates/display/base.html b/templates/display/base.html index 935979f..d60f4d8 100644 --- a/templates/display/base.html +++ b/templates/display/base.html @@ -1,36 +1,36 @@ {% extends "../base.html" %} -{% block title %}{{ filename }}{% endblock %} +{% block title %}{{sitename}} - {{ filename }}{% endblock %} {% block bodymore %}{% endblock %} {% block content %} -
    -
    - {{ filename }} -
    - -
    - {% if expiry %} - file expires in {{ expiry }} | - {% endif %} - {% block infomore %}{% endblock %} - {{ size }} | - torrent | - get -
    - - {% block infoleft %}{% endblock %} +
    +
    + {{ filename }}
    -
    - -
    - {% block main %}{% endblock %} -
    - +
    + {% if expiry %} + file expires in {{ expiry }} | + {% endif %} + {% block infomore %}{% endblock %} + {{ size }} | + torrent | + get
    - -{% endblock %} + {% block infoleft %}{% endblock %} +
    + +
    + +
    + {% block main %}{% endblock %} +
    + +
    + + +{% endblock %} \ No newline at end of file diff --git a/templates/paste.html b/templates/paste.html index eead748..84335d1 100644 --- a/templates/paste.html +++ b/templates/paste.html @@ -1,33 +1,40 @@ {% extends "base.html" %} +{% block title %}{{sitename}} - Paste{% endblock %} + {% block content %} -
    -
    -
    -
    - {% if not forcerandom %}{% endif %}. -
    -
    - - - - - - -
    + +
    +
    +
    + {% if not forcerandom %}{% endif %}.
    +
    + + + -
    - + +
    - + +
    + +
    +
    + -{% endblock %} +{% endblock %} \ No newline at end of file From c61db30f9fa3f9bb6affe2703ba715e33b3a29c5 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Thu, 12 Mar 2020 13:44:28 -0700 Subject: [PATCH 207/345] Tests: Fix image torrent test --- torrent_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/torrent_test.go b/torrent_test.go index 1d227fd..f14c613 100644 --- a/torrent_test.go +++ b/torrent_test.go @@ -68,7 +68,7 @@ func TestCreateTorrentWithImage(t *testing.T) { bencode.DecodeBytes(encoded, &decoded) - if decoded.Info.Pieces != "r\x01\x80j\x99\x84\n\xd3dZ;1NX\xec;\x9d$+f" { + if decoded.Info.Pieces != "\xd6\xff\xbf'^)\x85?\xb4.\xb0\xc1|\xa3\x83\xeeX\xf9\xfd\xd7" { t.Fatal("Torrent pieces did not match expected pieces for image") } } From a0c508c422b407bdf64167e93a4e0688a793d343 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Thu, 12 Mar 2020 13:47:57 -0700 Subject: [PATCH 208/345] Travis: Update to 1.14 --- .travis.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7baaebc..46278b8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,7 @@ language: go go: - - "1.10" - - "1.11" + - "1.14" before_script: - go vet ./... From 7543c82473b43760a3dca7a7dee81679462e96cc Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Thu, 12 Mar 2020 14:18:12 -0700 Subject: [PATCH 209/345] Remote upload: Add direct_url param for redirect --- upload.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/upload.go b/upload.go index ea3578f..8526260 100644 --- a/upload.go +++ b/upload.go @@ -184,6 +184,7 @@ func uploadRemote(c web.C, w http.ResponseWriter, r *http.Request) { upReq := UploadRequest{} grabUrl, _ := url.Parse(r.FormValue("url")) + directURL := r.FormValue("direct_url") == "yes" resp, err := http.Get(grabUrl.String()) if err != nil { @@ -215,7 +216,11 @@ func uploadRemote(c web.C, w http.ResponseWriter, r *http.Request) { return } - http.Redirect(w, r, Config.sitePath+upload.Filename, 303) + if directURL { + http.Redirect(w, r, Config.sitePath+Config.selifPath+upload.Filename, 303) + } else { + http.Redirect(w, r, Config.sitePath+upload.Filename, 303) + } } } From 53e7aa456833f337be01bc7d2601fdbce236f7e6 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Thu, 12 Mar 2020 14:27:25 -0700 Subject: [PATCH 210/345] Dockerfile: Update to 1.14 --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index c1a2f2e..b5a73bf 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:alpine3.8 AS build +FROM golang:1.14-alpine3.11 AS build COPY . /go/src/github.com/andreimarcu/linx-server WORKDIR /go/src/github.com/andreimarcu/linx-server @@ -8,7 +8,7 @@ RUN set -ex \ && go get -v . \ && apk del .build-deps -FROM alpine:3.8 +FROM alpine:3.11 COPY --from=build /go/bin/linx-server /usr/local/bin/linx-server From 7212cd655572eafaf965ae7666c954b0a7454e6a Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Thu, 12 Mar 2020 16:35:50 -0700 Subject: [PATCH 211/345] Highlight.js: Update and add languages --- display.go | 2 +- static/css/highlight/tomorrow.css | 77 +++++--------- static/js/highlight/highlight.pack.js | 6 +- util.go | 143 +++++++++++--------------- 4 files changed, 85 insertions(+), 143 deletions(-) diff --git a/display.go b/display.go index e15b1b6..6ac87d6 100644 --- a/display.go +++ b/display.go @@ -100,7 +100,7 @@ func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request, fileNam bytes, err := ioutil.ReadAll(reader) if err == nil { extra["extension"] = extension - extra["lang_hl"], extra["lang_ace"] = extensionToHlAndAceLangs(extension) + extra["lang_hl"] = extensionToHlLang(extension) extra["contents"] = string(bytes) tpl = Templates["display/bin.html"] } diff --git a/static/css/highlight/tomorrow.css b/static/css/highlight/tomorrow.css index 9bc0645..026a62f 100644 --- a/static/css/highlight/tomorrow.css +++ b/static/css/highlight/tomorrow.css @@ -2,102 +2,71 @@ /* Tomorrow Comment */ .hljs-comment, -.hljs-title { +.hljs-quote { color: #8e908c; } /* Tomorrow Red */ .hljs-variable, -.hljs-attribute, +.hljs-template-variable, .hljs-tag, +.hljs-name, +.hljs-selector-id, +.hljs-selector-class, .hljs-regexp, -.ruby .hljs-constant, -.xml .hljs-tag .hljs-title, -.xml .hljs-pi, -.xml .hljs-doctype, -.html .hljs-doctype, -.css .hljs-id, -.css .hljs-class, -.css .hljs-pseudo { +.hljs-deletion { color: #c82829; } /* Tomorrow Orange */ .hljs-number, -.hljs-preprocessor, -.hljs-pragma, .hljs-built_in, +.hljs-builtin-name, .hljs-literal, +.hljs-type, .hljs-params, -.hljs-constant { +.hljs-meta, +.hljs-link { color: #f5871f; } /* Tomorrow Yellow */ -.ruby .hljs-class .hljs-title, -.css .hljs-rules .hljs-attribute { +.hljs-attribute { color: #eab700; } /* Tomorrow Green */ .hljs-string, -.hljs-value, -.hljs-inheritance, -.hljs-header, -.ruby .hljs-symbol, -.xml .hljs-cdata { +.hljs-symbol, +.hljs-bullet, +.hljs-addition { color: #718c00; } -/* Tomorrow Aqua */ -.css .hljs-hexcolor { - color: #3e999f; -} - /* Tomorrow Blue */ -.hljs-function, -.python .hljs-decorator, -.python .hljs-title, -.ruby .hljs-function .hljs-title, -.ruby .hljs-title .hljs-keyword, -.perl .hljs-sub, -.javascript .hljs-title, -.coffeescript .hljs-title { +.hljs-title, +.hljs-section { color: #4271ae; } /* Tomorrow Purple */ .hljs-keyword, -.javascript .hljs-function { +.hljs-selector-tag { color: #8959a8; } .hljs { display: block; + overflow-x: auto; background: white; color: #4d4d4c; padding: 0.5em; } -.hljs-line-numbers { - text-align: right; - border-right: 1px solid #ccc; - margin-right: 5px; - color: #999; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; +.hljs-emphasis { + font-style: italic; } -.coffeescript .javascript, -.javascript .xml, -.tex .hljs-formula, -.xml .javascript, -.xml .vbscript, -.xml .css, -.xml .hljs-cdata { - opacity: 0.5; -} \ No newline at end of file +.hljs-strong { + font-weight: bold; +} diff --git a/static/js/highlight/highlight.pack.js b/static/js/highlight/highlight.pack.js index b9d3c80..ea2203c 100644 --- a/static/js/highlight/highlight.pack.js +++ b/static/js/highlight/highlight.pack.js @@ -1,4 +1,2 @@ -// @license-start magnet:?xt=urn:btih:c80d50af7d3db9be66a4d0a86db0286e4fd33292&dn=bsd-3-clause.txt BSD-3-Clause -!function(e){"undefined"!=typeof exports?e(exports):(window.hljs=e({}),"function"==typeof define&&define.amd&&define("hljs",[],function(){return window.hljs}))}(function(e){function n(e){return e.replace(/&/gm,"&").replace(//gm,">")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0==t.index}function a(e){return/^(no-?highlight|plain|text)$/i.test(e)}function i(e){var n,t,r,i=e.className+" ";if(i+=e.parentNode?e.parentNode.className:"",t=/\blang(?:uage)?-([\w-]+)\b/i.exec(i))return w(t[1])?t[1]:"no-highlight";for(i=i.split(/\s+/),n=0,r=i.length;r>n;n++)if(w(i[n])||a(i[n]))return i[n]}function o(e,n){var t,r={};for(t in e)r[t]=e[t];if(n)for(t in n)r[t]=n[t];return r}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3==i.nodeType?a+=i.nodeValue.length:1==i.nodeType&&(n.push({event:"start",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:i}));return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!=r[0].offset?e[0].offset"}function u(e){f+=""}function c(e){("start"==e.event?o:u)(e.node)}for(var s=0,f="",l=[];e.length||r.length;){var g=i();if(f+=n(a.substr(s,g[0].offset-s)),s=g[0].offset,g==e){l.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g==e&&g.length&&g[0].offset==s);l.reverse().forEach(o)}else"start"==g[0].event?l.push(g[0].node):l.pop(),c(g.splice(0,1)[0])}return f+n(a.substr(s))}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var u={},c=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");u[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof a.k?c("keyword",a.k):Object.keys(a.k).forEach(function(e){c(e,a.k[e])}),a.k=u}a.lR=t(a.l||/\b\w+\b/,!0),i&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&i.tE&&(a.tE+=(a.e?"|":"")+i.tE)),a.i&&(a.iR=t(a.i)),void 0===a.r&&(a.r=1),a.c||(a.c=[]);var s=[];a.c.forEach(function(e){e.v?e.v.forEach(function(n){s.push(o(e,n))}):s.push("self"==e?a:e)}),a.c=s,a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var f=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=f.length?t(f.join("|"),!0):{exec:function(){return null}}}}r(e)}function f(e,t,a,i){function o(e,n){for(var t=0;t";return i+=e+'">',i+n+o}function p(){if(!L.k)return n(y);var e="",t=0;L.lR.lastIndex=0;for(var r=L.lR.exec(y);r;){e+=n(y.substr(t,r.index-t));var a=g(L,r);a?(B+=a[1],e+=h(a[0],n(r[0]))):e+=n(r[0]),t=L.lR.lastIndex,r=L.lR.exec(y)}return e+n(y.substr(t))}function d(){var e="string"==typeof L.sL;if(e&&!x[L.sL])return n(y);var t=e?f(L.sL,y,!0,M[L.sL]):l(y,L.sL.length?L.sL:void 0);return L.r>0&&(B+=t.r),e&&(M[L.sL]=t.top),h(t.language,t.value,!1,!0)}function b(){return void 0!==L.sL?d():p()}function v(e,t){var r=e.cN?h(e.cN,"",!0):"";e.rB?(k+=r,y=""):e.eB?(k+=n(t)+r,y=""):(k+=r,y=t),L=Object.create(e,{parent:{value:L}})}function m(e,t){if(y+=e,void 0===t)return k+=b(),0;var r=o(t,L);if(r)return k+=b(),v(r,t),r.rB?0:t.length;var a=u(L,t);if(a){var i=L;i.rE||i.eE||(y+=t),k+=b();do L.cN&&(k+=""),B+=L.r,L=L.parent;while(L!=a.parent);return i.eE&&(k+=n(t)),y="",a.starts&&v(a.starts,""),i.rE?0:t.length}if(c(t,L))throw new Error('Illegal lexeme "'+t+'" for mode "'+(L.cN||"")+'"');return y+=t,t.length||1}var N=w(e);if(!N)throw new Error('Unknown language: "'+e+'"');s(N);var R,L=i||N,M={},k="";for(R=L;R!=N;R=R.parent)R.cN&&(k=h(R.cN,"",!0)+k);var y="",B=0;try{for(var C,j,I=0;;){if(L.t.lastIndex=I,C=L.t.exec(t),!C)break;j=m(t.substr(I,C.index-I),C[0]),I=C.index+j}for(m(t.substr(I)),R=L;R.parent;R=R.parent)R.cN&&(k+="");return{r:B,value:k,language:e,top:L}}catch(O){if(-1!=O.message.indexOf("Illegal"))return{r:0,value:n(t)};throw O}}function l(e,t){t=t||E.languages||Object.keys(x);var r={r:0,value:n(e)},a=r;return t.forEach(function(n){if(w(n)){var t=f(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}}),a.language&&(r.second_best=a),r}function g(e){return E.tabReplace&&(e=e.replace(/^((<[^>]+>|\t)+)/gm,function(e,n){return n.replace(/\t/g,E.tabReplace)})),E.useBR&&(e=e.replace(/\n/g,"
    ")),e}function h(e,n,t){var r=n?R[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}function p(e){var n=i(e);if(!a(n)){var t;E.useBR?(t=document.createElementNS("http://www.w3.org/1999/xhtml","div"),t.innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n")):t=e;var r=t.textContent,o=n?f(n,r,!0):l(r),s=u(t);if(s.length){var p=document.createElementNS("http://www.w3.org/1999/xhtml","div");p.innerHTML=o.value,o.value=c(s,u(p),r)}o.value=g(o.value),e.innerHTML=o.value,e.className=h(e.className,n,o.language),e.result={language:o.language,re:o.r},o.second_best&&(e.second_best={language:o.second_best.language,re:o.second_best.r})}}function d(e){E=o(E,e)}function b(){if(!b.called){b.called=!0;var e=document.querySelectorAll("pre code");Array.prototype.forEach.call(e,p)}}function v(){addEventListener("DOMContentLoaded",b,!1),addEventListener("load",b,!1)}function m(n,t){var r=x[n]=t(e);r.aliases&&r.aliases.forEach(function(e){R[e]=n})}function N(){return Object.keys(x)}function w(e){return e=e.toLowerCase(),x[e]||x[R[e]]}var E={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},x={},R={};return e.highlight=f,e.highlightAuto=l,e.fixMarkup=g,e.highlightBlock=p,e.configure=d,e.initHighlighting=b,e.initHighlightingOnLoad=v,e.registerLanguage=m,e.listLanguages=N,e.getLanguage=w,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such)\b/},e.C=function(n,t,r){var a=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),a},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e});hljs.registerLanguage("prolog",function(c){var r={cN:"atom",b:/[a-z][A-Za-z0-9_]*/,r:0},b={cN:"name",v:[{b:/[A-Z][a-zA-Z0-9_]*/},{b:/_[A-Za-z0-9_]*/}],r:0},a={b:/\(/,e:/\)/,r:0},e={b:/\[/,e:/\]/},n={cN:"comment",b:/%/,e:/$/,c:[c.PWM]},t={cN:"string",b:/`/,e:/`/,c:[c.BE]},g={cN:"string",b:/0\'(\\\'|.)/},N={cN:"string",b:/0\'\\s/},o={b:/:-/},s=[r,b,a,o,e,n,c.CBCM,c.QSM,c.ASM,t,g,N,c.CNM];return a.c=s,e.c=s,{c:s.concat([{b:/\.$/}])}});hljs.registerLanguage("haskell",function(e){var c=[e.C("--","$"),e.C("{-","-}",{c:["self"]})],a={cN:"pragma",b:"{-#",e:"#-}"},i={cN:"preprocessor",b:"^#",e:"$"},n={cN:"type",b:"\\b[A-Z][\\w']*",r:0},t={cN:"container",b:"\\(",e:"\\)",i:'"',c:[a,i,{cN:"type",b:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},e.inherit(e.TM,{b:"[_a-z][\\w']*"})].concat(c)},l={cN:"container",b:"{",e:"}",c:t.c};return{aliases:["hs"],k:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",c:[{cN:"module",b:"\\bmodule\\b",e:"where",k:"module where",c:[t].concat(c),i:"\\W\\.|;"},{cN:"import",b:"\\bimport\\b",e:"$",k:"import|0 qualified as hiding",c:[t].concat(c),i:"\\W\\.|;"},{cN:"class",b:"^(\\s*)?(class|instance)\\b",e:"where",k:"class family instance where",c:[n,t].concat(c)},{cN:"typedef",b:"\\b(data|(new)?type)\\b",e:"$",k:"data family type newtype deriving",c:[a,n,t,l].concat(c)},{cN:"default",bK:"default",e:"$",c:[n,t].concat(c)},{cN:"infix",bK:"infix infixl infixr",e:"$",c:[e.CNM].concat(c)},{cN:"foreign",b:"\\bforeign\\b",e:"$",k:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",c:[n,e.QSM].concat(c)},{cN:"shebang",b:"#!\\/usr\\/bin\\/env runhaskell",e:"$"},a,i,e.QSM,e.CNM,n,e.inherit(e.TM,{b:"^[_a-z][\\w']*"}),{b:"->|<-"}].concat(c)}});hljs.registerLanguage("puppet",function(e){var s={keyword:"and case default else elsif false if in import enherits node or true undef unless main settings $string ",literal:"alias audit before loglevel noop require subscribe tag owner ensure group mode name|0 changes context force incl lens load_path onlyif provider returns root show_diff type_check en_address ip_address realname command environment hour monute month monthday special target weekday creates cwd ogoutput refresh refreshonly tries try_sleep umask backup checksum content ctime force ignore links mtime purge recurse recurselimit replace selinux_ignore_defaults selrange selrole seltype seluser source souirce_permissions sourceselect validate_cmd validate_replacement allowdupe attribute_membership auth_membership forcelocal gid ia_load_module members system host_aliases ip allowed_trunk_vlans description device_url duplex encapsulation etherchannel native_vlan speed principals allow_root auth_class auth_type authenticate_user k_of_n mechanisms rule session_owner shared options device fstype enable hasrestart directory present absent link atboot blockdevice device dump pass remounts poller_tag use message withpath adminfile allow_virtual allowcdrom category configfiles flavor install_options instance package_settings platform responsefile status uninstall_options vendor unless_system_user unless_uid binary control flags hasstatus manifest pattern restart running start stop allowdupe auths expiry gid groups home iterations key_membership keys managehome membership password password_max_age password_min_age profile_membership profiles project purge_ssh_keys role_membership roles salt shell uid baseurl cost descr enabled enablegroups exclude failovermethod gpgcheck gpgkey http_caching include includepkgs keepalive metadata_expire metalink mirrorlist priority protect proxy proxy_password proxy_username repo_gpgcheck s3_enabled skip_if_unavailable sslcacert sslclientcert sslclientkey sslverify mounted",built_in:"architecture augeasversion blockdevices boardmanufacturer boardproductname boardserialnumber cfkey dhcp_servers domain ec2_ ec2_userdata facterversion filesystems ldom fqdn gid hardwareisa hardwaremodel hostname id|0 interfaces ipaddress ipaddress_ ipaddress6 ipaddress6_ iphostnumber is_virtual kernel kernelmajversion kernelrelease kernelversion kernelrelease kernelversion lsbdistcodename lsbdistdescription lsbdistid lsbdistrelease lsbmajdistrelease lsbminordistrelease lsbrelease macaddress macaddress_ macosx_buildversion macosx_productname macosx_productversion macosx_productverson_major macosx_productversion_minor manufacturer memoryfree memorysize netmask metmask_ network_ operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily partitions path physicalprocessorcount processor processorcount productname ps puppetversion rubysitedir rubyversion selinux selinux_config_mode selinux_config_policy selinux_current_mode selinux_current_mode selinux_enforced selinux_policyversion serialnumber sp_ sshdsakey sshecdsakey sshrsakey swapencrypted swapfree swapsize timezone type uniqueid uptime uptime_days uptime_hours uptime_seconds uuid virtual vlans xendomains zfs_version zonenae zones zpool_version"},r=e.C("#","$"),a="([A-Za-z_]|::)(\\w|::)*",i=e.inherit(e.TM,{b:a}),o={cN:"variable",b:"\\$"+a},t={cN:"string",c:[e.BE,o],v:[{b:/'/,e:/'/},{b:/"/,e:/"/}]};return{aliases:["pp"],c:[r,o,t,{bK:"class",e:"\\{|;",i:/=/,c:[i,r]},{bK:"define",e:/\{/,c:[{cN:"title",b:e.IR,endsParent:!0}]},{b:e.IR+"\\s+\\{",rB:!0,e:/\S/,c:[{cN:"name",b:e.IR},{b:/\{/,e:/\}/,k:s,r:0,c:[t,r,{b:"[a-zA-Z_]+\\s*=>"},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},o]}],r:0}]}});hljs.registerLanguage("delphi",function(e){var r="exports register file shl array record property for mod while set ally label uses raise not stored class safecall var interface or private static exit index inherited to else stdcall override shr asm far resourcestring finalization packed virtual out and protected library do xorwrite goto near function end div overload object unit begin string on inline repeat until destructor write message program with read initialization except default nil if case cdecl in downto threadvar of try pascal const external constructor type public then implementation finally published procedure",t=[e.CLCM,e.C(/\{/,/\}/,{r:0}),e.C(/\(\*/,/\*\)/,{r:10})],i={cN:"string",b:/'/,e:/'/,c:[{b:/''/}]},c={cN:"string",b:/(#\d+)+/},o={b:e.IR+"\\s*=\\s*class\\s*\\(",rB:!0,c:[e.TM]},n={cN:"function",bK:"function constructor destructor procedure",e:/[:;]/,k:"function constructor|10 destructor|10 procedure|10",c:[e.TM,{cN:"params",b:/\(/,e:/\)/,k:r,c:[i,c]}].concat(t)};return{cI:!0,k:r,i:/"|\$[G-Zg-z]|\/\*|<\/|\|/,c:[i,c,e.NM,o,n].concat(t)}});hljs.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"header",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"blockquote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"`.+?`"},{b:"^( {4}| )",e:"$",r:0}]},{cN:"horizontal_rule",b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"link_label",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link_url",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"link_reference",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:"^\\[.+\\]:",rB:!0,c:[{cN:"link_reference",b:"\\[",e:"\\]:",eB:!0,eE:!0,starts:{cN:"link_url",e:"$"}}]}]}});hljs.registerLanguage("lua",function(e){var t="\\[=*\\[",a="\\]=*\\]",r={b:t,e:a,c:["self"]},n=[e.C("--(?!"+t+")","$"),e.C("--"+t,a,{c:[r],r:10})];return{l:e.UIR,k:{keyword:"and break do else elseif end false for if in local nil not or repeat return then true until while",built_in:"_G _VERSION assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall coroutine debug io math os package string table"},c:n.concat([{cN:"function",bK:"function",e:"\\)",c:[e.inherit(e.TM,{b:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{cN:"params",b:"\\(",eW:!0,c:n}].concat(n)},e.CNM,e.ASM,e.QSM,{cN:"string",b:t,e:a,c:[r],r:5}])}});hljs.registerLanguage("dockerfile",function(n){return{aliases:["docker"],cI:!0,k:{built_ins:"from maintainer cmd expose add copy entrypoint volume user workdir onbuild run env"},c:[n.HCM,{k:{built_in:"run cmd entrypoint volume add copy workdir onbuild"},b:/^ *(onbuild +)?(run|cmd|entrypoint|volume|add|copy|workdir) +/,starts:{e:/[^\\]\n/,sL:"bash"}},{k:{built_in:"from maintainer expose env user onbuild"},b:/^ *(onbuild +)?(from|maintainer|expose|env|user|onbuild) +/,e:/[^\\]\n/,c:[n.ASM,n.QSM,n.NM,n.HCM]}]}});hljs.registerLanguage("brainfuck",function(r){var n={cN:"literal",b:"[\\+\\-]",r:0};return{aliases:["bf"],c:[r.C("[^\\[\\]\\.,\\+\\-<> \r\n]","[\\[\\]\\.,\\+\\-<> \r\n]",{rE:!0,r:0}),{cN:"title",b:"[\\[\\]]",r:0},{cN:"string",b:"[\\.,]",r:0},{b:/\+\+|\-\-/,rB:!0,c:[n]},n]}});hljs.registerLanguage("scala",function(e){var t={cN:"annotation",b:"@[A-Za-z]+"},a={cN:"string",b:'u?r?"""',e:'"""',r:10},r={cN:"symbol",b:"'\\w[\\w\\d_]*(?!')"},c={cN:"type",b:"\\b[A-Z][A-Za-z0-9_]*",r:0},i={cN:"title",b:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,r:0},l={cN:"class",bK:"class object trait type",e:/[:={\[(\n;]/,c:[{cN:"keyword",bK:"extends with",r:10},i]},n={cN:"function",bK:"def val",e:/[:={\[(\n;]/,c:[i]};return{k:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},c:[e.CLCM,e.CBCM,a,e.QSM,r,c,n,l,e.CNM,t]}});hljs.registerLanguage("ruby",function(e){var c="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",r="and false then defined module in return redo if BEGIN retry end for true self when next until do begin unless END rescue nil else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",b={cN:"doctag",b:"@[A-Za-z]+"},a={cN:"value",b:"#<",e:">"},n=[e.C("#","$",{c:[b]}),e.C("^\\=begin","^\\=end",{c:[b],r:10}),e.C("^__END__","\\n$")],s={cN:"subst",b:"#\\{",e:"}",k:r},t={cN:"string",c:[e.BE,s],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%[qQwWx]?\\(",e:"\\)"},{b:"%[qQwWx]?\\[",e:"\\]"},{b:"%[qQwWx]?{",e:"}"},{b:"%[qQwWx]?<",e:">"},{b:"%[qQwWx]?/",e:"/"},{b:"%[qQwWx]?%",e:"%"},{b:"%[qQwWx]?-",e:"-"},{b:"%[qQwWx]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/}]},i={cN:"params",b:"\\(",e:"\\)",k:r},d=[t,a,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{cN:"inheritance",b:"<\\s*",c:[{cN:"parent",b:"("+e.IR+"::)?"+e.IR}]}].concat(n)},{cN:"function",bK:"def",e:"$|;",c:[e.inherit(e.TM,{b:c}),i].concat(n)},{cN:"constant",b:"(::)?(\\b[A-Z]\\w*(::)?)+",r:0},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"symbol",b:":",c:[t,{b:c}],r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{cN:"variable",b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{b:"("+e.RSR+")\\s*",c:[a,{cN:"regexp",c:[e.BE,s],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}].concat(n),r:0}].concat(n);s.c=d,i.c=d;var o="[>?]>",l="[\\w#]+\\(\\w+\\):\\d+:\\d+>",u="(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>",N=[{b:/^\s*=>/,cN:"status",starts:{e:"$",c:d}},{cN:"prompt",b:"^("+o+"|"+l+"|"+u+")",starts:{e:"$",c:d}}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:r,c:n.concat(N).concat(d)}});hljs.registerLanguage("typescript",function(e){var r={keyword:"in if for while finally var new function|0 do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class public private get set super static implements enum export import declare type protected",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document any number boolean string void"};return{aliases:["ts"],k:r,c:[{cN:"pi",b:/^\s*['"]use strict['"]/,r:0},e.ASM,e.QSM,e.CLCM,e.CBCM,{cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM],r:0},{cN:"function",b:"function",e:/[\{;]/,eE:!0,k:r,c:["self",e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:r,c:[e.CLCM,e.CBCM],i:/["'\(]/}],i:/\[|%/,r:0},{cN:"constructor",bK:"constructor",e:/\{/,eE:!0,r:10},{cN:"module",bK:"module",e:/\{/,eE:!0},{cN:"interface",bK:"interface",e:/\{/,eE:!0,k:"interface extends"},{b:/\$[(.]/},{b:"\\."+e.IR,r:0}]}});hljs.registerLanguage("makefile",function(e){var a={cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]};return{aliases:["mk","mak"],c:[e.HCM,{b:/^\w+\s*\W*=/,rB:!0,r:0,starts:{cN:"constant",e:/\s*\W*=/,eE:!0,starts:{e:/$/,r:0,c:[a]}}},{cN:"title",b:/^[\w]+:\s*$/},{cN:"phony",b:/^\.PHONY:/,e:/$/,k:".PHONY",l:/[\.\w]+/},{b:/^\t+/,e:/$/,r:0,c:[e.QSM,a]}]}});hljs.registerLanguage("json",function(e){var t={literal:"true false null"},i=[e.QSM,e.CNM],l={cN:"value",e:",",eW:!0,eE:!0,c:i,k:t},c={b:"{",e:"}",c:[{cN:"attribute",b:'\\s*"',e:'"\\s*:\\s*',eB:!0,eE:!0,c:[e.BE],i:"\\n",starts:l}],i:"\\S"},n={b:"\\[",e:"\\]",c:[e.inherit(l,{cN:null})],i:"\\S"};return i.splice(i.length,0,c,n),{c:i,k:t,i:"\\S"}});hljs.registerLanguage("rust",function(e){var t="([uif](8|16|32|64|size))?",r=e.inherit(e.CBCM);return r.c.push("self"),{aliases:["rs"],k:{keyword:"alignof as be box break const continue crate do else enum extern false fn for if impl in let loop match mod mut offsetof once priv proc pub pure ref return self Self sizeof static struct super trait true type typeof unsafe unsized use virtual while where yield int i8 i16 i32 i64 uint u8 u32 u64 float f32 f64 str char bool",built_in:"Copy Send Sized Sync Drop Fn FnMut FnOnce drop Box ToOwned Clone PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator Option Some None Result Ok Err SliceConcatExt String ToString Vec assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln!"},l:e.IR+"!?",i:""}]}});hljs.registerLanguage("xml",function(t){var s="[A-Za-z0-9\\._:-]+",c={b:/<\?(php)?(?!\w)/,e:/\?>/,sL:"php"},e={eW:!0,i:/]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xsl","plist"],cI:!0,c:[{cN:"doctype",b:"",r:10,c:[{b:"\\[",e:"\\]"}]},t.C("",{r:10}),{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"|$)",e:">",k:{title:"style"},c:[e],starts:{e:"",rE:!0,sL:"css"}},{cN:"tag",b:"|$)",e:">",k:{title:"script"},c:[e],starts:{e:"",rE:!0,sL:["actionscript","javascript","handlebars"]}},c,{cN:"pi",b:/<\?\w+/,e:/\?>/,r:10},{cN:"tag",b:"",c:[{cN:"title",b:/[^ \/><\n\t]+/,r:0},e]}]}});hljs.registerLanguage("css",function(e){var c="[a-zA-Z-][a-zA-Z0-9_-]*",a={cN:"function",b:c+"\\(",rB:!0,eE:!0,e:"\\("},r={cN:"rule",b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{cN:"value",eW:!0,eE:!0,c:[a,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"hexcolor",b:"#[0-9A-Fa-f]+"},{cN:"important",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,r,{cN:"id",b:/\#[A-Za-z0-9_-]+/},{cN:"class",b:/\.[A-Za-z0-9_-]+/},{cN:"attr_selector",b:/\[/,e:/\]/,i:"$"},{cN:"pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"']+/},{cN:"at_rule",b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{cN:"at_rule",b:"@",e:"[{;]",c:[{cN:"keyword",b:/\S+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[a,e.ASM,e.QSM,e.CSSNM]}]},{cN:"tag",b:c,r:0},{cN:"rules",b:"{",e:"}",i:/\S/,c:[e.CBCM,r]}]}});hljs.registerLanguage("django",function(e){var t={cN:"filter",b:/\|[A-Za-z]+:?/,k:"truncatewords removetags linebreaksbr yesno get_digit timesince random striptags filesizeformat escape linebreaks length_is ljust rjust cut urlize fix_ampersands title floatformat capfirst pprint divisibleby add make_list unordered_list urlencode timeuntil urlizetrunc wordcount stringformat linenumbers slice date dictsort dictsortreversed default_if_none pluralize lower join center default truncatewords_html upper length phone2numeric wordwrap time addslashes slugify first escapejs force_escape iriencode last safe safeseq truncatechars localize unlocalize localtime utc timezone",c:[{cN:"argument",b:/"/,e:/"/},{cN:"argument",b:/'/,e:/'/}]};return{aliases:["jinja"],cI:!0,sL:"xml",c:[e.C(/\{%\s*comment\s*%}/,/\{%\s*endcomment\s*%}/),e.C(/\{#/,/#}/),{cN:"template_tag",b:/\{%/,e:/%}/,k:"comment endcomment load templatetag ifchanged endifchanged if endif firstof for endfor in ifnotequal endifnotequal widthratio extends include spaceless endspaceless regroup by as ifequal endifequal ssi now with cycle url filter endfilter debug block endblock else autoescape endautoescape csrf_token empty elif endwith static trans blocktrans endblocktrans get_static_prefix get_media_prefix plural get_current_language language get_available_languages get_current_language_bidi get_language_info get_language_info_list localize endlocalize localtime endlocaltime timezone endtimezone get_current_timezone verbatim",c:[t]},{cN:"variable",b:/\{\{/,e:/}}/,c:[t]}]}});hljs.registerLanguage("verilog",function(e){return{aliases:["v"],cI:!0,k:{keyword:"always and assign begin buf bufif0 bufif1 case casex casez cmos deassign default defparam disable edge else end endcase endfunction endmodule endprimitive endspecify endtable endtask event for force forever fork function if ifnone initial inout input join macromodule module nand negedge nmos nor not notif0 notif1 or output parameter pmos posedge primitive pulldown pullup rcmos release repeat rnmos rpmos rtran rtranif0 rtranif1 specify specparam table task timescale tran tranif0 tranif1 wait while xnor xor",typename:"highz0 highz1 integer large medium pull0 pull1 real realtime reg scalared signed small strong0 strong1 supply0 supply0 supply1 supply1 time tri tri0 tri1 triand trior trireg vectored wand weak0 weak1 wire wor"},c:[e.CBCM,e.CLCM,e.QSM,{cN:"number",b:"\\b(\\d+'(b|h|o|d|B|H|O|D))?[0-9xzXZ]+",c:[e.BE],r:0},{cN:"typename",b:"\\.\\w+",r:0},{cN:"value",b:"#\\((?!parameter).+\\)"},{cN:"keyword",b:"\\+|-|\\*|/|%|<|>|=|#|`|\\!|&|\\||@|:|\\^|~|\\{|\\}",r:0}]}});hljs.registerLanguage("perl",function(e){var t="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",r={cN:"subst",b:"[$@]\\{",e:"\\}",k:t},s={b:"->{",e:"}"},n={cN:"variable",v:[{b:/\$\d/},{b:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{b:/[\$%@][^\s\w{]/,r:0}]},o=[e.BE,r,n],i=[n,e.HCM,e.C("^\\=\\w","\\=cut",{eW:!0}),s,{cN:"string",c:o,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",r:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",r:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",r:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",r:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",r:5},{b:"qw\\s+q",e:"q",r:5},{b:"'",e:"'",c:[e.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[e.BE]},{b:"{\\w+}",c:[],r:0},{b:"-?\\w+\\s*\\=\\>",c:[],r:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\/\\/|"+e.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",r:0,c:[e.HCM,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",r:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[e.BE],r:0}]},{cN:"sub",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",r:5},{cN:"operator",b:"-\\w\\b",r:0},{b:"^__DATA__$",e:"^__END__$",sL:"mojolicious",c:[{b:"^@@.*",e:"$",cN:"comment"}]}];return r.c=i,s.c=i,{aliases:["pl"],k:t,c:i}});hljs.registerLanguage("fsharp",function(e){var t={b:"<",e:">",c:[e.inherit(e.TM,{b:/'[a-zA-Z0-9_]+/})]};return{aliases:["fs"],k:"abstract and as assert base begin class default delegate do done downcast downto elif else end exception extern false finally for fun function global if in inherit inline interface internal lazy let match member module mutable namespace new null of open or override private public rec return sig static struct then to true try type upcast use val void when while with yield",c:[{cN:"keyword",b:/\b(yield|return|let|do)!/},{cN:"string",b:'@"',e:'"',c:[{b:'""'}]},{cN:"string",b:'"""',e:'"""'},e.C("\\(\\*","\\*\\)"),{cN:"class",bK:"type",e:"\\(|=|$",eE:!0,c:[e.UTM,t]},{cN:"annotation",b:"\\[<",e:">\\]",r:10},{cN:"attribute",b:"\\B('[A-Za-z])\\b",c:[e.BE]},e.CLCM,e.inherit(e.QSM,{i:null}),e.CNM]}});hljs.registerLanguage("swift",function(e){var i={keyword:"class deinit enum extension func init let protocol static struct subscript typealias var break case continue default do else fallthrough if in for return switch where while as dynamicType is new super self Self Type __COLUMN__ __FILE__ __FUNCTION__ __LINE__ associativity didSet get infix inout left mutating none nonmutating operator override postfix precedence prefix right set unowned unowned safe unsafe weak willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue assert bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced join lexicographicalCompare map max maxElement min minElement numericCast partition posix print println quickSort reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith strideof strideofValue swap swift toString transcode underestimateCount unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafePointers withVaList"},t={cN:"type",b:"\\b[A-Z][\\w']*",r:0},n=e.C("/\\*","\\*/",{c:["self"]}),r={cN:"subst",b:/\\\(/,e:"\\)",k:i,c:[]},s={cN:"number",b:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",r:0},o=e.inherit(e.QSM,{c:[r,e.BE]});return r.c=[s],{k:i,c:[o,e.CLCM,n,t,s,{cN:"func",bK:"func",e:"{",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/,i:/\(/}),{cN:"generics",b://,i:/>/},{cN:"params",b:/\(/,e:/\)/,endsParent:!0,k:i,c:["self",s,o,e.CBCM,{b:":"}],i:/["']/}],i:/\[|%/},{cN:"class",bK:"struct protocol class extension enum",k:i,e:"\\{",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/})]},{cN:"preprocessor",b:"(@assignment|@class_protocol|@exported|@final|@lazy|@noreturn|@NSCopying|@NSManaged|@objc|@optional|@required|@auto_closure|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix)"},{bK:"import",e:/$/,c:[e.CLCM,n]}]}});hljs.registerLanguage("cs",function(e){var r="abstract as base bool break byte case catch char checked const continue decimal dynamic default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long null when object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this true try typeof uint ulong unchecked unsafe ushort using virtual volatile void while async protected public private internal ascending descending from get group into join let orderby partial select set value var where yield",t=e.IR+"(<"+e.IR+">)?";return{aliases:["csharp"],k:r,i:/::/,c:[e.C("///","$",{rB:!0,c:[{cN:"xmlDocTag",v:[{b:"///",r:0},{b:""},{b:""}]}]}),e.CLCM,e.CBCM,{cN:"preprocessor",b:"#",e:"$",k:"if else elif endif define undef warning error line region endregion pragma checksum"},{cN:"string",b:'@"',e:'"',c:[{b:'""'}]},e.ASM,e.QSM,e.CNM,{bK:"class interface",e:/[{;=]/,i:/[^\s:]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:"namespace",e:/[{;=]/,i:/[^\s:]/,c:[{cN:"title",b:"[a-zA-Z](\\.?\\w)*",r:0},e.CLCM,e.CBCM]},{bK:"new return throw await",r:0},{cN:"function",b:"("+t+"\\s+)+"+e.IR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:r,c:[{b:e.IR+"\\s*\\(",rB:!0,c:[e.TM],r:0},{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:r,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]}]}});hljs.registerLanguage("accesslog",function(T){return{c:[{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+\\b",r:0},{cN:"string",b:'"(GET|POST|HEAD|PUT|DELETE|CONNECT|OPTIONS|PATCH|TRACE)',e:'"',k:"GET POST HEAD PUT DELETE CONNECT OPTIONS PATCH TRACE",i:"\\n",r:10},{cN:"string",b:/\[/,e:/\]/,i:"\\n"},{cN:"string",b:'"',e:'"',i:"\\n"}]}});hljs.registerLanguage("r",function(e){var r="([a-zA-Z]|\\.[a-zA-Z.])[a-zA-Z0-9._]*";return{c:[e.HCM,{b:r,l:r,k:{keyword:"function if in break next repeat else for return switch while try tryCatch stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...",literal:"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10"},r:0},{cN:"number",b:"0[xX][0-9a-fA-F]+[Li]?\\b",r:0},{cN:"number",b:"\\d+(?:[eE][+\\-]?\\d*)?L\\b",r:0},{cN:"number",b:"\\d+\\.(?!\\d)(?:i\\b)?",r:0},{cN:"number",b:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",r:0},{cN:"number",b:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",r:0},{b:"`",e:"`",r:0},{cN:"string",c:[e.BE],v:[{b:'"',e:'"'},{b:"'",e:"'"}]}]}});hljs.registerLanguage("apache",function(e){var r={cN:"number",b:"[\\$%]\\d+"};return{aliases:["apacheconf"],cI:!0,c:[e.HCM,{cN:"tag",b:""},{cN:"keyword",b:/\w+/,r:0,k:{common:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,r:0,k:{literal:"on off all"},c:[{cN:"sqbracket",b:"\\s\\[",e:"\\]$"},{cN:"cbracket",b:"[\\$%]\\{",e:"\\}",c:["self",r]},r,e.QSM]}}],i:/\S/}});hljs.registerLanguage("http",function(t){return{aliases:["https"],i:"\\S",c:[{cN:"status",b:"^HTTP/[0-9\\.]+",e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{cN:"request",b:"^[A-Z]+ (.*?) HTTP/[0-9\\.]+$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{cN:"string",e:"$"}},{b:"\\n\\n",starts:{sL:[],eW:!0}}]}});hljs.registerLanguage("cmake",function(e){return{aliases:["cmake.in"],cI:!0,k:{keyword:"add_custom_command add_custom_target add_definitions add_dependencies add_executable add_library add_subdirectory add_test aux_source_directory break build_command cmake_minimum_required cmake_policy configure_file create_test_sourcelist define_property else elseif enable_language enable_testing endforeach endfunction endif endmacro endwhile execute_process export find_file find_library find_package find_path find_program fltk_wrap_ui foreach function get_cmake_property get_directory_property get_filename_component get_property get_source_file_property get_target_property get_test_property if include include_directories include_external_msproject include_regular_expression install link_directories load_cache load_command macro mark_as_advanced message option output_required_files project qt_wrap_cpp qt_wrap_ui remove_definitions return separate_arguments set set_directory_properties set_property set_source_files_properties set_target_properties set_tests_properties site_name source_group string target_link_libraries try_compile try_run unset variable_watch while build_name exec_program export_library_dependencies install_files install_programs install_targets link_libraries make_directory remove subdir_depends subdirs use_mangled_mesa utility_source variable_requires write_file qt5_use_modules qt5_use_package qt5_wrap_cpp on off true false and or",operator:"equal less greater strless strgreater strequal matches"},c:[{cN:"envvar",b:"\\${",e:"}"},e.HCM,e.QSM,e.NM]}});hljs.registerLanguage("thrift",function(e){var t="bool byte i16 i32 i64 double string binary";return{k:{keyword:"namespace const typedef struct enum service exception void oneway set list map required optional",built_in:t,literal:"true false"},c:[e.QSM,e.NM,e.CLCM,e.CBCM,{cN:"class",bK:"struct enum service exception",e:/\{/,i:/\n/,c:[e.inherit(e.TM,{starts:{eW:!0,eE:!0}})]},{b:"\\b(set|list|map)\\s*<",e:">",k:t,c:["self"]}]}});hljs.registerLanguage("objectivec",function(e){var t={cN:"built_in",b:"(AV|CA|CF|CG|CI|MK|MP|NS|UI)\\w+"},i={keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},o=/[a-zA-Z@][a-zA-Z0-9_]*/,n="@interface @class @protocol @implementation";return{aliases:["mm","objc","obj-c"],k:i,l:o,i:""}]}]},{cN:"class",b:"("+n.split(" ").join("|")+")\\b",e:"({|$)",eE:!0,k:n,l:o,c:[e.UTM]},{cN:"variable",b:"\\."+e.UIR,r:0}]}});hljs.registerLanguage("mathematica",function(e){return{aliases:["mma"],l:"(\\$|\\b)"+e.IR+"\\b",k:"AbelianGroup Abort AbortKernels AbortProtect Above Abs Absolute AbsoluteCorrelation AbsoluteCorrelationFunction AbsoluteCurrentValue AbsoluteDashing AbsoluteFileName AbsoluteOptions AbsolutePointSize AbsoluteThickness AbsoluteTime AbsoluteTiming AccountingForm Accumulate Accuracy AccuracyGoal ActionDelay ActionMenu ActionMenuBox ActionMenuBoxOptions Active ActiveItem ActiveStyle AcyclicGraphQ AddOnHelpPath AddTo AdjacencyGraph AdjacencyList AdjacencyMatrix AdjustmentBox AdjustmentBoxOptions AdjustTimeSeriesForecast AffineTransform After AiryAi AiryAiPrime AiryAiZero AiryBi AiryBiPrime AiryBiZero AlgebraicIntegerQ AlgebraicNumber AlgebraicNumberDenominator AlgebraicNumberNorm AlgebraicNumberPolynomial AlgebraicNumberTrace AlgebraicRules AlgebraicRulesData Algebraics AlgebraicUnitQ Alignment AlignmentMarker AlignmentPoint All AllowedDimensions AllowGroupClose AllowInlineCells AllowKernelInitialization AllowReverseGroupClose AllowScriptLevelChange AlphaChannel AlternatingGroup AlternativeHypothesis Alternatives AmbientLight Analytic AnchoredSearch And AndersonDarlingTest AngerJ AngleBracket AngularGauge Animate AnimationCycleOffset AnimationCycleRepetitions AnimationDirection AnimationDisplayTime AnimationRate AnimationRepetitions AnimationRunning Animator AnimatorBox AnimatorBoxOptions AnimatorElements Annotation Annuity AnnuityDue Antialiasing Antisymmetric Apart ApartSquareFree Appearance AppearanceElements AppellF1 Append AppendTo Apply ArcCos ArcCosh ArcCot ArcCoth ArcCsc ArcCsch ArcSec ArcSech ArcSin ArcSinDistribution ArcSinh ArcTan ArcTanh Arg ArgMax ArgMin ArgumentCountQ ARIMAProcess ArithmeticGeometricMean ARMAProcess ARProcess Array ArrayComponents ArrayDepth ArrayFlatten ArrayPad ArrayPlot ArrayQ ArrayReshape ArrayRules Arrays Arrow Arrow3DBox ArrowBox Arrowheads AspectRatio AspectRatioFixed Assert Assuming Assumptions AstronomicalData Asynchronous AsynchronousTaskObject AsynchronousTasks AtomQ Attributes AugmentedSymmetricPolynomial AutoAction AutoDelete AutoEvaluateEvents AutoGeneratedPackage AutoIndent AutoIndentSpacings AutoItalicWords AutoloadPath AutoMatch Automatic AutomaticImageSize AutoMultiplicationSymbol AutoNumberFormatting AutoOpenNotebooks AutoOpenPalettes AutorunSequencing AutoScaling AutoScroll AutoSpacing AutoStyleOptions AutoStyleWords Axes AxesEdge AxesLabel AxesOrigin AxesStyle Axis BabyMonsterGroupB Back Background BackgroundTasksSettings Backslash Backsubstitution Backward Band BandpassFilter BandstopFilter BarabasiAlbertGraphDistribution BarChart BarChart3D BarLegend BarlowProschanImportance BarnesG BarOrigin BarSpacing BartlettHannWindow BartlettWindow BaseForm Baseline BaselinePosition BaseStyle BatesDistribution BattleLemarieWavelet Because BeckmannDistribution Beep Before Begin BeginDialogPacket BeginFrontEndInteractionPacket BeginPackage BellB BellY Below BenfordDistribution BeniniDistribution BenktanderGibratDistribution BenktanderWeibullDistribution BernoulliB BernoulliDistribution BernoulliGraphDistribution BernoulliProcess BernsteinBasis BesselFilterModel BesselI BesselJ BesselJZero BesselK BesselY BesselYZero Beta BetaBinomialDistribution BetaDistribution BetaNegativeBinomialDistribution BetaPrimeDistribution BetaRegularized BetweennessCentrality BezierCurve BezierCurve3DBox BezierCurve3DBoxOptions BezierCurveBox BezierCurveBoxOptions BezierFunction BilateralFilter Binarize BinaryFormat BinaryImageQ BinaryRead BinaryReadList BinaryWrite BinCounts BinLists Binomial BinomialDistribution BinomialProcess BinormalDistribution BiorthogonalSplineWavelet BipartiteGraphQ BirnbaumImportance BirnbaumSaundersDistribution BitAnd BitClear BitGet BitLength BitNot BitOr BitSet BitShiftLeft BitShiftRight BitXor Black BlackmanHarrisWindow BlackmanNuttallWindow BlackmanWindow Blank BlankForm BlankNullSequence BlankSequence Blend Block BlockRandom BlomqvistBeta BlomqvistBetaTest Blue Blur BodePlot BohmanWindow Bold Bookmarks Boole BooleanConsecutiveFunction BooleanConvert BooleanCountingFunction BooleanFunction BooleanGraph BooleanMaxterms BooleanMinimize BooleanMinterms Booleans BooleanTable BooleanVariables BorderDimensions BorelTannerDistribution Bottom BottomHatTransform BoundaryStyle Bounds Box BoxBaselineShift BoxData BoxDimensions Boxed Boxes BoxForm BoxFormFormatTypes BoxFrame BoxID BoxMargins BoxMatrix BoxRatios BoxRotation BoxRotationPoint BoxStyle BoxWhiskerChart Bra BracketingBar BraKet BrayCurtisDistance BreadthFirstScan Break Brown BrownForsytheTest BrownianBridgeProcess BrowserCategory BSplineBasis BSplineCurve BSplineCurve3DBox BSplineCurveBox BSplineCurveBoxOptions BSplineFunction BSplineSurface BSplineSurface3DBox BubbleChart BubbleChart3D BubbleScale BubbleSizes BulletGauge BusinessDayQ ButterflyGraph ButterworthFilterModel Button ButtonBar ButtonBox ButtonBoxOptions ButtonCell ButtonContents ButtonData ButtonEvaluator ButtonExpandable ButtonFrame ButtonFunction ButtonMargins ButtonMinHeight ButtonNote ButtonNotebook ButtonSource ButtonStyle ButtonStyleMenuListing Byte ByteCount ByteOrdering C CachedValue CacheGraphics CalendarData CalendarType CallPacket CanberraDistance Cancel CancelButton CandlestickChart Cap CapForm CapitalDifferentialD CardinalBSplineBasis CarmichaelLambda Cases Cashflow Casoratian Catalan CatalanNumber Catch CauchyDistribution CauchyWindow CayleyGraph CDF CDFDeploy CDFInformation CDFWavelet Ceiling Cell CellAutoOverwrite CellBaseline CellBoundingBox CellBracketOptions CellChangeTimes CellContents CellContext CellDingbat CellDynamicExpression CellEditDuplicate CellElementsBoundingBox CellElementSpacings CellEpilog CellEvaluationDuplicate CellEvaluationFunction CellEventActions CellFrame CellFrameColor CellFrameLabelMargins CellFrameLabels CellFrameMargins CellGroup CellGroupData CellGrouping CellGroupingRules CellHorizontalScrolling CellID CellLabel CellLabelAutoDelete CellLabelMargins CellLabelPositioning CellMargins CellObject CellOpen CellPrint CellProlog Cells CellSize CellStyle CellTags CellularAutomaton CensoredDistribution Censoring Center CenterDot CentralMoment CentralMomentGeneratingFunction CForm ChampernowneNumber ChanVeseBinarize Character CharacterEncoding CharacterEncodingsPath CharacteristicFunction CharacteristicPolynomial CharacterRange Characters ChartBaseStyle ChartElementData ChartElementDataFunction ChartElementFunction ChartElements ChartLabels ChartLayout ChartLegends ChartStyle Chebyshev1FilterModel Chebyshev2FilterModel ChebyshevDistance ChebyshevT ChebyshevU Check CheckAbort CheckAll Checkbox CheckboxBar CheckboxBox CheckboxBoxOptions ChemicalData ChessboardDistance ChiDistribution ChineseRemainder ChiSquareDistribution ChoiceButtons ChoiceDialog CholeskyDecomposition Chop Circle CircleBox CircleDot CircleMinus CirclePlus CircleTimes CirculantGraph CityData Clear ClearAll ClearAttributes ClearSystemCache ClebschGordan ClickPane Clip ClipboardNotebook ClipFill ClippingStyle ClipPlanes ClipRange Clock ClockGauge ClockwiseContourIntegral Close Closed CloseKernels ClosenessCentrality Closing ClosingAutoSave ClosingEvent ClusteringComponents CMYKColor Coarse Coefficient CoefficientArrays CoefficientDomain CoefficientList CoefficientRules CoifletWavelet Collect Colon ColonForm ColorCombine ColorConvert ColorData ColorDataFunction ColorFunction ColorFunctionScaling Colorize ColorNegate ColorOutput ColorProfileData ColorQuantize ColorReplace ColorRules ColorSelectorSettings ColorSeparate ColorSetter ColorSetterBox ColorSetterBoxOptions ColorSlider ColorSpace Column ColumnAlignments ColumnBackgrounds ColumnForm ColumnLines ColumnsEqual ColumnSpacings ColumnWidths CommonDefaultFormatTypes Commonest CommonestFilter CommonUnits CommunityBoundaryStyle CommunityGraphPlot CommunityLabels CommunityRegionStyle CompatibleUnitQ CompilationOptions CompilationTarget Compile Compiled CompiledFunction Complement CompleteGraph CompleteGraphQ CompleteKaryTree CompletionsListPacket Complex Complexes ComplexExpand ComplexInfinity ComplexityFunction ComponentMeasurements ComponentwiseContextMenu Compose ComposeList ComposeSeries Composition CompoundExpression CompoundPoissonDistribution CompoundPoissonProcess CompoundRenewalProcess Compress CompressedData Condition ConditionalExpression Conditioned Cone ConeBox ConfidenceLevel ConfidenceRange ConfidenceTransform ConfigurationPath Congruent Conjugate ConjugateTranspose Conjunction Connect ConnectedComponents ConnectedGraphQ ConnesWindow ConoverTest ConsoleMessage ConsoleMessagePacket ConsolePrint Constant ConstantArray Constants ConstrainedMax ConstrainedMin ContentPadding ContentsBoundingBox ContentSelectable ContentSize Context ContextMenu Contexts ContextToFilename ContextToFileName Continuation Continue ContinuedFraction ContinuedFractionK ContinuousAction ContinuousMarkovProcess ContinuousTimeModelQ ContinuousWaveletData ContinuousWaveletTransform ContourDetect ContourGraphics ContourIntegral ContourLabels ContourLines ContourPlot ContourPlot3D Contours ContourShading ContourSmoothing ContourStyle ContraharmonicMean Control ControlActive ControlAlignment ControllabilityGramian ControllabilityMatrix ControllableDecomposition ControllableModelQ ControllerDuration ControllerInformation ControllerInformationData ControllerLinking ControllerManipulate ControllerMethod ControllerPath ControllerState ControlPlacement ControlsRendering ControlType Convergents ConversionOptions ConversionRules ConvertToBitmapPacket ConvertToPostScript ConvertToPostScriptPacket Convolve ConwayGroupCo1 ConwayGroupCo2 ConwayGroupCo3 CoordinateChartData CoordinatesToolOptions CoordinateTransform CoordinateTransformData CoprimeQ Coproduct CopulaDistribution Copyable CopyDirectory CopyFile CopyTag CopyToClipboard CornerFilter CornerNeighbors Correlation CorrelationDistance CorrelationFunction CorrelationTest Cos Cosh CoshIntegral CosineDistance CosineWindow CosIntegral Cot Coth Count CounterAssignments CounterBox CounterBoxOptions CounterClockwiseContourIntegral CounterEvaluator CounterFunction CounterIncrements CounterStyle CounterStyleMenuListing CountRoots CountryData Covariance CovarianceEstimatorFunction CovarianceFunction CoxianDistribution CoxIngersollRossProcess CoxModel CoxModelFit CramerVonMisesTest CreateArchive CreateDialog CreateDirectory CreateDocument CreateIntermediateDirectories CreatePalette CreatePalettePacket CreateScheduledTask CreateTemporary CreateWindow CriticalityFailureImportance CriticalitySuccessImportance CriticalSection Cross CrossingDetect CrossMatrix Csc Csch CubeRoot Cubics Cuboid CuboidBox Cumulant CumulantGeneratingFunction Cup CupCap Curl CurlyDoubleQuote CurlyQuote CurrentImage CurrentlySpeakingPacket CurrentValue CurvatureFlowFilter CurveClosed Cyan CycleGraph CycleIndexPolynomial Cycles CyclicGroup Cyclotomic Cylinder CylinderBox CylindricalDecomposition D DagumDistribution DamerauLevenshteinDistance DampingFactor Darker Dashed Dashing DataCompression DataDistribution DataRange DataReversed Date DateDelimiters DateDifference DateFunction DateList DateListLogPlot DateListPlot DatePattern DatePlus DateRange DateString DateTicksFormat DaubechiesWavelet DavisDistribution DawsonF DayCount DayCountConvention DayMatchQ DayName DayPlus DayRange DayRound DeBruijnGraph Debug DebugTag Decimal DeclareKnownSymbols DeclarePackage Decompose Decrement DedekindEta Default DefaultAxesStyle DefaultBaseStyle DefaultBoxStyle DefaultButton DefaultColor DefaultControlPlacement DefaultDuplicateCellStyle DefaultDuration DefaultElement DefaultFaceGridsStyle DefaultFieldHintStyle DefaultFont DefaultFontProperties DefaultFormatType DefaultFormatTypeForStyle DefaultFrameStyle DefaultFrameTicksStyle DefaultGridLinesStyle DefaultInlineFormatType DefaultInputFormatType DefaultLabelStyle DefaultMenuStyle DefaultNaturalLanguage DefaultNewCellStyle DefaultNewInlineCellStyle DefaultNotebook DefaultOptions DefaultOutputFormatType DefaultStyle DefaultStyleDefinitions DefaultTextFormatType DefaultTextInlineFormatType DefaultTicksStyle DefaultTooltipStyle DefaultValues Defer DefineExternal DefineInputStreamMethod DefineOutputStreamMethod Definition Degree DegreeCentrality DegreeGraphDistribution DegreeLexicographic DegreeReverseLexicographic Deinitialization Del Deletable Delete DeleteBorderComponents DeleteCases DeleteContents DeleteDirectory DeleteDuplicates DeleteFile DeleteSmallComponents DeleteWithContents DeletionWarning Delimiter DelimiterFlashTime DelimiterMatching Delimiters Denominator DensityGraphics DensityHistogram DensityPlot DependentVariables Deploy Deployed Depth DepthFirstScan Derivative DerivativeFilter DescriptorStateSpace DesignMatrix Det DGaussianWavelet DiacriticalPositioning Diagonal DiagonalMatrix Dialog DialogIndent DialogInput DialogLevel DialogNotebook DialogProlog DialogReturn DialogSymbols Diamond DiamondMatrix DiceDissimilarity DictionaryLookup DifferenceDelta DifferenceOrder DifferenceRoot DifferenceRootReduce Differences DifferentialD DifferentialRoot DifferentialRootReduce DifferentiatorFilter DigitBlock DigitBlockMinimum DigitCharacter DigitCount DigitQ DihedralGroup Dilation Dimensions DiracComb DiracDelta DirectedEdge DirectedEdges DirectedGraph DirectedGraphQ DirectedInfinity Direction Directive Directory DirectoryName DirectoryQ DirectoryStack DirichletCharacter DirichletConvolve DirichletDistribution DirichletL DirichletTransform DirichletWindow DisableConsolePrintPacket DiscreteChirpZTransform DiscreteConvolve DiscreteDelta DiscreteHadamardTransform DiscreteIndicator DiscreteLQEstimatorGains DiscreteLQRegulatorGains DiscreteLyapunovSolve DiscreteMarkovProcess DiscretePlot DiscretePlot3D DiscreteRatio DiscreteRiccatiSolve DiscreteShift DiscreteTimeModelQ DiscreteUniformDistribution DiscreteVariables DiscreteWaveletData DiscreteWaveletPacketTransform DiscreteWaveletTransform Discriminant Disjunction Disk DiskBox DiskMatrix Dispatch DispersionEstimatorFunction Display DisplayAllSteps DisplayEndPacket DisplayFlushImagePacket DisplayForm DisplayFunction DisplayPacket DisplayRules DisplaySetSizePacket DisplayString DisplayTemporary DisplayWith DisplayWithRef DisplayWithVariable DistanceFunction DistanceTransform Distribute Distributed DistributedContexts DistributeDefinitions DistributionChart DistributionDomain DistributionFitTest DistributionParameterAssumptions DistributionParameterQ Dithering Div Divergence Divide DivideBy Dividers Divisible Divisors DivisorSigma DivisorSum DMSList DMSString Do DockedCells DocumentNotebook DominantColors DOSTextFormat Dot DotDashed DotEqual Dotted DoubleBracketingBar DoubleContourIntegral DoubleDownArrow DoubleLeftArrow DoubleLeftRightArrow DoubleLeftTee DoubleLongLeftArrow DoubleLongLeftRightArrow DoubleLongRightArrow DoubleRightArrow DoubleRightTee DoubleUpArrow DoubleUpDownArrow DoubleVerticalBar DoublyInfinite Down DownArrow DownArrowBar DownArrowUpArrow DownLeftRightVector DownLeftTeeVector DownLeftVector DownLeftVectorBar DownRightTeeVector DownRightVector DownRightVectorBar Downsample DownTee DownTeeArrow DownValues DragAndDrop DrawEdges DrawFrontFaces DrawHighlighted Drop DSolve Dt DualLinearProgramming DualSystemsModel DumpGet DumpSave DuplicateFreeQ Dynamic DynamicBox DynamicBoxOptions DynamicEvaluationTimeout DynamicLocation DynamicModule DynamicModuleBox DynamicModuleBoxOptions DynamicModuleParent DynamicModuleValues DynamicName DynamicNamespace DynamicReference DynamicSetting DynamicUpdating DynamicWrapper DynamicWrapperBox DynamicWrapperBoxOptions E EccentricityCentrality EdgeAdd EdgeBetweennessCentrality EdgeCapacity EdgeCapForm EdgeColor EdgeConnectivity EdgeCost EdgeCount EdgeCoverQ EdgeDashing EdgeDelete EdgeDetect EdgeForm EdgeIndex EdgeJoinForm EdgeLabeling EdgeLabels EdgeLabelStyle EdgeList EdgeOpacity EdgeQ EdgeRenderingFunction EdgeRules EdgeShapeFunction EdgeStyle EdgeThickness EdgeWeight Editable EditButtonSettings EditCellTagsSettings EditDistance EffectiveInterest Eigensystem Eigenvalues EigenvectorCentrality Eigenvectors Element ElementData Eliminate EliminationOrder EllipticE EllipticExp EllipticExpPrime EllipticF EllipticFilterModel EllipticK EllipticLog EllipticNomeQ EllipticPi EllipticReducedHalfPeriods EllipticTheta EllipticThetaPrime EmitSound EmphasizeSyntaxErrors EmpiricalDistribution Empty EmptyGraphQ EnableConsolePrintPacket Enabled Encode End EndAdd EndDialogPacket EndFrontEndInteractionPacket EndOfFile EndOfLine EndOfString EndPackage EngineeringForm Enter EnterExpressionPacket EnterTextPacket Entropy EntropyFilter Environment Epilog Equal EqualColumns EqualRows EqualTilde EquatedTo Equilibrium EquirippleFilterKernel Equivalent Erf Erfc Erfi ErlangB ErlangC ErlangDistribution Erosion ErrorBox ErrorBoxOptions ErrorNorm ErrorPacket ErrorsDialogSettings EstimatedDistribution EstimatedProcess EstimatorGains EstimatorRegulator EuclideanDistance EulerE EulerGamma EulerianGraphQ EulerPhi Evaluatable Evaluate Evaluated EvaluatePacket EvaluationCell EvaluationCompletionAction EvaluationElements EvaluationMode EvaluationMonitor EvaluationNotebook EvaluationObject EvaluationOrder Evaluator EvaluatorNames EvenQ EventData EventEvaluator EventHandler EventHandlerTag EventLabels ExactBlackmanWindow ExactNumberQ ExactRootIsolation ExampleData Except ExcludedForms ExcludePods Exclusions ExclusionsStyle Exists Exit ExitDialog Exp Expand ExpandAll ExpandDenominator ExpandFileName ExpandNumerator Expectation ExpectationE ExpectedValue ExpGammaDistribution ExpIntegralE ExpIntegralEi Exponent ExponentFunction ExponentialDistribution ExponentialFamily ExponentialGeneratingFunction ExponentialMovingAverage ExponentialPowerDistribution ExponentPosition ExponentStep Export ExportAutoReplacements ExportPacket ExportString Expression ExpressionCell ExpressionPacket ExpToTrig ExtendedGCD Extension ExtentElementFunction ExtentMarkers ExtentSize ExternalCall ExternalDataCharacterEncoding Extract ExtractArchive ExtremeValueDistribution FaceForm FaceGrids FaceGridsStyle Factor FactorComplete Factorial Factorial2 FactorialMoment FactorialMomentGeneratingFunction FactorialPower FactorInteger FactorList FactorSquareFree FactorSquareFreeList FactorTerms FactorTermsList Fail FailureDistribution False FARIMAProcess FEDisableConsolePrintPacket FeedbackSector FeedbackSectorStyle FeedbackType FEEnableConsolePrintPacket Fibonacci FieldHint FieldHintStyle FieldMasked FieldSize File FileBaseName FileByteCount FileDate FileExistsQ FileExtension FileFormat FileHash FileInformation FileName FileNameDepth FileNameDialogSettings FileNameDrop FileNameJoin FileNames FileNameSetter FileNameSplit FileNameTake FilePrint FileType FilledCurve FilledCurveBox Filling FillingStyle FillingTransform FilterRules FinancialBond FinancialData FinancialDerivative FinancialIndicator Find FindArgMax FindArgMin FindClique FindClusters FindCurvePath FindDistributionParameters FindDivisions FindEdgeCover FindEdgeCut FindEulerianCycle FindFaces FindFile FindFit FindGeneratingFunction FindGeoLocation FindGeometricTransform FindGraphCommunities FindGraphIsomorphism FindGraphPartition FindHamiltonianCycle FindIndependentEdgeSet FindIndependentVertexSet FindInstance FindIntegerNullVector FindKClan FindKClique FindKClub FindKPlex FindLibrary FindLinearRecurrence FindList FindMaximum FindMaximumFlow FindMaxValue FindMinimum FindMinimumCostFlow FindMinimumCut FindMinValue FindPermutation FindPostmanTour FindProcessParameters FindRoot FindSequenceFunction FindSettings FindShortestPath FindShortestTour FindThreshold FindVertexCover FindVertexCut Fine FinishDynamic FiniteAbelianGroupCount FiniteGroupCount FiniteGroupData First FirstPassageTimeDistribution FischerGroupFi22 FischerGroupFi23 FischerGroupFi24Prime FisherHypergeometricDistribution FisherRatioTest FisherZDistribution Fit FitAll FittedModel FixedPoint FixedPointList FlashSelection Flat Flatten FlattenAt FlatTopWindow FlipView Floor FlushPrintOutputPacket Fold FoldList Font FontColor FontFamily FontForm FontName FontOpacity FontPostScriptName FontProperties FontReencoding FontSize FontSlant FontSubstitutions FontTracking FontVariations FontWeight For ForAll Format FormatRules FormatType FormatTypeAutoConvert FormatValues FormBox FormBoxOptions FortranForm Forward ForwardBackward Fourier FourierCoefficient FourierCosCoefficient FourierCosSeries FourierCosTransform FourierDCT FourierDCTFilter FourierDCTMatrix FourierDST FourierDSTMatrix FourierMatrix FourierParameters FourierSequenceTransform FourierSeries FourierSinCoefficient FourierSinSeries FourierSinTransform FourierTransform FourierTrigSeries FractionalBrownianMotionProcess FractionalPart FractionBox FractionBoxOptions FractionLine Frame FrameBox FrameBoxOptions Framed FrameInset FrameLabel Frameless FrameMargins FrameStyle FrameTicks FrameTicksStyle FRatioDistribution FrechetDistribution FreeQ FrequencySamplingFilterKernel FresnelC FresnelS Friday FrobeniusNumber FrobeniusSolve FromCharacterCode FromCoefficientRules FromContinuedFraction FromDate FromDigits FromDMS Front FrontEndDynamicExpression FrontEndEventActions FrontEndExecute FrontEndObject FrontEndResource FrontEndResourceString FrontEndStackSize FrontEndToken FrontEndTokenExecute FrontEndValueCache FrontEndVersion FrontFaceColor FrontFaceOpacity Full FullAxes FullDefinition FullForm FullGraphics FullOptions FullSimplify Function FunctionExpand FunctionInterpolation FunctionSpace FussellVeselyImportance GaborFilter GaborMatrix GaborWavelet GainMargins GainPhaseMargins Gamma GammaDistribution GammaRegularized GapPenalty Gather GatherBy GaugeFaceElementFunction GaugeFaceStyle GaugeFrameElementFunction GaugeFrameSize GaugeFrameStyle GaugeLabels GaugeMarkers GaugeStyle GaussianFilter GaussianIntegers GaussianMatrix GaussianWindow GCD GegenbauerC General GeneralizedLinearModelFit GenerateConditions GeneratedCell GeneratedParameters GeneratingFunction Generic GenericCylindricalDecomposition GenomeData GenomeLookup GeodesicClosing GeodesicDilation GeodesicErosion GeodesicOpening GeoDestination GeodesyData GeoDirection GeoDistance GeoGridPosition GeometricBrownianMotionProcess GeometricDistribution GeometricMean GeometricMeanFilter GeometricTransformation GeometricTransformation3DBox GeometricTransformation3DBoxOptions GeometricTransformationBox GeometricTransformationBoxOptions GeoPosition GeoPositionENU GeoPositionXYZ GeoProjectionData GestureHandler GestureHandlerTag Get GetBoundingBoxSizePacket GetContext GetEnvironment GetFileName GetFrontEndOptionsDataPacket GetLinebreakInformationPacket GetMenusPacket GetPageBreakInformationPacket Glaisher GlobalClusteringCoefficient GlobalPreferences GlobalSession Glow GoldenRatio GompertzMakehamDistribution GoodmanKruskalGamma GoodmanKruskalGammaTest Goto Grad Gradient GradientFilter GradientOrientationFilter Graph GraphAssortativity GraphCenter GraphComplement GraphData GraphDensity GraphDiameter GraphDifference GraphDisjointUnion GraphDistance GraphDistanceMatrix GraphElementData GraphEmbedding GraphHighlight GraphHighlightStyle GraphHub Graphics Graphics3D Graphics3DBox Graphics3DBoxOptions GraphicsArray GraphicsBaseline GraphicsBox GraphicsBoxOptions GraphicsColor GraphicsColumn GraphicsComplex GraphicsComplex3DBox GraphicsComplex3DBoxOptions GraphicsComplexBox GraphicsComplexBoxOptions GraphicsContents GraphicsData GraphicsGrid GraphicsGridBox GraphicsGroup GraphicsGroup3DBox GraphicsGroup3DBoxOptions GraphicsGroupBox GraphicsGroupBoxOptions GraphicsGrouping GraphicsHighlightColor GraphicsRow GraphicsSpacing GraphicsStyle GraphIntersection GraphLayout GraphLinkEfficiency GraphPeriphery GraphPlot GraphPlot3D GraphPower GraphPropertyDistribution GraphQ GraphRadius GraphReciprocity GraphRoot GraphStyle GraphUnion Gray GrayLevel GreatCircleDistance Greater GreaterEqual GreaterEqualLess GreaterFullEqual GreaterGreater GreaterLess GreaterSlantEqual GreaterTilde Green Grid GridBaseline GridBox GridBoxAlignment GridBoxBackground GridBoxDividers GridBoxFrame GridBoxItemSize GridBoxItemStyle GridBoxOptions GridBoxSpacings GridCreationSettings GridDefaultElement GridElementStyleOptions GridFrame GridFrameMargins GridGraph GridLines GridLinesStyle GroebnerBasis GroupActionBase GroupCentralizer GroupElementFromWord GroupElementPosition GroupElementQ GroupElements GroupElementToWord GroupGenerators GroupMultiplicationTable GroupOrbits GroupOrder GroupPageBreakWithin GroupSetwiseStabilizer GroupStabilizer GroupStabilizerChain Gudermannian GumbelDistribution HaarWavelet HadamardMatrix HalfNormalDistribution HamiltonianGraphQ HammingDistance HammingWindow HankelH1 HankelH2 HankelMatrix HannPoissonWindow HannWindow HaradaNortonGroupHN HararyGraph HarmonicMean HarmonicMeanFilter HarmonicNumber Hash HashTable Haversine HazardFunction Head HeadCompose Heads HeavisideLambda HeavisidePi HeavisideTheta HeldGroupHe HeldPart HelpBrowserLookup HelpBrowserNotebook HelpBrowserSettings HermiteDecomposition HermiteH HermitianMatrixQ HessenbergDecomposition Hessian HexadecimalCharacter Hexahedron HexahedronBox HexahedronBoxOptions HiddenSurface HighlightGraph HighlightImage HighpassFilter HigmanSimsGroupHS HilbertFilter HilbertMatrix Histogram Histogram3D HistogramDistribution HistogramList HistogramTransform HistogramTransformInterpolation HitMissTransform HITSCentrality HodgeDual HoeffdingD HoeffdingDTest Hold HoldAll HoldAllComplete HoldComplete HoldFirst HoldForm HoldPattern HoldRest HolidayCalendar HomeDirectory HomePage Horizontal HorizontalForm HorizontalGauge HorizontalScrollPosition HornerForm HotellingTSquareDistribution HoytDistribution HTMLSave Hue HumpDownHump HumpEqual HurwitzLerchPhi HurwitzZeta HyperbolicDistribution HypercubeGraph HyperexponentialDistribution Hyperfactorial Hypergeometric0F1 Hypergeometric0F1Regularized Hypergeometric1F1 Hypergeometric1F1Regularized Hypergeometric2F1 Hypergeometric2F1Regularized HypergeometricDistribution HypergeometricPFQ HypergeometricPFQRegularized HypergeometricU Hyperlink HyperlinkCreationSettings Hyphenation HyphenationOptions HypoexponentialDistribution HypothesisTestData I Identity IdentityMatrix If IgnoreCase Im Image Image3D Image3DSlices ImageAccumulate ImageAdd ImageAdjust ImageAlign ImageApply ImageAspectRatio ImageAssemble ImageCache ImageCacheValid ImageCapture ImageChannels ImageClip ImageColorSpace ImageCompose ImageConvolve ImageCooccurrence ImageCorners ImageCorrelate ImageCorrespondingPoints ImageCrop ImageData ImageDataPacket ImageDeconvolve ImageDemosaic ImageDifference ImageDimensions ImageDistance ImageEffect ImageFeatureTrack ImageFileApply ImageFileFilter ImageFileScan ImageFilter ImageForestingComponents ImageForwardTransformation ImageHistogram ImageKeypoints ImageLevels ImageLines ImageMargins ImageMarkers ImageMeasurements ImageMultiply ImageOffset ImagePad ImagePadding ImagePartition ImagePeriodogram ImagePerspectiveTransformation ImageQ ImageRangeCache ImageReflect ImageRegion ImageResize ImageResolution ImageRotate ImageRotated ImageScaled ImageScan ImageSize ImageSizeAction ImageSizeCache ImageSizeMultipliers ImageSizeRaw ImageSubtract ImageTake ImageTransformation ImageTrim ImageType ImageValue ImageValuePositions Implies Import ImportAutoReplacements ImportString ImprovementImportance In IncidenceGraph IncidenceList IncidenceMatrix IncludeConstantBasis IncludeFileExtension IncludePods IncludeSingularTerm Increment Indent IndentingNewlineSpacings IndentMaxFraction IndependenceTest IndependentEdgeSetQ IndependentUnit IndependentVertexSetQ Indeterminate IndexCreationOptions Indexed IndexGraph IndexTag Inequality InexactNumberQ InexactNumbers Infinity Infix Information Inherited InheritScope Initialization InitializationCell InitializationCellEvaluation InitializationCellWarning InlineCounterAssignments InlineCounterIncrements InlineRules Inner Inpaint Input InputAliases InputAssumptions InputAutoReplacements InputField InputFieldBox InputFieldBoxOptions InputForm InputGrouping InputNamePacket InputNotebook InputPacket InputSettings InputStream InputString InputStringPacket InputToBoxFormPacket Insert InsertionPointObject InsertResults Inset Inset3DBox Inset3DBoxOptions InsetBox InsetBoxOptions Install InstallService InString Integer IntegerDigits IntegerExponent IntegerLength IntegerPart IntegerPartitions IntegerQ Integers IntegerString Integral Integrate Interactive InteractiveTradingChart Interlaced Interleaving InternallyBalancedDecomposition InterpolatingFunction InterpolatingPolynomial Interpolation InterpolationOrder InterpolationPoints InterpolationPrecision Interpretation InterpretationBox InterpretationBoxOptions InterpretationFunction InterpretTemplate InterquartileRange Interrupt InterruptSettings Intersection Interval IntervalIntersection IntervalMemberQ IntervalUnion Inverse InverseBetaRegularized InverseCDF InverseChiSquareDistribution InverseContinuousWaveletTransform InverseDistanceTransform InverseEllipticNomeQ InverseErf InverseErfc InverseFourier InverseFourierCosTransform InverseFourierSequenceTransform InverseFourierSinTransform InverseFourierTransform InverseFunction InverseFunctions InverseGammaDistribution InverseGammaRegularized InverseGaussianDistribution InverseGudermannian InverseHaversine InverseJacobiCD InverseJacobiCN InverseJacobiCS InverseJacobiDC InverseJacobiDN InverseJacobiDS InverseJacobiNC InverseJacobiND InverseJacobiNS InverseJacobiSC InverseJacobiSD InverseJacobiSN InverseLaplaceTransform InversePermutation InverseRadon InverseSeries InverseSurvivalFunction InverseWaveletTransform InverseWeierstrassP InverseZTransform Invisible InvisibleApplication InvisibleTimes IrreduciblePolynomialQ IsolatingInterval IsomorphicGraphQ IsotopeData Italic Item ItemBox ItemBoxOptions ItemSize ItemStyle ItoProcess JaccardDissimilarity JacobiAmplitude Jacobian JacobiCD JacobiCN JacobiCS JacobiDC JacobiDN JacobiDS JacobiNC JacobiND JacobiNS JacobiP JacobiSC JacobiSD JacobiSN JacobiSymbol JacobiZeta JankoGroupJ1 JankoGroupJ2 JankoGroupJ3 JankoGroupJ4 JarqueBeraALMTest JohnsonDistribution Join Joined JoinedCurve JoinedCurveBox JoinForm JordanDecomposition JordanModelDecomposition K KagiChart KaiserBesselWindow KaiserWindow KalmanEstimator KalmanFilter KarhunenLoeveDecomposition KaryTree KatzCentrality KCoreComponents KDistribution KelvinBei KelvinBer KelvinKei KelvinKer KendallTau KendallTauTest KernelExecute KernelMixtureDistribution KernelObject Kernels Ket Khinchin KirchhoffGraph KirchhoffMatrix KleinInvariantJ KnightTourGraph KnotData KnownUnitQ KolmogorovSmirnovTest KroneckerDelta KroneckerModelDecomposition KroneckerProduct KroneckerSymbol KuiperTest KumaraswamyDistribution Kurtosis KuwaharaFilter Label Labeled LabeledSlider LabelingFunction LabelStyle LaguerreL LambdaComponents LambertW LanczosWindow LandauDistribution Language LanguageCategory LaplaceDistribution LaplaceTransform Laplacian LaplacianFilter LaplacianGaussianFilter Large Larger Last Latitude LatitudeLongitude LatticeData LatticeReduce Launch LaunchKernels LayeredGraphPlot LayerSizeFunction LayoutInformation LCM LeafCount LeapYearQ LeastSquares LeastSquaresFilterKernel Left LeftArrow LeftArrowBar LeftArrowRightArrow LeftDownTeeVector LeftDownVector LeftDownVectorBar LeftRightArrow LeftRightVector LeftTee LeftTeeArrow LeftTeeVector LeftTriangle LeftTriangleBar LeftTriangleEqual LeftUpDownVector LeftUpTeeVector LeftUpVector LeftUpVectorBar LeftVector LeftVectorBar LegendAppearance Legended LegendFunction LegendLabel LegendLayout LegendMargins LegendMarkers LegendMarkerSize LegendreP LegendreQ LegendreType Length LengthWhile LerchPhi Less LessEqual LessEqualGreater LessFullEqual LessGreater LessLess LessSlantEqual LessTilde LetterCharacter LetterQ Level LeveneTest LeviCivitaTensor LevyDistribution Lexicographic LibraryFunction LibraryFunctionError LibraryFunctionInformation LibraryFunctionLoad LibraryFunctionUnload LibraryLoad LibraryUnload LicenseID LiftingFilterData LiftingWaveletTransform LightBlue LightBrown LightCyan Lighter LightGray LightGreen Lighting LightingAngle LightMagenta LightOrange LightPink LightPurple LightRed LightSources LightYellow Likelihood Limit LimitsPositioning LimitsPositioningTokens LindleyDistribution Line Line3DBox LinearFilter LinearFractionalTransform LinearModelFit LinearOffsetFunction LinearProgramming LinearRecurrence LinearSolve LinearSolveFunction LineBox LineBreak LinebreakAdjustments LineBreakChart LineBreakWithin LineColor LineForm LineGraph LineIndent LineIndentMaxFraction LineIntegralConvolutionPlot LineIntegralConvolutionScale LineLegend LineOpacity LineSpacing LineWrapParts LinkActivate LinkClose LinkConnect LinkConnectedQ LinkCreate LinkError LinkFlush LinkFunction LinkHost LinkInterrupt LinkLaunch LinkMode LinkObject LinkOpen LinkOptions LinkPatterns LinkProtocol LinkRead LinkReadHeld LinkReadyQ Links LinkWrite LinkWriteHeld LiouvilleLambda List Listable ListAnimate ListContourPlot ListContourPlot3D ListConvolve ListCorrelate ListCurvePathPlot ListDeconvolve ListDensityPlot Listen ListFourierSequenceTransform ListInterpolation ListLineIntegralConvolutionPlot ListLinePlot ListLogLinearPlot ListLogLogPlot ListLogPlot ListPicker ListPickerBox ListPickerBoxBackground ListPickerBoxOptions ListPlay ListPlot ListPlot3D ListPointPlot3D ListPolarPlot ListQ ListStreamDensityPlot ListStreamPlot ListSurfacePlot3D ListVectorDensityPlot ListVectorPlot ListVectorPlot3D ListZTransform Literal LiteralSearch LocalClusteringCoefficient LocalizeVariables LocationEquivalenceTest LocationTest Locator LocatorAutoCreate LocatorBox LocatorBoxOptions LocatorCentering LocatorPane LocatorPaneBox LocatorPaneBoxOptions LocatorRegion Locked Log Log10 Log2 LogBarnesG LogGamma LogGammaDistribution LogicalExpand LogIntegral LogisticDistribution LogitModelFit LogLikelihood LogLinearPlot LogLogisticDistribution LogLogPlot LogMultinormalDistribution LogNormalDistribution LogPlot LogRankTest LogSeriesDistribution LongEqual Longest LongestAscendingSequence LongestCommonSequence LongestCommonSequencePositions LongestCommonSubsequence LongestCommonSubsequencePositions LongestMatch LongForm Longitude LongLeftArrow LongLeftRightArrow LongRightArrow Loopback LoopFreeGraphQ LowerCaseQ LowerLeftArrow LowerRightArrow LowerTriangularize LowpassFilter LQEstimatorGains LQGRegulator LQOutputRegulatorGains LQRegulatorGains LUBackSubstitution LucasL LuccioSamiComponents LUDecomposition LyapunovSolve LyonsGroupLy MachineID MachineName MachineNumberQ MachinePrecision MacintoshSystemPageSetup Magenta Magnification Magnify MainSolve MaintainDynamicCaches Majority MakeBoxes MakeExpression MakeRules MangoldtLambda ManhattanDistance Manipulate Manipulator MannWhitneyTest MantissaExponent Manual Map MapAll MapAt MapIndexed MAProcess MapThread MarcumQ MardiaCombinedTest MardiaKurtosisTest MardiaSkewnessTest MarginalDistribution MarkovProcessProperties Masking MatchingDissimilarity MatchLocalNameQ MatchLocalNames MatchQ Material MathematicaNotation MathieuC MathieuCharacteristicA MathieuCharacteristicB MathieuCharacteristicExponent MathieuCPrime MathieuGroupM11 MathieuGroupM12 MathieuGroupM22 MathieuGroupM23 MathieuGroupM24 MathieuS MathieuSPrime MathMLForm MathMLText Matrices MatrixExp MatrixForm MatrixFunction MatrixLog MatrixPlot MatrixPower MatrixQ MatrixRank Max MaxBend MaxDetect MaxExtraBandwidths MaxExtraConditions MaxFeatures MaxFilter Maximize MaxIterations MaxMemoryUsed MaxMixtureKernels MaxPlotPoints MaxPoints MaxRecursion MaxStableDistribution MaxStepFraction MaxSteps MaxStepSize MaxValue MaxwellDistribution McLaughlinGroupMcL Mean MeanClusteringCoefficient MeanDegreeConnectivity MeanDeviation MeanFilter MeanGraphDistance MeanNeighborDegree MeanShift MeanShiftFilter Median MedianDeviation MedianFilter Medium MeijerG MeixnerDistribution MemberQ MemoryConstrained MemoryInUse Menu MenuAppearance MenuCommandKey MenuEvaluator MenuItem MenuPacket MenuSortingValue MenuStyle MenuView MergeDifferences Mesh MeshFunctions MeshRange MeshShading MeshStyle Message MessageDialog MessageList MessageName MessageOptions MessagePacket Messages MessagesNotebook MetaCharacters MetaInformation Method MethodOptions MexicanHatWavelet MeyerWavelet Min MinDetect MinFilter MinimalPolynomial MinimalStateSpaceModel Minimize Minors MinRecursion MinSize MinStableDistribution Minus MinusPlus MinValue Missing MissingDataMethod MittagLefflerE MixedRadix MixedRadixQuantity MixtureDistribution Mod Modal Mode Modular ModularLambda Module Modulus MoebiusMu Moment Momentary MomentConvert MomentEvaluate MomentGeneratingFunction Monday Monitor MonomialList MonomialOrder MonsterGroupM MorletWavelet MorphologicalBinarize MorphologicalBranchPoints MorphologicalComponents MorphologicalEulerNumber MorphologicalGraph MorphologicalPerimeter MorphologicalTransform Most MouseAnnotation MouseAppearance MouseAppearanceTag MouseButtons Mouseover MousePointerNote MousePosition MovingAverage MovingMedian MoyalDistribution MultiedgeStyle MultilaunchWarning MultiLetterItalics MultiLetterStyle MultilineFunction Multinomial MultinomialDistribution MultinormalDistribution MultiplicativeOrder Multiplicity Multiselection MultivariateHypergeometricDistribution MultivariatePoissonDistribution MultivariateTDistribution N NakagamiDistribution NameQ Names NamespaceBox Nand NArgMax NArgMin NBernoulliB NCache NDSolve NDSolveValue Nearest NearestFunction NeedCurrentFrontEndPackagePacket NeedCurrentFrontEndSymbolsPacket NeedlemanWunschSimilarity Needs Negative NegativeBinomialDistribution NegativeMultinomialDistribution NeighborhoodGraph Nest NestedGreaterGreater NestedLessLess NestedScriptRules NestList NestWhile NestWhileList NevilleThetaC NevilleThetaD NevilleThetaN NevilleThetaS NewPrimitiveStyle NExpectation Next NextPrime NHoldAll NHoldFirst NHoldRest NicholsGridLines NicholsPlot NIntegrate NMaximize NMaxValue NMinimize NMinValue NominalVariables NonAssociative NoncentralBetaDistribution NoncentralChiSquareDistribution NoncentralFRatioDistribution NoncentralStudentTDistribution NonCommutativeMultiply NonConstants None NonlinearModelFit NonlocalMeansFilter NonNegative NonPositive Nor NorlundB Norm Normal NormalDistribution NormalGrouping Normalize NormalizedSquaredEuclideanDistance NormalsFunction NormFunction Not NotCongruent NotCupCap NotDoubleVerticalBar Notebook NotebookApply NotebookAutoSave NotebookClose NotebookConvertSettings NotebookCreate NotebookCreateReturnObject NotebookDefault NotebookDelete NotebookDirectory NotebookDynamicExpression NotebookEvaluate NotebookEventActions NotebookFileName NotebookFind NotebookFindReturnObject NotebookGet NotebookGetLayoutInformationPacket NotebookGetMisspellingsPacket NotebookInformation NotebookInterfaceObject NotebookLocate NotebookObject NotebookOpen NotebookOpenReturnObject NotebookPath NotebookPrint NotebookPut NotebookPutReturnObject NotebookRead NotebookResetGeneratedCells Notebooks NotebookSave NotebookSaveAs NotebookSelection NotebookSetupLayoutInformationPacket NotebooksMenu NotebookWrite NotElement NotEqualTilde NotExists NotGreater NotGreaterEqual NotGreaterFullEqual NotGreaterGreater NotGreaterLess NotGreaterSlantEqual NotGreaterTilde NotHumpDownHump NotHumpEqual NotLeftTriangle NotLeftTriangleBar NotLeftTriangleEqual NotLess NotLessEqual NotLessFullEqual NotLessGreater NotLessLess NotLessSlantEqual NotLessTilde NotNestedGreaterGreater NotNestedLessLess NotPrecedes NotPrecedesEqual NotPrecedesSlantEqual NotPrecedesTilde NotReverseElement NotRightTriangle NotRightTriangleBar NotRightTriangleEqual NotSquareSubset NotSquareSubsetEqual NotSquareSuperset NotSquareSupersetEqual NotSubset NotSubsetEqual NotSucceeds NotSucceedsEqual NotSucceedsSlantEqual NotSucceedsTilde NotSuperset NotSupersetEqual NotTilde NotTildeEqual NotTildeFullEqual NotTildeTilde NotVerticalBar NProbability NProduct NProductFactors NRoots NSolve NSum NSumTerms Null NullRecords NullSpace NullWords Number NumberFieldClassNumber NumberFieldDiscriminant NumberFieldFundamentalUnits NumberFieldIntegralBasis NumberFieldNormRepresentatives NumberFieldRegulator NumberFieldRootsOfUnity NumberFieldSignature NumberForm NumberFormat NumberMarks NumberMultiplier NumberPadding NumberPoint NumberQ NumberSeparator NumberSigns NumberString Numerator NumericFunction NumericQ NuttallWindow NValues NyquistGridLines NyquistPlot O ObservabilityGramian ObservabilityMatrix ObservableDecomposition ObservableModelQ OddQ Off Offset OLEData On ONanGroupON OneIdentity Opacity Open OpenAppend Opener OpenerBox OpenerBoxOptions OpenerView OpenFunctionInspectorPacket Opening OpenRead OpenSpecialOptions OpenTemporary OpenWrite Operate OperatingSystem OptimumFlowData Optional OptionInspectorSettings OptionQ Options OptionsPacket OptionsPattern OptionValue OptionValueBox OptionValueBoxOptions Or Orange Order OrderDistribution OrderedQ Ordering Orderless OrnsteinUhlenbeckProcess Orthogonalize Out Outer OutputAutoOverwrite OutputControllabilityMatrix OutputControllableModelQ OutputForm OutputFormData OutputGrouping OutputMathEditExpression OutputNamePacket OutputResponse OutputSizeLimit OutputStream Over OverBar OverDot Overflow OverHat Overlaps Overlay OverlayBox OverlayBoxOptions Overscript OverscriptBox OverscriptBoxOptions OverTilde OverVector OwenT OwnValues PackingMethod PaddedForm Padding PadeApproximant PadLeft PadRight PageBreakAbove PageBreakBelow PageBreakWithin PageFooterLines PageFooters PageHeaderLines PageHeaders PageHeight PageRankCentrality PageWidth PairedBarChart PairedHistogram PairedSmoothHistogram PairedTTest PairedZTest PaletteNotebook PalettePath Pane PaneBox PaneBoxOptions Panel PanelBox PanelBoxOptions Paneled PaneSelector PaneSelectorBox PaneSelectorBoxOptions PaperWidth ParabolicCylinderD ParagraphIndent ParagraphSpacing ParallelArray ParallelCombine ParallelDo ParallelEvaluate Parallelization Parallelize ParallelMap ParallelNeeds ParallelProduct ParallelSubmit ParallelSum ParallelTable ParallelTry Parameter ParameterEstimator ParameterMixtureDistribution ParameterVariables ParametricFunction ParametricNDSolve ParametricNDSolveValue ParametricPlot ParametricPlot3D ParentConnect ParentDirectory ParentForm Parenthesize ParentList ParetoDistribution Part PartialCorrelationFunction PartialD ParticleData Partition PartitionsP PartitionsQ ParzenWindow PascalDistribution PassEventsDown PassEventsUp Paste PasteBoxFormInlineCells PasteButton Path PathGraph PathGraphQ Pattern PatternSequence PatternTest PauliMatrix PaulWavelet Pause PausedTime PDF PearsonChiSquareTest PearsonCorrelationTest PearsonDistribution PerformanceGoal PeriodicInterpolation Periodogram PeriodogramArray PermutationCycles PermutationCyclesQ PermutationGroup PermutationLength PermutationList PermutationListQ PermutationMax PermutationMin PermutationOrder PermutationPower PermutationProduct PermutationReplace Permutations PermutationSupport Permute PeronaMalikFilter Perpendicular PERTDistribution PetersenGraph PhaseMargins Pi Pick PIDData PIDDerivativeFilter PIDFeedforward PIDTune Piecewise PiecewiseExpand PieChart PieChart3D PillaiTrace PillaiTraceTest Pink Pivoting PixelConstrained PixelValue PixelValuePositions Placed Placeholder PlaceholderReplace Plain PlanarGraphQ Play PlayRange Plot Plot3D Plot3Matrix PlotDivision PlotJoined PlotLabel PlotLayout PlotLegends PlotMarkers PlotPoints PlotRange PlotRangeClipping PlotRangePadding PlotRegion PlotStyle Plus PlusMinus Pochhammer PodStates PodWidth Point Point3DBox PointBox PointFigureChart PointForm PointLegend PointSize PoissonConsulDistribution PoissonDistribution PoissonProcess PoissonWindow PolarAxes PolarAxesOrigin PolarGridLines PolarPlot PolarTicks PoleZeroMarkers PolyaAeppliDistribution PolyGamma Polygon Polygon3DBox Polygon3DBoxOptions PolygonBox PolygonBoxOptions PolygonHoleScale PolygonIntersections PolygonScale PolyhedronData PolyLog PolynomialExtendedGCD PolynomialForm PolynomialGCD PolynomialLCM PolynomialMod PolynomialQ PolynomialQuotient PolynomialQuotientRemainder PolynomialReduce PolynomialRemainder Polynomials PopupMenu PopupMenuBox PopupMenuBoxOptions PopupView PopupWindow Position Positive PositiveDefiniteMatrixQ PossibleZeroQ Postfix PostScript Power PowerDistribution PowerExpand PowerMod PowerModList PowerSpectralDensity PowersRepresentations PowerSymmetricPolynomial Precedence PrecedenceForm Precedes PrecedesEqual PrecedesSlantEqual PrecedesTilde Precision PrecisionGoal PreDecrement PredictionRoot PreemptProtect PreferencesPath Prefix PreIncrement Prepend PrependTo PreserveImageOptions Previous PriceGraphDistribution PrimaryPlaceholder Prime PrimeNu PrimeOmega PrimePi PrimePowerQ PrimeQ Primes PrimeZetaP PrimitiveRoot PrincipalComponents PrincipalValue Print PrintAction PrintForm PrintingCopies PrintingOptions PrintingPageRange PrintingStartingPageNumber PrintingStyleEnvironment PrintPrecision PrintTemporary Prism PrismBox PrismBoxOptions PrivateCellOptions PrivateEvaluationOptions PrivateFontOptions PrivateFrontEndOptions PrivateNotebookOptions PrivatePaths Probability ProbabilityDistribution ProbabilityPlot ProbabilityPr ProbabilityScalePlot ProbitModelFit ProcessEstimator ProcessParameterAssumptions ProcessParameterQ ProcessStateDomain ProcessTimeDomain Product ProductDistribution ProductLog ProgressIndicator ProgressIndicatorBox ProgressIndicatorBoxOptions Projection Prolog PromptForm Properties Property PropertyList PropertyValue Proportion Proportional Protect Protected ProteinData Pruning PseudoInverse Purple Put PutAppend Pyramid PyramidBox PyramidBoxOptions QBinomial QFactorial QGamma QHypergeometricPFQ QPochhammer QPolyGamma QRDecomposition QuadraticIrrationalQ Quantile QuantilePlot Quantity QuantityForm QuantityMagnitude QuantityQ QuantityUnit Quartics QuartileDeviation Quartiles QuartileSkewness QueueingNetworkProcess QueueingProcess QueueProperties Quiet Quit Quotient QuotientRemainder RadialityCentrality RadicalBox RadicalBoxOptions RadioButton RadioButtonBar RadioButtonBox RadioButtonBoxOptions Radon RamanujanTau RamanujanTauL RamanujanTauTheta RamanujanTauZ Random RandomChoice RandomComplex RandomFunction RandomGraph RandomImage RandomInteger RandomPermutation RandomPrime RandomReal RandomSample RandomSeed RandomVariate RandomWalkProcess Range RangeFilter RangeSpecification RankedMax RankedMin Raster Raster3D Raster3DBox Raster3DBoxOptions RasterArray RasterBox RasterBoxOptions Rasterize RasterSize Rational RationalFunctions Rationalize Rationals Ratios Raw RawArray RawBoxes RawData RawMedium RayleighDistribution Re Read ReadList ReadProtected Real RealBlockDiagonalForm RealDigits RealExponent Reals Reap Record RecordLists RecordSeparators Rectangle RectangleBox RectangleBoxOptions RectangleChart RectangleChart3D RecurrenceFilter RecurrenceTable RecurringDigitsForm Red Reduce RefBox ReferenceLineStyle ReferenceMarkers ReferenceMarkerStyle Refine ReflectionMatrix ReflectionTransform Refresh RefreshRate RegionBinarize RegionFunction RegionPlot RegionPlot3D RegularExpression Regularization Reinstall Release ReleaseHold ReliabilityDistribution ReliefImage ReliefPlot Remove RemoveAlphaChannel RemoveAsynchronousTask Removed RemoveInputStreamMethod RemoveOutputStreamMethod RemoveProperty RemoveScheduledTask RenameDirectory RenameFile RenderAll RenderingOptions RenewalProcess RenkoChart Repeated RepeatedNull RepeatedString Replace ReplaceAll ReplaceHeldPart ReplaceImageValue ReplaceList ReplacePart ReplacePixelValue ReplaceRepeated Resampling Rescale RescalingTransform ResetDirectory ResetMenusPacket ResetScheduledTask Residue Resolve Rest Resultant ResumePacket Return ReturnExpressionPacket ReturnInputFormPacket ReturnPacket ReturnTextPacket Reverse ReverseBiorthogonalSplineWavelet ReverseElement ReverseEquilibrium ReverseGraph ReverseUpEquilibrium RevolutionAxis RevolutionPlot3D RGBColor RiccatiSolve RiceDistribution RidgeFilter RiemannR RiemannSiegelTheta RiemannSiegelZ Riffle Right RightArrow RightArrowBar RightArrowLeftArrow RightCosetRepresentative RightDownTeeVector RightDownVector RightDownVectorBar RightTee RightTeeArrow RightTeeVector RightTriangle RightTriangleBar RightTriangleEqual RightUpDownVector RightUpTeeVector RightUpVector RightUpVectorBar RightVector RightVectorBar RiskAchievementImportance RiskReductionImportance RogersTanimotoDissimilarity Root RootApproximant RootIntervals RootLocusPlot RootMeanSquare RootOfUnityQ RootReduce Roots RootSum Rotate RotateLabel RotateLeft RotateRight RotationAction RotationBox RotationBoxOptions RotationMatrix RotationTransform Round RoundImplies RoundingRadius Row RowAlignments RowBackgrounds RowBox RowHeights RowLines RowMinHeight RowReduce RowsEqual RowSpacings RSolve RudvalisGroupRu Rule RuleCondition RuleDelayed RuleForm RulerUnits Run RunScheduledTask RunThrough RuntimeAttributes RuntimeOptions RussellRaoDissimilarity SameQ SameTest SampleDepth SampledSoundFunction SampledSoundList SampleRate SamplingPeriod SARIMAProcess SARMAProcess SatisfiabilityCount SatisfiabilityInstances SatisfiableQ Saturday Save Saveable SaveAutoDelete SaveDefinitions SawtoothWave Scale Scaled ScaleDivisions ScaledMousePosition ScaleOrigin ScalePadding ScaleRanges ScaleRangeStyle ScalingFunctions ScalingMatrix ScalingTransform Scan ScheduledTaskActiveQ ScheduledTaskData ScheduledTaskObject ScheduledTasks SchurDecomposition ScientificForm ScreenRectangle ScreenStyleEnvironment ScriptBaselineShifts ScriptLevel ScriptMinSize ScriptRules ScriptSizeMultipliers Scrollbars ScrollingOptions ScrollPosition Sec Sech SechDistribution SectionGrouping SectorChart SectorChart3D SectorOrigin SectorSpacing SeedRandom Select Selectable SelectComponents SelectedCells SelectedNotebook Selection SelectionAnimate SelectionCell SelectionCellCreateCell SelectionCellDefaultStyle SelectionCellParentStyle SelectionCreateCell SelectionDebuggerTag SelectionDuplicateCell SelectionEvaluate SelectionEvaluateCreateCell SelectionMove SelectionPlaceholder SelectionSetStyle SelectWithContents SelfLoops SelfLoopStyle SemialgebraicComponentInstances SendMail Sequence SequenceAlignment SequenceForm SequenceHold SequenceLimit Series SeriesCoefficient SeriesData SessionTime Set SetAccuracy SetAlphaChannel SetAttributes Setbacks SetBoxFormNamesPacket SetDelayed SetDirectory SetEnvironment SetEvaluationNotebook SetFileDate SetFileLoadingContext SetNotebookStatusLine SetOptions SetOptionsPacket SetPrecision SetProperty SetSelectedNotebook SetSharedFunction SetSharedVariable SetSpeechParametersPacket SetStreamPosition SetSystemOptions Setter SetterBar SetterBox SetterBoxOptions Setting SetValue Shading Shallow ShannonWavelet ShapiroWilkTest Share Sharpen ShearingMatrix ShearingTransform ShenCastanMatrix Short ShortDownArrow Shortest ShortestMatch ShortestPathFunction ShortLeftArrow ShortRightArrow ShortUpArrow Show ShowAutoStyles ShowCellBracket ShowCellLabel ShowCellTags ShowClosedCellArea ShowContents ShowControls ShowCursorTracker ShowGroupOpenCloseIcon ShowGroupOpener ShowInvisibleCharacters ShowPageBreaks ShowPredictiveInterface ShowSelection ShowShortBoxForm ShowSpecialCharacters ShowStringCharacters ShowSyntaxStyles ShrinkingDelay ShrinkWrapBoundingBox SiegelTheta SiegelTukeyTest Sign Signature SignedRankTest SignificanceLevel SignPadding SignTest SimilarityRules SimpleGraph SimpleGraphQ Simplify Sin Sinc SinghMaddalaDistribution SingleEvaluation SingleLetterItalics SingleLetterStyle SingularValueDecomposition SingularValueList SingularValuePlot SingularValues Sinh SinhIntegral SinIntegral SixJSymbol Skeleton SkeletonTransform SkellamDistribution Skewness SkewNormalDistribution Skip SliceDistribution Slider Slider2D Slider2DBox Slider2DBoxOptions SliderBox SliderBoxOptions SlideView Slot SlotSequence Small SmallCircle Smaller SmithDelayCompensator SmithWatermanSimilarity SmoothDensityHistogram SmoothHistogram SmoothHistogram3D SmoothKernelDistribution SocialMediaData Socket SokalSneathDissimilarity Solve SolveAlways SolveDelayed Sort SortBy Sound SoundAndGraphics SoundNote SoundVolume Sow Space SpaceForm Spacer Spacings Span SpanAdjustments SpanCharacterRounding SpanFromAbove SpanFromBoth SpanFromLeft SpanLineThickness SpanMaxSize SpanMinSize SpanningCharacters SpanSymmetric SparseArray SpatialGraphDistribution Speak SpeakTextPacket SpearmanRankTest SpearmanRho Spectrogram SpectrogramArray Specularity SpellingCorrection SpellingDictionaries SpellingDictionariesPath SpellingOptions SpellingSuggestionsPacket Sphere SphereBox SphericalBesselJ SphericalBesselY SphericalHankelH1 SphericalHankelH2 SphericalHarmonicY SphericalPlot3D SphericalRegion SpheroidalEigenvalue SpheroidalJoiningFactor SpheroidalPS SpheroidalPSPrime SpheroidalQS SpheroidalQSPrime SpheroidalRadialFactor SpheroidalS1 SpheroidalS1Prime SpheroidalS2 SpheroidalS2Prime Splice SplicedDistribution SplineClosed SplineDegree SplineKnots SplineWeights Split SplitBy SpokenString Sqrt SqrtBox SqrtBoxOptions Square SquaredEuclideanDistance SquareFreeQ SquareIntersection SquaresR SquareSubset SquareSubsetEqual SquareSuperset SquareSupersetEqual SquareUnion SquareWave StabilityMargins StabilityMarginsStyle StableDistribution Stack StackBegin StackComplete StackInhibit StandardDeviation StandardDeviationFilter StandardForm Standardize StandbyDistribution Star StarGraph StartAsynchronousTask StartingStepSize StartOfLine StartOfString StartScheduledTask StartupSound StateDimensions StateFeedbackGains StateOutputEstimator StateResponse StateSpaceModel StateSpaceRealization StateSpaceTransform StationaryDistribution StationaryWaveletPacketTransform StationaryWaveletTransform StatusArea StatusCentrality StepMonitor StieltjesGamma StirlingS1 StirlingS2 StopAsynchronousTask StopScheduledTask StrataVariables StratonovichProcess StreamColorFunction StreamColorFunctionScaling StreamDensityPlot StreamPlot StreamPoints StreamPosition Streams StreamScale StreamStyle String StringBreak StringByteCount StringCases StringCount StringDrop StringExpression StringForm StringFormat StringFreeQ StringInsert StringJoin StringLength StringMatchQ StringPosition StringQ StringReplace StringReplaceList StringReplacePart StringReverse StringRotateLeft StringRotateRight StringSkeleton StringSplit StringTake StringToStream StringTrim StripBoxes StripOnInput StripWrapperBoxes StrokeForm StructuralImportance StructuredArray StructuredSelection StruveH StruveL Stub StudentTDistribution Style StyleBox StyleBoxAutoDelete StyleBoxOptions StyleData StyleDefinitions StyleForm StyleKeyMapping StyleMenuListing StyleNameDialogSettings StyleNames StylePrint StyleSheetPath Subfactorial Subgraph SubMinus SubPlus SubresultantPolynomialRemainders SubresultantPolynomials Subresultants Subscript SubscriptBox SubscriptBoxOptions Subscripted Subset SubsetEqual Subsets SubStar Subsuperscript SubsuperscriptBox SubsuperscriptBoxOptions Subtract SubtractFrom SubValues Succeeds SucceedsEqual SucceedsSlantEqual SucceedsTilde SuchThat Sum SumConvergence Sunday SuperDagger SuperMinus SuperPlus Superscript SuperscriptBox SuperscriptBoxOptions Superset SupersetEqual SuperStar Surd SurdForm SurfaceColor SurfaceGraphics SurvivalDistribution SurvivalFunction SurvivalModel SurvivalModelFit SuspendPacket SuzukiDistribution SuzukiGroupSuz SwatchLegend Switch Symbol SymbolName SymletWavelet Symmetric SymmetricGroup SymmetricMatrixQ SymmetricPolynomial SymmetricReduction Symmetrize SymmetrizedArray SymmetrizedArrayRules SymmetrizedDependentComponents SymmetrizedIndependentComponents SymmetrizedReplacePart SynchronousInitialization SynchronousUpdating Syntax SyntaxForm SyntaxInformation SyntaxLength SyntaxPacket SyntaxQ SystemDialogInput SystemException SystemHelpPath SystemInformation SystemInformationData SystemOpen SystemOptions SystemsModelDelay SystemsModelDelayApproximate SystemsModelDelete SystemsModelDimensions SystemsModelExtract SystemsModelFeedbackConnect SystemsModelLabels SystemsModelOrder SystemsModelParallelConnect SystemsModelSeriesConnect SystemsModelStateFeedbackConnect SystemStub Tab TabFilling Table TableAlignments TableDepth TableDirections TableForm TableHeadings TableSpacing TableView TableViewBox TabSpacings TabView TabViewBox TabViewBoxOptions TagBox TagBoxNote TagBoxOptions TaggingRules TagSet TagSetDelayed TagStyle TagUnset Take TakeWhile Tally Tan Tanh TargetFunctions TargetUnits TautologyQ TelegraphProcess TemplateBox TemplateBoxOptions TemplateSlotSequence TemporalData Temporary TemporaryVariable TensorContract TensorDimensions TensorExpand TensorProduct TensorQ TensorRank TensorReduce TensorSymmetry TensorTranspose TensorWedge Tetrahedron TetrahedronBox TetrahedronBoxOptions TeXForm TeXSave Text Text3DBox Text3DBoxOptions TextAlignment TextBand TextBoundingBox TextBox TextCell TextClipboardType TextData TextForm TextJustification TextLine TextPacket TextParagraph TextRecognize TextRendering TextStyle Texture TextureCoordinateFunction TextureCoordinateScaling Therefore ThermometerGauge Thick Thickness Thin Thinning ThisLink ThompsonGroupTh Thread ThreeJSymbol Threshold Through Throw Thumbnail Thursday Ticks TicksStyle Tilde TildeEqual TildeFullEqual TildeTilde TimeConstrained TimeConstraint Times TimesBy TimeSeriesForecast TimeSeriesInvertibility TimeUsed TimeValue TimeZone Timing Tiny TitleGrouping TitsGroupT ToBoxes ToCharacterCode ToColor ToContinuousTimeModel ToDate ToDiscreteTimeModel ToeplitzMatrix ToExpression ToFileName Together Toggle ToggleFalse Toggler TogglerBar TogglerBox TogglerBoxOptions ToHeldExpression ToInvertibleTimeSeries TokenWords Tolerance ToLowerCase ToNumberField TooBig Tooltip TooltipBox TooltipBoxOptions TooltipDelay TooltipStyle Top TopHatTransform TopologicalSort ToRadicals ToRules ToString Total TotalHeight TotalVariationFilter TotalWidth TouchscreenAutoZoom TouchscreenControlPlacement ToUpperCase Tr Trace TraceAbove TraceAction TraceBackward TraceDepth TraceDialog TraceForward TraceInternal TraceLevel TraceOff TraceOn TraceOriginal TracePrint TraceScan TrackedSymbols TradingChart TraditionalForm TraditionalFunctionNotation TraditionalNotation TraditionalOrder TransferFunctionCancel TransferFunctionExpand TransferFunctionFactor TransferFunctionModel TransferFunctionPoles TransferFunctionTransform TransferFunctionZeros TransformationFunction TransformationFunctions TransformationMatrix TransformedDistribution TransformedField Translate TranslationTransform TransparentColor Transpose TreeForm TreeGraph TreeGraphQ TreePlot TrendStyle TriangleWave TriangularDistribution Trig TrigExpand TrigFactor TrigFactorList Trigger TrigReduce TrigToExp TrimmedMean True TrueQ TruncatedDistribution TsallisQExponentialDistribution TsallisQGaussianDistribution TTest Tube TubeBezierCurveBox TubeBezierCurveBoxOptions TubeBox TubeBSplineCurveBox TubeBSplineCurveBoxOptions Tuesday TukeyLambdaDistribution TukeyWindow Tuples TuranGraph TuringMachine Transparent UnateQ Uncompress Undefined UnderBar Underflow Underlined Underoverscript UnderoverscriptBox UnderoverscriptBoxOptions Underscript UnderscriptBox UnderscriptBoxOptions UndirectedEdge UndirectedGraph UndirectedGraphQ UndocumentedTestFEParserPacket UndocumentedTestGetSelectionPacket Unequal Unevaluated UniformDistribution UniformGraphDistribution UniformSumDistribution Uninstall Union UnionPlus Unique UnitBox UnitConvert UnitDimensions Unitize UnitRootTest UnitSimplify UnitStep UnitTriangle UnitVector Unprotect UnsameQ UnsavedVariables Unset UnsetShared UntrackedVariables Up UpArrow UpArrowBar UpArrowDownArrow Update UpdateDynamicObjects UpdateDynamicObjectsSynchronous UpdateInterval UpDownArrow UpEquilibrium UpperCaseQ UpperLeftArrow UpperRightArrow UpperTriangularize Upsample UpSet UpSetDelayed UpTee UpTeeArrow UpValues URL URLFetch URLFetchAsynchronous URLSave URLSaveAsynchronous UseGraphicsRange Using UsingFrontEnd V2Get ValidationLength Value ValueBox ValueBoxOptions ValueForm ValueQ ValuesData Variables Variance VarianceEquivalenceTest VarianceEstimatorFunction VarianceGammaDistribution VarianceTest VectorAngle VectorColorFunction VectorColorFunctionScaling VectorDensityPlot VectorGlyphData VectorPlot VectorPlot3D VectorPoints VectorQ Vectors VectorScale VectorStyle Vee Verbatim Verbose VerboseConvertToPostScriptPacket VerifyConvergence VerifySolutions VerifyTestAssumptions Version VersionNumber VertexAdd VertexCapacity VertexColors VertexComponent VertexConnectivity VertexCoordinateRules VertexCoordinates VertexCorrelationSimilarity VertexCosineSimilarity VertexCount VertexCoverQ VertexDataCoordinates VertexDegree VertexDelete VertexDiceSimilarity VertexEccentricity VertexInComponent VertexInDegree VertexIndex VertexJaccardSimilarity VertexLabeling VertexLabels VertexLabelStyle VertexList VertexNormals VertexOutComponent VertexOutDegree VertexQ VertexRenderingFunction VertexReplace VertexShape VertexShapeFunction VertexSize VertexStyle VertexTextureCoordinates VertexWeight Vertical VerticalBar VerticalForm VerticalGauge VerticalSeparator VerticalSlider VerticalTilde ViewAngle ViewCenter ViewMatrix ViewPoint ViewPointSelectorSettings ViewPort ViewRange ViewVector ViewVertical VirtualGroupData Visible VisibleCell VoigtDistribution VonMisesDistribution WaitAll WaitAsynchronousTask WaitNext WaitUntil WakebyDistribution WalleniusHypergeometricDistribution WaringYuleDistribution WatershedComponents WatsonUSquareTest WattsStrogatzGraphDistribution WaveletBestBasis WaveletFilterCoefficients WaveletImagePlot WaveletListPlot WaveletMapIndexed WaveletMatrixPlot WaveletPhi WaveletPsi WaveletScale WaveletScalogram WaveletThreshold WeaklyConnectedComponents WeaklyConnectedGraphQ WeakStationarity WeatherData WeberE Wedge Wednesday WeibullDistribution WeierstrassHalfPeriods WeierstrassInvariants WeierstrassP WeierstrassPPrime WeierstrassSigma WeierstrassZeta WeightedAdjacencyGraph WeightedAdjacencyMatrix WeightedData WeightedGraphQ Weights WelchWindow WheelGraph WhenEvent Which While White Whitespace WhitespaceCharacter WhittakerM WhittakerW WienerFilter WienerProcess WignerD WignerSemicircleDistribution WilksW WilksWTest WindowClickSelect WindowElements WindowFloating WindowFrame WindowFrameElements WindowMargins WindowMovable WindowOpacity WindowSelected WindowSize WindowStatusArea WindowTitle WindowToolbars WindowWidth With WolframAlpha WolframAlphaDate WolframAlphaQuantity WolframAlphaResult Word WordBoundary WordCharacter WordData WordSearch WordSeparators WorkingPrecision Write WriteString Wronskian XMLElement XMLObject Xnor Xor Yellow YuleDissimilarity ZernikeR ZeroSymmetric ZeroTest ZeroWidthTimes Zeta ZetaZero ZipfDistribution ZTest ZTransform $Aborted $ActivationGroupID $ActivationKey $ActivationUserRegistered $AddOnsDirectory $AssertFunction $Assumptions $AsynchronousTask $BaseDirectory $BatchInput $BatchOutput $BoxForms $ByteOrdering $Canceled $CharacterEncoding $CharacterEncodings $CommandLine $CompilationTarget $ConditionHold $ConfiguredKernels $Context $ContextPath $ControlActiveSetting $CreationDate $CurrentLink $DateStringFormat $DefaultFont $DefaultFrontEnd $DefaultImagingDevice $DefaultPath $Display $DisplayFunction $DistributedContexts $DynamicEvaluation $Echo $Epilog $ExportFormats $Failed $FinancialDataSource $FormatType $FrontEnd $FrontEndSession $GeoLocation $HistoryLength $HomeDirectory $HTTPCookies $IgnoreEOF $ImagingDevices $ImportFormats $InitialDirectory $Input $InputFileName $InputStreamMethods $Inspector $InstallationDate $InstallationDirectory $InterfaceEnvironment $IterationLimit $KernelCount $KernelID $Language $LaunchDirectory $LibraryPath $LicenseExpirationDate $LicenseID $LicenseProcesses $LicenseServer $LicenseSubprocesses $LicenseType $Line $Linked $LinkSupported $LoadedFiles $MachineAddresses $MachineDomain $MachineDomains $MachineEpsilon $MachineID $MachineName $MachinePrecision $MachineType $MaxExtraPrecision $MaxLicenseProcesses $MaxLicenseSubprocesses $MaxMachineNumber $MaxNumber $MaxPiecewiseCases $MaxPrecision $MaxRootDegree $MessageGroups $MessageList $MessagePrePrint $Messages $MinMachineNumber $MinNumber $MinorReleaseNumber $MinPrecision $ModuleNumber $NetworkLicense $NewMessage $NewSymbol $Notebooks $NumberMarks $Off $OperatingSystem $Output $OutputForms $OutputSizeLimit $OutputStreamMethods $Packages $ParentLink $ParentProcessID $PasswordFile $PatchLevelID $Path $PathnameSeparator $PerformanceGoal $PipeSupported $Post $Pre $PreferencesDirectory $PrePrint $PreRead $PrintForms $PrintLiteral $ProcessID $ProcessorCount $ProcessorType $ProductInformation $ProgramName $RandomState $RecursionLimit $ReleaseNumber $RootDirectory $ScheduledTask $ScriptCommandLine $SessionID $SetParentLink $SharedFunctions $SharedVariables $SoundDisplay $SoundDisplayFunction $SuppressInputFormHeads $SynchronousEvaluation $SyntaxHandler $System $SystemCharacterEncoding $SystemID $SystemWordLength $TemporaryDirectory $TemporaryPrefix $TextStyle $TimedOut $TimeUnit $TimeZone $TopDirectory $TraceOff $TraceOn $TracePattern $TracePostAction $TracePreAction $Urgent $UserAddOnsDirectory $UserBaseDirectory $UserDocumentsDirectory $UserName $Version $VersionNumber", -c:[{cN:"comment",b:/\(\*/,e:/\*\)/},e.ASM,e.QSM,e.CNM,{cN:"list",b:/\{/,e:/\}/,i:/:/}]}});hljs.registerLanguage("python",function(e){var r={cN:"prompt",b:/^(>>>|\.\.\.) /},b={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[r],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[r],r:10},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},e.ASM,e.QSM]},a={cN:"number",r:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},l={cN:"params",b:/\(/,e:/\)/,c:["self",r,a,b]};return{aliases:["py","gyp"],k:{keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},i:/(<\/|->|\?)/,c:[r,a,b,e.HCM,{v:[{cN:"function",bK:"def",r:10},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,l]},{cN:"decorator",b:/^[\t ]*@/,e:/$/},{b:/\b(print|exec)\(/}]}});hljs.registerLanguage("java",function(e){var a=e.UIR+"(<"+e.UIR+">)?",t="false synchronized int abstract float private char boolean static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private",c="\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",r={cN:"number",b:c,r:0};return{aliases:["jsp"],k:t,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{r:0,c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"new throw return else",r:0},{cN:"function",b:"("+a+"\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:t,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:t,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},r,{cN:"annotation",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("nginx",function(e){var r={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+e.UIR}]},b={eW:!0,l:"[a-z/_]+",k:{built_in:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},r:0,i:"=>",c:[e.HCM,{cN:"string",c:[e.BE,r],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{cN:"url",b:"([a-z]+):/",e:"\\s",eW:!0,eE:!0,c:[r]},{cN:"regexp",c:[e.BE,r],v:[{b:"\\s\\^",e:"\\s|{|;",rE:!0},{b:"~\\*?\\s+",e:"\\s|{|;",rE:!0},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",r:0},r]};return{aliases:["nginxconf"],c:[e.HCM,{b:e.UIR+"\\s",e:";|{",rB:!0,c:[{cN:"title",b:e.UIR,starts:b}],r:0}],i:"[^\\s\\}]"}});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},s={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/-?[a-z\.]+/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",operator:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"shebang",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,e.NM,s,a,t]}});hljs.registerLanguage("sql",function(e){var t=e.C("--","$");return{cI:!0,i:/[<>{}*]/,c:[{cN:"operator",bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke",e:/;/,eW:!0,k:{keyword:"abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound buffer_cache buffer_pool build bulk by byte byteordermark bytes c cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle d data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration e each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain export export_set extended extent external external_1 external_2 externally extract f failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function g general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour http i id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists k keep keep_duplicates key keys kill l language large last last_day last_insert_id last_value lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim m main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex n name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding p package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select self sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime t table tables tablespace tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null",built_in:"array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text varchar varying void"},c:[{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[e.BE]},e.CNM,e.CBCM,t]},e.CBCM,t]}});hljs.registerLanguage("cpp",function(t){var e={cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"},r={cN:"string",v:[t.inherit(t.QSM,{b:'((u8?|U)|L)?"'}),{b:'(u8?|U)?R"',e:'"',c:[t.BE]},{b:"'\\\\?.",e:"'",i:"."}]},s={cN:"number",v:[{b:"\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)"},{b:t.CNR}]},i={cN:"preprocessor",b:"#",e:"$",k:"if else elif endif define undef warning error line pragma ifdef ifndef",c:[{b:/\\\n/,r:0},{bK:"include",e:"$",c:[r,{cN:"string",b:"<",e:">",i:"\\n"}]},r,s,t.CLCM,t.CBCM]},a=t.IR+"\\s*\\(",c={keyword:"int float while private char catch export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf",literal:"true false nullptr NULL"};return{aliases:["c","cc","h","c++","h++","hpp"],k:c,i:"",k:c,c:["self",e]},{b:t.IR+"::",k:c},{bK:"new throw return else",r:0},{cN:"function",b:"("+t.IR+"[\\*&\\s]+)+"+a,rB:!0,e:/[{;=]/,eE:!0,k:c,i:/[^\w\s\*&]/,c:[{b:a,rB:!0,c:[t.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:c,r:0,c:[t.CLCM,t.CBCM,r,s]},t.CLCM,t.CBCM,i]}]}});hljs.registerLanguage("matlab",function(e){var a=[e.CNM,{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]}],s={r:0,c:[{cN:"operator",b:/'['\.]*/}]};return{k:{keyword:"break case catch classdef continue else elseif end enumerated events for function global if methods otherwise parfor persistent properties return spmd switch try while",built_in:"sin sind sinh asin asind asinh cos cosd cosh acos acosd acosh tan tand tanh atan atand atan2 atanh sec secd sech asec asecd asech csc cscd csch acsc acscd acsch cot cotd coth acot acotd acoth hypot exp expm1 log log1p log10 log2 pow2 realpow reallog realsqrt sqrt nthroot nextpow2 abs angle complex conj imag real unwrap isreal cplxpair fix floor ceil round mod rem sign airy besselj bessely besselh besseli besselk beta betainc betaln ellipj ellipke erf erfc erfcx erfinv expint gamma gammainc gammaln psi legendre cross dot factor isprime primes gcd lcm rat rats perms nchoosek factorial cart2sph cart2pol pol2cart sph2cart hsv2rgb rgb2hsv zeros ones eye repmat rand randn linspace logspace freqspace meshgrid accumarray size length ndims numel disp isempty isequal isequalwithequalnans cat reshape diag blkdiag tril triu fliplr flipud flipdim rot90 find sub2ind ind2sub bsxfun ndgrid permute ipermute shiftdim circshift squeeze isscalar isvector ans eps realmax realmin pi i inf nan isnan isinf isfinite j why compan gallery hadamard hankel hilb invhilb magic pascal rosser toeplitz vander wilkinson"},i:'(//|"|#|/\\*|\\s+/\\w+)',c:[{cN:"function",bK:"function",e:"$",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)"},{cN:"params",b:"\\[",e:"\\]"}]},{b:/[a-zA-Z_][a-zA-Z_0-9]*'['\.]*/,rB:!0,r:0,c:[{b:/[a-zA-Z_][a-zA-Z_0-9]*/,r:0},s.c[0]]},{cN:"matrix",b:"\\[",e:"\\]",c:a,r:0,starts:s},{cN:"cell",b:"\\{",e:/}/,c:a,r:0,starts:s},{b:/\)/,r:0,starts:s},e.C("^\\s*\\%\\{\\s*$","^\\s*\\%\\}\\s*$"),e.C("\\%","$")].concat(a)}});hljs.registerLanguage("elm",function(e){var c=[e.C("--","$"),e.C("{-","-}",{c:["self"]})],i={cN:"type",b:"\\b[A-Z][\\w']*",r:0},n={cN:"container",b:"\\(",e:"\\)",i:'"',c:[{cN:"type",b:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"}].concat(c)},t={cN:"container",b:"{",e:"}",c:n.c};return{k:"let in if then else case of where module import exposing type alias as infix infixl infixr port",c:[{cN:"module",b:"\\bmodule\\b",e:"where",k:"module where",c:[n].concat(c),i:"\\W\\.|;"},{cN:"import",b:"\\bimport\\b",e:"$",k:"import|0 as exposing",c:[n].concat(c),i:"\\W\\.|;"},{cN:"typedef",b:"\\btype\\b",e:"$",k:"type alias",c:[i,n,t].concat(c)},{cN:"infix",bK:"infix infixl infixr",e:"$",c:[e.CNM].concat(c)},{cN:"foreign",b:"\\bport\\b",e:"$",k:"port",c:c},e.QSM,e.CNM,i,e.inherit(e.TM,{b:"^[_a-z][\\w']*"}),{b:"->|<-"}].concat(c)}});hljs.registerLanguage("php",function(e){var c={cN:"variable",b:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},a={cN:"preprocessor",b:/<\?(php)?|\?>/},i={cN:"string",c:[e.BE,a],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},t={v:[e.BNM,e.CNM]};return{aliases:["php3","php4","php5","php6"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[e.CLCM,e.HCM,e.C("/\\*","\\*/",{c:[{cN:"doctag",b:"@[A-Za-z]+"},a]}),e.C("__halt_compiler.+?;",!1,{eW:!0,k:"__halt_compiler",l:e.UIR}),{cN:"string",b:/<<<['"]?\w+['"]?$/,e:/^\w+;?$/,c:[e.BE,{cN:"subst",v:[{b:/\$\w+/},{b:/\{\$/,e:/\}/}]}]},a,c,{b:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",c,e.CBCM,i,t]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},i,t]}});hljs.registerLanguage("vbnet",function(e){return{aliases:["vb"],cI:!0,k:{keyword:"addhandler addressof alias and andalso aggregate ansi as assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into is isfalse isnot istrue join key let lib like loop me mid mod module mustinherit mustoverride mybase myclass namespace narrowing new next not notinheritable notoverridable of off on operator option optional or order orelse overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim rem removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly xor",built_in:"boolean byte cbool cbyte cchar cdate cdec cdbl char cint clng cobj csbyte cshort csng cstr ctype date decimal directcast double gettype getxmlnamespace iif integer long object sbyte short single string trycast typeof uinteger ulong ushort",literal:"true false nothing"},i:"//|{|}|endif|gosub|variant|wend",c:[e.inherit(e.QSM,{c:[{b:'""'}]}),e.C("'","$",{rB:!0,c:[{cN:"xmlDocTag",b:"'''|",c:[e.PWM]},{cN:"xmlDocTag",b:"",c:[e.PWM]}]}),e.CNM,{cN:"preprocessor",b:"#",e:"$",k:"if else elseif end region externalsource"}]}});hljs.registerLanguage("dart",function(e){var t={cN:"subst",b:"\\$\\{",e:"}",k:"true false null this is new super"},r={cN:"string",v:[{b:"r'''",e:"'''"},{b:'r"""',e:'"""'},{b:"r'",e:"'",i:"\\n"},{b:'r"',e:'"',i:"\\n"},{b:"'''",e:"'''",c:[e.BE,t]},{b:'"""',e:'"""',c:[e.BE,t]},{b:"'",e:"'",i:"\\n",c:[e.BE,t]},{b:'"',e:'"',i:"\\n",c:[e.BE,t]}]};t.c=[e.CNM,r];var n={keyword:"assert break case catch class const continue default do else enum extends false final finally for if in is new null rethrow return super switch this throw true try var void while with",literal:"abstract as dynamic export external factory get implements import library operator part set static typedef",built_in:"print Comparable DateTime Duration Function Iterable Iterator List Map Match Null Object Pattern RegExp Set Stopwatch String StringBuffer StringSink Symbol Type Uri bool double int num document window querySelector querySelectorAll Element ElementList"};return{k:n,c:[r,e.C("/\\*\\*","\\*/",{sL:"markdown"}),e.C("///","$",{sL:"markdown"}),e.CLCM,e.CBCM,{cN:"class",bK:"class interface",e:"{",eE:!0,c:[{bK:"extends implements"},e.UTM]},e.CNM,{cN:"annotation",b:"@[A-Za-z]+"},{b:"=>"}]}});hljs.registerLanguage("vbscript",function(e){return{aliases:["vbs"],cI:!0,k:{keyword:"call class const dim do loop erase execute executeglobal exit for each next function if then else on error option explicit new private property let get public randomize redim rem select case set stop sub while wend with end to elseif is or xor and not class_initialize class_terminate default preserve in me byval byref step resume goto",built_in:"lcase month vartype instrrev ubound setlocale getobject rgb getref string weekdayname rnd dateadd monthname now day minute isarray cbool round formatcurrency conversions csng timevalue second year space abs clng timeserial fixs len asc isempty maths dateserial atn timer isobject filter weekday datevalue ccur isdate instr datediff formatdatetime replace isnull right sgn array snumeric log cdbl hex chr lbound msgbox ucase getlocale cos cdate cbyte rtrim join hour oct typename trim strcomp int createobject loadpicture tan formatnumber mid scriptenginebuildversion scriptengine split scriptengineminorversion cint sin datepart ltrim sqr scriptenginemajorversion time derived eval date formatpercent exp inputbox left ascw chrw regexp server response request cstr err",literal:"true false null nothing empty"},i:"//",c:[e.inherit(e.QSM,{c:[{b:'""'}]}),e.C(/'/,/$/,{r:0}),e.CNM]}});hljs.registerLanguage("fortran",function(e){var t={cN:"params",b:"\\(",e:"\\)"},n={constant:".False. .True.",type:"integer real character complex logical dimension allocatable|10 parameter external implicit|10 none double precision assign intent optional pointer target in out common equivalence data",keyword:"kind do while private call intrinsic where elsewhere type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. goto save else use module select case access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit continue format pause cycle exit c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg synchronous nopass non_overridable pass protected volatile abstract extends import non_intrinsic value deferred generic final enumerator class associate bind enum c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated c_f_pointer c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure",built_in:"alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_ofacosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image"};return{cI:!0,aliases:["f90","f95"],k:n,c:[e.inherit(e.ASM,{cN:"string",r:0}),e.inherit(e.QSM,{cN:"string",r:0}),{cN:"function",bK:"subroutine function program",i:"[${=\\n]",c:[e.UTM,t]},e.C("!","$",{r:0}),{cN:"number",b:"(?=\\b|\\+|\\-|\\.)(?=\\.\\d|\\d)(?:\\d+)?(?:\\.?\\d*)(?:[de][+-]?\\d+)?\\b\\.?",r:0}]}});hljs.registerLanguage("scheme",function(e){var t="[^\\(\\)\\[\\]\\{\\}\",'`;#|\\\\\\s]+",r="(\\-|\\+)?\\d+([./]\\d+)?",i=r+"[+\\-]"+r+"i",a={built_in:"case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules ' * + , ,@ - ... / ; < <= = => > >= ` abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string=? string>? string? substring symbol->string symbol? tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"},n={cN:"shebang",b:"^#!",e:"$"},c={cN:"literal",b:"(#t|#f|#\\\\"+t+"|#\\\\.)"},l={cN:"number",v:[{b:r,r:0},{b:i,r:0},{b:"#b[0-1]+(/[0-1]+)?"},{b:"#o[0-7]+(/[0-7]+)?"},{b:"#x[0-9a-f]+(/[0-9a-f]+)?"}]},s=e.QSM,o=[e.C(";","$",{r:0}),e.C("#\\|","\\|#")],u={b:t,r:0},p={cN:"variable",b:"'"+t},d={eW:!0,r:0},g={cN:"list",v:[{b:"\\(",e:"\\)"},{b:"\\[",e:"\\]"}],c:[{cN:"keyword",b:t,l:t,k:a},d]};return d.c=[c,l,s,u,p,g].concat(o),{i:/\S/,c:[n,l,s,p,g].concat(o)}});hljs.registerLanguage("coffeescript",function(e){var c={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",built_in:"npm require console print module global window document"},n="[A-Za-z$_][0-9A-Za-z$_]*",r={cN:"subst",b:/#\{/,e:/}/,k:c},t=[e.BNM,e.inherit(e.CNM,{starts:{e:"(\\s*/)?",r:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/"""/,e:/"""/,c:[e.BE,r]},{b:/"/,e:/"/,c:[e.BE,r]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[r,e.HCM]},{b:"//[gim]*",r:0},{b:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/}]},{cN:"property",b:"@"+n},{b:"`",e:"`",eB:!0,eE:!0,sL:"javascript"}];r.c=t;var s=e.inherit(e.TM,{b:n}),i="(\\(.*\\))?\\s*\\B[-=]>",o={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:c,c:["self"].concat(t)}]};return{aliases:["coffee","cson","iced"],k:c,i:/\/\*/,c:t.concat([e.C("###","###"),e.HCM,{cN:"function",b:"^\\s*"+n+"\\s*=\\s*"+i,e:"[-=]>",rB:!0,c:[s,o]},{b:/[:\(,=]\s*/,r:0,c:[{cN:"function",b:i,e:"[-=]>",rB:!0,c:[o]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[s]},s]},{cN:"attribute",b:n+":",e:":",rB:!0,rE:!0,r:0}])}});hljs.registerLanguage("haml",function(s){return{cI:!0,c:[{cN:"doctype",b:"^!!!( (5|1\\.1|Strict|Frameset|Basic|Mobile|RDFa|XML\\b.*))?$",r:10},s.C("^\\s*(!=#|=#|-#|/).*$",!1,{r:0}),{b:"^\\s*(-|=|!=)(?!#)",starts:{e:"\\n",sL:"ruby"}},{cN:"tag",b:"^\\s*%",c:[{cN:"title",b:"\\w+"},{cN:"value",b:"[#\\.][\\w-]+"},{b:"{\\s*",e:"\\s*}",eE:!0,c:[{b:":\\w+\\s*=>",e:",\\s+",rB:!0,eW:!0,c:[{cN:"symbol",b:":\\w+"},s.ASM,s.QSM,{b:"\\w+",r:0}]}]},{b:"\\(\\s*",e:"\\s*\\)",eE:!0,c:[{b:"\\w+\\s*=",e:"\\s+",rB:!0,eW:!0,c:[{cN:"attribute",b:"\\w+",r:0},s.ASM,s.QSM,{b:"\\w+",r:0}]}]}]},{cN:"bullet",b:"^\\s*[=~]\\s*",r:0},{b:"#{",starts:{e:"}",sL:"ruby"}}]}});hljs.registerLanguage("javascript",function(e){return{aliases:["js"],k:{keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},c:[{cN:"pi",r:10,b:/^\s*['"]use (strict|asm)['"]/},e.ASM,e.QSM,{cN:"string",b:"`",e:"`",c:[e.BE,{cN:"subst",b:"\\$\\{",e:"\\}"}]},e.CLCM,e.CBCM,{cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{b:/\s*[);\]]/,r:0,sL:"xml"}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:[e.CLCM,e.CBCM]}],i:/\[|%/},{b:/\$[(.]/},{b:"\\."+e.IR,r:0},{bK:"import",e:"[;$]",k:"import from as",c:[e.ASM,e.QSM]},{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]}],i:/#/}});hljs.registerLanguage("erlang",function(e){var r="[a-z'][a-zA-Z0-9_']*",c="("+r+":"+r+"|"+r+")",a={keyword:"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor",literal:"false true"},n=e.C("%","$"),i={cN:"number",b:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",r:0},b={b:"fun\\s+"+r+"/\\d+"},d={b:c+"\\(",e:"\\)",rB:!0,r:0,c:[{cN:"function_name",b:c,r:0},{b:"\\(",e:"\\)",eW:!0,rE:!0,r:0}]},o={cN:"tuple",b:"{",e:"}",r:0},t={cN:"variable",b:"\\b_([A-Z][A-Za-z0-9_]*)?",r:0},l={cN:"variable",b:"[A-Z][a-zA-Z0-9_]*",r:0},f={b:"#"+e.UIR,r:0,rB:!0,c:[{cN:"record_name",b:"#"+e.UIR,r:0},{b:"{",e:"}",r:0}]},s={bK:"fun receive if try case",e:"end",k:a};s.c=[n,b,e.inherit(e.ASM,{cN:""}),s,d,e.QSM,i,o,t,l,f];var u=[n,b,s,d,e.QSM,i,o,t,l,f];d.c[1].c=u,o.c=u,f.c[1].c=u;var v={cN:"params",b:"\\(",e:"\\)",c:u};return{aliases:["erl"],k:a,i:"(",rB:!0,i:"\\(|#|//|/\\*|\\\\|:|;",c:[v,e.inherit(e.TM,{b:r})],starts:{e:";|\\.",k:a,c:u}},n,{cN:"pp",b:"^-",e:"\\.",r:0,eE:!0,rB:!0,l:"-"+e.IR,k:"-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn -import -include -include_lib -compile -define -else -endif -file -behaviour -behavior -spec",c:[v]},i,e.QSM,f,t,l,o,{b:/\.$/}]}});hljs.registerLanguage("dns",function(d){return{aliases:["bind","zone"],k:{keyword:"IN A AAAA AFSDB APL CAA CDNSKEY CDS CERT CNAME DHCID DLV DNAME DNSKEY DS HIP IPSECKEY KEY KX LOC MX NAPTR NS NSEC NSEC3 NSEC3PARAM PTR RRSIG RP SIG SOA SRV SSHFP TA TKEY TLSA TSIG TXT"},c:[d.C(";","$"),{cN:"operator",bK:"$TTL $GENERATE $INCLUDE $ORIGIN"},{cN:"number",b:"((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))"},{cN:"number",b:"((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])"}]}});hljs.registerLanguage("ocaml",function(e){return{aliases:["ml"],k:{keyword:"and as assert asr begin class constraint do done downto else end exception external for fun function functor if in include inherit! inherit initializer land lazy let lor lsl lsr lxor match method!|10 method mod module mutable new object of open! open or private rec sig struct then to try type val! val virtual when while with parser value",built_in:"array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 string unit in_channel out_channel ref",literal:"true false"},i:/\/\/|>>/,l:"[a-z_]\\w*!?",c:[{cN:"literal",b:"\\[(\\|\\|)?\\]|\\(\\)",r:0},e.C("\\(\\*","\\*\\)",{c:["self"]}),{cN:"symbol",b:"'[A-Za-z_](?!')[\\w']*"},{cN:"tag",b:"`[A-Z][\\w']*"},{cN:"type",b:"\\b[A-Z][\\w']*",r:0},{b:"[a-z_]\\w*'[\\w']*"},e.inherit(e.ASM,{cN:"char",r:0}),e.inherit(e.QSM,{i:null}),{cN:"number",b:"\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",r:0},{b:/[-=]>/}]}});hljs.registerLanguage("clojure",function(e){var t={built_in:"def defonce cond apply if-not if-let if not not= = < > <= >= == + / * - rem quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last drop-while while intern condp case reduced cycle split-at split-with repeat replicate iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter monitor-exit defmacro defn defn- macroexpand macroexpand-1 for dosync and or when when-not when-let comp juxt partial sequence memoize constantly complement identity assert peek pop doto proxy defstruct first rest cons defprotocol cast coll deftype defrecord last butlast sigs reify second ffirst fnext nfirst nnext defmulti defmethod meta with-meta ns in-ns create-ns import refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize"},r="a-zA-Z_\\-!.?+*=<>&#'",n="["+r+"]["+r+"0-9/;:]*",a="[-+]?\\d+(\\.\\d+)?",o={b:n,r:0},s={cN:"number",b:a,r:0},c=e.inherit(e.QSM,{i:null}),i=e.C(";","$",{r:0}),d={cN:"literal",b:/\b(true|false|nil)\b/},l={cN:"collection",b:"[\\[\\{]",e:"[\\]\\}]"},m={cN:"comment",b:"\\^"+n},p=e.C("\\^\\{","\\}"),u={cN:"attribute",b:"[:]"+n},f={cN:"list",b:"\\(",e:"\\)"},h={eW:!0,r:0},y={k:t,l:n,cN:"keyword",b:n,starts:h},b=[f,c,m,p,i,u,l,s,d,o];return f.c=[e.C("comment",""),y,h],h.c=b,l.c=b,{aliases:["clj"],i:/\S/,c:[f,c,m,p,i,u,l,s,d]}});hljs.registerLanguage("x86asm",function(s){return{cI:!0,l:"\\.?"+s.IR,k:{keyword:"lock rep repe repz repne repnz xaquire xrelease bnd nobnd aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63",literal:"ip eip rip al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 cs ds es fs gs ss st st0 st1 st2 st3 st4 st5 st6 st7 mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 xmm8 xmm9 xmm10 xmm11 xmm12 xmm13 xmm14 xmm15 xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ymm0 ymm1 ymm2 ymm3 ymm4 ymm5 ymm6 ymm7 ymm8 ymm9 ymm10 ymm11 ymm12 ymm13 ymm14 ymm15 ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 zmm0 zmm1 zmm2 zmm3 zmm4 zmm5 zmm6 zmm7 zmm8 zmm9 zmm10 zmm11 zmm12 zmm13 zmm14 zmm15 zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 k0 k1 k2 k3 k4 k5 k6 k7 bnd0 bnd1 bnd2 bnd3 cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d r0h r1h r2h r3h r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l",pseudo:"db dw dd dq dt ddq do dy dz resb resw resd resq rest resdq reso resy resz incbin equ times",preprocessor:"%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep %endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment .nolist byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr __FILE__ __LINE__ __SECT__ __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ __UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__ __PASS__ struc endstruc istruc at iend align alignb sectalign daz nodaz up down zero default option assume public ",built_in:"bits use16 use32 use64 default section segment absolute extern global common cpu float __utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ __float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ __Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__"},c:[s.C(";","$",{r:0}),{cN:"number",v:[{b:"\\b(?:([0-9][0-9_]*)?\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|(0[Xx])?[0-9][0-9_]*\\.?[0-9_]*(?:[pP](?:[+-]?[0-9_]+)?)?)\\b",r:0},{b:"\\$[0-9][0-9A-Fa-f]*",r:0},{b:"\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\b"},{b:"\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\b"}]},s.QSM,{cN:"string",v:[{b:"'",e:"[^\\\\]'"},{b:"`",e:"[^\\\\]`"},{b:"\\.[A-Za-z0-9]+"}],r:0},{cN:"label",v:[{b:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)"},{b:"^\\s*%%[A-Za-z0-9_$#@~.?]*:"}],r:0},{cN:"argument",b:"%[0-9]+",r:0},{cN:"built_in",b:"%!S+",r:0}]}});hljs.registerLanguage("tcl",function(e){return{aliases:["tk"],k:"after append apply array auto_execok auto_import auto_load auto_mkindex auto_mkindex_old auto_qualify auto_reset bgerror binary break catch cd chan clock close concat continue dde dict encoding eof error eval exec exit expr fblocked fconfigure fcopy file fileevent filename flush for foreach format gets glob global history http if incr info interp join lappend|10 lassign|10 lindex|10 linsert|10 list llength|10 load lrange|10 lrepeat|10 lreplace|10 lreverse|10 lsearch|10 lset|10 lsort|10 mathfunc mathop memory msgcat namespace open package parray pid pkg::create pkg_mkIndex platform platform::shell proc puts pwd read refchan regexp registry regsub|10 rename return safe scan seek set socket source split string subst switch tcl_endOfWord tcl_findLibrary tcl_startOfNextWord tcl_startOfPreviousWord tcl_wordBreakAfter tcl_wordBreakBefore tcltest tclvars tell time tm trace unknown unload unset update uplevel upvar variable vwait while",c:[e.C(";[ \\t]*#","$"),e.C("^[ \\t]*#","$"),{bK:"proc",e:"[\\{]",eE:!0,c:[{cN:"symbol",b:"[ \\t\\n\\r]+(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*",e:"[ \\t\\n\\r]",eW:!0,eE:!0}]},{cN:"variable",eE:!0,v:[{b:"\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*\\(([a-zA-Z0-9_])*\\)",e:"[^a-zA-Z0-9_\\}\\$]"},{b:"\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*",e:"(\\))?[^a-zA-Z0-9_\\}\\$]"}]},{cN:"string",c:[e.BE],v:[e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},{cN:"number",v:[e.BNM,e.CNM]}]}});hljs.registerLanguage("ini",function(e){var c={cN:"string",c:[e.BE],v:[{b:"'''",e:"'''",r:10},{b:'"""',e:'"""',r:10},{b:'"',e:'"'},{b:"'",e:"'"}]};return{aliases:["toml"],cI:!0,i:/\S/,c:[e.C(";","$"),e.HCM,{cN:"title",b:/^\s*\[+/,e:/\]+/},{cN:"setting",b:/^[a-z0-9\[\]_-]+\s*=\s*/,e:"$",c:[{cN:"value",eW:!0,k:"on off true false yes no",c:[{cN:"variable",v:[{b:/\$[\w\d"][\w\d_]*/},{b:/\$\{(.*?)}/}]},c,{cN:"number",b:/([\+\-]+)?[\d]+_[\d_]+/},e.NM],r:0}]}]}});hljs.registerLanguage("diff",function(e){return{aliases:["patch"],c:[{cN:"chunk",r:10,v:[{b:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"header",v:[{b:/Index: /,e:/$/},{b:/=====/,e:/=====$/},{b:/^\-\-\-/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+\+\+/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"change",b:"^\\!",e:"$"}]}});hljs.registerLanguage("dos",function(e){var r=e.C(/@?rem\b/,/$/,{r:10}),t={cN:"label",b:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)",r:0};return{aliases:["bat","cmd"],cI:!0,k:{flow:"if else goto for in do call exit not exist errorlevel defined",operator:"equ neq lss leq gtr geq",keyword:"shift cd dir echo setlocal endlocal set pause copy",stream:"prn nul lpt3 lpt2 lpt1 con com4 com3 com2 com1 aux",winutils:"ping net ipconfig taskkill xcopy ren del",built_in:"append assoc at attrib break cacls cd chcp chdir chkdsk chkntfs cls cmd color comp compact convert date dir diskcomp diskcopy doskey erase fs find findstr format ftype graftabl help keyb label md mkdir mode more move path pause print popd pushd promt rd recover rem rename replace restore rmdir shiftsort start subst time title tree type ver verify vol"},c:[{cN:"envvar",b:/%%[^ ]|%[^ ]+?%|![^ ]+?!/},{cN:"function",b:t.b,e:"goto:eof",c:[e.inherit(e.TM,{b:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),r]},{cN:"number",b:"\\b\\d+",r:0},r]}});hljs.registerLanguage("erlang-repl",function(r){return{k:{special_functions:"spawn spawn_link self",reserved:"after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if let not of or orelse|10 query receive rem try when xor"},c:[{cN:"prompt",b:"^[0-9]+> ",r:10},r.C("%","$"),{cN:"number",b:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",r:0},r.ASM,r.QSM,{cN:"constant",b:"\\?(::)?([A-Z]\\w*(::)?)+"},{cN:"arrow",b:"->"},{cN:"ok",b:"ok"},{cN:"exclamation_mark",b:"!"},{cN:"function_or_atom",b:"(\\b[a-z'][a-zA-Z0-9_']*:[a-z'][a-zA-Z0-9_']*)|(\\b[a-z'][a-zA-Z0-9_']*)",r:0},{cN:"variable",b:"[A-Z][a-zA-Z0-9_']*",r:0}]}});hljs.registerLanguage("groovy",function(e){return{k:{typename:"byte short char int long boolean float double void",literal:"true false null",keyword:"def as in assert trait super this abstract static volatile transient public private protected synchronized final class interface enum if else for while switch case break default continue throw throws try catch finally implements extends new import package return instanceof"},c:[e.C("/\\*\\*","\\*/",{r:0,c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,{cN:"string",b:'"""',e:'"""'},{cN:"string",b:"'''",e:"'''"},{cN:"string",b:"\\$/",e:"/\\$",r:10},e.ASM,{cN:"regexp",b:/~?\/[^\/\n]+\//,c:[e.BE]},e.QSM,{cN:"shebang",b:"^#!/usr/bin/env",e:"$",i:"\n"},e.BNM,{cN:"class",bK:"class interface trait enum",e:"{",i:":",c:[{bK:"extends implements"},e.UTM]},e.CNM,{cN:"annotation",b:"@[A-Za-z]+"},{cN:"string",b:/[^\?]{0}[A-Za-z0-9_$]+ *:/},{b:/\?/,e:/\:/},{cN:"label",b:"^\\s*[A-Za-z0-9_$]+:",r:0}],i:/#/}});hljs.registerLanguage("go",function(e){var t={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer",constant:"true false iota nil",typename:"bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{aliases:["golang"],k:t,i:"]+>|\t|)+|(?:\n)))/gm,r={case_insensitive:"cI",lexemes:"l",contains:"c",keywords:"k",subLanguage:"sL",className:"cN",begin:"b",beginKeywords:"bK",end:"e",endsWithParent:"eW",illegal:"i",excludeBegin:"eB",excludeEnd:"eE",returnBegin:"rB",returnEnd:"rE",variants:"v",IDENT_RE:"IR",UNDERSCORE_IDENT_RE:"UIR",NUMBER_RE:"NR",C_NUMBER_RE:"CNR",BINARY_NUMBER_RE:"BNR",RE_STARTERS_RE:"RSR",BACKSLASH_ESCAPE:"BE",APOS_STRING_MODE:"ASM",QUOTE_STRING_MODE:"QSM",PHRASAL_WORDS_MODE:"PWM",C_LINE_COMMENT_MODE:"CLCM",C_BLOCK_COMMENT_MODE:"CBCM",HASH_COMMENT_MODE:"HCM",NUMBER_MODE:"NM",C_NUMBER_MODE:"CNM",BINARY_NUMBER_MODE:"BNM",CSS_NUMBER_MODE:"CSSNM",REGEXP_MODE:"RM",TITLE_MODE:"TM",UNDERSCORE_TITLE_MODE:"UTM",COMMENT:"C",beginRe:"bR",endRe:"eR",illegalRe:"iR",lexemesRe:"lR",terminators:"t",terminator_end:"tE"},m="",O="Could not find the language '{}', did you forget to load/include a language module?",B={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},c="of and for in not or if then".split(" ");function x(e){return e.replace(/&/g,"&").replace(//g,">")}function d(e){return e.nodeName.toLowerCase()}function R(e){return n.test(e)}function i(e){var n,t={},r=Array.prototype.slice.call(arguments,1);for(n in e)t[n]=e[n];return r.forEach(function(e){for(n in e)t[n]=e[n]}),t}function p(e){var a=[];return function e(n,t){for(var r=n.firstChild;r;r=r.nextSibling)3===r.nodeType?t+=r.nodeValue.length:1===r.nodeType&&(a.push({event:"start",offset:t,node:r}),t=e(r,t),d(r).match(/br|hr|img|input/)||a.push({event:"stop",offset:t,node:r}));return t}(e,0),a}function v(e,n,t){var r=0,a="",i=[];function o(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset"}function l(e){a+=""}function u(e){("start"===e.event?c:l)(e.node)}for(;e.length||n.length;){var s=o();if(a+=x(t.substring(r,s[0].offset)),r=s[0].offset,s===e){for(i.reverse().forEach(l);u(s.splice(0,1)[0]),(s=o())===e&&s.length&&s[0].offset===r;);i.reverse().forEach(c)}else"start"===s[0].event?i.push(s[0].node):i.pop(),u(s.splice(0,1)[0])}return a+x(t.substr(r))}function l(n){return n.v&&!n.cached_variants&&(n.cached_variants=n.v.map(function(e){return i(n,{v:null},e)})),n.cached_variants?n.cached_variants:function e(n){return!!n&&(n.eW||e(n.starts))}(n)?[i(n,{starts:n.starts?i(n.starts):null})]:Object.isFrozen(n)?[i(n)]:[n]}function u(e){if(r&&!e.langApiRestored){for(var n in e.langApiRestored=!0,r)e[n]&&(e[r[n]]=e[n]);(e.c||[]).concat(e.v||[]).forEach(u)}}function M(n,t){var i={};return"string"==typeof n?r("keyword",n):o(n).forEach(function(e){r(e,n[e])}),i;function r(a,e){t&&(e=e.toLowerCase()),e.split(" ").forEach(function(e){var n,t,r=e.split("|");i[r[0]]=[a,(n=r[0],(t=r[1])?Number(t):function(e){return-1!=c.indexOf(e.toLowerCase())}(n)?0:1)]})}}function S(r){function s(e){return e&&e.source||e}function f(e,n){return new RegExp(s(e),"m"+(r.cI?"i":"")+(n?"g":""))}function a(a){var i,e,o={},c=[],l={},t=1;function n(e,n){o[t]=e,c.push([e,n]),t+=new RegExp(n.toString()+"|").exec("").length-1+1}for(var r=0;r')+n+(t?"":m)}function o(){p+=(null!=d.sL?function(){var e="string"==typeof d.sL;if(e&&!_[d.sL])return x(v);var n=e?T(d.sL,v,!0,R[d.sL]):w(v,d.sL.length?d.sL:void 0);return 0")+'"');if("end"===n.type){var r=s(n);if(null!=r)return r}return v+=t,t.length}var g=D(n);if(!g)throw console.error(O.replace("{}",n)),new Error('Unknown language: "'+n+'"');S(g);var E,d=t||g,R={},p="";for(E=d;E!==g;E=E.parent)E.cN&&(p=c(E.cN,"",!0)+p);var v="",M=0;try{for(var b,h,N=0;d.t.lastIndex=N,b=d.t.exec(i);)h=r(i.substring(N,b.index),b),N=b.index+h;for(r(i.substr(N)),E=d;E.parent;E=E.parent)E.cN&&(p+=m);return{relevance:M,value:p,i:!1,language:n,top:d}}catch(e){if(e.message&&-1!==e.message.indexOf("Illegal"))return{i:!0,relevance:0,value:x(i)};if(C)return{relevance:0,value:x(i),language:n,top:d,errorRaised:e};throw e}}function w(t,e){e=e||B.languages||o(_);var r={relevance:0,value:x(t)},a=r;return e.filter(D).filter(L).forEach(function(e){var n=T(e,t,!1);n.language=e,n.relevance>a.relevance&&(a=n),n.relevance>r.relevance&&(a=r,r=n)}),a.language&&(r.second_best=a),r}function b(e){return B.tabReplace||B.useBR?e.replace(t,function(e,n){return B.useBR&&"\n"===e?"
    ":B.tabReplace?n.replace(/\t/g,B.tabReplace):""}):e}function s(e){var n,t,r,a,i,o,c,l,u,s,f=function(e){var n,t,r,a,i=e.className+" ";if(i+=e.parentNode?e.parentNode.className:"",t=E.exec(i)){var o=D(t[1]);return o||(console.warn(O.replace("{}",t[1])),console.warn("Falling back to no-highlight mode for this block.",e)),o?t[1]:"no-highlight"}for(n=0,r=(i=i.split(/\s+/)).length;n/g,"\n"):n=e,i=n.textContent,r=f?T(f,i,!0):w(i),(t=p(n)).length&&((a=document.createElement("div")).innerHTML=r.value,r.value=v(t,p(a),i)),r.value=b(r.value),e.innerHTML=r.value,e.className=(o=e.className,c=f,l=r.language,u=c?g[c]:l,s=[o.trim()],o.match(/\bhljs\b/)||s.push("hljs"),-1===o.indexOf(u)&&s.push(u),s.join(" ").trim()),e.result={language:r.language,re:r.relevance},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.relevance}))}function h(){if(!h.called){h.called=!0;var e=document.querySelectorAll("pre code");f.forEach.call(e,s)}}var N={disableAutodetect:!0};function D(e){return e=(e||"").toLowerCase(),_[e]||_[g[e]]}function L(e){var n=D(e);return n&&!n.disableAutodetect}return a.highlight=T,a.highlightAuto=w,a.fixMarkup=b,a.highlightBlock=s,a.configure=function(e){B=i(B,e)},a.initHighlighting=h,a.initHighlightingOnLoad=function(){window.addEventListener("DOMContentLoaded",h,!1),window.addEventListener("load",h,!1)},a.registerLanguage=function(n,e){var t;try{t=e(a)}catch(e){if(console.error("Language definition for '{}' could not be registered.".replace("{}",n)),!C)throw e;console.error(e),t=N}u(_[n]=t),t.rawDefinition=e.bind(null,a),t.aliases&&t.aliases.forEach(function(e){g[e]=n})},a.listLanguages=function(){return o(_)},a.getLanguage=D,a.requireLanguage=function(e){var n=D(e);if(n)return n;throw new Error("The '{}' language is required, but not loaded.".replace("{}",e))},a.autoDetection=L,a.inherit=i,a.debugMode=function(){C=!1},a.IR=a.IDENT_RE="[a-zA-Z]\\w*",a.UIR=a.UNDERSCORE_IDENT_RE="[a-zA-Z_]\\w*",a.NR=a.NUMBER_RE="\\b\\d+(\\.\\d+)?",a.CNR=a.C_NUMBER_RE="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",a.BNR=a.BINARY_NUMBER_RE="\\b(0b[01]+)",a.RSR=a.RE_STARTERS_RE="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",a.BE=a.BACKSLASH_ESCAPE={b:"\\\\[\\s\\S]",relevance:0},a.ASM=a.APOS_STRING_MODE={cN:"string",b:"'",e:"'",i:"\\n",c:[a.BE]},a.QSM=a.QUOTE_STRING_MODE={cN:"string",b:'"',e:'"',i:"\\n",c:[a.BE]},a.PWM=a.PHRASAL_WORDS_MODE={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},a.C=a.COMMENT=function(e,n,t){var r=a.inherit({cN:"comment",b:e,e:n,c:[]},t||{});return r.c.push(a.PWM),r.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",relevance:0}),r},a.CLCM=a.C_LINE_COMMENT_MODE=a.C("//","$"),a.CBCM=a.C_BLOCK_COMMENT_MODE=a.C("/\\*","\\*/"),a.HCM=a.HASH_COMMENT_MODE=a.C("#","$"),a.NM=a.NUMBER_MODE={cN:"number",b:a.NR,relevance:0},a.CNM=a.C_NUMBER_MODE={cN:"number",b:a.CNR,relevance:0},a.BNM=a.BINARY_NUMBER_MODE={cN:"number",b:a.BNR,relevance:0},a.CSSNM=a.CSS_NUMBER_MODE={cN:"number",b:a.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},a.RM=a.REGEXP_MODE={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[a.BE,{b:/\[/,e:/\]/,relevance:0,c:[a.BE]}]},a.TM=a.TITLE_MODE={cN:"title",b:a.IR,relevance:0},a.UTM=a.UNDERSCORE_TITLE_MODE={cN:"title",b:a.UIR,relevance:0},a.METHOD_GUARD={b:"\\.\\s*"+a.UIR,relevance:0},[a.BE,a.ASM,a.QSM,a.PWM,a.C,a.CLCM,a.CBCM,a.HCM,a.NM,a.CNM,a.BNM,a.CSSNM,a.RM,a.TM,a.UTM,a.METHOD_GUARD].forEach(function(e){!function n(t){Object.freeze(t);var r="function"==typeof t;Object.getOwnPropertyNames(t).forEach(function(e){!t.hasOwnProperty(e)||null===t[e]||"object"!=typeof t[e]&&"function"!=typeof t[e]||r&&("caller"===e||"callee"===e||"arguments"===e)||Object.isFrozen(t[e])||n(t[e])});return t}(e)}),a});hljs.registerLanguage("erlang",function(e){var r="[a-z'][a-zA-Z0-9_']*",c="("+r+":"+r+"|"+r+")",n={keyword:"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor",literal:"false true"},a=e.C("%","$"),b={cN:"number",b:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",relevance:0},i={b:"fun\\s+"+r+"/\\d+"},l={b:c+"\\(",e:"\\)",rB:!0,relevance:0,c:[{b:c,relevance:0},{b:"\\(",e:"\\)",eW:!0,rE:!0,relevance:0}]},d={b:"{",e:"}",relevance:0},o={b:"\\b_([A-Z][A-Za-z0-9_]*)?",relevance:0},t={b:"[A-Z][a-zA-Z0-9_]*",relevance:0},v={b:"#"+e.UIR,relevance:0,rB:!0,c:[{b:"#"+e.UIR,relevance:0},{b:"{",e:"}",relevance:0}]},f={bK:"fun receive if try case",e:"end",k:n};f.c=[a,i,e.inherit(e.ASM,{cN:""}),f,l,e.QSM,b,d,o,t,v];var s=[a,i,f,l,e.QSM,b,d,o,t,v];l.c[1].c=s,d.c=s;var u={cN:"params",b:"\\(",e:"\\)",c:v.c[1].c=s};return{aliases:["erl"],k:n,i:"(",rB:!0,i:"\\(|#|//|/\\*|\\\\|:|;",c:[u,e.inherit(e.TM,{b:r})],starts:{e:";|\\.",k:n,c:s}},a,{b:"^-",e:"\\.",relevance:0,eE:!0,rB:!0,l:"-"+e.IR,k:"-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn -import -include -include_lib -compile -define -else -endif -file -behaviour -behavior -spec",c:[u]},b,e.QSM,v,o,t,d,{b:/\.$/}]}});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},a={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]};return{aliases:["sh","zsh"],l:/\b-?[a-z\._]+\b/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"meta",b:/^#![^\n]+sh\s*$/,relevance:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],relevance:0},e.HCM,a,{cN:"",b:/\\"/},{cN:"string",b:/'/,e:/'/},t]}});hljs.registerLanguage("shell",function(s){return{aliases:["console"],c:[{cN:"meta",b:"^\\s{0,3}[/\\w\\d\\[\\]()@-]*[>%$#]",starts:{e:"$",sL:"bash"}}]}});hljs.registerLanguage("scheme",function(e){var t="[^\\(\\)\\[\\]\\{\\}\",'`;#|\\\\\\s]+",r="(\\-|\\+)?\\d+([./]\\d+)?",a={cN:"literal",b:"(#t|#f|#\\\\"+t+"|#\\\\.)"},i={cN:"number",v:[{b:r,relevance:0},{b:"(\\-|\\+)?\\d+([./]\\d+)?[+\\-](\\-|\\+)?\\d+([./]\\d+)?i",relevance:0},{b:"#b[0-1]+(/[0-1]+)?"},{b:"#o[0-7]+(/[0-7]+)?"},{b:"#x[0-9a-f]+(/[0-9a-f]+)?"}]},n=e.QSM,c=[e.C(";","$",{relevance:0}),e.C("#\\|","\\|#")],l={b:t,relevance:0},s={cN:"symbol",b:"'"+t},o={eW:!0,relevance:0},u={v:[{b:/'/},{b:"`"}],c:[{b:"\\(",e:"\\)",c:["self",a,n,i,l,s]}]},p={cN:"name",b:t,l:t,k:{"builtin-name":"case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules ' * + , ,@ - ... / ; < <= = => > >= ` abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string=? string>? string? substring symbol->string symbol? tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"}},d={v:[{b:"\\(",e:"\\)"},{b:"\\[",e:"\\]"}],c:[{b:/lambda/,eW:!0,rB:!0,c:[p,{b:/\(/,e:/\)/,endsParent:!0,c:[l]}]},p,o]};return o.c=[a,i,n,l,s,u,d].concat(c),{i:/\S/,c:[{cN:"meta",b:"^#!",e:"$"},i,n,s,u,d].concat(c)}});hljs.registerLanguage("basic",function(E){return{cI:!0,i:"^.",l:"[a-zA-Z][a-zA-Z0-9_$%!#]*",k:{keyword:"ABS ASC AND ATN AUTO|0 BEEP BLOAD|10 BSAVE|10 CALL CALLS CDBL CHAIN CHDIR CHR$|10 CINT CIRCLE CLEAR CLOSE CLS COLOR COM COMMON CONT COS CSNG CSRLIN CVD CVI CVS DATA DATE$ DEFDBL DEFINT DEFSNG DEFSTR DEF|0 SEG USR DELETE DIM DRAW EDIT END ENVIRON ENVIRON$ EOF EQV ERASE ERDEV ERDEV$ ERL ERR ERROR EXP FIELD FILES FIX FOR|0 FRE GET GOSUB|10 GOTO HEX$ IF THEN ELSE|0 INKEY$ INP INPUT INPUT# INPUT$ INSTR IMP INT IOCTL IOCTL$ KEY ON OFF LIST KILL LEFT$ LEN LET LINE LLIST LOAD LOC LOCATE LOF LOG LPRINT USING LSET MERGE MID$ MKDIR MKD$ MKI$ MKS$ MOD NAME NEW NEXT NOISE NOT OCT$ ON OR PEN PLAY STRIG OPEN OPTION BASE OUT PAINT PALETTE PCOPY PEEK PMAP POINT POKE POS PRINT PRINT] PSET PRESET PUT RANDOMIZE READ REM RENUM RESET|0 RESTORE RESUME RETURN|0 RIGHT$ RMDIR RND RSET RUN SAVE SCREEN SGN SHELL SIN SOUND SPACE$ SPC SQR STEP STICK STOP STR$ STRING$ SWAP SYSTEM TAB TAN TIME$ TIMER TROFF TRON TO USR VAL VARPTR VARPTR$ VIEW WAIT WHILE WEND WIDTH WINDOW WRITE XOR"},c:[E.QSM,E.C("REM","$",{relevance:10}),E.C("'","$",{relevance:0}),{cN:"symbol",b:"^[0-9]+ ",relevance:10},{cN:"number",b:"\\b([0-9]+[0-9edED.]*[#!]?)",relevance:0},{cN:"number",b:"(&[hH][0-9a-fA-F]{1,4})"},{cN:"number",b:"(&[oO][0-7]{1,6})"}]}});hljs.registerLanguage("swift",function(e){var i={keyword:"#available #colorLiteral #column #else #elseif #endif #file #fileLiteral #function #if #imageLiteral #line #selector #sourceLocation _ __COLUMN__ __FILE__ __FUNCTION__ __LINE__ Any as as! as? associatedtype associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip"},t=e.C("/\\*","\\*/",{c:["self"]}),n={cN:"subst",b:/\\\(/,e:"\\)",k:i,c:[]},r={cN:"string",c:[e.BE,n],v:[{b:/"""/,e:/"""/},{b:/"/,e:/"/}]},a={cN:"number",b:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",relevance:0};return n.c=[a],{k:i,c:[r,e.CLCM,t,{cN:"type",b:"\\b[A-Z][\\wÀ-ʸ']*[!?]"},{cN:"type",b:"\\b[A-Z][\\wÀ-ʸ']*",relevance:0},a,{cN:"function",bK:"func",e:"{",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{b://},{cN:"params",b:/\(/,e:/\)/,endsParent:!0,k:i,c:["self",a,r,e.CBCM,{b:":"}],i:/["']/}],i:/\[|%/},{cN:"class",bK:"struct protocol class extension enum",k:i,e:"\\{",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/})]},{cN:"meta",b:"(@discardableResult|@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@objcMembers|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain|@dynamicMemberLookup|@propertyWrapper)"},{bK:"import",e:/$/,c:[e.CLCM,t]}]}});hljs.registerLanguage("ini",function(e){var b={cN:"number",relevance:0,v:[{b:/([\+\-]+)?[\d]+_[\d_]+/},{b:e.NR}]},a=e.C();a.v=[{b:/;/,e:/$/},{b:/#/,e:/$/}];var c={cN:"variable",v:[{b:/\$[\w\d"][\w\d_]*/},{b:/\$\{(.*?)}/}]},r={cN:"literal",b:/\bon|off|true|false|yes|no\b/},n={cN:"string",c:[e.BE],v:[{b:"'''",e:"'''",relevance:10},{b:'"""',e:'"""',relevance:10},{b:'"',e:'"'},{b:"'",e:"'"}]};return{aliases:["toml"],cI:!0,i:/\S/,c:[a,{cN:"section",b:/\[+/,e:/\]+/},{b:/^[a-z0-9\[\]_\.-]+(?=\s*=\s*)/,cN:"attr",starts:{e:/$/,c:[a,{b:/\[/,e:/\]/,c:[a,r,c,n,b,"self"],relevance:0},r,c,n,b]}}]}});hljs.registerLanguage("ruby",function(e){var c="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",b={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},r={cN:"doctag",b:"@[A-Za-z]+"},a={b:"#<",e:">"},n=[e.C("#","$",{c:[r]}),e.C("^\\=begin","^\\=end",{c:[r],relevance:10}),e.C("^__END__","\\n$")],s={cN:"subst",b:"#\\{",e:"}",k:b},t={cN:"string",c:[e.BE,s],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%[qQwWx]?\\(",e:"\\)"},{b:"%[qQwWx]?\\[",e:"\\]"},{b:"%[qQwWx]?{",e:"}"},{b:"%[qQwWx]?<",e:">"},{b:"%[qQwWx]?/",e:"/"},{b:"%[qQwWx]?%",e:"%"},{b:"%[qQwWx]?-",e:"-"},{b:"%[qQwWx]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{b:/<<[-~]?'?(\w+)(?:.|\n)*?\n\s*\1\b/,rB:!0,c:[{b:/<<[-~]?'?/},{b:/\w+/,endSameAsBegin:!0,c:[e.BE,s]}]}]},i={cN:"params",b:"\\(",e:"\\)",endsParent:!0,k:b},l=[t,a,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{b:"<\\s*",c:[{b:"("+e.IR+"::)?"+e.IR}]}].concat(n)},{cN:"function",bK:"def",e:"$|;",c:[e.inherit(e.TM,{b:c}),i].concat(n)},{b:e.IR+"::"},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",relevance:0},{cN:"symbol",b:":(?!\\s)",c:[t,{b:c}],relevance:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{cN:"params",b:/\|/,e:/\|/,k:b},{b:"("+e.RSR+"|unless)\\s*",k:"unless",c:[a,{cN:"regexp",c:[e.BE,s],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}].concat(n),relevance:0}].concat(n);s.c=l;var d=[{b:/^\s*=>/,starts:{e:"$",c:i.c=l}},{cN:"meta",b:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>)",starts:{e:"$",c:l}}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:b,i:/\/\*/,c:n.concat(d).concat(l)}});hljs.registerLanguage("plaintext",function(e){return{disableAutodetect:!0}});hljs.registerLanguage("d",function(e){var a="(0|[1-9][\\d_]*)",d="("+a+"|0[bB][01_]+|0[xX]([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))",t="\\\\(['\"\\?\\\\abfnrtv]|u[\\dA-Fa-f]{4}|[0-7]{1,3}|x[\\dA-Fa-f]{2}|U[\\dA-Fa-f]{8})|&[a-zA-Z\\d]{2,};",_={cN:"number",b:"\\b"+d+"(L|u|U|Lu|LU|uL|UL)?",relevance:0},r={cN:"number",b:"\\b(((0[xX](([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)\\.([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)|\\.?([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))[pP][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))|((0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(\\.\\d*|([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)))|\\d+\\.(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)|\\.(0|[1-9][\\d_]*)([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))?))([fF]|L|i|[fF]i|Li)?|"+d+"(i|[fF]i|Li))",relevance:0},i={cN:"string",b:"'("+t+"|.)",e:"'",i:"."},n={cN:"string",b:'"',c:[{b:t,relevance:0}],e:'"[cwd]?'},c=e.C("\\/\\+","\\+\\/",{c:["self"],relevance:10});return{l:e.UIR,k:{keyword:"abstract alias align asm assert auto body break byte case cast catch class const continue debug default delete deprecated do else enum export extern final finally for foreach foreach_reverse|10 goto if immutable import in inout int interface invariant is lazy macro mixin module new nothrow out override package pragma private protected public pure ref return scope shared static struct super switch synchronized template this throw try typedef typeid typeof union unittest version void volatile while with __FILE__ __LINE__ __gshared|10 __thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__",built_in:"bool cdouble cent cfloat char creal dchar delegate double dstring float function idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar wstring",literal:"false null true"},c:[e.CLCM,e.CBCM,c,{cN:"string",b:'x"[\\da-fA-F\\s\\n\\r]*"[cwd]?',relevance:10},n,{cN:"string",b:'[rq]"',e:'"[cwd]?',relevance:5},{cN:"string",b:"`",e:"`[cwd]?"},{cN:"string",b:'q"\\{',e:'\\}"'},r,_,i,{cN:"meta",b:"^#!",e:"$",relevance:5},{cN:"meta",b:"#(line)",e:"$",relevance:5},{cN:"keyword",b:"@[a-zA-Z_][a-zA-Z_\\d]*"}]}});hljs.registerLanguage("scala",function(e){var t={cN:"subst",v:[{b:"\\$[A-Za-z0-9_]+"},{b:"\\${",e:"}"}]},a={cN:"string",v:[{b:'"',e:'"',i:"\\n",c:[e.BE]},{b:'"""',e:'"""',relevance:10},{b:'[a-z]+"',e:'"',i:"\\n",c:[e.BE,t]},{cN:"string",b:'[a-z]+"""',e:'"""',c:[t],relevance:10}]},c={cN:"type",b:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},r={cN:"title",b:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,relevance:0},n={cN:"class",bK:"class object trait type",e:/[:={\[\n;]/,eE:!0,c:[{bK:"extends with",relevance:10},{b:/\[/,e:/\]/,eB:!0,eE:!0,relevance:0,c:[c]},{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,relevance:0,c:[c]},r]},l={cN:"function",bK:"def",e:/[:={\[(\n;]/,eE:!0,c:[r]};return{k:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},c:[e.CLCM,e.CBCM,a,{cN:"symbol",b:"'\\w[\\w\\d_]*(?!')"},c,l,n,e.CNM,{cN:"meta",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("cs",function(e){var a={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let nameof on orderby partial remove select set value var when where yield",literal:"null false true"},i={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},c={cN:"string",b:'@"',e:'"',c:[{b:'""'}]},r=e.inherit(c,{i:/\n/}),n={cN:"subst",b:"{",e:"}",k:a},t=e.inherit(n,{i:/\n/}),s={cN:"string",b:/\$"/,e:'"',i:/\n/,c:[{b:"{{"},{b:"}}"},e.BE,t]},l={cN:"string",b:/\$@"/,e:'"',c:[{b:"{{"},{b:"}}"},{b:'""'},n]},b=e.inherit(l,{i:/\n/,c:[{b:"{{"},{b:"}}"},{b:'""'},t]});n.c=[l,s,c,e.ASM,e.QSM,i,e.CBCM],t.c=[b,s,r,e.ASM,e.QSM,i,e.inherit(e.CBCM,{i:/\n/})];var o={v:[l,s,c,e.ASM,e.QSM]},d=e.IR+"(<"+e.IR+"(\\s*,\\s*"+e.IR+")*>)?(\\[\\])?";return{aliases:["csharp","c#"],k:a,i:/::/,c:[e.C("///","$",{rB:!0,c:[{cN:"doctag",v:[{b:"///",relevance:0},{b:"\x3c!--|--\x3e"},{b:""}]}]}),e.CLCM,e.CBCM,{cN:"meta",b:"#",e:"$",k:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},o,i,{bK:"class interface",e:/[{;=]/,i:/[^\s:,]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:"namespace",e:/[{;=]/,i:/[^\s:]/,c:[e.inherit(e.TM,{b:"[a-zA-Z](\\.?\\w)*"}),e.CLCM,e.CBCM]},{cN:"meta",b:"^\\s*\\[",eB:!0,e:"\\]",eE:!0,c:[{cN:"meta-string",b:/"/,e:/"/}]},{bK:"new return throw await else",relevance:0},{cN:"function",b:"("+d+"\\s+)+"+e.IR+"\\s*\\(",rB:!0,e:/\s*[{;=]/,eE:!0,k:a,c:[{b:e.IR+"\\s*\\(",rB:!0,c:[e.TM],relevance:0},{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:a,relevance:0,c:[o,i,e.CBCM]},e.CLCM,e.CBCM]}]}});hljs.registerLanguage("cpp",function(e){function t(e){return"(?:"+e+")?"}var r="decltype\\(auto\\)",a="[a-zA-Z_]\\w*::",i=(t(a),t("<.*?>"),{cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"}),c={cN:"string",v:[{b:'(u8?|U|L)?"',e:'"',i:"\\n",c:[e.BE]},{b:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",e:"'",i:"."},{b:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\((?:.|\n)*?\)\1"/}]},s={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},n={cN:"meta",b:/#\s*[a-z]+\b/,e:/$/,k:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},c:[{b:/\\\n/,relevance:0},e.inherit(c,{cN:"meta-string"}),{cN:"meta-string",b:/<.*?>/,e:/$/,i:"\\n"},e.CLCM,e.CBCM]},o={cN:"title",b:t(a)+e.IR,relevance:0},l=t(a)+e.IR+"\\s*\\(",u={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_tshort reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary",literal:"true false nullptr NULL"},p=[i,e.CLCM,e.CBCM,s,c],m={v:[{b:/=/,e:/;/},{b:/\(/,e:/\)/},{bK:"new throw return else",e:/;/}],k:u,c:p.concat([{b:/\(/,e:/\)/,k:u,c:p.concat(["self"]),relevance:0}]),relevance:0},d={cN:"function",b:"((decltype\\(auto\\)|(?:[a-zA-Z_]\\w*::)?[a-zA-Z_]\\w*(?:<.*?>)?)[\\*&\\s]+)+"+l,rB:!0,e:/[{;=]/,eE:!0,k:u,i:/[^\w\s\*&:<>]/,c:[{b:r,k:u,relevance:0},{b:l,rB:!0,c:[o],relevance:0},{cN:"params",b:/\(/,e:/\)/,k:u,relevance:0,c:[e.CLCM,e.CBCM,c,s,i,{b:/\(/,e:/\)/,k:u,relevance:0,c:["self",e.CLCM,e.CBCM,c,s,i]}]},i,e.CLCM,e.CBCM,n]};return{aliases:["c","cc","h","c++","h++","hpp","hh","hxx","cxx"],k:u,i:"",k:u,c:["self",i]},{b:e.IR+"::",k:u},{cN:"class",bK:"class struct",e:/[{;:]/,c:[{b://,c:["self"]},e.TM]}]),exports:{preprocessor:n,strings:c,k:u}}});hljs.registerLanguage("less",function(e){function r(e){return{cN:"string",b:"~?"+e+".*?"+e}}function t(e,r,t){return{cN:e,b:r,relevance:t}}var a="[\\w-]+",c="("+a+"|@{"+a+"})",s=[],n=[],b={b:"\\(",e:"\\)",c:n,relevance:0};n.push(e.CLCM,e.CBCM,r("'"),r('"'),e.CSSNM,{b:"(url|data-uri)\\(",starts:{cN:"string",e:"[\\)\\n]",eE:!0}},t("number","#[0-9A-Fa-f]+\\b"),b,t("variable","@@?"+a,10),t("variable","@{"+a+"}"),t("built_in","~?`[^`]*?`"),{cN:"attribute",b:a+"\\s*:",e:":",rB:!0,eE:!0},{cN:"meta",b:"!important"});var i=n.concat({b:"{",e:"}",c:s}),l={bK:"when",eW:!0,c:[{bK:"and not"}].concat(n)},o={b:c+"\\s*:",rB:!0,e:"[;}]",relevance:0,c:[{cN:"attribute",b:c,e:":",eE:!0,starts:{eW:!0,i:"[<=$]",relevance:0,c:n}}]},u={cN:"keyword",b:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{e:"[;{}]",rE:!0,c:n,relevance:0}},v={cN:"variable",v:[{b:"@"+a+"\\s*:",relevance:15},{b:"@"+a}],starts:{e:"[;}]",rE:!0,c:i}},C={v:[{b:"[\\.#:&\\[>]",e:"[;{}]"},{b:c,e:"{"}],rB:!0,rE:!0,i:"[<='$\"]",relevance:0,c:[e.CLCM,e.CBCM,l,t("keyword","all\\b"),t("variable","@{"+a+"}"),t("selector-tag",c+"%?",0),t("selector-id","#"+c),t("selector-class","\\."+c,0),t("selector-tag","&",0),{cN:"selector-attr",b:"\\[",e:"\\]"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"\\(",e:"\\)",c:i},{b:"!important"}]};return s.push(e.CLCM,e.CBCM,u,v,o,C),{cI:!0,i:"[=>'/<($\"]",c:s}});hljs.registerLanguage("python",function(e){var r={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10",built_in:"Ellipsis NotImplemented",literal:"False None True"},b={cN:"meta",b:/^(>>>|\.\.\.) /},c={cN:"subst",b:/\{/,e:/\}/,k:r,i:/#/},a={b:/\{\{/,relevance:0},l={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[e.BE,b],relevance:10},{b:/(u|b)?r?"""/,e:/"""/,c:[e.BE,b],relevance:10},{b:/(fr|rf|f)'''/,e:/'''/,c:[e.BE,b,a,c]},{b:/(fr|rf|f)"""/,e:/"""/,c:[e.BE,b,a,c]},{b:/(u|r|ur)'/,e:/'/,relevance:10},{b:/(u|r|ur)"/,e:/"/,relevance:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},{b:/(fr|rf|f)'/,e:/'/,c:[e.BE,a,c]},{b:/(fr|rf|f)"/,e:/"/,c:[e.BE,a,c]},e.ASM,e.QSM]},n={cN:"number",relevance:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},i={cN:"params",b:/\(/,e:/\)/,c:["self",b,n,l,e.HCM]};return c.c=[l,n,b],{aliases:["py","gyp","ipython"],k:r,i:/(<\/|->|\?)|=>/,c:[b,n,{bK:"if",relevance:0},l,e.HCM,{v:[{cN:"function",bK:"def"},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,i,{b:/->/,eW:!0,k:"None"}]},{cN:"meta",b:/^[\t ]*@/,e:/$/},{b:/\b(print|exec)\(/}]}});hljs.registerLanguage("powershell",function(e){var t={keyword:"if else foreach return do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch hidden static parameter"},n={b:"`[\\s\\S]",relevance:0},c={cN:"variable",v:[{b:/\$\B/},{cN:"keyword",b:/\$this/},{b:/\$[\w\d][\w\d_:]*/}]},i={cN:"string",v:[{b:/"/,e:/"/},{b:/@"/,e:/^"@/}],c:[n,c,{cN:"variable",b:/\$[A-z]/,e:/[^A-z]/}]},a={cN:"string",v:[{b:/'/,e:/'/},{b:/@'/,e:/^'@/}]},r=e.inherit(e.C(null,null),{v:[{b:/#/,e:/$/},{b:/<#/,e:/#>/}],c:[{cN:"doctag",v:[{b:/\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/},{b:/\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\s+\S+/}]}]}),o={cN:"built_in",v:[{b:"(".concat("Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|Limit|Merge|New|Out|Publish|Restore|Save|Sync|Unpublish|Update|Approve|Assert|Complete|Confirm|Deny|Disable|Enable|Install|Invoke|Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|Unprotect|Use|ForEach|Sort|Tee|Where",")+(-)[\\w\\d]+")}]},l={cN:"class",bK:"class enum",e:/\s*[{]/,eE:!0,relevance:0,c:[e.TM]},s={cN:"function",b:/function\s+/,e:/\s*\{|$/,eE:!0,rB:!0,relevance:0,c:[{b:"function",relevance:0,cN:"keyword"},{cN:"title",b:/\w[\w\d]*((-)[\w\d]+)*/,relevance:0},{b:/\(/,e:/\)/,cN:"params",relevance:0,c:[c]}]},p={b:/using\s/,e:/$/,rB:!0,c:[i,a,{cN:"keyword",b:/(using|assembly|command|module|namespace|type)/}]},b={v:[{cN:"operator",b:"(".concat("-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|-split|-wildcard|-xor",")\\b")},{cN:"literal",b:/(-)[\w\d]+/,relevance:0}]},d={cN:"function",b:/\[.*\]\s*[\w]+[ ]??\(/,e:/$/,rB:!0,relevance:0,c:[{cN:"keyword",b:"(".concat(t.keyword.toString().replace(/\s/g,"|"),")\\b"),endsParent:!0,relevance:0},e.inherit(e.TM,{endsParent:!0})]},u=[d,r,n,e.NM,i,a,o,c,{cN:"literal",b:/\$(null|true|false)\b/},{cN:"selector-tag",b:/\@\B/,relevance:0}],m={b:/\[/,e:/\]/,eB:!0,eE:!0,relevance:0,c:[].concat("self",u,{b:"("+["string","char","byte","int","long","bool","decimal","single","double","DateTime","xml","array","hashtable","void"].join("|")+")",cN:"built_in",relevance:0},{cN:"type",b:/[\.\w\d]+/,relevance:0})};return d.c.unshift(m),{aliases:["ps","ps1"],l:/-?[A-z\.\-]+/,cI:!0,k:t,c:u.concat(l,s,p,b,m)}});hljs.registerLanguage("coffeescript",function(e){var c={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super yield import export from as default await then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",built_in:"npm require console print module global window document"},n="[A-Za-z$_][0-9A-Za-z$_]*",r={cN:"subst",b:/#\{/,e:/}/,k:c},i=[e.BNM,e.inherit(e.CNM,{starts:{e:"(\\s*/)?",relevance:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/"""/,e:/"""/,c:[e.BE,r]},{b:/"/,e:/"/,c:[e.BE,r]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[r,e.HCM]},{b:"//[gim]{0,3}(?=\\W)",relevance:0},{b:/\/(?![ *]).*?(?![\\]).\/[gim]{0,3}(?=\W)/}]},{b:"@"+n},{sL:"javascript",eB:!0,eE:!0,v:[{b:"```",e:"```"},{b:"`",e:"`"}]}];r.c=i;var s=e.inherit(e.TM,{b:n}),t="(\\(.*\\))?\\s*\\B[-=]>",a={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:c,c:["self"].concat(i)}]};return{aliases:["coffee","cson","iced"],k:c,i:/\/\*/,c:i.concat([e.C("###","###"),e.HCM,{cN:"function",b:"^\\s*"+n+"\\s*=\\s*"+t,e:"[-=]>",rB:!0,c:[s,a]},{b:/[:\(,=]\s*/,relevance:0,c:[{cN:"function",b:t,e:"[-=]>",rB:!0,c:[a]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[s]},s]},{b:n+":",e:":",rB:!0,rE:!0,relevance:0}])}});hljs.registerLanguage("json",function(e){var i={literal:"true false null"},n=[e.CLCM,e.CBCM],c=[e.QSM,e.CNM],r={e:",",eW:!0,eE:!0,c:c,k:i},t={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(r,{b:/:/})].concat(n),i:"\\S"},a={b:"\\[",e:"\\]",c:[e.inherit(r)],i:"\\S"};return c.push(t,a),n.forEach(function(e){c.push(e)}),{c:c,k:i,i:"\\S"}});hljs.registerLanguage("xml",function(e){var c={cN:"symbol",b:"&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;"},s={b:"\\s",c:[{cN:"meta-keyword",b:"#?[a-z_][a-z1-9_-]+",i:"\\n"}]},a=e.inherit(s,{b:"\\(",e:"\\)"}),t=e.inherit(e.ASM,{cN:"meta-string"}),l=e.inherit(e.QSM,{cN:"meta-string"}),r={eW:!0,i:/`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],cI:!0,c:[{cN:"meta",b:"",relevance:10,c:[s,l,t,a,{b:"\\[",e:"\\]",c:[{cN:"meta",b:"",c:[s,a,l,t]}]}]},e.C("\x3c!--","--\x3e",{relevance:10}),{b:"<\\!\\[CDATA\\[",e:"\\]\\]>",relevance:10},c,{cN:"meta",b:/<\?xml/,e:/\?>/,relevance:10},{b:/<\?(php)?/,e:/\?>/,sL:"php",c:[{b:"/\\*",e:"\\*/",skip:!0},{b:'b"',e:'"',skip:!0},{b:"b'",e:"'",skip:!0},e.inherit(e.ASM,{i:null,cN:null,c:null,skip:!0}),e.inherit(e.QSM,{i:null,cN:null,c:null,skip:!0})]},{cN:"tag",b:")",e:">",k:{name:"style"},c:[r],starts:{e:"",rE:!0,sL:["css","xml"]}},{cN:"tag",b:")",e:">",k:{name:"script"},c:[r],starts:{e:"<\/script>",rE:!0,sL:["actionscript","javascript","handlebars","xml"]}},{cN:"tag",b:"",c:[{cN:"name",b:/[^\/><\s]+/,relevance:0},r]}]}});hljs.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"section",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",relevance:0},{cN:"bullet",b:"^\\s*([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",relevance:0}]},{cN:"quote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"^```\\w*\\s*$",e:"^```[ ]*$"},{b:"`.+?`"},{b:"^( {4}|\\t)",e:"$",relevance:0}]},{b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"string",b:"\\[",e:"\\]",eB:!0,rE:!0,relevance:0},{cN:"link",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"symbol",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],relevance:10},{b:/^\[[^\n]+\]:/,rB:!0,c:[{cN:"symbol",b:/\[/,e:/\]/,eB:!0,eE:!0},{cN:"link",b:/:\s*/,e:/$/,eB:!0}]}]}});hljs.registerLanguage("sql",function(e){var t=e.C("--","$");return{cI:!0,i:/[<>{}*]/,c:[{bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with",e:/;/,eW:!0,l:/[\w\.]+/,k:{keyword:"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null unknown",built_in:"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varchar2 varying void"},c:[{cN:"string",b:"'",e:"'",c:[{b:"''"}]},{cN:"string",b:'"',e:'"',c:[{b:'""'}]},{cN:"string",b:"`",e:"`"},e.CNM,e.CBCM,t,e.HCM]},e.CBCM,t,e.HCM]}});hljs.registerLanguage("javascript",function(e){var r="<>",a="",t={b:/<[A-Za-z0-9\\._:-]+/,e:/\/[A-Za-z0-9\\._:-]+>|\/>/},c="[A-Za-z$_][0-9A-Za-z$_]*",n={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},s={cN:"number",v:[{b:"\\b(0[bB][01]+)n?"},{b:"\\b(0[oO][0-7]+)n?"},{b:e.CNR+"n?"}],relevance:0},o={cN:"subst",b:"\\$\\{",e:"\\}",k:n,c:[]},i={b:"html`",e:"",starts:{e:"`",rE:!1,c:[e.BE,o],sL:"xml"}},b={b:"css`",e:"",starts:{e:"`",rE:!1,c:[e.BE,o],sL:"css"}},l={cN:"string",b:"`",e:"`",c:[e.BE,o]};o.c=[e.ASM,e.QSM,i,b,l,s,e.RM];var u=o.c.concat([e.CBCM,e.CLCM]);return{aliases:["js","jsx","mjs","cjs"],k:n,c:[{cN:"meta",relevance:10,b:/^\s*['"]use (strict|asm)['"]/},{cN:"meta",b:/^#!/,e:/$/},e.ASM,e.QSM,i,b,l,e.CLCM,e.C("/\\*\\*","\\*/",{relevance:0,c:[{cN:"doctag",b:"@[A-Za-z]+",c:[{cN:"type",b:"\\{",e:"\\}",relevance:0},{cN:"variable",b:c+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{b:/(?=[^\n])\s/,relevance:0}]}]}),e.CBCM,s,{b:/[{,\n]\s*/,relevance:0,c:[{b:c+"\\s*:",rB:!0,relevance:0,c:[{cN:"attr",b:c,relevance:0}]}]},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+c+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:c},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:n,c:u}]}]},{cN:"",b:/\s/,e:/\s*/,skip:!0},{v:[{b:r,e:a},{b:t.b,e:t.e}],sL:"xml",c:[{b:t.b,e:t.e,skip:!0,c:["self"]}]}],relevance:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:c}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:u}],i:/\[|%/},{b:/\$[(.]/},e.METHOD_GUARD,{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]},{bK:"constructor get set",e:/\{/,eE:!0}],i:/#(?!!)/}});hljs.registerLanguage("perl",function(e){var t="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",r={cN:"subst",b:"[$@]\\{",e:"\\}",k:t},s={b:"->{",e:"}"},n={v:[{b:/\$\d/},{b:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{b:/[\$%@][^\s\w{]/,relevance:0}]},c=[e.BE,r,n],a=[n,e.HCM,e.C("^\\=\\w","\\=cut",{eW:!0}),s,{cN:"string",c:c,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",relevance:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",relevance:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",relevance:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",relevance:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",relevance:5},{b:"qw\\s+q",e:"q",relevance:5},{b:"'",e:"'",c:[e.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[e.BE]},{b:"{\\w+}",c:[],relevance:0},{b:"-?\\w+\\s*\\=\\>",c:[],relevance:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{b:"(\\/\\/|"+e.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",relevance:0,c:[e.HCM,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",relevance:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[e.BE],relevance:0}]},{cN:"function",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",eE:!0,relevance:5,c:[e.TM]},{b:"-\\w\\b",relevance:0},{b:"^__DATA__$",e:"^__END__$",sL:"mojolicious",c:[{b:"^@@.*",e:"$",cN:"comment"}]}];return r.c=a,{aliases:["pl","pm"],l:/[\w\.]+/,k:t,c:s.c=a}});hljs.registerLanguage("tex",function(e){var c={cN:"tag",b:/\\/,relevance:0,c:[{cN:"name",v:[{b:/[a-zA-Z\u0430-\u044f\u0410-\u042f]+[*]?/},{b:/[^a-zA-Z\u0430-\u044f\u0410-\u042f0-9]/}],starts:{eW:!0,relevance:0,c:[{cN:"string",v:[{b:/\[/,e:/\]/},{b:/\{/,e:/\}/}]},{b:/\s*=\s*/,eW:!0,relevance:0,c:[{cN:"number",b:/-?\d*\.?\d+(pt|pc|mm|cm|in|dd|cc|ex|em)?/}]}]}}]};return{c:[c,{cN:"formula",c:[c],relevance:0,v:[{b:/\$\$/,e:/\$\$/},{b:/\$/,e:/\$/}]},e.C("%","$",{relevance:0})]}});hljs.registerLanguage("fortran",function(e){return{cI:!0,aliases:["f90","f95"],k:{literal:".False. .True.",keyword:"kind do while private call intrinsic where elsewhere type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then block endblock public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. goto save else use module select case access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit continue format pause cycle exit c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg synchronous nopass non_overridable pass protected volatile abstract extends import non_intrinsic value deferred generic final enumerator class associate bind enum c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated c_f_pointer c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure integer real character complex logical dimension allocatable|10 parameter external implicit|10 none double precision assign intent optional pointer target in out common equivalence data",built_in:"alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_ofacosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image"},i:/\/\*/,c:[e.inherit(e.ASM,{cN:"string",relevance:0}),e.inherit(e.QSM,{cN:"string",relevance:0}),{cN:"function",bK:"subroutine function program",i:"[${=\\n]",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)"}]},e.C("!","$",{relevance:0}),{cN:"number",b:"(?=\\b|\\+|\\-|\\.)(?=\\.\\d|\\d)(?:\\d+)?(?:\\.?\\d*)(?:[de][+-]?\\d+)?\\b\\.?",relevance:0}]}});hljs.registerLanguage("protobuf",function(e){return{k:{keyword:"package import option optional required repeated group oneof",built_in:"double float int32 int64 uint32 uint64 sint32 sint64 fixed32 fixed64 sfixed32 sfixed64 bool string bytes",literal:"true false"},c:[e.QSM,e.NM,e.CLCM,{cN:"class",bK:"message enum service",e:/\{/,i:/\n/,c:[e.inherit(e.TM,{starts:{eW:!0,eE:!0}})]},{cN:"function",bK:"rpc",e:/;/,eE:!0,k:"rpc returns"},{b:/^\s*[A-Z_]+/,e:/\s*=/,eE:!0}]}});hljs.registerLanguage("java",function(e){var a="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",t={cN:"number",b:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",relevance:0};return{aliases:["jsp"],k:a,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{relevance:0,c:[{b:/\w+@/,relevance:0},{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"new throw return else",relevance:0},{cN:"function",b:"([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:a,c:[{b:e.UIR+"\\s*\\(",rB:!0,relevance:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:a,relevance:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},t,{cN:"meta",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("properties",function(e){var r="[ \\t\\f]*",t="("+r+"[:=]"+r+"|[ \\t\\f]+)",n="([^\\\\\\W:= \\t\\f\\n]|\\\\.)+",a="([^\\\\:= \\t\\f\\n]|\\\\.)+",c={e:t,relevance:0,starts:{cN:"string",e:/$/,relevance:0,c:[{b:"\\\\\\n"}]}};return{cI:!0,i:/\S/,c:[e.C("^\\s*[!#]","$"),{b:n+t,rB:!0,c:[{cN:"attr",b:n,endsParent:!0,relevance:0}],starts:c},{b:a+t,rB:!0,relevance:0,c:[{cN:"meta",b:a,endsParent:!0,relevance:0}],starts:c},{cN:"attr",relevance:0,b:a+r+"$"}]}});hljs.registerLanguage("php",function(e){var c={b:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},i={cN:"meta",b:/<\?(php)?|\?>/},t={cN:"string",c:[e.BE,i],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},a={v:[e.BNM,e.CNM]};return{aliases:["php","php3","php4","php5","php6","php7"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[e.HCM,e.C("//","$",{c:[i]}),e.C("/\\*","\\*/",{c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.C("__halt_compiler.+?;",!1,{eW:!0,k:"__halt_compiler",l:e.UIR}),{cN:"string",b:/<<<['"]?\w+['"]?$/,e:/^\w+;?$/,c:[e.BE,{cN:"subst",v:[{b:/\$\w+/},{b:/\{\$/,e:/\}/}]}]},i,{cN:"keyword",b:/\$this\b/},c,{b:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",c,e.CBCM,t,a]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},t,a]}});hljs.registerLanguage("nginx",function(e){var r={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+e.UIR}]},b={eW:!0,l:"[a-z/_]+",k:{literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},relevance:0,i:"=>",c:[e.HCM,{cN:"string",c:[e.BE,r],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{b:"([a-z]+):/",e:"\\s",eW:!0,eE:!0,c:[r]},{cN:"regexp",c:[e.BE,r],v:[{b:"\\s\\^",e:"\\s|{|;",rE:!0},{b:"~\\*?\\s+",e:"\\s|{|;",rE:!0},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",relevance:0},r]};return{aliases:["nginxconf"],c:[e.HCM,{b:e.UIR+"\\s+{",rB:!0,e:"{",c:[{cN:"section",b:e.UIR}],relevance:0},{b:e.UIR+"\\s",e:";|{",rB:!0,c:[{cN:"attribute",b:e.UIR,starts:b}],relevance:0}],i:"[^\\s\\}]"}});hljs.registerLanguage("makefile",function(e){var i={cN:"variable",v:[{b:"\\$\\("+e.UIR+"\\)",c:[e.BE]},{b:/\$[@%/,e:/$/,i:"\\n"},e.CLCM,e.CBCM]},{cN:"class",b:"("+i.split(" ").join("|")+")\\b",e:"({|$)",eE:!0,k:i,l:t,c:[e.UTM]},{b:"\\."+e.UIR,relevance:0}]}});hljs.registerLanguage("typescript",function(e){var r="[A-Za-z$_][0-9A-Za-z$_]*",t={keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class public private protected get set super static implements enum export import declare type namespace abstract as from extends async await",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document any number boolean string void Promise"},n={cN:"meta",b:"@"+r},a={b:"\\(",e:/\)/,k:t,c:["self",e.QSM,e.ASM,e.NM]},c={cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,c:[e.CLCM,e.CBCM,n,a]},s={cN:"number",v:[{b:"\\b(0[bB][01]+)n?"},{b:"\\b(0[oO][0-7]+)n?"},{b:e.CNR+"n?"}],relevance:0},o={cN:"subst",b:"\\$\\{",e:"\\}",k:t,c:[]},i={b:"html`",e:"",starts:{e:"`",rE:!1,c:[e.BE,o],sL:"xml"}},l={b:"css`",e:"",starts:{e:"`",rE:!1,c:[e.BE,o],sL:"css"}},b={cN:"string",b:"`",e:"`",c:[e.BE,o]};return o.c=[e.ASM,e.QSM,i,l,b,s,e.RM],{aliases:["ts"],k:t,c:[{cN:"meta",b:/^\s*['"]use strict['"]/},e.ASM,e.QSM,i,l,b,e.CLCM,e.CBCM,s,{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+e.IR+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:e.IR},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,c:["self",e.CLCM,e.CBCM]}]}]}],relevance:0},{cN:"function",bK:"function",e:/[\{;]/,eE:!0,k:t,c:["self",e.inherit(e.TM,{b:r}),c],i:/%/,relevance:0},{bK:"constructor",e:/[\{;]/,eE:!0,c:["self",c]},{b:/module\./,k:{built_in:"module"},relevance:0},{bK:"module",e:/\{/,eE:!0},{bK:"interface",e:/\{/,eE:!0,k:"interface extends"},{b:/\$[(.]/},{b:"\\."+e.IR,relevance:0},n,a]}});hljs.registerLanguage("elm",function(e){var i={v:[e.C("--","$"),e.C("{-","-}",{c:["self"]})]},t={cN:"type",b:"\\b[A-Z][\\w']*",relevance:0},c={b:"\\(",e:"\\)",i:'"',c:[{cN:"type",b:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},i]};return{k:"let in if then else case of where module import exposing type alias as infix infixl infixr port effect command subscription",c:[{bK:"port effect module",e:"exposing",k:"port effect module where command subscription exposing",c:[c,i],i:"\\W\\.|;"},{b:"import",e:"$",k:"import as exposing",c:[c,i],i:"\\W\\.|;"},{b:"type",e:"$",k:"type alias",c:[t,c,{b:"{",e:"}",c:c.c},i]},{bK:"infix infixl infixr",e:"$",c:[e.CNM,i]},{b:"port",e:"$",k:"port",c:[i]},{cN:"string",b:"'\\\\?.",e:"'",i:"."},e.QSM,e.CNM,t,e.inherit(e.TM,{b:"^[_a-z][\\w']*"}),i,{b:"->|<-"}],i:/;/}});hljs.registerLanguage("http",function(e){var t="HTTP/[0-9\\.]+";return{aliases:["https"],i:"\\S",c:[{b:"^"+t,e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{b:"^[A-Z]+ (.*?) "+t+"$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0},{b:t},{cN:"keyword",b:"[A-Z]+"}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{e:"$",relevance:0}},{b:"\\n\\n",starts:{sL:[],eW:!0}}]}});hljs.registerLanguage("diff",function(e){return{aliases:["patch"],c:[{cN:"meta",relevance:10,v:[{b:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"comment",v:[{b:/Index: /,e:/$/},{b:/={3,}/,e:/$/},{b:/^\-{3}/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+{3}/,e:/$/},{b:/^\*{15}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"addition",b:"^\\!",e:"$"}]}});hljs.registerLanguage("lisp",function(e){var b="[a-zA-Z_\\-\\+\\*\\/\\<\\=\\>\\&\\#][a-zA-Z0-9_\\-\\+\\*\\/\\<\\=\\>\\&\\#!]*",c="\\|[^]*?\\|",a="(\\-|\\+)?\\d+(\\.\\d+|\\/\\d+)?((d|e|f|l|s|D|E|F|L|S)(\\+|\\-)?\\d+)?",l={cN:"literal",b:"\\b(t{1}|nil)\\b"},n={cN:"number",v:[{b:a,relevance:0},{b:"#(b|B)[0-1]+(/[0-1]+)?"},{b:"#(o|O)[0-7]+(/[0-7]+)?"},{b:"#(x|X)[0-9a-fA-F]+(/[0-9a-fA-F]+)?"},{b:"#(c|C)\\("+a+" +"+a,e:"\\)"}]},r=e.inherit(e.QSM,{i:null}),i=e.C(";","$",{relevance:0}),t={b:"\\*",e:"\\*"},v={cN:"symbol",b:"[:&]"+b},s={b:b,relevance:0},u={b:c},d={c:[n,r,t,v,{b:"\\(",e:"\\)",c:["self",l,r,n,s]},s],v:[{b:"['`]\\(",e:"\\)"},{b:"\\(quote ",e:"\\)",k:{name:"quote"}},{b:"'"+c}]},f={v:[{b:"'"+b},{b:"#'"+b+"(::"+b+")*"}]},m={b:"\\(\\s*",e:"\\)"},o={eW:!0,relevance:0};return m.c=[{cN:"name",v:[{b:b},{b:c}]},o],o.c=[d,f,m,l,n,r,i,t,v,u,s],{i:/\S/,c:[n,{cN:"meta",b:"^#!",e:"$"},l,r,i,d,f,m,s]}});hljs.registerLanguage("kotlin",function(e){var t={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual trait volatile transient native default",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},a={cN:"symbol",b:e.UIR+"@"},n={cN:"subst",b:"\\${",e:"}",c:[e.CNM]},c={cN:"variable",b:"\\$"+e.UIR},r={cN:"string",v:[{b:'"""',e:'"""(?=[^"])',c:[c,n]},{b:"'",e:"'",i:/\n/,c:[e.BE]},{b:'"',e:'"',i:/\n/,c:[e.BE,c,n]}]};n.c.push(r);var i={cN:"meta",b:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UIR+")?"},l={cN:"meta",b:"@"+e.UIR,c:[{b:/\(/,e:/\)/,c:[e.inherit(r,{cN:"meta-string"})]}]},s={cN:"number",b:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",relevance:0},b=e.C("/\\*","\\*/",{c:[e.CBCM]}),o={v:[{cN:"type",b:e.UIR},{b:/\(/,e:/\)/,c:[]}]},d=o;return d.v[1].c=[o],o.v[1].c=[d],{aliases:["kt"],k:t,c:[e.C("/\\*\\*","\\*/",{relevance:0,c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,b,{cN:"keyword",b:/\b(break|continue|return|this)\b/,starts:{c:[{cN:"symbol",b:/@\w+/}]}},a,i,l,{cN:"function",bK:"fun",e:"[(]|$",rB:!0,eE:!0,k:t,i:/fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/,relevance:5,c:[{b:e.UIR+"\\s*\\(",rB:!0,relevance:0,c:[e.UTM]},{cN:"type",b://,k:"reified",relevance:0},{cN:"params",b:/\(/,e:/\)/,endsParent:!0,k:t,relevance:0,c:[{b:/:/,e:/[=,\/]/,eW:!0,c:[o,e.CLCM,b],relevance:0},e.CLCM,b,i,l,r,e.CNM]},b]},{cN:"class",bK:"class interface trait",e:/[:\{(]|$/,eE:!0,i:"extends implements",c:[{bK:"public protected internal private constructor"},e.UTM,{cN:"type",b://,eB:!0,eE:!0,relevance:0},{cN:"type",b:/[,:]\s*/,e:/[<\(,]|$/,eB:!0,rE:!0},i,l]},r,{cN:"meta",b:"^#!/usr/bin/env",e:"$",i:"\n"},s]}});hljs.registerLanguage("dart",function(e){var t={cN:"subst",v:[{b:"\\$[A-Za-z0-9_]+"}]},r={cN:"subst",v:[{b:"\\${",e:"}"}],k:"true false null this is new super"},n={cN:"string",v:[{b:"r'''",e:"'''"},{b:'r"""',e:'"""'},{b:"r'",e:"'",i:"\\n"},{b:'r"',e:'"',i:"\\n"},{b:"'''",e:"'''",c:[e.BE,t,r]},{b:'"""',e:'"""',c:[e.BE,t,r]},{b:"'",e:"'",i:"\\n",c:[e.BE,t,r]},{b:'"',e:'"',i:"\\n",c:[e.BE,t,r]}]};r.c=[e.CNM,n];return{k:{keyword:"abstract as assert async await break case catch class const continue covariant default deferred do dynamic else enum export extends extension external factory false final finally for Function get hide if implements import in inferface is library mixin new null on operator part rethrow return set show static super switch sync this throw true try typedef var void while with yield",built_in:"Comparable DateTime Duration Function Iterable Iterator List Map Match Null Object Pattern RegExp Set Stopwatch String StringBuffer StringSink Symbol Type Uri bool double dynamic int num print Element ElementList document querySelector querySelectorAll window"},c:[n,e.C("/\\*\\*","\\*/",{sL:"markdown"}),e.C("///+\\s*","$",{c:[{sL:"markdown",b:".",e:"$"}]}),e.CLCM,e.CBCM,{cN:"class",bK:"class interface",e:"{",eE:!0,c:[{bK:"extends implements"},e.UTM]},e.CNM,{cN:"meta",b:"@[A-Za-z]+"},{b:"=>"}]}});hljs.registerLanguage("applescript",function(e){var t=e.inherit(e.QSM,{i:""}),r={cN:"params",b:"\\(",e:"\\)",c:["self",e.CNM,t]},i=e.C("--","$"),o=[i,e.C("\\(\\*","\\*\\)",{c:["self",i]}),e.HCM];return{aliases:["osascript"],k:{keyword:"about above after against and around as at back before beginning behind below beneath beside between but by considering contain contains continue copy div does eighth else end equal equals error every exit fifth first for fourth from front get given global if ignoring in into is it its last local me middle mod my ninth not of on onto or over prop property put ref reference repeat returning script second set seventh since sixth some tell tenth that the|0 then third through thru timeout times to transaction try until where while whose with without",literal:"AppleScript false linefeed return pi quote result space tab true",built_in:"alias application boolean class constant date file integer list number real record string text activate beep count delay launch log offset read round run say summarize write character characters contents day frontmost id item length month name paragraph paragraphs rest reverse running time version weekday word words year"},c:[t,e.CNM,{cN:"built_in",b:"\\b(clipboard info|the clipboard|info for|list (disks|folder)|mount volume|path to|(close|open for) access|(get|set) eof|current date|do shell script|get volume settings|random number|set volume|system attribute|system info|time to GMT|(load|run|store) script|scripting components|ASCII (character|number)|localized string|choose (application|color|file|file name|folder|from list|remote application|URL)|display (alert|dialog))\\b|^\\s*return\\b"},{cN:"literal",b:"\\b(text item delimiters|current application|missing value)\\b"},{cN:"keyword",b:"\\b(apart from|aside from|instead of|out of|greater than|isn't|(doesn't|does not) (equal|come before|come after|contain)|(greater|less) than( or equal)?|(starts?|ends|begins?) with|contained by|comes (before|after)|a (ref|reference)|POSIX file|POSIX path|(date|time) string|quoted form)\\b"},{bK:"on",i:"[${=;\\n]",c:[e.UTM,r]}].concat(o),i:"//|->|=>|\\[\\["}});hljs.registerLanguage("autohotkey",function(e){var a={b:"`[\\s\\S]"};return{cI:!0,aliases:["ahk"],k:{keyword:"Break Continue Critical Exit ExitApp Gosub Goto New OnExit Pause return SetBatchLines SetTimer Suspend Thread Throw Until ahk_id ahk_class ahk_pid ahk_exe ahk_group",literal:"true false NOT AND OR",built_in:"ComSpec Clipboard ClipboardAll ErrorLevel"},c:[a,e.inherit(e.QSM,{c:[a]}),e.C(";","$",{relevance:0}),e.CBCM,{cN:"number",b:e.NR,relevance:0},{cN:"variable",b:"%[a-zA-Z0-9#_$@]+%"},{cN:"built_in",b:"^\\s*\\w+\\s*(,|%)"},{cN:"title",v:[{b:'^[^\\n";]+::(?!=)'},{b:'^[^\\n";]+:(?!=)',relevance:0}]},{cN:"meta",b:"^\\s*#\\w+",e:"$",relevance:0},{cN:"built_in",b:"A_[a-zA-Z0-9]+"},{b:",\\s*,"}]}});hljs.registerLanguage("rust",function(e){var t="([ui](8|16|32|64|128|size)|f(32|64))?",r="drop i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize f32 f64 str char bool Box Option Result String Vec Copy Send Sized Sync Drop Fn FnMut FnOnce ToOwned Clone Debug PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator SliceConcatExt ToString assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!";return{aliases:["rs"],k:{keyword:"abstract as async await become box break const continue crate do dyn else enum extern false final fn for if impl in let loop macro match mod move mut override priv pub ref return self Self static struct super trait true try type typeof unsafe unsized use virtual where while yield",literal:"true false Some None Ok Err",built_in:r},l:e.IR+"!?",i:""}]}});hljs.registerLanguage("scss",function(e){var t="@[a-z-]+",r={cN:"variable",b:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b"},i={cN:"number",b:"#[0-9A-Fa-f]+"};e.CSSNM,e.QSM,e.ASM,e.CBCM;return{cI:!0,i:"[=/|']",c:[e.CLCM,e.CBCM,{cN:"selector-id",b:"\\#[A-Za-z0-9_-]+",relevance:0},{cN:"selector-class",b:"\\.[A-Za-z0-9_-]+",relevance:0},{cN:"selector-attr",b:"\\[",e:"\\]",i:"$"},{cN:"selector-tag",b:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|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|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",relevance:0},{cN:"selector-pseudo",b:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{cN:"selector-pseudo",b:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},r,{cN:"attribute",b:"\\b(src|z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",i:"[^\\s]"},{b:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{b:":",e:";",c:[r,i,e.CSSNM,e.QSM,e.ASM,{cN:"meta",b:"!important"}]},{b:"@(page|font-face)",l:t,k:"@page @font-face"},{b:"@",e:"[{;]",rB:!0,k:"and or not only",c:[{b:t,cN:"keyword"},r,e.QSM,e.ASM,i,e.CSSNM]}]}});hljs.registerLanguage("dockerfile",function(e){return{aliases:["docker"],cI:!0,k:"from maintainer expose env arg user onbuild stopsignal",c:[e.HCM,e.ASM,e.QSM,e.NM,{bK:"run cmd entrypoint volume add copy workdir label healthcheck shell",starts:{e:/[^\\]$/,sL:"bash"}}],i:""},{cN:"attribute",b:/\w+/,relevance:0,k:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,relevance:0,k:{literal:"on off all"},c:[{cN:"meta",b:"\\s\\[",e:"\\]$"},{cN:"variable",b:"[\\$%]\\{",e:"\\}",c:["self",r]},r,e.QSM]}}],i:/\S/}});hljs.registerLanguage("prolog",function(e){var c={b:/\(/,e:/\)/,relevance:0},b={b:/\[/,e:/\]/},n={cN:"comment",b:/%/,e:/$/,c:[e.PWM]},r={cN:"string",b:/`/,e:/`/,c:[e.BE]},a=[{b:/[a-z][A-Za-z0-9_]*/,relevance:0},{cN:"symbol",v:[{b:/[A-Z][a-zA-Z0-9_]*/},{b:/_[A-Za-z0-9_]*/}],relevance:0},c,{b:/:-/},b,n,e.CBCM,e.QSM,e.ASM,r,{cN:"string",b:/0\'(\\\'|.)/},{cN:"string",b:/0\'\\s/},e.CNM];return c.c=a,{c:(b.c=a).concat([{b:/\.$/}])}});hljs.registerLanguage("matlab",function(e){var a="('|\\.')+",s={relevance:0,c:[{b:a}]};return{k:{keyword:"break case catch classdef continue else elseif end enumerated events for function global if methods otherwise parfor persistent properties return spmd switch try while",built_in:"sin sind sinh asin asind asinh cos cosd cosh acos acosd acosh tan tand tanh atan atand atan2 atanh sec secd sech asec asecd asech csc cscd csch acsc acscd acsch cot cotd coth acot acotd acoth hypot exp expm1 log log1p log10 log2 pow2 realpow reallog realsqrt sqrt nthroot nextpow2 abs angle complex conj imag real unwrap isreal cplxpair fix floor ceil round mod rem sign airy besselj bessely besselh besseli besselk beta betainc betaln ellipj ellipke erf erfc erfcx erfinv expint gamma gammainc gammaln psi legendre cross dot factor isprime primes gcd lcm rat rats perms nchoosek factorial cart2sph cart2pol pol2cart sph2cart hsv2rgb rgb2hsv zeros ones eye repmat rand randn linspace logspace freqspace meshgrid accumarray size length ndims numel disp isempty isequal isequalwithequalnans cat reshape diag blkdiag tril triu fliplr flipud flipdim rot90 find sub2ind ind2sub bsxfun ndgrid permute ipermute shiftdim circshift squeeze isscalar isvector ans eps realmax realmin pi i inf nan isnan isinf isfinite j why compan gallery hadamard hankel hilb invhilb magic pascal rosser toeplitz vander wilkinson max min nanmax nanmin mean nanmean type table readtable writetable sortrows sort figure plot plot3 scatter scatter3 cellfun legend intersect ismember procrustes hold num2cell "},i:'(//|"|#|/\\*|\\s+/\\w+)',c:[{cN:"function",bK:"function",e:"$",c:[e.UTM,{cN:"params",v:[{b:"\\(",e:"\\)"},{b:"\\[",e:"\\]"}]}]},{cN:"built_in",b:/true|false/,relevance:0,starts:s},{b:"[a-zA-Z][a-zA-Z_0-9]*"+a,relevance:0},{cN:"number",b:e.CNR,relevance:0,starts:s},{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{b:/\]|}|\)/,relevance:0,starts:s},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}],starts:s},e.C("^\\s*\\%\\{\\s*$","^\\s*\\%\\}\\s*$"),e.C("\\%","$")]}});hljs.registerLanguage("tcl",function(e){return{aliases:["tk"],k:"after append apply array auto_execok auto_import auto_load auto_mkindex auto_mkindex_old auto_qualify auto_reset bgerror binary break catch cd chan clock close concat continue dde dict encoding eof error eval exec exit expr fblocked fconfigure fcopy file fileevent filename flush for foreach format gets glob global history http if incr info interp join lappend|10 lassign|10 lindex|10 linsert|10 list llength|10 load lrange|10 lrepeat|10 lreplace|10 lreverse|10 lsearch|10 lset|10 lsort|10 mathfunc mathop memory msgcat namespace open package parray pid pkg::create pkg_mkIndex platform platform::shell proc puts pwd read refchan regexp registry regsub|10 rename return safe scan seek set socket source split string subst switch tcl_endOfWord tcl_findLibrary tcl_startOfNextWord tcl_startOfPreviousWord tcl_wordBreakAfter tcl_wordBreakBefore tcltest tclvars tell time tm trace unknown unload unset update uplevel upvar variable vwait while",c:[e.C(";[ \\t]*#","$"),e.C("^[ \\t]*#","$"),{bK:"proc",e:"[\\{]",eE:!0,c:[{cN:"title",b:"[ \\t\\n\\r]+(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*",e:"[ \\t\\n\\r]",eW:!0,eE:!0}]},{eE:!0,v:[{b:"\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*\\(([a-zA-Z0-9_])*\\)",e:"[^a-zA-Z0-9_\\}\\$]"},{b:"\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*",e:"(\\))?[^a-zA-Z0-9_\\}\\$]"}]},{cN:"string",c:[e.BE],v:[e.inherit(e.QSM,{i:null})]},{cN:"number",v:[e.BNM,e.CNM]}]}});hljs.registerLanguage("go",function(e){var n={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",literal:"true false iota nil",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{aliases:["golang"],k:n,i:"]([0-9]?[+-])?[ ]*\\n( *)[\\S ]+\\n(\\2[\\S ]+\\n?)*"},{b:"<%[%=-]?",e:"[%-]?%>",sL:"ruby",eB:!0,eE:!0,relevance:0},{cN:"type",b:"!"+e.UIR},{cN:"type",b:"!!"+e.UIR},{cN:"meta",b:"&"+e.UIR+"$"},{cN:"meta",b:"\\*"+e.UIR+"$"},{cN:"bullet",b:"\\-(?=[ ]|$)",relevance:0},e.HCM,{bK:b,k:{literal:b}},{cN:"number",b:e.CNR+"\\b"},a]}}); \ No newline at end of file diff --git a/util.go b/util.go index 3074ebc..dabe227 100644 --- a/util.go +++ b/util.go @@ -1,15 +1,10 @@ package main -func extensionToHlAndAceLangs(extension string) (hlExt, aceExt string) { +func extensionToHlLang(extension string) (hlExt string) { hlExt, exists := extensionToHl[extension] if !exists { hlExt = "text" } - - aceExt, exists = extensionToAce[extension] - if !exists { - aceExt = "text" - } return } @@ -18,83 +13,63 @@ func supportedBinExtension(extension string) bool { return exists } -var extensionToAce = map[string]string{ - "c": "c_cpp", - "h": "c_cpp", - "cpp": "c_cpp", - "clj": "clojure", - "coffee": "coffee", - "cfc": "coldfusion", - "cs": "csharp", - "sh": "sh", - "bash": "sh", - "css": "css", - "go": "golang", - "diff": "diff", - "html": "html", - "xml": "xml", - "ini": "ini", - "java": "java", - "js": "javascript", - "json": "json", - "jsp": "jsp", - "tex": "latex", - "lisp": "lisp", - "less": "less", - "lua": "lua", - "md": "markdown", - "ocaml": "ocaml", - "tcl": "tcl", - "yaml": "yaml", - "php": "php", - "pl": "perl", - "py": "python", - "rb": "ruby", - "sql": "sql", - "apache": "apache", - "cmake": "cmake", - "bat": "dos", - "scala": "scala", - "txt": "text", -} - var extensionToHl = map[string]string{ - "c": "cpp", - "h": "cpp", - "cpp": "c_cpp", - "clj": "clojure", - "coffee": "coffee", - "cfc": "coldfusion", - "cs": "csharp", - "sh": "sh", - "bash": "sh", - "css": "css", - "go": "go", - "diff": "diff", - "html": "html", - "htm": "html", - "ini": "ini", - "java": "java", - "js": "javascript", - "json": "json", - "jsp": "jsp", - "tex": "latex", - "lisp": "lisp", - "less": "less", - "lua": "lua", - "ocaml": "ocaml", - "tcl": "tcl", - "nginx": "nginx", - "xml": "xml", - "yaml": "yaml", - "php": "php", - "pl": "perl", - "py": "python", - "rb": "ruby", - "sql": "sql", - "apache": "apache", - "cmake": "cmake", - "bat": "dos", - "scala": "scala", - "txt": "text", + "ahk": "autohotkey", + "apache": "apache", + "applescript": "applescript", + "bas": "basic", + "bash": "sh", + "bat": "dos", + "c": "cpp", + "cfc": "coldfusion", + "clj": "clojure", + "cmake": "cmake", + "coffee": "coffee", + "cpp": "c_cpp", + "cs": "csharp", + "css": "css", + "d": "d", + "dart": "dart", + "diff": "diff", + "dockerfile": "dockerfile", + "elm": "elm", + "erl": "erlang", + "for": "fortran", + "go": "go", + "h": "cpp", + "htm": "html", + "html": "html", + "ini": "ini", + "java": "java", + "js": "javascript", + "json": "json", + "jsp": "jsp", + "kt": "kotlin", + "less": "less", + "lisp": "lisp", + "lua": "lua", + "m": "objectivec", + "nginx": "nginx", + "ocaml": "ocaml", + "php": "php", + "pl": "perl", + "proto": "protobuf", + "ps": "powershell", + "py": "python", + "rb": "ruby", + "rs": "rust", + "scala": "scala", + "scm": "scheme", + "scpt": "applescript", + "scss": "scss", + "sh": "sh", + "sql": "sql", + "tcl": "tcl", + "tex": "latex", + "toml": "ini", + "ts": "typescript", + "txt": "text", + "xml": "xml", + "yaml": "yaml", + "yml": "yaml", } From 49d45f52bb7a720b90b93c719a6de6528ca974b5 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Thu, 12 Mar 2020 16:43:11 -0700 Subject: [PATCH 212/345] Highlight.js: Add license --- static/js/highlight/highlight.pack.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/static/js/highlight/highlight.pack.js b/static/js/highlight/highlight.pack.js index ea2203c..b235922 100644 --- a/static/js/highlight/highlight.pack.js +++ b/static/js/highlight/highlight.pack.js @@ -1,2 +1,3 @@ -/*! highlight.js v9.18.1 | BSD3 License | git.io/hljslicense */ -!function(e){var n="object"==typeof window&&window||"object"==typeof self&&self;"undefined"==typeof exports||exports.nodeType?n&&(n.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return n.hljs})):e(exports)}(function(a){var f=[],o=Object.keys,_={},g={},C=!0,n=/^(no-?highlight|plain|text)$/i,E=/\blang(?:uage)?-([\w-]+)\b/i,t=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,r={case_insensitive:"cI",lexemes:"l",contains:"c",keywords:"k",subLanguage:"sL",className:"cN",begin:"b",beginKeywords:"bK",end:"e",endsWithParent:"eW",illegal:"i",excludeBegin:"eB",excludeEnd:"eE",returnBegin:"rB",returnEnd:"rE",variants:"v",IDENT_RE:"IR",UNDERSCORE_IDENT_RE:"UIR",NUMBER_RE:"NR",C_NUMBER_RE:"CNR",BINARY_NUMBER_RE:"BNR",RE_STARTERS_RE:"RSR",BACKSLASH_ESCAPE:"BE",APOS_STRING_MODE:"ASM",QUOTE_STRING_MODE:"QSM",PHRASAL_WORDS_MODE:"PWM",C_LINE_COMMENT_MODE:"CLCM",C_BLOCK_COMMENT_MODE:"CBCM",HASH_COMMENT_MODE:"HCM",NUMBER_MODE:"NM",C_NUMBER_MODE:"CNM",BINARY_NUMBER_MODE:"BNM",CSS_NUMBER_MODE:"CSSNM",REGEXP_MODE:"RM",TITLE_MODE:"TM",UNDERSCORE_TITLE_MODE:"UTM",COMMENT:"C",beginRe:"bR",endRe:"eR",illegalRe:"iR",lexemesRe:"lR",terminators:"t",terminator_end:"tE"},m="",O="Could not find the language '{}', did you forget to load/include a language module?",B={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},c="of and for in not or if then".split(" ");function x(e){return e.replace(/&/g,"&").replace(//g,">")}function d(e){return e.nodeName.toLowerCase()}function R(e){return n.test(e)}function i(e){var n,t={},r=Array.prototype.slice.call(arguments,1);for(n in e)t[n]=e[n];return r.forEach(function(e){for(n in e)t[n]=e[n]}),t}function p(e){var a=[];return function e(n,t){for(var r=n.firstChild;r;r=r.nextSibling)3===r.nodeType?t+=r.nodeValue.length:1===r.nodeType&&(a.push({event:"start",offset:t,node:r}),t=e(r,t),d(r).match(/br|hr|img|input/)||a.push({event:"stop",offset:t,node:r}));return t}(e,0),a}function v(e,n,t){var r=0,a="",i=[];function o(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset"}function l(e){a+=""}function u(e){("start"===e.event?c:l)(e.node)}for(;e.length||n.length;){var s=o();if(a+=x(t.substring(r,s[0].offset)),r=s[0].offset,s===e){for(i.reverse().forEach(l);u(s.splice(0,1)[0]),(s=o())===e&&s.length&&s[0].offset===r;);i.reverse().forEach(c)}else"start"===s[0].event?i.push(s[0].node):i.pop(),u(s.splice(0,1)[0])}return a+x(t.substr(r))}function l(n){return n.v&&!n.cached_variants&&(n.cached_variants=n.v.map(function(e){return i(n,{v:null},e)})),n.cached_variants?n.cached_variants:function e(n){return!!n&&(n.eW||e(n.starts))}(n)?[i(n,{starts:n.starts?i(n.starts):null})]:Object.isFrozen(n)?[i(n)]:[n]}function u(e){if(r&&!e.langApiRestored){for(var n in e.langApiRestored=!0,r)e[n]&&(e[r[n]]=e[n]);(e.c||[]).concat(e.v||[]).forEach(u)}}function M(n,t){var i={};return"string"==typeof n?r("keyword",n):o(n).forEach(function(e){r(e,n[e])}),i;function r(a,e){t&&(e=e.toLowerCase()),e.split(" ").forEach(function(e){var n,t,r=e.split("|");i[r[0]]=[a,(n=r[0],(t=r[1])?Number(t):function(e){return-1!=c.indexOf(e.toLowerCase())}(n)?0:1)]})}}function S(r){function s(e){return e&&e.source||e}function f(e,n){return new RegExp(s(e),"m"+(r.cI?"i":"")+(n?"g":""))}function a(a){var i,e,o={},c=[],l={},t=1;function n(e,n){o[t]=e,c.push([e,n]),t+=new RegExp(n.toString()+"|").exec("").length-1+1}for(var r=0;r')+n+(t?"":m)}function o(){p+=(null!=d.sL?function(){var e="string"==typeof d.sL;if(e&&!_[d.sL])return x(v);var n=e?T(d.sL,v,!0,R[d.sL]):w(v,d.sL.length?d.sL:void 0);return 0")+'"');if("end"===n.type){var r=s(n);if(null!=r)return r}return v+=t,t.length}var g=D(n);if(!g)throw console.error(O.replace("{}",n)),new Error('Unknown language: "'+n+'"');S(g);var E,d=t||g,R={},p="";for(E=d;E!==g;E=E.parent)E.cN&&(p=c(E.cN,"",!0)+p);var v="",M=0;try{for(var b,h,N=0;d.t.lastIndex=N,b=d.t.exec(i);)h=r(i.substring(N,b.index),b),N=b.index+h;for(r(i.substr(N)),E=d;E.parent;E=E.parent)E.cN&&(p+=m);return{relevance:M,value:p,i:!1,language:n,top:d}}catch(e){if(e.message&&-1!==e.message.indexOf("Illegal"))return{i:!0,relevance:0,value:x(i)};if(C)return{relevance:0,value:x(i),language:n,top:d,errorRaised:e};throw e}}function w(t,e){e=e||B.languages||o(_);var r={relevance:0,value:x(t)},a=r;return e.filter(D).filter(L).forEach(function(e){var n=T(e,t,!1);n.language=e,n.relevance>a.relevance&&(a=n),n.relevance>r.relevance&&(a=r,r=n)}),a.language&&(r.second_best=a),r}function b(e){return B.tabReplace||B.useBR?e.replace(t,function(e,n){return B.useBR&&"\n"===e?"
    ":B.tabReplace?n.replace(/\t/g,B.tabReplace):""}):e}function s(e){var n,t,r,a,i,o,c,l,u,s,f=function(e){var n,t,r,a,i=e.className+" ";if(i+=e.parentNode?e.parentNode.className:"",t=E.exec(i)){var o=D(t[1]);return o||(console.warn(O.replace("{}",t[1])),console.warn("Falling back to no-highlight mode for this block.",e)),o?t[1]:"no-highlight"}for(n=0,r=(i=i.split(/\s+/)).length;n/g,"\n"):n=e,i=n.textContent,r=f?T(f,i,!0):w(i),(t=p(n)).length&&((a=document.createElement("div")).innerHTML=r.value,r.value=v(t,p(a),i)),r.value=b(r.value),e.innerHTML=r.value,e.className=(o=e.className,c=f,l=r.language,u=c?g[c]:l,s=[o.trim()],o.match(/\bhljs\b/)||s.push("hljs"),-1===o.indexOf(u)&&s.push(u),s.join(" ").trim()),e.result={language:r.language,re:r.relevance},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.relevance}))}function h(){if(!h.called){h.called=!0;var e=document.querySelectorAll("pre code");f.forEach.call(e,s)}}var N={disableAutodetect:!0};function D(e){return e=(e||"").toLowerCase(),_[e]||_[g[e]]}function L(e){var n=D(e);return n&&!n.disableAutodetect}return a.highlight=T,a.highlightAuto=w,a.fixMarkup=b,a.highlightBlock=s,a.configure=function(e){B=i(B,e)},a.initHighlighting=h,a.initHighlightingOnLoad=function(){window.addEventListener("DOMContentLoaded",h,!1),window.addEventListener("load",h,!1)},a.registerLanguage=function(n,e){var t;try{t=e(a)}catch(e){if(console.error("Language definition for '{}' could not be registered.".replace("{}",n)),!C)throw e;console.error(e),t=N}u(_[n]=t),t.rawDefinition=e.bind(null,a),t.aliases&&t.aliases.forEach(function(e){g[e]=n})},a.listLanguages=function(){return o(_)},a.getLanguage=D,a.requireLanguage=function(e){var n=D(e);if(n)return n;throw new Error("The '{}' language is required, but not loaded.".replace("{}",e))},a.autoDetection=L,a.inherit=i,a.debugMode=function(){C=!1},a.IR=a.IDENT_RE="[a-zA-Z]\\w*",a.UIR=a.UNDERSCORE_IDENT_RE="[a-zA-Z_]\\w*",a.NR=a.NUMBER_RE="\\b\\d+(\\.\\d+)?",a.CNR=a.C_NUMBER_RE="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",a.BNR=a.BINARY_NUMBER_RE="\\b(0b[01]+)",a.RSR=a.RE_STARTERS_RE="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",a.BE=a.BACKSLASH_ESCAPE={b:"\\\\[\\s\\S]",relevance:0},a.ASM=a.APOS_STRING_MODE={cN:"string",b:"'",e:"'",i:"\\n",c:[a.BE]},a.QSM=a.QUOTE_STRING_MODE={cN:"string",b:'"',e:'"',i:"\\n",c:[a.BE]},a.PWM=a.PHRASAL_WORDS_MODE={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},a.C=a.COMMENT=function(e,n,t){var r=a.inherit({cN:"comment",b:e,e:n,c:[]},t||{});return r.c.push(a.PWM),r.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",relevance:0}),r},a.CLCM=a.C_LINE_COMMENT_MODE=a.C("//","$"),a.CBCM=a.C_BLOCK_COMMENT_MODE=a.C("/\\*","\\*/"),a.HCM=a.HASH_COMMENT_MODE=a.C("#","$"),a.NM=a.NUMBER_MODE={cN:"number",b:a.NR,relevance:0},a.CNM=a.C_NUMBER_MODE={cN:"number",b:a.CNR,relevance:0},a.BNM=a.BINARY_NUMBER_MODE={cN:"number",b:a.BNR,relevance:0},a.CSSNM=a.CSS_NUMBER_MODE={cN:"number",b:a.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},a.RM=a.REGEXP_MODE={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[a.BE,{b:/\[/,e:/\]/,relevance:0,c:[a.BE]}]},a.TM=a.TITLE_MODE={cN:"title",b:a.IR,relevance:0},a.UTM=a.UNDERSCORE_TITLE_MODE={cN:"title",b:a.UIR,relevance:0},a.METHOD_GUARD={b:"\\.\\s*"+a.UIR,relevance:0},[a.BE,a.ASM,a.QSM,a.PWM,a.C,a.CLCM,a.CBCM,a.HCM,a.NM,a.CNM,a.BNM,a.CSSNM,a.RM,a.TM,a.UTM,a.METHOD_GUARD].forEach(function(e){!function n(t){Object.freeze(t);var r="function"==typeof t;Object.getOwnPropertyNames(t).forEach(function(e){!t.hasOwnProperty(e)||null===t[e]||"object"!=typeof t[e]&&"function"!=typeof t[e]||r&&("caller"===e||"callee"===e||"arguments"===e)||Object.isFrozen(t[e])||n(t[e])});return t}(e)}),a});hljs.registerLanguage("erlang",function(e){var r="[a-z'][a-zA-Z0-9_']*",c="("+r+":"+r+"|"+r+")",n={keyword:"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor",literal:"false true"},a=e.C("%","$"),b={cN:"number",b:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",relevance:0},i={b:"fun\\s+"+r+"/\\d+"},l={b:c+"\\(",e:"\\)",rB:!0,relevance:0,c:[{b:c,relevance:0},{b:"\\(",e:"\\)",eW:!0,rE:!0,relevance:0}]},d={b:"{",e:"}",relevance:0},o={b:"\\b_([A-Z][A-Za-z0-9_]*)?",relevance:0},t={b:"[A-Z][a-zA-Z0-9_]*",relevance:0},v={b:"#"+e.UIR,relevance:0,rB:!0,c:[{b:"#"+e.UIR,relevance:0},{b:"{",e:"}",relevance:0}]},f={bK:"fun receive if try case",e:"end",k:n};f.c=[a,i,e.inherit(e.ASM,{cN:""}),f,l,e.QSM,b,d,o,t,v];var s=[a,i,f,l,e.QSM,b,d,o,t,v];l.c[1].c=s,d.c=s;var u={cN:"params",b:"\\(",e:"\\)",c:v.c[1].c=s};return{aliases:["erl"],k:n,i:"(",rB:!0,i:"\\(|#|//|/\\*|\\\\|:|;",c:[u,e.inherit(e.TM,{b:r})],starts:{e:";|\\.",k:n,c:s}},a,{b:"^-",e:"\\.",relevance:0,eE:!0,rB:!0,l:"-"+e.IR,k:"-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn -import -include -include_lib -compile -define -else -endif -file -behaviour -behavior -spec",c:[u]},b,e.QSM,v,o,t,d,{b:/\.$/}]}});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},a={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]};return{aliases:["sh","zsh"],l:/\b-?[a-z\._]+\b/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"meta",b:/^#![^\n]+sh\s*$/,relevance:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],relevance:0},e.HCM,a,{cN:"",b:/\\"/},{cN:"string",b:/'/,e:/'/},t]}});hljs.registerLanguage("shell",function(s){return{aliases:["console"],c:[{cN:"meta",b:"^\\s{0,3}[/\\w\\d\\[\\]()@-]*[>%$#]",starts:{e:"$",sL:"bash"}}]}});hljs.registerLanguage("scheme",function(e){var t="[^\\(\\)\\[\\]\\{\\}\",'`;#|\\\\\\s]+",r="(\\-|\\+)?\\d+([./]\\d+)?",a={cN:"literal",b:"(#t|#f|#\\\\"+t+"|#\\\\.)"},i={cN:"number",v:[{b:r,relevance:0},{b:"(\\-|\\+)?\\d+([./]\\d+)?[+\\-](\\-|\\+)?\\d+([./]\\d+)?i",relevance:0},{b:"#b[0-1]+(/[0-1]+)?"},{b:"#o[0-7]+(/[0-7]+)?"},{b:"#x[0-9a-f]+(/[0-9a-f]+)?"}]},n=e.QSM,c=[e.C(";","$",{relevance:0}),e.C("#\\|","\\|#")],l={b:t,relevance:0},s={cN:"symbol",b:"'"+t},o={eW:!0,relevance:0},u={v:[{b:/'/},{b:"`"}],c:[{b:"\\(",e:"\\)",c:["self",a,n,i,l,s]}]},p={cN:"name",b:t,l:t,k:{"builtin-name":"case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules ' * + , ,@ - ... / ; < <= = => > >= ` abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string=? string>? string? substring symbol->string symbol? tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"}},d={v:[{b:"\\(",e:"\\)"},{b:"\\[",e:"\\]"}],c:[{b:/lambda/,eW:!0,rB:!0,c:[p,{b:/\(/,e:/\)/,endsParent:!0,c:[l]}]},p,o]};return o.c=[a,i,n,l,s,u,d].concat(c),{i:/\S/,c:[{cN:"meta",b:"^#!",e:"$"},i,n,s,u,d].concat(c)}});hljs.registerLanguage("basic",function(E){return{cI:!0,i:"^.",l:"[a-zA-Z][a-zA-Z0-9_$%!#]*",k:{keyword:"ABS ASC AND ATN AUTO|0 BEEP BLOAD|10 BSAVE|10 CALL CALLS CDBL CHAIN CHDIR CHR$|10 CINT CIRCLE CLEAR CLOSE CLS COLOR COM COMMON CONT COS CSNG CSRLIN CVD CVI CVS DATA DATE$ DEFDBL DEFINT DEFSNG DEFSTR DEF|0 SEG USR DELETE DIM DRAW EDIT END ENVIRON ENVIRON$ EOF EQV ERASE ERDEV ERDEV$ ERL ERR ERROR EXP FIELD FILES FIX FOR|0 FRE GET GOSUB|10 GOTO HEX$ IF THEN ELSE|0 INKEY$ INP INPUT INPUT# INPUT$ INSTR IMP INT IOCTL IOCTL$ KEY ON OFF LIST KILL LEFT$ LEN LET LINE LLIST LOAD LOC LOCATE LOF LOG LPRINT USING LSET MERGE MID$ MKDIR MKD$ MKI$ MKS$ MOD NAME NEW NEXT NOISE NOT OCT$ ON OR PEN PLAY STRIG OPEN OPTION BASE OUT PAINT PALETTE PCOPY PEEK PMAP POINT POKE POS PRINT PRINT] PSET PRESET PUT RANDOMIZE READ REM RENUM RESET|0 RESTORE RESUME RETURN|0 RIGHT$ RMDIR RND RSET RUN SAVE SCREEN SGN SHELL SIN SOUND SPACE$ SPC SQR STEP STICK STOP STR$ STRING$ SWAP SYSTEM TAB TAN TIME$ TIMER TROFF TRON TO USR VAL VARPTR VARPTR$ VIEW WAIT WHILE WEND WIDTH WINDOW WRITE XOR"},c:[E.QSM,E.C("REM","$",{relevance:10}),E.C("'","$",{relevance:0}),{cN:"symbol",b:"^[0-9]+ ",relevance:10},{cN:"number",b:"\\b([0-9]+[0-9edED.]*[#!]?)",relevance:0},{cN:"number",b:"(&[hH][0-9a-fA-F]{1,4})"},{cN:"number",b:"(&[oO][0-7]{1,6})"}]}});hljs.registerLanguage("swift",function(e){var i={keyword:"#available #colorLiteral #column #else #elseif #endif #file #fileLiteral #function #if #imageLiteral #line #selector #sourceLocation _ __COLUMN__ __FILE__ __FUNCTION__ __LINE__ Any as as! as? associatedtype associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip"},t=e.C("/\\*","\\*/",{c:["self"]}),n={cN:"subst",b:/\\\(/,e:"\\)",k:i,c:[]},r={cN:"string",c:[e.BE,n],v:[{b:/"""/,e:/"""/},{b:/"/,e:/"/}]},a={cN:"number",b:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",relevance:0};return n.c=[a],{k:i,c:[r,e.CLCM,t,{cN:"type",b:"\\b[A-Z][\\wÀ-ʸ']*[!?]"},{cN:"type",b:"\\b[A-Z][\\wÀ-ʸ']*",relevance:0},a,{cN:"function",bK:"func",e:"{",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{b://},{cN:"params",b:/\(/,e:/\)/,endsParent:!0,k:i,c:["self",a,r,e.CBCM,{b:":"}],i:/["']/}],i:/\[|%/},{cN:"class",bK:"struct protocol class extension enum",k:i,e:"\\{",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/})]},{cN:"meta",b:"(@discardableResult|@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@objcMembers|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain|@dynamicMemberLookup|@propertyWrapper)"},{bK:"import",e:/$/,c:[e.CLCM,t]}]}});hljs.registerLanguage("ini",function(e){var b={cN:"number",relevance:0,v:[{b:/([\+\-]+)?[\d]+_[\d_]+/},{b:e.NR}]},a=e.C();a.v=[{b:/;/,e:/$/},{b:/#/,e:/$/}];var c={cN:"variable",v:[{b:/\$[\w\d"][\w\d_]*/},{b:/\$\{(.*?)}/}]},r={cN:"literal",b:/\bon|off|true|false|yes|no\b/},n={cN:"string",c:[e.BE],v:[{b:"'''",e:"'''",relevance:10},{b:'"""',e:'"""',relevance:10},{b:'"',e:'"'},{b:"'",e:"'"}]};return{aliases:["toml"],cI:!0,i:/\S/,c:[a,{cN:"section",b:/\[+/,e:/\]+/},{b:/^[a-z0-9\[\]_\.-]+(?=\s*=\s*)/,cN:"attr",starts:{e:/$/,c:[a,{b:/\[/,e:/\]/,c:[a,r,c,n,b,"self"],relevance:0},r,c,n,b]}}]}});hljs.registerLanguage("ruby",function(e){var c="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",b={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},r={cN:"doctag",b:"@[A-Za-z]+"},a={b:"#<",e:">"},n=[e.C("#","$",{c:[r]}),e.C("^\\=begin","^\\=end",{c:[r],relevance:10}),e.C("^__END__","\\n$")],s={cN:"subst",b:"#\\{",e:"}",k:b},t={cN:"string",c:[e.BE,s],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%[qQwWx]?\\(",e:"\\)"},{b:"%[qQwWx]?\\[",e:"\\]"},{b:"%[qQwWx]?{",e:"}"},{b:"%[qQwWx]?<",e:">"},{b:"%[qQwWx]?/",e:"/"},{b:"%[qQwWx]?%",e:"%"},{b:"%[qQwWx]?-",e:"-"},{b:"%[qQwWx]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{b:/<<[-~]?'?(\w+)(?:.|\n)*?\n\s*\1\b/,rB:!0,c:[{b:/<<[-~]?'?/},{b:/\w+/,endSameAsBegin:!0,c:[e.BE,s]}]}]},i={cN:"params",b:"\\(",e:"\\)",endsParent:!0,k:b},l=[t,a,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{b:"<\\s*",c:[{b:"("+e.IR+"::)?"+e.IR}]}].concat(n)},{cN:"function",bK:"def",e:"$|;",c:[e.inherit(e.TM,{b:c}),i].concat(n)},{b:e.IR+"::"},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",relevance:0},{cN:"symbol",b:":(?!\\s)",c:[t,{b:c}],relevance:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{cN:"params",b:/\|/,e:/\|/,k:b},{b:"("+e.RSR+"|unless)\\s*",k:"unless",c:[a,{cN:"regexp",c:[e.BE,s],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}].concat(n),relevance:0}].concat(n);s.c=l;var d=[{b:/^\s*=>/,starts:{e:"$",c:i.c=l}},{cN:"meta",b:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>)",starts:{e:"$",c:l}}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:b,i:/\/\*/,c:n.concat(d).concat(l)}});hljs.registerLanguage("plaintext",function(e){return{disableAutodetect:!0}});hljs.registerLanguage("d",function(e){var a="(0|[1-9][\\d_]*)",d="("+a+"|0[bB][01_]+|0[xX]([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))",t="\\\\(['\"\\?\\\\abfnrtv]|u[\\dA-Fa-f]{4}|[0-7]{1,3}|x[\\dA-Fa-f]{2}|U[\\dA-Fa-f]{8})|&[a-zA-Z\\d]{2,};",_={cN:"number",b:"\\b"+d+"(L|u|U|Lu|LU|uL|UL)?",relevance:0},r={cN:"number",b:"\\b(((0[xX](([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)\\.([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)|\\.?([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))[pP][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))|((0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(\\.\\d*|([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)))|\\d+\\.(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)|\\.(0|[1-9][\\d_]*)([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))?))([fF]|L|i|[fF]i|Li)?|"+d+"(i|[fF]i|Li))",relevance:0},i={cN:"string",b:"'("+t+"|.)",e:"'",i:"."},n={cN:"string",b:'"',c:[{b:t,relevance:0}],e:'"[cwd]?'},c=e.C("\\/\\+","\\+\\/",{c:["self"],relevance:10});return{l:e.UIR,k:{keyword:"abstract alias align asm assert auto body break byte case cast catch class const continue debug default delete deprecated do else enum export extern final finally for foreach foreach_reverse|10 goto if immutable import in inout int interface invariant is lazy macro mixin module new nothrow out override package pragma private protected public pure ref return scope shared static struct super switch synchronized template this throw try typedef typeid typeof union unittest version void volatile while with __FILE__ __LINE__ __gshared|10 __thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__",built_in:"bool cdouble cent cfloat char creal dchar delegate double dstring float function idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar wstring",literal:"false null true"},c:[e.CLCM,e.CBCM,c,{cN:"string",b:'x"[\\da-fA-F\\s\\n\\r]*"[cwd]?',relevance:10},n,{cN:"string",b:'[rq]"',e:'"[cwd]?',relevance:5},{cN:"string",b:"`",e:"`[cwd]?"},{cN:"string",b:'q"\\{',e:'\\}"'},r,_,i,{cN:"meta",b:"^#!",e:"$",relevance:5},{cN:"meta",b:"#(line)",e:"$",relevance:5},{cN:"keyword",b:"@[a-zA-Z_][a-zA-Z_\\d]*"}]}});hljs.registerLanguage("scala",function(e){var t={cN:"subst",v:[{b:"\\$[A-Za-z0-9_]+"},{b:"\\${",e:"}"}]},a={cN:"string",v:[{b:'"',e:'"',i:"\\n",c:[e.BE]},{b:'"""',e:'"""',relevance:10},{b:'[a-z]+"',e:'"',i:"\\n",c:[e.BE,t]},{cN:"string",b:'[a-z]+"""',e:'"""',c:[t],relevance:10}]},c={cN:"type",b:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},r={cN:"title",b:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,relevance:0},n={cN:"class",bK:"class object trait type",e:/[:={\[\n;]/,eE:!0,c:[{bK:"extends with",relevance:10},{b:/\[/,e:/\]/,eB:!0,eE:!0,relevance:0,c:[c]},{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,relevance:0,c:[c]},r]},l={cN:"function",bK:"def",e:/[:={\[(\n;]/,eE:!0,c:[r]};return{k:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},c:[e.CLCM,e.CBCM,a,{cN:"symbol",b:"'\\w[\\w\\d_]*(?!')"},c,l,n,e.CNM,{cN:"meta",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("cs",function(e){var a={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let nameof on orderby partial remove select set value var when where yield",literal:"null false true"},i={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},c={cN:"string",b:'@"',e:'"',c:[{b:'""'}]},r=e.inherit(c,{i:/\n/}),n={cN:"subst",b:"{",e:"}",k:a},t=e.inherit(n,{i:/\n/}),s={cN:"string",b:/\$"/,e:'"',i:/\n/,c:[{b:"{{"},{b:"}}"},e.BE,t]},l={cN:"string",b:/\$@"/,e:'"',c:[{b:"{{"},{b:"}}"},{b:'""'},n]},b=e.inherit(l,{i:/\n/,c:[{b:"{{"},{b:"}}"},{b:'""'},t]});n.c=[l,s,c,e.ASM,e.QSM,i,e.CBCM],t.c=[b,s,r,e.ASM,e.QSM,i,e.inherit(e.CBCM,{i:/\n/})];var o={v:[l,s,c,e.ASM,e.QSM]},d=e.IR+"(<"+e.IR+"(\\s*,\\s*"+e.IR+")*>)?(\\[\\])?";return{aliases:["csharp","c#"],k:a,i:/::/,c:[e.C("///","$",{rB:!0,c:[{cN:"doctag",v:[{b:"///",relevance:0},{b:"\x3c!--|--\x3e"},{b:""}]}]}),e.CLCM,e.CBCM,{cN:"meta",b:"#",e:"$",k:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},o,i,{bK:"class interface",e:/[{;=]/,i:/[^\s:,]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:"namespace",e:/[{;=]/,i:/[^\s:]/,c:[e.inherit(e.TM,{b:"[a-zA-Z](\\.?\\w)*"}),e.CLCM,e.CBCM]},{cN:"meta",b:"^\\s*\\[",eB:!0,e:"\\]",eE:!0,c:[{cN:"meta-string",b:/"/,e:/"/}]},{bK:"new return throw await else",relevance:0},{cN:"function",b:"("+d+"\\s+)+"+e.IR+"\\s*\\(",rB:!0,e:/\s*[{;=]/,eE:!0,k:a,c:[{b:e.IR+"\\s*\\(",rB:!0,c:[e.TM],relevance:0},{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:a,relevance:0,c:[o,i,e.CBCM]},e.CLCM,e.CBCM]}]}});hljs.registerLanguage("cpp",function(e){function t(e){return"(?:"+e+")?"}var r="decltype\\(auto\\)",a="[a-zA-Z_]\\w*::",i=(t(a),t("<.*?>"),{cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"}),c={cN:"string",v:[{b:'(u8?|U|L)?"',e:'"',i:"\\n",c:[e.BE]},{b:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",e:"'",i:"."},{b:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\((?:.|\n)*?\)\1"/}]},s={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},n={cN:"meta",b:/#\s*[a-z]+\b/,e:/$/,k:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},c:[{b:/\\\n/,relevance:0},e.inherit(c,{cN:"meta-string"}),{cN:"meta-string",b:/<.*?>/,e:/$/,i:"\\n"},e.CLCM,e.CBCM]},o={cN:"title",b:t(a)+e.IR,relevance:0},l=t(a)+e.IR+"\\s*\\(",u={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_tshort reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary",literal:"true false nullptr NULL"},p=[i,e.CLCM,e.CBCM,s,c],m={v:[{b:/=/,e:/;/},{b:/\(/,e:/\)/},{bK:"new throw return else",e:/;/}],k:u,c:p.concat([{b:/\(/,e:/\)/,k:u,c:p.concat(["self"]),relevance:0}]),relevance:0},d={cN:"function",b:"((decltype\\(auto\\)|(?:[a-zA-Z_]\\w*::)?[a-zA-Z_]\\w*(?:<.*?>)?)[\\*&\\s]+)+"+l,rB:!0,e:/[{;=]/,eE:!0,k:u,i:/[^\w\s\*&:<>]/,c:[{b:r,k:u,relevance:0},{b:l,rB:!0,c:[o],relevance:0},{cN:"params",b:/\(/,e:/\)/,k:u,relevance:0,c:[e.CLCM,e.CBCM,c,s,i,{b:/\(/,e:/\)/,k:u,relevance:0,c:["self",e.CLCM,e.CBCM,c,s,i]}]},i,e.CLCM,e.CBCM,n]};return{aliases:["c","cc","h","c++","h++","hpp","hh","hxx","cxx"],k:u,i:"",k:u,c:["self",i]},{b:e.IR+"::",k:u},{cN:"class",bK:"class struct",e:/[{;:]/,c:[{b://,c:["self"]},e.TM]}]),exports:{preprocessor:n,strings:c,k:u}}});hljs.registerLanguage("less",function(e){function r(e){return{cN:"string",b:"~?"+e+".*?"+e}}function t(e,r,t){return{cN:e,b:r,relevance:t}}var a="[\\w-]+",c="("+a+"|@{"+a+"})",s=[],n=[],b={b:"\\(",e:"\\)",c:n,relevance:0};n.push(e.CLCM,e.CBCM,r("'"),r('"'),e.CSSNM,{b:"(url|data-uri)\\(",starts:{cN:"string",e:"[\\)\\n]",eE:!0}},t("number","#[0-9A-Fa-f]+\\b"),b,t("variable","@@?"+a,10),t("variable","@{"+a+"}"),t("built_in","~?`[^`]*?`"),{cN:"attribute",b:a+"\\s*:",e:":",rB:!0,eE:!0},{cN:"meta",b:"!important"});var i=n.concat({b:"{",e:"}",c:s}),l={bK:"when",eW:!0,c:[{bK:"and not"}].concat(n)},o={b:c+"\\s*:",rB:!0,e:"[;}]",relevance:0,c:[{cN:"attribute",b:c,e:":",eE:!0,starts:{eW:!0,i:"[<=$]",relevance:0,c:n}}]},u={cN:"keyword",b:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{e:"[;{}]",rE:!0,c:n,relevance:0}},v={cN:"variable",v:[{b:"@"+a+"\\s*:",relevance:15},{b:"@"+a}],starts:{e:"[;}]",rE:!0,c:i}},C={v:[{b:"[\\.#:&\\[>]",e:"[;{}]"},{b:c,e:"{"}],rB:!0,rE:!0,i:"[<='$\"]",relevance:0,c:[e.CLCM,e.CBCM,l,t("keyword","all\\b"),t("variable","@{"+a+"}"),t("selector-tag",c+"%?",0),t("selector-id","#"+c),t("selector-class","\\."+c,0),t("selector-tag","&",0),{cN:"selector-attr",b:"\\[",e:"\\]"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"\\(",e:"\\)",c:i},{b:"!important"}]};return s.push(e.CLCM,e.CBCM,u,v,o,C),{cI:!0,i:"[=>'/<($\"]",c:s}});hljs.registerLanguage("python",function(e){var r={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10",built_in:"Ellipsis NotImplemented",literal:"False None True"},b={cN:"meta",b:/^(>>>|\.\.\.) /},c={cN:"subst",b:/\{/,e:/\}/,k:r,i:/#/},a={b:/\{\{/,relevance:0},l={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[e.BE,b],relevance:10},{b:/(u|b)?r?"""/,e:/"""/,c:[e.BE,b],relevance:10},{b:/(fr|rf|f)'''/,e:/'''/,c:[e.BE,b,a,c]},{b:/(fr|rf|f)"""/,e:/"""/,c:[e.BE,b,a,c]},{b:/(u|r|ur)'/,e:/'/,relevance:10},{b:/(u|r|ur)"/,e:/"/,relevance:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},{b:/(fr|rf|f)'/,e:/'/,c:[e.BE,a,c]},{b:/(fr|rf|f)"/,e:/"/,c:[e.BE,a,c]},e.ASM,e.QSM]},n={cN:"number",relevance:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},i={cN:"params",b:/\(/,e:/\)/,c:["self",b,n,l,e.HCM]};return c.c=[l,n,b],{aliases:["py","gyp","ipython"],k:r,i:/(<\/|->|\?)|=>/,c:[b,n,{bK:"if",relevance:0},l,e.HCM,{v:[{cN:"function",bK:"def"},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,i,{b:/->/,eW:!0,k:"None"}]},{cN:"meta",b:/^[\t ]*@/,e:/$/},{b:/\b(print|exec)\(/}]}});hljs.registerLanguage("powershell",function(e){var t={keyword:"if else foreach return do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch hidden static parameter"},n={b:"`[\\s\\S]",relevance:0},c={cN:"variable",v:[{b:/\$\B/},{cN:"keyword",b:/\$this/},{b:/\$[\w\d][\w\d_:]*/}]},i={cN:"string",v:[{b:/"/,e:/"/},{b:/@"/,e:/^"@/}],c:[n,c,{cN:"variable",b:/\$[A-z]/,e:/[^A-z]/}]},a={cN:"string",v:[{b:/'/,e:/'/},{b:/@'/,e:/^'@/}]},r=e.inherit(e.C(null,null),{v:[{b:/#/,e:/$/},{b:/<#/,e:/#>/}],c:[{cN:"doctag",v:[{b:/\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/},{b:/\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\s+\S+/}]}]}),o={cN:"built_in",v:[{b:"(".concat("Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|Limit|Merge|New|Out|Publish|Restore|Save|Sync|Unpublish|Update|Approve|Assert|Complete|Confirm|Deny|Disable|Enable|Install|Invoke|Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|Unprotect|Use|ForEach|Sort|Tee|Where",")+(-)[\\w\\d]+")}]},l={cN:"class",bK:"class enum",e:/\s*[{]/,eE:!0,relevance:0,c:[e.TM]},s={cN:"function",b:/function\s+/,e:/\s*\{|$/,eE:!0,rB:!0,relevance:0,c:[{b:"function",relevance:0,cN:"keyword"},{cN:"title",b:/\w[\w\d]*((-)[\w\d]+)*/,relevance:0},{b:/\(/,e:/\)/,cN:"params",relevance:0,c:[c]}]},p={b:/using\s/,e:/$/,rB:!0,c:[i,a,{cN:"keyword",b:/(using|assembly|command|module|namespace|type)/}]},b={v:[{cN:"operator",b:"(".concat("-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|-split|-wildcard|-xor",")\\b")},{cN:"literal",b:/(-)[\w\d]+/,relevance:0}]},d={cN:"function",b:/\[.*\]\s*[\w]+[ ]??\(/,e:/$/,rB:!0,relevance:0,c:[{cN:"keyword",b:"(".concat(t.keyword.toString().replace(/\s/g,"|"),")\\b"),endsParent:!0,relevance:0},e.inherit(e.TM,{endsParent:!0})]},u=[d,r,n,e.NM,i,a,o,c,{cN:"literal",b:/\$(null|true|false)\b/},{cN:"selector-tag",b:/\@\B/,relevance:0}],m={b:/\[/,e:/\]/,eB:!0,eE:!0,relevance:0,c:[].concat("self",u,{b:"("+["string","char","byte","int","long","bool","decimal","single","double","DateTime","xml","array","hashtable","void"].join("|")+")",cN:"built_in",relevance:0},{cN:"type",b:/[\.\w\d]+/,relevance:0})};return d.c.unshift(m),{aliases:["ps","ps1"],l:/-?[A-z\.\-]+/,cI:!0,k:t,c:u.concat(l,s,p,b,m)}});hljs.registerLanguage("coffeescript",function(e){var c={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super yield import export from as default await then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",built_in:"npm require console print module global window document"},n="[A-Za-z$_][0-9A-Za-z$_]*",r={cN:"subst",b:/#\{/,e:/}/,k:c},i=[e.BNM,e.inherit(e.CNM,{starts:{e:"(\\s*/)?",relevance:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/"""/,e:/"""/,c:[e.BE,r]},{b:/"/,e:/"/,c:[e.BE,r]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[r,e.HCM]},{b:"//[gim]{0,3}(?=\\W)",relevance:0},{b:/\/(?![ *]).*?(?![\\]).\/[gim]{0,3}(?=\W)/}]},{b:"@"+n},{sL:"javascript",eB:!0,eE:!0,v:[{b:"```",e:"```"},{b:"`",e:"`"}]}];r.c=i;var s=e.inherit(e.TM,{b:n}),t="(\\(.*\\))?\\s*\\B[-=]>",a={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:c,c:["self"].concat(i)}]};return{aliases:["coffee","cson","iced"],k:c,i:/\/\*/,c:i.concat([e.C("###","###"),e.HCM,{cN:"function",b:"^\\s*"+n+"\\s*=\\s*"+t,e:"[-=]>",rB:!0,c:[s,a]},{b:/[:\(,=]\s*/,relevance:0,c:[{cN:"function",b:t,e:"[-=]>",rB:!0,c:[a]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[s]},s]},{b:n+":",e:":",rB:!0,rE:!0,relevance:0}])}});hljs.registerLanguage("json",function(e){var i={literal:"true false null"},n=[e.CLCM,e.CBCM],c=[e.QSM,e.CNM],r={e:",",eW:!0,eE:!0,c:c,k:i},t={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(r,{b:/:/})].concat(n),i:"\\S"},a={b:"\\[",e:"\\]",c:[e.inherit(r)],i:"\\S"};return c.push(t,a),n.forEach(function(e){c.push(e)}),{c:c,k:i,i:"\\S"}});hljs.registerLanguage("xml",function(e){var c={cN:"symbol",b:"&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;"},s={b:"\\s",c:[{cN:"meta-keyword",b:"#?[a-z_][a-z1-9_-]+",i:"\\n"}]},a=e.inherit(s,{b:"\\(",e:"\\)"}),t=e.inherit(e.ASM,{cN:"meta-string"}),l=e.inherit(e.QSM,{cN:"meta-string"}),r={eW:!0,i:/`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],cI:!0,c:[{cN:"meta",b:"",relevance:10,c:[s,l,t,a,{b:"\\[",e:"\\]",c:[{cN:"meta",b:"",c:[s,a,l,t]}]}]},e.C("\x3c!--","--\x3e",{relevance:10}),{b:"<\\!\\[CDATA\\[",e:"\\]\\]>",relevance:10},c,{cN:"meta",b:/<\?xml/,e:/\?>/,relevance:10},{b:/<\?(php)?/,e:/\?>/,sL:"php",c:[{b:"/\\*",e:"\\*/",skip:!0},{b:'b"',e:'"',skip:!0},{b:"b'",e:"'",skip:!0},e.inherit(e.ASM,{i:null,cN:null,c:null,skip:!0}),e.inherit(e.QSM,{i:null,cN:null,c:null,skip:!0})]},{cN:"tag",b:")",e:">",k:{name:"style"},c:[r],starts:{e:"",rE:!0,sL:["css","xml"]}},{cN:"tag",b:")",e:">",k:{name:"script"},c:[r],starts:{e:"<\/script>",rE:!0,sL:["actionscript","javascript","handlebars","xml"]}},{cN:"tag",b:"",c:[{cN:"name",b:/[^\/><\s]+/,relevance:0},r]}]}});hljs.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"section",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",relevance:0},{cN:"bullet",b:"^\\s*([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",relevance:0}]},{cN:"quote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"^```\\w*\\s*$",e:"^```[ ]*$"},{b:"`.+?`"},{b:"^( {4}|\\t)",e:"$",relevance:0}]},{b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"string",b:"\\[",e:"\\]",eB:!0,rE:!0,relevance:0},{cN:"link",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"symbol",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],relevance:10},{b:/^\[[^\n]+\]:/,rB:!0,c:[{cN:"symbol",b:/\[/,e:/\]/,eB:!0,eE:!0},{cN:"link",b:/:\s*/,e:/$/,eB:!0}]}]}});hljs.registerLanguage("sql",function(e){var t=e.C("--","$");return{cI:!0,i:/[<>{}*]/,c:[{bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with",e:/;/,eW:!0,l:/[\w\.]+/,k:{keyword:"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null unknown",built_in:"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varchar2 varying void"},c:[{cN:"string",b:"'",e:"'",c:[{b:"''"}]},{cN:"string",b:'"',e:'"',c:[{b:'""'}]},{cN:"string",b:"`",e:"`"},e.CNM,e.CBCM,t,e.HCM]},e.CBCM,t,e.HCM]}});hljs.registerLanguage("javascript",function(e){var r="<>",a="",t={b:/<[A-Za-z0-9\\._:-]+/,e:/\/[A-Za-z0-9\\._:-]+>|\/>/},c="[A-Za-z$_][0-9A-Za-z$_]*",n={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},s={cN:"number",v:[{b:"\\b(0[bB][01]+)n?"},{b:"\\b(0[oO][0-7]+)n?"},{b:e.CNR+"n?"}],relevance:0},o={cN:"subst",b:"\\$\\{",e:"\\}",k:n,c:[]},i={b:"html`",e:"",starts:{e:"`",rE:!1,c:[e.BE,o],sL:"xml"}},b={b:"css`",e:"",starts:{e:"`",rE:!1,c:[e.BE,o],sL:"css"}},l={cN:"string",b:"`",e:"`",c:[e.BE,o]};o.c=[e.ASM,e.QSM,i,b,l,s,e.RM];var u=o.c.concat([e.CBCM,e.CLCM]);return{aliases:["js","jsx","mjs","cjs"],k:n,c:[{cN:"meta",relevance:10,b:/^\s*['"]use (strict|asm)['"]/},{cN:"meta",b:/^#!/,e:/$/},e.ASM,e.QSM,i,b,l,e.CLCM,e.C("/\\*\\*","\\*/",{relevance:0,c:[{cN:"doctag",b:"@[A-Za-z]+",c:[{cN:"type",b:"\\{",e:"\\}",relevance:0},{cN:"variable",b:c+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{b:/(?=[^\n])\s/,relevance:0}]}]}),e.CBCM,s,{b:/[{,\n]\s*/,relevance:0,c:[{b:c+"\\s*:",rB:!0,relevance:0,c:[{cN:"attr",b:c,relevance:0}]}]},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+c+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:c},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:n,c:u}]}]},{cN:"",b:/\s/,e:/\s*/,skip:!0},{v:[{b:r,e:a},{b:t.b,e:t.e}],sL:"xml",c:[{b:t.b,e:t.e,skip:!0,c:["self"]}]}],relevance:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:c}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:u}],i:/\[|%/},{b:/\$[(.]/},e.METHOD_GUARD,{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]},{bK:"constructor get set",e:/\{/,eE:!0}],i:/#(?!!)/}});hljs.registerLanguage("perl",function(e){var t="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",r={cN:"subst",b:"[$@]\\{",e:"\\}",k:t},s={b:"->{",e:"}"},n={v:[{b:/\$\d/},{b:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{b:/[\$%@][^\s\w{]/,relevance:0}]},c=[e.BE,r,n],a=[n,e.HCM,e.C("^\\=\\w","\\=cut",{eW:!0}),s,{cN:"string",c:c,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",relevance:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",relevance:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",relevance:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",relevance:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",relevance:5},{b:"qw\\s+q",e:"q",relevance:5},{b:"'",e:"'",c:[e.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[e.BE]},{b:"{\\w+}",c:[],relevance:0},{b:"-?\\w+\\s*\\=\\>",c:[],relevance:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{b:"(\\/\\/|"+e.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",relevance:0,c:[e.HCM,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",relevance:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[e.BE],relevance:0}]},{cN:"function",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",eE:!0,relevance:5,c:[e.TM]},{b:"-\\w\\b",relevance:0},{b:"^__DATA__$",e:"^__END__$",sL:"mojolicious",c:[{b:"^@@.*",e:"$",cN:"comment"}]}];return r.c=a,{aliases:["pl","pm"],l:/[\w\.]+/,k:t,c:s.c=a}});hljs.registerLanguage("tex",function(e){var c={cN:"tag",b:/\\/,relevance:0,c:[{cN:"name",v:[{b:/[a-zA-Z\u0430-\u044f\u0410-\u042f]+[*]?/},{b:/[^a-zA-Z\u0430-\u044f\u0410-\u042f0-9]/}],starts:{eW:!0,relevance:0,c:[{cN:"string",v:[{b:/\[/,e:/\]/},{b:/\{/,e:/\}/}]},{b:/\s*=\s*/,eW:!0,relevance:0,c:[{cN:"number",b:/-?\d*\.?\d+(pt|pc|mm|cm|in|dd|cc|ex|em)?/}]}]}}]};return{c:[c,{cN:"formula",c:[c],relevance:0,v:[{b:/\$\$/,e:/\$\$/},{b:/\$/,e:/\$/}]},e.C("%","$",{relevance:0})]}});hljs.registerLanguage("fortran",function(e){return{cI:!0,aliases:["f90","f95"],k:{literal:".False. .True.",keyword:"kind do while private call intrinsic where elsewhere type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then block endblock public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. goto save else use module select case access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit continue format pause cycle exit c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg synchronous nopass non_overridable pass protected volatile abstract extends import non_intrinsic value deferred generic final enumerator class associate bind enum c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated c_f_pointer c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure integer real character complex logical dimension allocatable|10 parameter external implicit|10 none double precision assign intent optional pointer target in out common equivalence data",built_in:"alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_ofacosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image"},i:/\/\*/,c:[e.inherit(e.ASM,{cN:"string",relevance:0}),e.inherit(e.QSM,{cN:"string",relevance:0}),{cN:"function",bK:"subroutine function program",i:"[${=\\n]",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)"}]},e.C("!","$",{relevance:0}),{cN:"number",b:"(?=\\b|\\+|\\-|\\.)(?=\\.\\d|\\d)(?:\\d+)?(?:\\.?\\d*)(?:[de][+-]?\\d+)?\\b\\.?",relevance:0}]}});hljs.registerLanguage("protobuf",function(e){return{k:{keyword:"package import option optional required repeated group oneof",built_in:"double float int32 int64 uint32 uint64 sint32 sint64 fixed32 fixed64 sfixed32 sfixed64 bool string bytes",literal:"true false"},c:[e.QSM,e.NM,e.CLCM,{cN:"class",bK:"message enum service",e:/\{/,i:/\n/,c:[e.inherit(e.TM,{starts:{eW:!0,eE:!0}})]},{cN:"function",bK:"rpc",e:/;/,eE:!0,k:"rpc returns"},{b:/^\s*[A-Z_]+/,e:/\s*=/,eE:!0}]}});hljs.registerLanguage("java",function(e){var a="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",t={cN:"number",b:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",relevance:0};return{aliases:["jsp"],k:a,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{relevance:0,c:[{b:/\w+@/,relevance:0},{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"new throw return else",relevance:0},{cN:"function",b:"([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:a,c:[{b:e.UIR+"\\s*\\(",rB:!0,relevance:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:a,relevance:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},t,{cN:"meta",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("properties",function(e){var r="[ \\t\\f]*",t="("+r+"[:=]"+r+"|[ \\t\\f]+)",n="([^\\\\\\W:= \\t\\f\\n]|\\\\.)+",a="([^\\\\:= \\t\\f\\n]|\\\\.)+",c={e:t,relevance:0,starts:{cN:"string",e:/$/,relevance:0,c:[{b:"\\\\\\n"}]}};return{cI:!0,i:/\S/,c:[e.C("^\\s*[!#]","$"),{b:n+t,rB:!0,c:[{cN:"attr",b:n,endsParent:!0,relevance:0}],starts:c},{b:a+t,rB:!0,relevance:0,c:[{cN:"meta",b:a,endsParent:!0,relevance:0}],starts:c},{cN:"attr",relevance:0,b:a+r+"$"}]}});hljs.registerLanguage("php",function(e){var c={b:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},i={cN:"meta",b:/<\?(php)?|\?>/},t={cN:"string",c:[e.BE,i],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},a={v:[e.BNM,e.CNM]};return{aliases:["php","php3","php4","php5","php6","php7"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[e.HCM,e.C("//","$",{c:[i]}),e.C("/\\*","\\*/",{c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.C("__halt_compiler.+?;",!1,{eW:!0,k:"__halt_compiler",l:e.UIR}),{cN:"string",b:/<<<['"]?\w+['"]?$/,e:/^\w+;?$/,c:[e.BE,{cN:"subst",v:[{b:/\$\w+/},{b:/\{\$/,e:/\}/}]}]},i,{cN:"keyword",b:/\$this\b/},c,{b:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",c,e.CBCM,t,a]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},t,a]}});hljs.registerLanguage("nginx",function(e){var r={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+e.UIR}]},b={eW:!0,l:"[a-z/_]+",k:{literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},relevance:0,i:"=>",c:[e.HCM,{cN:"string",c:[e.BE,r],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{b:"([a-z]+):/",e:"\\s",eW:!0,eE:!0,c:[r]},{cN:"regexp",c:[e.BE,r],v:[{b:"\\s\\^",e:"\\s|{|;",rE:!0},{b:"~\\*?\\s+",e:"\\s|{|;",rE:!0},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",relevance:0},r]};return{aliases:["nginxconf"],c:[e.HCM,{b:e.UIR+"\\s+{",rB:!0,e:"{",c:[{cN:"section",b:e.UIR}],relevance:0},{b:e.UIR+"\\s",e:";|{",rB:!0,c:[{cN:"attribute",b:e.UIR,starts:b}],relevance:0}],i:"[^\\s\\}]"}});hljs.registerLanguage("makefile",function(e){var i={cN:"variable",v:[{b:"\\$\\("+e.UIR+"\\)",c:[e.BE]},{b:/\$[@%/,e:/$/,i:"\\n"},e.CLCM,e.CBCM]},{cN:"class",b:"("+i.split(" ").join("|")+")\\b",e:"({|$)",eE:!0,k:i,l:t,c:[e.UTM]},{b:"\\."+e.UIR,relevance:0}]}});hljs.registerLanguage("typescript",function(e){var r="[A-Za-z$_][0-9A-Za-z$_]*",t={keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class public private protected get set super static implements enum export import declare type namespace abstract as from extends async await",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document any number boolean string void Promise"},n={cN:"meta",b:"@"+r},a={b:"\\(",e:/\)/,k:t,c:["self",e.QSM,e.ASM,e.NM]},c={cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,c:[e.CLCM,e.CBCM,n,a]},s={cN:"number",v:[{b:"\\b(0[bB][01]+)n?"},{b:"\\b(0[oO][0-7]+)n?"},{b:e.CNR+"n?"}],relevance:0},o={cN:"subst",b:"\\$\\{",e:"\\}",k:t,c:[]},i={b:"html`",e:"",starts:{e:"`",rE:!1,c:[e.BE,o],sL:"xml"}},l={b:"css`",e:"",starts:{e:"`",rE:!1,c:[e.BE,o],sL:"css"}},b={cN:"string",b:"`",e:"`",c:[e.BE,o]};return o.c=[e.ASM,e.QSM,i,l,b,s,e.RM],{aliases:["ts"],k:t,c:[{cN:"meta",b:/^\s*['"]use strict['"]/},e.ASM,e.QSM,i,l,b,e.CLCM,e.CBCM,s,{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+e.IR+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:e.IR},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,c:["self",e.CLCM,e.CBCM]}]}]}],relevance:0},{cN:"function",bK:"function",e:/[\{;]/,eE:!0,k:t,c:["self",e.inherit(e.TM,{b:r}),c],i:/%/,relevance:0},{bK:"constructor",e:/[\{;]/,eE:!0,c:["self",c]},{b:/module\./,k:{built_in:"module"},relevance:0},{bK:"module",e:/\{/,eE:!0},{bK:"interface",e:/\{/,eE:!0,k:"interface extends"},{b:/\$[(.]/},{b:"\\."+e.IR,relevance:0},n,a]}});hljs.registerLanguage("elm",function(e){var i={v:[e.C("--","$"),e.C("{-","-}",{c:["self"]})]},t={cN:"type",b:"\\b[A-Z][\\w']*",relevance:0},c={b:"\\(",e:"\\)",i:'"',c:[{cN:"type",b:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},i]};return{k:"let in if then else case of where module import exposing type alias as infix infixl infixr port effect command subscription",c:[{bK:"port effect module",e:"exposing",k:"port effect module where command subscription exposing",c:[c,i],i:"\\W\\.|;"},{b:"import",e:"$",k:"import as exposing",c:[c,i],i:"\\W\\.|;"},{b:"type",e:"$",k:"type alias",c:[t,c,{b:"{",e:"}",c:c.c},i]},{bK:"infix infixl infixr",e:"$",c:[e.CNM,i]},{b:"port",e:"$",k:"port",c:[i]},{cN:"string",b:"'\\\\?.",e:"'",i:"."},e.QSM,e.CNM,t,e.inherit(e.TM,{b:"^[_a-z][\\w']*"}),i,{b:"->|<-"}],i:/;/}});hljs.registerLanguage("http",function(e){var t="HTTP/[0-9\\.]+";return{aliases:["https"],i:"\\S",c:[{b:"^"+t,e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{b:"^[A-Z]+ (.*?) "+t+"$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0},{b:t},{cN:"keyword",b:"[A-Z]+"}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{e:"$",relevance:0}},{b:"\\n\\n",starts:{sL:[],eW:!0}}]}});hljs.registerLanguage("diff",function(e){return{aliases:["patch"],c:[{cN:"meta",relevance:10,v:[{b:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"comment",v:[{b:/Index: /,e:/$/},{b:/={3,}/,e:/$/},{b:/^\-{3}/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+{3}/,e:/$/},{b:/^\*{15}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"addition",b:"^\\!",e:"$"}]}});hljs.registerLanguage("lisp",function(e){var b="[a-zA-Z_\\-\\+\\*\\/\\<\\=\\>\\&\\#][a-zA-Z0-9_\\-\\+\\*\\/\\<\\=\\>\\&\\#!]*",c="\\|[^]*?\\|",a="(\\-|\\+)?\\d+(\\.\\d+|\\/\\d+)?((d|e|f|l|s|D|E|F|L|S)(\\+|\\-)?\\d+)?",l={cN:"literal",b:"\\b(t{1}|nil)\\b"},n={cN:"number",v:[{b:a,relevance:0},{b:"#(b|B)[0-1]+(/[0-1]+)?"},{b:"#(o|O)[0-7]+(/[0-7]+)?"},{b:"#(x|X)[0-9a-fA-F]+(/[0-9a-fA-F]+)?"},{b:"#(c|C)\\("+a+" +"+a,e:"\\)"}]},r=e.inherit(e.QSM,{i:null}),i=e.C(";","$",{relevance:0}),t={b:"\\*",e:"\\*"},v={cN:"symbol",b:"[:&]"+b},s={b:b,relevance:0},u={b:c},d={c:[n,r,t,v,{b:"\\(",e:"\\)",c:["self",l,r,n,s]},s],v:[{b:"['`]\\(",e:"\\)"},{b:"\\(quote ",e:"\\)",k:{name:"quote"}},{b:"'"+c}]},f={v:[{b:"'"+b},{b:"#'"+b+"(::"+b+")*"}]},m={b:"\\(\\s*",e:"\\)"},o={eW:!0,relevance:0};return m.c=[{cN:"name",v:[{b:b},{b:c}]},o],o.c=[d,f,m,l,n,r,i,t,v,u,s],{i:/\S/,c:[n,{cN:"meta",b:"^#!",e:"$"},l,r,i,d,f,m,s]}});hljs.registerLanguage("kotlin",function(e){var t={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual trait volatile transient native default",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},a={cN:"symbol",b:e.UIR+"@"},n={cN:"subst",b:"\\${",e:"}",c:[e.CNM]},c={cN:"variable",b:"\\$"+e.UIR},r={cN:"string",v:[{b:'"""',e:'"""(?=[^"])',c:[c,n]},{b:"'",e:"'",i:/\n/,c:[e.BE]},{b:'"',e:'"',i:/\n/,c:[e.BE,c,n]}]};n.c.push(r);var i={cN:"meta",b:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UIR+")?"},l={cN:"meta",b:"@"+e.UIR,c:[{b:/\(/,e:/\)/,c:[e.inherit(r,{cN:"meta-string"})]}]},s={cN:"number",b:"\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",relevance:0},b=e.C("/\\*","\\*/",{c:[e.CBCM]}),o={v:[{cN:"type",b:e.UIR},{b:/\(/,e:/\)/,c:[]}]},d=o;return d.v[1].c=[o],o.v[1].c=[d],{aliases:["kt"],k:t,c:[e.C("/\\*\\*","\\*/",{relevance:0,c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,b,{cN:"keyword",b:/\b(break|continue|return|this)\b/,starts:{c:[{cN:"symbol",b:/@\w+/}]}},a,i,l,{cN:"function",bK:"fun",e:"[(]|$",rB:!0,eE:!0,k:t,i:/fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/,relevance:5,c:[{b:e.UIR+"\\s*\\(",rB:!0,relevance:0,c:[e.UTM]},{cN:"type",b://,k:"reified",relevance:0},{cN:"params",b:/\(/,e:/\)/,endsParent:!0,k:t,relevance:0,c:[{b:/:/,e:/[=,\/]/,eW:!0,c:[o,e.CLCM,b],relevance:0},e.CLCM,b,i,l,r,e.CNM]},b]},{cN:"class",bK:"class interface trait",e:/[:\{(]|$/,eE:!0,i:"extends implements",c:[{bK:"public protected internal private constructor"},e.UTM,{cN:"type",b://,eB:!0,eE:!0,relevance:0},{cN:"type",b:/[,:]\s*/,e:/[<\(,]|$/,eB:!0,rE:!0},i,l]},r,{cN:"meta",b:"^#!/usr/bin/env",e:"$",i:"\n"},s]}});hljs.registerLanguage("dart",function(e){var t={cN:"subst",v:[{b:"\\$[A-Za-z0-9_]+"}]},r={cN:"subst",v:[{b:"\\${",e:"}"}],k:"true false null this is new super"},n={cN:"string",v:[{b:"r'''",e:"'''"},{b:'r"""',e:'"""'},{b:"r'",e:"'",i:"\\n"},{b:'r"',e:'"',i:"\\n"},{b:"'''",e:"'''",c:[e.BE,t,r]},{b:'"""',e:'"""',c:[e.BE,t,r]},{b:"'",e:"'",i:"\\n",c:[e.BE,t,r]},{b:'"',e:'"',i:"\\n",c:[e.BE,t,r]}]};r.c=[e.CNM,n];return{k:{keyword:"abstract as assert async await break case catch class const continue covariant default deferred do dynamic else enum export extends extension external factory false final finally for Function get hide if implements import in inferface is library mixin new null on operator part rethrow return set show static super switch sync this throw true try typedef var void while with yield",built_in:"Comparable DateTime Duration Function Iterable Iterator List Map Match Null Object Pattern RegExp Set Stopwatch String StringBuffer StringSink Symbol Type Uri bool double dynamic int num print Element ElementList document querySelector querySelectorAll window"},c:[n,e.C("/\\*\\*","\\*/",{sL:"markdown"}),e.C("///+\\s*","$",{c:[{sL:"markdown",b:".",e:"$"}]}),e.CLCM,e.CBCM,{cN:"class",bK:"class interface",e:"{",eE:!0,c:[{bK:"extends implements"},e.UTM]},e.CNM,{cN:"meta",b:"@[A-Za-z]+"},{b:"=>"}]}});hljs.registerLanguage("applescript",function(e){var t=e.inherit(e.QSM,{i:""}),r={cN:"params",b:"\\(",e:"\\)",c:["self",e.CNM,t]},i=e.C("--","$"),o=[i,e.C("\\(\\*","\\*\\)",{c:["self",i]}),e.HCM];return{aliases:["osascript"],k:{keyword:"about above after against and around as at back before beginning behind below beneath beside between but by considering contain contains continue copy div does eighth else end equal equals error every exit fifth first for fourth from front get given global if ignoring in into is it its last local me middle mod my ninth not of on onto or over prop property put ref reference repeat returning script second set seventh since sixth some tell tenth that the|0 then third through thru timeout times to transaction try until where while whose with without",literal:"AppleScript false linefeed return pi quote result space tab true",built_in:"alias application boolean class constant date file integer list number real record string text activate beep count delay launch log offset read round run say summarize write character characters contents day frontmost id item length month name paragraph paragraphs rest reverse running time version weekday word words year"},c:[t,e.CNM,{cN:"built_in",b:"\\b(clipboard info|the clipboard|info for|list (disks|folder)|mount volume|path to|(close|open for) access|(get|set) eof|current date|do shell script|get volume settings|random number|set volume|system attribute|system info|time to GMT|(load|run|store) script|scripting components|ASCII (character|number)|localized string|choose (application|color|file|file name|folder|from list|remote application|URL)|display (alert|dialog))\\b|^\\s*return\\b"},{cN:"literal",b:"\\b(text item delimiters|current application|missing value)\\b"},{cN:"keyword",b:"\\b(apart from|aside from|instead of|out of|greater than|isn't|(doesn't|does not) (equal|come before|come after|contain)|(greater|less) than( or equal)?|(starts?|ends|begins?) with|contained by|comes (before|after)|a (ref|reference)|POSIX file|POSIX path|(date|time) string|quoted form)\\b"},{bK:"on",i:"[${=;\\n]",c:[e.UTM,r]}].concat(o),i:"//|->|=>|\\[\\["}});hljs.registerLanguage("autohotkey",function(e){var a={b:"`[\\s\\S]"};return{cI:!0,aliases:["ahk"],k:{keyword:"Break Continue Critical Exit ExitApp Gosub Goto New OnExit Pause return SetBatchLines SetTimer Suspend Thread Throw Until ahk_id ahk_class ahk_pid ahk_exe ahk_group",literal:"true false NOT AND OR",built_in:"ComSpec Clipboard ClipboardAll ErrorLevel"},c:[a,e.inherit(e.QSM,{c:[a]}),e.C(";","$",{relevance:0}),e.CBCM,{cN:"number",b:e.NR,relevance:0},{cN:"variable",b:"%[a-zA-Z0-9#_$@]+%"},{cN:"built_in",b:"^\\s*\\w+\\s*(,|%)"},{cN:"title",v:[{b:'^[^\\n";]+::(?!=)'},{b:'^[^\\n";]+:(?!=)',relevance:0}]},{cN:"meta",b:"^\\s*#\\w+",e:"$",relevance:0},{cN:"built_in",b:"A_[a-zA-Z0-9]+"},{b:",\\s*,"}]}});hljs.registerLanguage("rust",function(e){var t="([ui](8|16|32|64|128|size)|f(32|64))?",r="drop i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize f32 f64 str char bool Box Option Result String Vec Copy Send Sized Sync Drop Fn FnMut FnOnce ToOwned Clone Debug PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator SliceConcatExt ToString assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!";return{aliases:["rs"],k:{keyword:"abstract as async await become box break const continue crate do dyn else enum extern false final fn for if impl in let loop macro match mod move mut override priv pub ref return self Self static struct super trait true try type typeof unsafe unsized use virtual where while yield",literal:"true false Some None Ok Err",built_in:r},l:e.IR+"!?",i:""}]}});hljs.registerLanguage("scss",function(e){var t="@[a-z-]+",r={cN:"variable",b:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b"},i={cN:"number",b:"#[0-9A-Fa-f]+"};e.CSSNM,e.QSM,e.ASM,e.CBCM;return{cI:!0,i:"[=/|']",c:[e.CLCM,e.CBCM,{cN:"selector-id",b:"\\#[A-Za-z0-9_-]+",relevance:0},{cN:"selector-class",b:"\\.[A-Za-z0-9_-]+",relevance:0},{cN:"selector-attr",b:"\\[",e:"\\]",i:"$"},{cN:"selector-tag",b:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|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|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",relevance:0},{cN:"selector-pseudo",b:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{cN:"selector-pseudo",b:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},r,{cN:"attribute",b:"\\b(src|z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",i:"[^\\s]"},{b:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{b:":",e:";",c:[r,i,e.CSSNM,e.QSM,e.ASM,{cN:"meta",b:"!important"}]},{b:"@(page|font-face)",l:t,k:"@page @font-face"},{b:"@",e:"[{;]",rB:!0,k:"and or not only",c:[{b:t,cN:"keyword"},r,e.QSM,e.ASM,i,e.CSSNM]}]}});hljs.registerLanguage("dockerfile",function(e){return{aliases:["docker"],cI:!0,k:"from maintainer expose env arg user onbuild stopsignal",c:[e.HCM,e.ASM,e.QSM,e.NM,{bK:"run cmd entrypoint volume add copy workdir label healthcheck shell",starts:{e:/[^\\]$/,sL:"bash"}}],i:""},{cN:"attribute",b:/\w+/,relevance:0,k:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,relevance:0,k:{literal:"on off all"},c:[{cN:"meta",b:"\\s\\[",e:"\\]$"},{cN:"variable",b:"[\\$%]\\{",e:"\\}",c:["self",r]},r,e.QSM]}}],i:/\S/}});hljs.registerLanguage("prolog",function(e){var c={b:/\(/,e:/\)/,relevance:0},b={b:/\[/,e:/\]/},n={cN:"comment",b:/%/,e:/$/,c:[e.PWM]},r={cN:"string",b:/`/,e:/`/,c:[e.BE]},a=[{b:/[a-z][A-Za-z0-9_]*/,relevance:0},{cN:"symbol",v:[{b:/[A-Z][a-zA-Z0-9_]*/},{b:/_[A-Za-z0-9_]*/}],relevance:0},c,{b:/:-/},b,n,e.CBCM,e.QSM,e.ASM,r,{cN:"string",b:/0\'(\\\'|.)/},{cN:"string",b:/0\'\\s/},e.CNM];return c.c=a,{c:(b.c=a).concat([{b:/\.$/}])}});hljs.registerLanguage("matlab",function(e){var a="('|\\.')+",s={relevance:0,c:[{b:a}]};return{k:{keyword:"break case catch classdef continue else elseif end enumerated events for function global if methods otherwise parfor persistent properties return spmd switch try while",built_in:"sin sind sinh asin asind asinh cos cosd cosh acos acosd acosh tan tand tanh atan atand atan2 atanh sec secd sech asec asecd asech csc cscd csch acsc acscd acsch cot cotd coth acot acotd acoth hypot exp expm1 log log1p log10 log2 pow2 realpow reallog realsqrt sqrt nthroot nextpow2 abs angle complex conj imag real unwrap isreal cplxpair fix floor ceil round mod rem sign airy besselj bessely besselh besseli besselk beta betainc betaln ellipj ellipke erf erfc erfcx erfinv expint gamma gammainc gammaln psi legendre cross dot factor isprime primes gcd lcm rat rats perms nchoosek factorial cart2sph cart2pol pol2cart sph2cart hsv2rgb rgb2hsv zeros ones eye repmat rand randn linspace logspace freqspace meshgrid accumarray size length ndims numel disp isempty isequal isequalwithequalnans cat reshape diag blkdiag tril triu fliplr flipud flipdim rot90 find sub2ind ind2sub bsxfun ndgrid permute ipermute shiftdim circshift squeeze isscalar isvector ans eps realmax realmin pi i inf nan isnan isinf isfinite j why compan gallery hadamard hankel hilb invhilb magic pascal rosser toeplitz vander wilkinson max min nanmax nanmin mean nanmean type table readtable writetable sortrows sort figure plot plot3 scatter scatter3 cellfun legend intersect ismember procrustes hold num2cell "},i:'(//|"|#|/\\*|\\s+/\\w+)',c:[{cN:"function",bK:"function",e:"$",c:[e.UTM,{cN:"params",v:[{b:"\\(",e:"\\)"},{b:"\\[",e:"\\]"}]}]},{cN:"built_in",b:/true|false/,relevance:0,starts:s},{b:"[a-zA-Z][a-zA-Z_0-9]*"+a,relevance:0},{cN:"number",b:e.CNR,relevance:0,starts:s},{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{b:/\]|}|\)/,relevance:0,starts:s},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}],starts:s},e.C("^\\s*\\%\\{\\s*$","^\\s*\\%\\}\\s*$"),e.C("\\%","$")]}});hljs.registerLanguage("tcl",function(e){return{aliases:["tk"],k:"after append apply array auto_execok auto_import auto_load auto_mkindex auto_mkindex_old auto_qualify auto_reset bgerror binary break catch cd chan clock close concat continue dde dict encoding eof error eval exec exit expr fblocked fconfigure fcopy file fileevent filename flush for foreach format gets glob global history http if incr info interp join lappend|10 lassign|10 lindex|10 linsert|10 list llength|10 load lrange|10 lrepeat|10 lreplace|10 lreverse|10 lsearch|10 lset|10 lsort|10 mathfunc mathop memory msgcat namespace open package parray pid pkg::create pkg_mkIndex platform platform::shell proc puts pwd read refchan regexp registry regsub|10 rename return safe scan seek set socket source split string subst switch tcl_endOfWord tcl_findLibrary tcl_startOfNextWord tcl_startOfPreviousWord tcl_wordBreakAfter tcl_wordBreakBefore tcltest tclvars tell time tm trace unknown unload unset update uplevel upvar variable vwait while",c:[e.C(";[ \\t]*#","$"),e.C("^[ \\t]*#","$"),{bK:"proc",e:"[\\{]",eE:!0,c:[{cN:"title",b:"[ \\t\\n\\r]+(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*",e:"[ \\t\\n\\r]",eW:!0,eE:!0}]},{eE:!0,v:[{b:"\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*\\(([a-zA-Z0-9_])*\\)",e:"[^a-zA-Z0-9_\\}\\$]"},{b:"\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*",e:"(\\))?[^a-zA-Z0-9_\\}\\$]"}]},{cN:"string",c:[e.BE],v:[e.inherit(e.QSM,{i:null})]},{cN:"number",v:[e.BNM,e.CNM]}]}});hljs.registerLanguage("go",function(e){var n={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",literal:"true false iota nil",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{aliases:["golang"],k:n,i:"]([0-9]?[+-])?[ ]*\\n( *)[\\S ]+\\n(\\2[\\S ]+\\n?)*"},{b:"<%[%=-]?",e:"[%-]?%>",sL:"ruby",eB:!0,eE:!0,relevance:0},{cN:"type",b:"!"+e.UIR},{cN:"type",b:"!!"+e.UIR},{cN:"meta",b:"&"+e.UIR+"$"},{cN:"meta",b:"\\*"+e.UIR+"$"},{cN:"bullet",b:"\\-(?=[ ]|$)",relevance:0},e.HCM,{bK:b,k:{literal:b}},{cN:"number",b:e.CNR+"\\b"},a]}}); \ No newline at end of file +// @license-start magnet:?xt=urn:btih:c80d50af7d3db9be66a4d0a86db0286e4fd33292&dn=bsd-3-clause.txt BSD-3-Clause/*! highlight.js v9.18.1 | BSD3 License | git.io/hljslicense */ +!function (e) { var n = "object" == typeof window && window || "object" == typeof self && self; "undefined" == typeof exports || exports.nodeType ? n && (n.hljs = e({}), "function" == typeof define && define.amd && define([], function () { return n.hljs })) : e(exports) }(function (a) { var f = [], o = Object.keys, _ = {}, g = {}, C = !0, n = /^(no-?highlight|plain|text)$/i, E = /\blang(?:uage)?-([\w-]+)\b/i, t = /((^(<[^>]+>|\t|)+|(?:\n)))/gm, r = { case_insensitive: "cI", lexemes: "l", contains: "c", keywords: "k", subLanguage: "sL", className: "cN", begin: "b", beginKeywords: "bK", end: "e", endsWithParent: "eW", illegal: "i", excludeBegin: "eB", excludeEnd: "eE", returnBegin: "rB", returnEnd: "rE", variants: "v", IDENT_RE: "IR", UNDERSCORE_IDENT_RE: "UIR", NUMBER_RE: "NR", C_NUMBER_RE: "CNR", BINARY_NUMBER_RE: "BNR", RE_STARTERS_RE: "RSR", BACKSLASH_ESCAPE: "BE", APOS_STRING_MODE: "ASM", QUOTE_STRING_MODE: "QSM", PHRASAL_WORDS_MODE: "PWM", C_LINE_COMMENT_MODE: "CLCM", C_BLOCK_COMMENT_MODE: "CBCM", HASH_COMMENT_MODE: "HCM", NUMBER_MODE: "NM", C_NUMBER_MODE: "CNM", BINARY_NUMBER_MODE: "BNM", CSS_NUMBER_MODE: "CSSNM", REGEXP_MODE: "RM", TITLE_MODE: "TM", UNDERSCORE_TITLE_MODE: "UTM", COMMENT: "C", beginRe: "bR", endRe: "eR", illegalRe: "iR", lexemesRe: "lR", terminators: "t", terminator_end: "tE" }, m = "", O = "Could not find the language '{}', did you forget to load/include a language module?", B = { classPrefix: "hljs-", tabReplace: null, useBR: !1, languages: void 0 }, c = "of and for in not or if then".split(" "); function x(e) { return e.replace(/&/g, "&").replace(//g, ">") } function d(e) { return e.nodeName.toLowerCase() } function R(e) { return n.test(e) } function i(e) { var n, t = {}, r = Array.prototype.slice.call(arguments, 1); for (n in e) t[n] = e[n]; return r.forEach(function (e) { for (n in e) t[n] = e[n] }), t } function p(e) { var a = []; return function e(n, t) { for (var r = n.firstChild; r; r = r.nextSibling)3 === r.nodeType ? t += r.nodeValue.length : 1 === r.nodeType && (a.push({ event: "start", offset: t, node: r }), t = e(r, t), d(r).match(/br|hr|img|input/) || a.push({ event: "stop", offset: t, node: r })); return t }(e, 0), a } function v(e, n, t) { var r = 0, a = "", i = []; function o() { return e.length && n.length ? e[0].offset !== n[0].offset ? e[0].offset < n[0].offset ? e : n : "start" === n[0].event ? e : n : e.length ? e : n } function c(e) { a += "<" + d(e) + f.map.call(e.attributes, function (e) { return " " + e.nodeName + '="' + x(e.value).replace(/"/g, """) + '"' }).join("") + ">" } function l(e) { a += "" } function u(e) { ("start" === e.event ? c : l)(e.node) } for (; e.length || n.length;) { var s = o(); if (a += x(t.substring(r, s[0].offset)), r = s[0].offset, s === e) { for (i.reverse().forEach(l); u(s.splice(0, 1)[0]), (s = o()) === e && s.length && s[0].offset === r;); i.reverse().forEach(c) } else "start" === s[0].event ? i.push(s[0].node) : i.pop(), u(s.splice(0, 1)[0]) } return a + x(t.substr(r)) } function l(n) { return n.v && !n.cached_variants && (n.cached_variants = n.v.map(function (e) { return i(n, { v: null }, e) })), n.cached_variants ? n.cached_variants : function e(n) { return !!n && (n.eW || e(n.starts)) }(n) ? [i(n, { starts: n.starts ? i(n.starts) : null })] : Object.isFrozen(n) ? [i(n)] : [n] } function u(e) { if (r && !e.langApiRestored) { for (var n in e.langApiRestored = !0, r) e[n] && (e[r[n]] = e[n]); (e.c || []).concat(e.v || []).forEach(u) } } function M(n, t) { var i = {}; return "string" == typeof n ? r("keyword", n) : o(n).forEach(function (e) { r(e, n[e]) }), i; function r(a, e) { t && (e = e.toLowerCase()), e.split(" ").forEach(function (e) { var n, t, r = e.split("|"); i[r[0]] = [a, (n = r[0], (t = r[1]) ? Number(t) : function (e) { return -1 != c.indexOf(e.toLowerCase()) }(n) ? 0 : 1)] }) } } function S(r) { function s(e) { return e && e.source || e } function f(e, n) { return new RegExp(s(e), "m" + (r.cI ? "i" : "") + (n ? "g" : "")) } function a(a) { var i, e, o = {}, c = [], l = {}, t = 1; function n(e, n) { o[t] = e, c.push([e, n]), t += new RegExp(n.toString() + "|").exec("").length - 1 + 1 } for (var r = 0; r < a.c.length; r++) { n(e = a.c[r], e.bK ? "\\.?(?:" + e.b + ")\\.?" : e.b) } a.tE && n("end", a.tE), a.i && n("illegal", a.i); var u = c.map(function (e) { return e[1] }); return i = f(function (e, n) { for (var t = /\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./, r = 0, a = "", i = 0; i < e.length; i++) { var o = r += 1, c = s(e[i]); for (0 < i && (a += n), a += "("; 0 < c.length;) { var l = t.exec(c); if (null == l) { a += c; break } a += c.substring(0, l.index), c = c.substring(l.index + l[0].length), "\\" == l[0][0] && l[1] ? a += "\\" + String(Number(l[1]) + o) : (a += l[0], "(" == l[0] && r++) } a += ")" } return a }(u, "|"), !0), l.lastIndex = 0, l.exec = function (e) { var n; if (0 === c.length) return null; i.lastIndex = l.lastIndex; var t = i.exec(e); if (!t) return null; for (var r = 0; r < t.length; r++)if (null != t[r] && null != o["" + r]) { n = o["" + r]; break } return "string" == typeof n ? (t.type = n, t.extra = [a.i, a.tE]) : (t.type = "begin", t.rule = n), t }, l } if (r.c && -1 != r.c.indexOf("self")) { if (!C) throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation."); r.c = r.c.filter(function (e) { return "self" != e }) } !function n(t, e) { t.compiled || (t.compiled = !0, t.k = t.k || t.bK, t.k && (t.k = M(t.k, r.cI)), t.lR = f(t.l || /\w+/, !0), e && (t.bK && (t.b = "\\b(" + t.bK.split(" ").join("|") + ")\\b"), t.b || (t.b = /\B|\b/), t.bR = f(t.b), t.endSameAsBegin && (t.e = t.b), t.e || t.eW || (t.e = /\B|\b/), t.e && (t.eR = f(t.e)), t.tE = s(t.e) || "", t.eW && e.tE && (t.tE += (t.e ? "|" : "") + e.tE)), t.i && (t.iR = f(t.i)), null == t.relevance && (t.relevance = 1), t.c || (t.c = []), t.c = Array.prototype.concat.apply([], t.c.map(function (e) { return l("self" === e ? t : e) })), t.c.forEach(function (e) { n(e, t) }), t.starts && n(t.starts, e), t.t = a(t)) }(r) } function T(n, e, a, t) { var i = e; function c(e, n, t, r) { if (!t && "" === n) return ""; if (!e) return n; var a = '') + n + (t ? "" : m) } function o() { p += (null != d.sL ? function () { var e = "string" == typeof d.sL; if (e && !_[d.sL]) return x(v); var n = e ? T(d.sL, v, !0, R[d.sL]) : w(v, d.sL.length ? d.sL : void 0); return 0 < d.relevance && (M += n.relevance), e && (R[d.sL] = n.top), c(n.language, n.value, !1, !0) } : function () { var e, n, t, r, a, i, o; if (!d.k) return x(v); for (r = "", n = 0, d.lR.lastIndex = 0, t = d.lR.exec(v); t;)r += x(v.substring(n, t.index)), a = d, i = t, o = g.cI ? i[0].toLowerCase() : i[0], (e = a.k.hasOwnProperty(o) && a.k[o]) ? (M += e[1], r += c(e[0], x(t[0]))) : r += x(t[0]), n = d.lR.lastIndex, t = d.lR.exec(v); return r + x(v.substr(n)) })(), v = "" } function l(e) { p += e.cN ? c(e.cN, "", !0) : "", d = Object.create(e, { parent: { value: d } }) } function u(e) { var n = e[0], t = e.rule; return t && t.endSameAsBegin && (t.eR = new RegExp(n.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&"), "m")), t.skip ? v += n : (t.eB && (v += n), o(), t.rB || t.eB || (v = n)), l(t), t.rB ? 0 : n.length } function s(e) { var n = e[0], t = i.substr(e.index), r = function e(n, t) { if (r = n.eR, a = t, (i = r && r.exec(a)) && 0 === i.index) { for (; n.endsParent && n.parent;)n = n.parent; return n } var r, a, i; if (n.eW) return e(n.parent, t) }(d, t); if (r) { var a = d; for (a.skip ? v += n : (a.rE || a.eE || (v += n), o(), a.eE && (v = n)); d.cN && (p += m), d.skip || d.sL || (M += d.relevance), (d = d.parent) !== r.parent;); return r.starts && (r.endSameAsBegin && (r.starts.eR = r.eR), l(r.starts)), a.rE ? 0 : n.length } } var f = {}; function r(e, n) { var t = n && n[0]; if (v += e, null == t) return o(), 0; if ("begin" == f.type && "end" == n.type && f.index == n.index && "" === t) return v += i.slice(n.index, n.index + 1), 1; if ("begin" === (f = n).type) return u(n); if ("illegal" === n.type && !a) throw new Error('Illegal lexeme "' + t + '" for mode "' + (d.cN || "") + '"'); if ("end" === n.type) { var r = s(n); if (null != r) return r } return v += t, t.length } var g = D(n); if (!g) throw console.error(O.replace("{}", n)), new Error('Unknown language: "' + n + '"'); S(g); var E, d = t || g, R = {}, p = ""; for (E = d; E !== g; E = E.parent)E.cN && (p = c(E.cN, "", !0) + p); var v = "", M = 0; try { for (var b, h, N = 0; d.t.lastIndex = N, b = d.t.exec(i);)h = r(i.substring(N, b.index), b), N = b.index + h; for (r(i.substr(N)), E = d; E.parent; E = E.parent)E.cN && (p += m); return { relevance: M, value: p, i: !1, language: n, top: d } } catch (e) { if (e.message && -1 !== e.message.indexOf("Illegal")) return { i: !0, relevance: 0, value: x(i) }; if (C) return { relevance: 0, value: x(i), language: n, top: d, errorRaised: e }; throw e } } function w(t, e) { e = e || B.languages || o(_); var r = { relevance: 0, value: x(t) }, a = r; return e.filter(D).filter(L).forEach(function (e) { var n = T(e, t, !1); n.language = e, n.relevance > a.relevance && (a = n), n.relevance > r.relevance && (a = r, r = n) }), a.language && (r.second_best = a), r } function b(e) { return B.tabReplace || B.useBR ? e.replace(t, function (e, n) { return B.useBR && "\n" === e ? "
    " : B.tabReplace ? n.replace(/\t/g, B.tabReplace) : "" }) : e } function s(e) { var n, t, r, a, i, o, c, l, u, s, f = function (e) { var n, t, r, a, i = e.className + " "; if (i += e.parentNode ? e.parentNode.className : "", t = E.exec(i)) { var o = D(t[1]); return o || (console.warn(O.replace("{}", t[1])), console.warn("Falling back to no-highlight mode for this block.", e)), o ? t[1] : "no-highlight" } for (n = 0, r = (i = i.split(/\s+/)).length; n < r; n++)if (R(a = i[n]) || D(a)) return a }(e); R(f) || (B.useBR ? (n = document.createElement("div")).innerHTML = e.innerHTML.replace(/\n/g, "").replace(//g, "\n") : n = e, i = n.textContent, r = f ? T(f, i, !0) : w(i), (t = p(n)).length && ((a = document.createElement("div")).innerHTML = r.value, r.value = v(t, p(a), i)), r.value = b(r.value), e.innerHTML = r.value, e.className = (o = e.className, c = f, l = r.language, u = c ? g[c] : l, s = [o.trim()], o.match(/\bhljs\b/) || s.push("hljs"), -1 === o.indexOf(u) && s.push(u), s.join(" ").trim()), e.result = { language: r.language, re: r.relevance }, r.second_best && (e.second_best = { language: r.second_best.language, re: r.second_best.relevance })) } function h() { if (!h.called) { h.called = !0; var e = document.querySelectorAll("pre code"); f.forEach.call(e, s) } } var N = { disableAutodetect: !0 }; function D(e) { return e = (e || "").toLowerCase(), _[e] || _[g[e]] } function L(e) { var n = D(e); return n && !n.disableAutodetect } return a.highlight = T, a.highlightAuto = w, a.fixMarkup = b, a.highlightBlock = s, a.configure = function (e) { B = i(B, e) }, a.initHighlighting = h, a.initHighlightingOnLoad = function () { window.addEventListener("DOMContentLoaded", h, !1), window.addEventListener("load", h, !1) }, a.registerLanguage = function (n, e) { var t; try { t = e(a) } catch (e) { if (console.error("Language definition for '{}' could not be registered.".replace("{}", n)), !C) throw e; console.error(e), t = N } u(_[n] = t), t.rawDefinition = e.bind(null, a), t.aliases && t.aliases.forEach(function (e) { g[e] = n }) }, a.listLanguages = function () { return o(_) }, a.getLanguage = D, a.requireLanguage = function (e) { var n = D(e); if (n) return n; throw new Error("The '{}' language is required, but not loaded.".replace("{}", e)) }, a.autoDetection = L, a.inherit = i, a.debugMode = function () { C = !1 }, a.IR = a.IDENT_RE = "[a-zA-Z]\\w*", a.UIR = a.UNDERSCORE_IDENT_RE = "[a-zA-Z_]\\w*", a.NR = a.NUMBER_RE = "\\b\\d+(\\.\\d+)?", a.CNR = a.C_NUMBER_RE = "(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)", a.BNR = a.BINARY_NUMBER_RE = "\\b(0b[01]+)", a.RSR = a.RE_STARTERS_RE = "!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~", a.BE = a.BACKSLASH_ESCAPE = { b: "\\\\[\\s\\S]", relevance: 0 }, a.ASM = a.APOS_STRING_MODE = { cN: "string", b: "'", e: "'", i: "\\n", c: [a.BE] }, a.QSM = a.QUOTE_STRING_MODE = { cN: "string", b: '"', e: '"', i: "\\n", c: [a.BE] }, a.PWM = a.PHRASAL_WORDS_MODE = { b: /\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/ }, a.C = a.COMMENT = function (e, n, t) { var r = a.inherit({ cN: "comment", b: e, e: n, c: [] }, t || {}); return r.c.push(a.PWM), r.c.push({ cN: "doctag", b: "(?:TODO|FIXME|NOTE|BUG|XXX):", relevance: 0 }), r }, a.CLCM = a.C_LINE_COMMENT_MODE = a.C("//", "$"), a.CBCM = a.C_BLOCK_COMMENT_MODE = a.C("/\\*", "\\*/"), a.HCM = a.HASH_COMMENT_MODE = a.C("#", "$"), a.NM = a.NUMBER_MODE = { cN: "number", b: a.NR, relevance: 0 }, a.CNM = a.C_NUMBER_MODE = { cN: "number", b: a.CNR, relevance: 0 }, a.BNM = a.BINARY_NUMBER_MODE = { cN: "number", b: a.BNR, relevance: 0 }, a.CSSNM = a.CSS_NUMBER_MODE = { cN: "number", b: a.NR + "(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?", relevance: 0 }, a.RM = a.REGEXP_MODE = { cN: "regexp", b: /\//, e: /\/[gimuy]*/, i: /\n/, c: [a.BE, { b: /\[/, e: /\]/, relevance: 0, c: [a.BE] }] }, a.TM = a.TITLE_MODE = { cN: "title", b: a.IR, relevance: 0 }, a.UTM = a.UNDERSCORE_TITLE_MODE = { cN: "title", b: a.UIR, relevance: 0 }, a.METHOD_GUARD = { b: "\\.\\s*" + a.UIR, relevance: 0 }, [a.BE, a.ASM, a.QSM, a.PWM, a.C, a.CLCM, a.CBCM, a.HCM, a.NM, a.CNM, a.BNM, a.CSSNM, a.RM, a.TM, a.UTM, a.METHOD_GUARD].forEach(function (e) { !function n(t) { Object.freeze(t); var r = "function" == typeof t; Object.getOwnPropertyNames(t).forEach(function (e) { !t.hasOwnProperty(e) || null === t[e] || "object" != typeof t[e] && "function" != typeof t[e] || r && ("caller" === e || "callee" === e || "arguments" === e) || Object.isFrozen(t[e]) || n(t[e]) }); return t }(e) }), a }); hljs.registerLanguage("erlang", function (e) { var r = "[a-z'][a-zA-Z0-9_']*", c = "(" + r + ":" + r + "|" + r + ")", n = { keyword: "after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor", literal: "false true" }, a = e.C("%", "$"), b = { cN: "number", b: "\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)", relevance: 0 }, i = { b: "fun\\s+" + r + "/\\d+" }, l = { b: c + "\\(", e: "\\)", rB: !0, relevance: 0, c: [{ b: c, relevance: 0 }, { b: "\\(", e: "\\)", eW: !0, rE: !0, relevance: 0 }] }, d = { b: "{", e: "}", relevance: 0 }, o = { b: "\\b_([A-Z][A-Za-z0-9_]*)?", relevance: 0 }, t = { b: "[A-Z][a-zA-Z0-9_]*", relevance: 0 }, v = { b: "#" + e.UIR, relevance: 0, rB: !0, c: [{ b: "#" + e.UIR, relevance: 0 }, { b: "{", e: "}", relevance: 0 }] }, f = { bK: "fun receive if try case", e: "end", k: n }; f.c = [a, i, e.inherit(e.ASM, { cN: "" }), f, l, e.QSM, b, d, o, t, v]; var s = [a, i, f, l, e.QSM, b, d, o, t, v]; l.c[1].c = s, d.c = s; var u = { cN: "params", b: "\\(", e: "\\)", c: v.c[1].c = s }; return { aliases: ["erl"], k: n, i: "(", rB: !0, i: "\\(|#|//|/\\*|\\\\|:|;", c: [u, e.inherit(e.TM, { b: r })], starts: { e: ";|\\.", k: n, c: s } }, a, { b: "^-", e: "\\.", relevance: 0, eE: !0, rB: !0, l: "-" + e.IR, k: "-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn -import -include -include_lib -compile -define -else -endif -file -behaviour -behavior -spec", c: [u] }, b, e.QSM, v, o, t, d, { b: /\.$/ }] } }); hljs.registerLanguage("bash", function (e) { var t = { cN: "variable", v: [{ b: /\$[\w\d#@][\w\d_]*/ }, { b: /\$\{(.*?)}/ }] }, a = { cN: "string", b: /"/, e: /"/, c: [e.BE, t, { cN: "variable", b: /\$\(/, e: /\)/, c: [e.BE] }] }; return { aliases: ["sh", "zsh"], l: /\b-?[a-z\._]+\b/, k: { keyword: "if then else elif fi for while in do done case esac function", literal: "true false", built_in: "break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp", _: "-ne -eq -lt -gt -f -d -e -s -l -a" }, c: [{ cN: "meta", b: /^#![^\n]+sh\s*$/, relevance: 10 }, { cN: "function", b: /\w[\w\d_]*\s*\(\s*\)\s*\{/, rB: !0, c: [e.inherit(e.TM, { b: /\w[\w\d_]*/ })], relevance: 0 }, e.HCM, a, { cN: "", b: /\\"/ }, { cN: "string", b: /'/, e: /'/ }, t] } }); hljs.registerLanguage("shell", function (s) { return { aliases: ["console"], c: [{ cN: "meta", b: "^\\s{0,3}[/\\w\\d\\[\\]()@-]*[>%$#]", starts: { e: "$", sL: "bash" } }] } }); hljs.registerLanguage("scheme", function (e) { var t = "[^\\(\\)\\[\\]\\{\\}\",'`;#|\\\\\\s]+", r = "(\\-|\\+)?\\d+([./]\\d+)?", a = { cN: "literal", b: "(#t|#f|#\\\\" + t + "|#\\\\.)" }, i = { cN: "number", v: [{ b: r, relevance: 0 }, { b: "(\\-|\\+)?\\d+([./]\\d+)?[+\\-](\\-|\\+)?\\d+([./]\\d+)?i", relevance: 0 }, { b: "#b[0-1]+(/[0-1]+)?" }, { b: "#o[0-7]+(/[0-7]+)?" }, { b: "#x[0-9a-f]+(/[0-9a-f]+)?" }] }, n = e.QSM, c = [e.C(";", "$", { relevance: 0 }), e.C("#\\|", "\\|#")], l = { b: t, relevance: 0 }, s = { cN: "symbol", b: "'" + t }, o = { eW: !0, relevance: 0 }, u = { v: [{ b: /'/ }, { b: "`" }], c: [{ b: "\\(", e: "\\)", c: ["self", a, n, i, l, s] }] }, p = { cN: "name", b: t, l: t, k: { "builtin-name": "case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules ' * + , ,@ - ... / ; < <= = => > >= ` abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string=? string>? string? substring symbol->string symbol? tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?" } }, d = { v: [{ b: "\\(", e: "\\)" }, { b: "\\[", e: "\\]" }], c: [{ b: /lambda/, eW: !0, rB: !0, c: [p, { b: /\(/, e: /\)/, endsParent: !0, c: [l] }] }, p, o] }; return o.c = [a, i, n, l, s, u, d].concat(c), { i: /\S/, c: [{ cN: "meta", b: "^#!", e: "$" }, i, n, s, u, d].concat(c) } }); hljs.registerLanguage("basic", function (E) { return { cI: !0, i: "^.", l: "[a-zA-Z][a-zA-Z0-9_$%!#]*", k: { keyword: "ABS ASC AND ATN AUTO|0 BEEP BLOAD|10 BSAVE|10 CALL CALLS CDBL CHAIN CHDIR CHR$|10 CINT CIRCLE CLEAR CLOSE CLS COLOR COM COMMON CONT COS CSNG CSRLIN CVD CVI CVS DATA DATE$ DEFDBL DEFINT DEFSNG DEFSTR DEF|0 SEG USR DELETE DIM DRAW EDIT END ENVIRON ENVIRON$ EOF EQV ERASE ERDEV ERDEV$ ERL ERR ERROR EXP FIELD FILES FIX FOR|0 FRE GET GOSUB|10 GOTO HEX$ IF THEN ELSE|0 INKEY$ INP INPUT INPUT# INPUT$ INSTR IMP INT IOCTL IOCTL$ KEY ON OFF LIST KILL LEFT$ LEN LET LINE LLIST LOAD LOC LOCATE LOF LOG LPRINT USING LSET MERGE MID$ MKDIR MKD$ MKI$ MKS$ MOD NAME NEW NEXT NOISE NOT OCT$ ON OR PEN PLAY STRIG OPEN OPTION BASE OUT PAINT PALETTE PCOPY PEEK PMAP POINT POKE POS PRINT PRINT] PSET PRESET PUT RANDOMIZE READ REM RENUM RESET|0 RESTORE RESUME RETURN|0 RIGHT$ RMDIR RND RSET RUN SAVE SCREEN SGN SHELL SIN SOUND SPACE$ SPC SQR STEP STICK STOP STR$ STRING$ SWAP SYSTEM TAB TAN TIME$ TIMER TROFF TRON TO USR VAL VARPTR VARPTR$ VIEW WAIT WHILE WEND WIDTH WINDOW WRITE XOR" }, c: [E.QSM, E.C("REM", "$", { relevance: 10 }), E.C("'", "$", { relevance: 0 }), { cN: "symbol", b: "^[0-9]+ ", relevance: 10 }, { cN: "number", b: "\\b([0-9]+[0-9edED.]*[#!]?)", relevance: 0 }, { cN: "number", b: "(&[hH][0-9a-fA-F]{1,4})" }, { cN: "number", b: "(&[oO][0-7]{1,6})" }] } }); hljs.registerLanguage("swift", function (e) { var i = { keyword: "#available #colorLiteral #column #else #elseif #endif #file #fileLiteral #function #if #imageLiteral #line #selector #sourceLocation _ __COLUMN__ __FILE__ __FUNCTION__ __LINE__ Any as as! as? associatedtype associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet", literal: "true false nil", built_in: "abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip" }, t = e.C("/\\*", "\\*/", { c: ["self"] }), n = { cN: "subst", b: /\\\(/, e: "\\)", k: i, c: [] }, r = { cN: "string", c: [e.BE, n], v: [{ b: /"""/, e: /"""/ }, { b: /"/, e: /"/ }] }, a = { cN: "number", b: "\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b", relevance: 0 }; return n.c = [a], { k: i, c: [r, e.CLCM, t, { cN: "type", b: "\\b[A-Z][\\wÀ-ʸ']*[!?]" }, { cN: "type", b: "\\b[A-Z][\\wÀ-ʸ']*", relevance: 0 }, a, { cN: "function", bK: "func", e: "{", eE: !0, c: [e.inherit(e.TM, { b: /[A-Za-z$_][0-9A-Za-z$_]*/ }), { b: // }, { cN: "params", b: /\(/, e: /\)/, endsParent: !0, k: i, c: ["self", a, r, e.CBCM, { b: ":" }], i: /["']/ }], i: /\[|%/ }, { cN: "class", bK: "struct protocol class extension enum", k: i, e: "\\{", eE: !0, c: [e.inherit(e.TM, { b: /[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/ })] }, { cN: "meta", b: "(@discardableResult|@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@objcMembers|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain|@dynamicMemberLookup|@propertyWrapper)" }, { bK: "import", e: /$/, c: [e.CLCM, t] }] } }); hljs.registerLanguage("ini", function (e) { var b = { cN: "number", relevance: 0, v: [{ b: /([\+\-]+)?[\d]+_[\d_]+/ }, { b: e.NR }] }, a = e.C(); a.v = [{ b: /;/, e: /$/ }, { b: /#/, e: /$/ }]; var c = { cN: "variable", v: [{ b: /\$[\w\d"][\w\d_]*/ }, { b: /\$\{(.*?)}/ }] }, r = { cN: "literal", b: /\bon|off|true|false|yes|no\b/ }, n = { cN: "string", c: [e.BE], v: [{ b: "'''", e: "'''", relevance: 10 }, { b: '"""', e: '"""', relevance: 10 }, { b: '"', e: '"' }, { b: "'", e: "'" }] }; return { aliases: ["toml"], cI: !0, i: /\S/, c: [a, { cN: "section", b: /\[+/, e: /\]+/ }, { b: /^[a-z0-9\[\]_\.-]+(?=\s*=\s*)/, cN: "attr", starts: { e: /$/, c: [a, { b: /\[/, e: /\]/, c: [a, r, c, n, b, "self"], relevance: 0 }, r, c, n, b] } }] } }); hljs.registerLanguage("ruby", function (e) { var c = "[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?", b = { keyword: "and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor", literal: "true false nil" }, r = { cN: "doctag", b: "@[A-Za-z]+" }, a = { b: "#<", e: ">" }, n = [e.C("#", "$", { c: [r] }), e.C("^\\=begin", "^\\=end", { c: [r], relevance: 10 }), e.C("^__END__", "\\n$")], s = { cN: "subst", b: "#\\{", e: "}", k: b }, t = { cN: "string", c: [e.BE, s], v: [{ b: /'/, e: /'/ }, { b: /"/, e: /"/ }, { b: /`/, e: /`/ }, { b: "%[qQwWx]?\\(", e: "\\)" }, { b: "%[qQwWx]?\\[", e: "\\]" }, { b: "%[qQwWx]?{", e: "}" }, { b: "%[qQwWx]?<", e: ">" }, { b: "%[qQwWx]?/", e: "/" }, { b: "%[qQwWx]?%", e: "%" }, { b: "%[qQwWx]?-", e: "-" }, { b: "%[qQwWx]?\\|", e: "\\|" }, { b: /\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/ }, { b: /<<[-~]?'?(\w+)(?:.|\n)*?\n\s*\1\b/, rB: !0, c: [{ b: /<<[-~]?'?/ }, { b: /\w+/, endSameAsBegin: !0, c: [e.BE, s] }] }] }, i = { cN: "params", b: "\\(", e: "\\)", endsParent: !0, k: b }, l = [t, a, { cN: "class", bK: "class module", e: "$|;", i: /=/, c: [e.inherit(e.TM, { b: "[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?" }), { b: "<\\s*", c: [{ b: "(" + e.IR + "::)?" + e.IR }] }].concat(n) }, { cN: "function", bK: "def", e: "$|;", c: [e.inherit(e.TM, { b: c }), i].concat(n) }, { b: e.IR + "::" }, { cN: "symbol", b: e.UIR + "(\\!|\\?)?:", relevance: 0 }, { cN: "symbol", b: ":(?!\\s)", c: [t, { b: c }], relevance: 0 }, { cN: "number", b: "(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b", relevance: 0 }, { b: "(\\$\\W)|((\\$|\\@\\@?)(\\w+))" }, { cN: "params", b: /\|/, e: /\|/, k: b }, { b: "(" + e.RSR + "|unless)\\s*", k: "unless", c: [a, { cN: "regexp", c: [e.BE, s], i: /\n/, v: [{ b: "/", e: "/[a-z]*" }, { b: "%r{", e: "}[a-z]*" }, { b: "%r\\(", e: "\\)[a-z]*" }, { b: "%r!", e: "![a-z]*" }, { b: "%r\\[", e: "\\][a-z]*" }] }].concat(n), relevance: 0 }].concat(n); s.c = l; var d = [{ b: /^\s*=>/, starts: { e: "$", c: i.c = l } }, { cN: "meta", b: "^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>)", starts: { e: "$", c: l } }]; return { aliases: ["rb", "gemspec", "podspec", "thor", "irb"], k: b, i: /\/\*/, c: n.concat(d).concat(l) } }); hljs.registerLanguage("plaintext", function (e) { return { disableAutodetect: !0 } }); hljs.registerLanguage("d", function (e) { var a = "(0|[1-9][\\d_]*)", d = "(" + a + "|0[bB][01_]+|0[xX]([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))", t = "\\\\(['\"\\?\\\\abfnrtv]|u[\\dA-Fa-f]{4}|[0-7]{1,3}|x[\\dA-Fa-f]{2}|U[\\dA-Fa-f]{8})|&[a-zA-Z\\d]{2,};", _ = { cN: "number", b: "\\b" + d + "(L|u|U|Lu|LU|uL|UL)?", relevance: 0 }, r = { cN: "number", b: "\\b(((0[xX](([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)\\.([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)|\\.?([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*))[pP][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))|((0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(\\.\\d*|([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)))|\\d+\\.(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)|\\.(0|[1-9][\\d_]*)([eE][+-]?(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d))?))([fF]|L|i|[fF]i|Li)?|" + d + "(i|[fF]i|Li))", relevance: 0 }, i = { cN: "string", b: "'(" + t + "|.)", e: "'", i: "." }, n = { cN: "string", b: '"', c: [{ b: t, relevance: 0 }], e: '"[cwd]?' }, c = e.C("\\/\\+", "\\+\\/", { c: ["self"], relevance: 10 }); return { l: e.UIR, k: { keyword: "abstract alias align asm assert auto body break byte case cast catch class const continue debug default delete deprecated do else enum export extern final finally for foreach foreach_reverse|10 goto if immutable import in inout int interface invariant is lazy macro mixin module new nothrow out override package pragma private protected public pure ref return scope shared static struct super switch synchronized template this throw try typedef typeid typeof union unittest version void volatile while with __FILE__ __LINE__ __gshared|10 __thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__", built_in: "bool cdouble cent cfloat char creal dchar delegate double dstring float function idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar wstring", literal: "false null true" }, c: [e.CLCM, e.CBCM, c, { cN: "string", b: 'x"[\\da-fA-F\\s\\n\\r]*"[cwd]?', relevance: 10 }, n, { cN: "string", b: '[rq]"', e: '"[cwd]?', relevance: 5 }, { cN: "string", b: "`", e: "`[cwd]?" }, { cN: "string", b: 'q"\\{', e: '\\}"' }, r, _, i, { cN: "meta", b: "^#!", e: "$", relevance: 5 }, { cN: "meta", b: "#(line)", e: "$", relevance: 5 }, { cN: "keyword", b: "@[a-zA-Z_][a-zA-Z_\\d]*" }] } }); hljs.registerLanguage("scala", function (e) { var t = { cN: "subst", v: [{ b: "\\$[A-Za-z0-9_]+" }, { b: "\\${", e: "}" }] }, a = { cN: "string", v: [{ b: '"', e: '"', i: "\\n", c: [e.BE] }, { b: '"""', e: '"""', relevance: 10 }, { b: '[a-z]+"', e: '"', i: "\\n", c: [e.BE, t] }, { cN: "string", b: '[a-z]+"""', e: '"""', c: [t], relevance: 10 }] }, c = { cN: "type", b: "\\b[A-Z][A-Za-z0-9_]*", relevance: 0 }, r = { cN: "title", b: /[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/, relevance: 0 }, n = { cN: "class", bK: "class object trait type", e: /[:={\[\n;]/, eE: !0, c: [{ bK: "extends with", relevance: 10 }, { b: /\[/, e: /\]/, eB: !0, eE: !0, relevance: 0, c: [c] }, { cN: "params", b: /\(/, e: /\)/, eB: !0, eE: !0, relevance: 0, c: [c] }, r] }, l = { cN: "function", bK: "def", e: /[:={\[(\n;]/, eE: !0, c: [r] }; return { k: { literal: "true false null", keyword: "type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit" }, c: [e.CLCM, e.CBCM, a, { cN: "symbol", b: "'\\w[\\w\\d_]*(?!')" }, c, l, n, e.CNM, { cN: "meta", b: "@[A-Za-z]+" }] } }); hljs.registerLanguage("cs", function (e) { var a = { keyword: "abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let nameof on orderby partial remove select set value var when where yield", literal: "null false true" }, i = { cN: "number", v: [{ b: "\\b(0b[01']+)" }, { b: "(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)" }, { b: "(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" }], relevance: 0 }, c = { cN: "string", b: '@"', e: '"', c: [{ b: '""' }] }, r = e.inherit(c, { i: /\n/ }), n = { cN: "subst", b: "{", e: "}", k: a }, t = e.inherit(n, { i: /\n/ }), s = { cN: "string", b: /\$"/, e: '"', i: /\n/, c: [{ b: "{{" }, { b: "}}" }, e.BE, t] }, l = { cN: "string", b: /\$@"/, e: '"', c: [{ b: "{{" }, { b: "}}" }, { b: '""' }, n] }, b = e.inherit(l, { i: /\n/, c: [{ b: "{{" }, { b: "}}" }, { b: '""' }, t] }); n.c = [l, s, c, e.ASM, e.QSM, i, e.CBCM], t.c = [b, s, r, e.ASM, e.QSM, i, e.inherit(e.CBCM, { i: /\n/ })]; var o = { v: [l, s, c, e.ASM, e.QSM] }, d = e.IR + "(<" + e.IR + "(\\s*,\\s*" + e.IR + ")*>)?(\\[\\])?"; return { aliases: ["csharp", "c#"], k: a, i: /::/, c: [e.C("///", "$", { rB: !0, c: [{ cN: "doctag", v: [{ b: "///", relevance: 0 }, { b: "\x3c!--|--\x3e" }, { b: "" }] }] }), e.CLCM, e.CBCM, { cN: "meta", b: "#", e: "$", k: { "meta-keyword": "if else elif endif define undef warning error line region endregion pragma checksum" } }, o, i, { bK: "class interface", e: /[{;=]/, i: /[^\s:,]/, c: [e.TM, e.CLCM, e.CBCM] }, { bK: "namespace", e: /[{;=]/, i: /[^\s:]/, c: [e.inherit(e.TM, { b: "[a-zA-Z](\\.?\\w)*" }), e.CLCM, e.CBCM] }, { cN: "meta", b: "^\\s*\\[", eB: !0, e: "\\]", eE: !0, c: [{ cN: "meta-string", b: /"/, e: /"/ }] }, { bK: "new return throw await else", relevance: 0 }, { cN: "function", b: "(" + d + "\\s+)+" + e.IR + "\\s*\\(", rB: !0, e: /\s*[{;=]/, eE: !0, k: a, c: [{ b: e.IR + "\\s*\\(", rB: !0, c: [e.TM], relevance: 0 }, { cN: "params", b: /\(/, e: /\)/, eB: !0, eE: !0, k: a, relevance: 0, c: [o, i, e.CBCM] }, e.CLCM, e.CBCM] }] } }); hljs.registerLanguage("cpp", function (e) { function t(e) { return "(?:" + e + ")?" } var r = "decltype\\(auto\\)", a = "[a-zA-Z_]\\w*::", i = (t(a), t("<.*?>"), { cN: "keyword", b: "\\b[a-z\\d_]*_t\\b" }), c = { cN: "string", v: [{ b: '(u8?|U|L)?"', e: '"', i: "\\n", c: [e.BE] }, { b: "(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)", e: "'", i: "." }, { b: /(?:u8?|U|L)?R"([^()\\ ]{0,16})\((?:.|\n)*?\)\1"/ }] }, s = { cN: "number", v: [{ b: "\\b(0b[01']+)" }, { b: "(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)" }, { b: "(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" }], relevance: 0 }, n = { cN: "meta", b: /#\s*[a-z]+\b/, e: /$/, k: { "meta-keyword": "if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include" }, c: [{ b: /\\\n/, relevance: 0 }, e.inherit(c, { cN: "meta-string" }), { cN: "meta-string", b: /<.*?>/, e: /$/, i: "\\n" }, e.CLCM, e.CBCM] }, o = { cN: "title", b: t(a) + e.IR, relevance: 0 }, l = t(a) + e.IR + "\\s*\\(", u = { keyword: "int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_tshort reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq", built_in: "std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary", literal: "true false nullptr NULL" }, p = [i, e.CLCM, e.CBCM, s, c], m = { v: [{ b: /=/, e: /;/ }, { b: /\(/, e: /\)/ }, { bK: "new throw return else", e: /;/ }], k: u, c: p.concat([{ b: /\(/, e: /\)/, k: u, c: p.concat(["self"]), relevance: 0 }]), relevance: 0 }, d = { cN: "function", b: "((decltype\\(auto\\)|(?:[a-zA-Z_]\\w*::)?[a-zA-Z_]\\w*(?:<.*?>)?)[\\*&\\s]+)+" + l, rB: !0, e: /[{;=]/, eE: !0, k: u, i: /[^\w\s\*&:<>]/, c: [{ b: r, k: u, relevance: 0 }, { b: l, rB: !0, c: [o], relevance: 0 }, { cN: "params", b: /\(/, e: /\)/, k: u, relevance: 0, c: [e.CLCM, e.CBCM, c, s, i, { b: /\(/, e: /\)/, k: u, relevance: 0, c: ["self", e.CLCM, e.CBCM, c, s, i] }] }, i, e.CLCM, e.CBCM, n] }; return { aliases: ["c", "cc", "h", "c++", "h++", "hpp", "hh", "hxx", "cxx"], k: u, i: "", k: u, c: ["self", i] }, { b: e.IR + "::", k: u }, { cN: "class", bK: "class struct", e: /[{;:]/, c: [{ b: //, c: ["self"] }, e.TM] }]), exports: { preprocessor: n, strings: c, k: u } } }); hljs.registerLanguage("less", function (e) { function r(e) { return { cN: "string", b: "~?" + e + ".*?" + e } } function t(e, r, t) { return { cN: e, b: r, relevance: t } } var a = "[\\w-]+", c = "(" + a + "|@{" + a + "})", s = [], n = [], b = { b: "\\(", e: "\\)", c: n, relevance: 0 }; n.push(e.CLCM, e.CBCM, r("'"), r('"'), e.CSSNM, { b: "(url|data-uri)\\(", starts: { cN: "string", e: "[\\)\\n]", eE: !0 } }, t("number", "#[0-9A-Fa-f]+\\b"), b, t("variable", "@@?" + a, 10), t("variable", "@{" + a + "}"), t("built_in", "~?`[^`]*?`"), { cN: "attribute", b: a + "\\s*:", e: ":", rB: !0, eE: !0 }, { cN: "meta", b: "!important" }); var i = n.concat({ b: "{", e: "}", c: s }), l = { bK: "when", eW: !0, c: [{ bK: "and not" }].concat(n) }, o = { b: c + "\\s*:", rB: !0, e: "[;}]", relevance: 0, c: [{ cN: "attribute", b: c, e: ":", eE: !0, starts: { eW: !0, i: "[<=$]", relevance: 0, c: n } }] }, u = { cN: "keyword", b: "@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b", starts: { e: "[;{}]", rE: !0, c: n, relevance: 0 } }, v = { cN: "variable", v: [{ b: "@" + a + "\\s*:", relevance: 15 }, { b: "@" + a }], starts: { e: "[;}]", rE: !0, c: i } }, C = { v: [{ b: "[\\.#:&\\[>]", e: "[;{}]" }, { b: c, e: "{" }], rB: !0, rE: !0, i: "[<='$\"]", relevance: 0, c: [e.CLCM, e.CBCM, l, t("keyword", "all\\b"), t("variable", "@{" + a + "}"), t("selector-tag", c + "%?", 0), t("selector-id", "#" + c), t("selector-class", "\\." + c, 0), t("selector-tag", "&", 0), { cN: "selector-attr", b: "\\[", e: "\\]" }, { cN: "selector-pseudo", b: /:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/ }, { b: "\\(", e: "\\)", c: i }, { b: "!important" }] }; return s.push(e.CLCM, e.CBCM, u, v, o, C), { cI: !0, i: "[=>'/<($\"]", c: s } }); hljs.registerLanguage("python", function (e) { var r = { keyword: "and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10", built_in: "Ellipsis NotImplemented", literal: "False None True" }, b = { cN: "meta", b: /^(>>>|\.\.\.) / }, c = { cN: "subst", b: /\{/, e: /\}/, k: r, i: /#/ }, a = { b: /\{\{/, relevance: 0 }, l = { cN: "string", c: [e.BE], v: [{ b: /(u|b)?r?'''/, e: /'''/, c: [e.BE, b], relevance: 10 }, { b: /(u|b)?r?"""/, e: /"""/, c: [e.BE, b], relevance: 10 }, { b: /(fr|rf|f)'''/, e: /'''/, c: [e.BE, b, a, c] }, { b: /(fr|rf|f)"""/, e: /"""/, c: [e.BE, b, a, c] }, { b: /(u|r|ur)'/, e: /'/, relevance: 10 }, { b: /(u|r|ur)"/, e: /"/, relevance: 10 }, { b: /(b|br)'/, e: /'/ }, { b: /(b|br)"/, e: /"/ }, { b: /(fr|rf|f)'/, e: /'/, c: [e.BE, a, c] }, { b: /(fr|rf|f)"/, e: /"/, c: [e.BE, a, c] }, e.ASM, e.QSM] }, n = { cN: "number", relevance: 0, v: [{ b: e.BNR + "[lLjJ]?" }, { b: "\\b(0o[0-7]+)[lLjJ]?" }, { b: e.CNR + "[lLjJ]?" }] }, i = { cN: "params", b: /\(/, e: /\)/, c: ["self", b, n, l, e.HCM] }; return c.c = [l, n, b], { aliases: ["py", "gyp", "ipython"], k: r, i: /(<\/|->|\?)|=>/, c: [b, n, { bK: "if", relevance: 0 }, l, e.HCM, { v: [{ cN: "function", bK: "def" }, { cN: "class", bK: "class" }], e: /:/, i: /[${=;\n,]/, c: [e.UTM, i, { b: /->/, eW: !0, k: "None" }] }, { cN: "meta", b: /^[\t ]*@/, e: /$/ }, { b: /\b(print|exec)\(/ }] } }); hljs.registerLanguage("powershell", function (e) { var t = { keyword: "if else foreach return do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch hidden static parameter" }, n = { b: "`[\\s\\S]", relevance: 0 }, c = { cN: "variable", v: [{ b: /\$\B/ }, { cN: "keyword", b: /\$this/ }, { b: /\$[\w\d][\w\d_:]*/ }] }, i = { cN: "string", v: [{ b: /"/, e: /"/ }, { b: /@"/, e: /^"@/ }], c: [n, c, { cN: "variable", b: /\$[A-z]/, e: /[^A-z]/ }] }, a = { cN: "string", v: [{ b: /'/, e: /'/ }, { b: /@'/, e: /^'@/ }] }, r = e.inherit(e.C(null, null), { v: [{ b: /#/, e: /$/ }, { b: /<#/, e: /#>/ }], c: [{ cN: "doctag", v: [{ b: /\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/ }, { b: /\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\s+\S+/ }] }] }), o = { cN: "built_in", v: [{ b: "(".concat("Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|Limit|Merge|New|Out|Publish|Restore|Save|Sync|Unpublish|Update|Approve|Assert|Complete|Confirm|Deny|Disable|Enable|Install|Invoke|Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|Unprotect|Use|ForEach|Sort|Tee|Where", ")+(-)[\\w\\d]+") }] }, l = { cN: "class", bK: "class enum", e: /\s*[{]/, eE: !0, relevance: 0, c: [e.TM] }, s = { cN: "function", b: /function\s+/, e: /\s*\{|$/, eE: !0, rB: !0, relevance: 0, c: [{ b: "function", relevance: 0, cN: "keyword" }, { cN: "title", b: /\w[\w\d]*((-)[\w\d]+)*/, relevance: 0 }, { b: /\(/, e: /\)/, cN: "params", relevance: 0, c: [c] }] }, p = { b: /using\s/, e: /$/, rB: !0, c: [i, a, { cN: "keyword", b: /(using|assembly|command|module|namespace|type)/ }] }, b = { v: [{ cN: "operator", b: "(".concat("-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|-split|-wildcard|-xor", ")\\b") }, { cN: "literal", b: /(-)[\w\d]+/, relevance: 0 }] }, d = { cN: "function", b: /\[.*\]\s*[\w]+[ ]??\(/, e: /$/, rB: !0, relevance: 0, c: [{ cN: "keyword", b: "(".concat(t.keyword.toString().replace(/\s/g, "|"), ")\\b"), endsParent: !0, relevance: 0 }, e.inherit(e.TM, { endsParent: !0 })] }, u = [d, r, n, e.NM, i, a, o, c, { cN: "literal", b: /\$(null|true|false)\b/ }, { cN: "selector-tag", b: /\@\B/, relevance: 0 }], m = { b: /\[/, e: /\]/, eB: !0, eE: !0, relevance: 0, c: [].concat("self", u, { b: "(" + ["string", "char", "byte", "int", "long", "bool", "decimal", "single", "double", "DateTime", "xml", "array", "hashtable", "void"].join("|") + ")", cN: "built_in", relevance: 0 }, { cN: "type", b: /[\.\w\d]+/, relevance: 0 }) }; return d.c.unshift(m), { aliases: ["ps", "ps1"], l: /-?[A-z\.\-]+/, cI: !0, k: t, c: u.concat(l, s, p, b, m) } }); hljs.registerLanguage("coffeescript", function (e) { var c = { keyword: "in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super yield import export from as default await then unless until loop of by when and or is isnt not", literal: "true false null undefined yes no on off", built_in: "npm require console print module global window document" }, n = "[A-Za-z$_][0-9A-Za-z$_]*", r = { cN: "subst", b: /#\{/, e: /}/, k: c }, i = [e.BNM, e.inherit(e.CNM, { starts: { e: "(\\s*/)?", relevance: 0 } }), { cN: "string", v: [{ b: /'''/, e: /'''/, c: [e.BE] }, { b: /'/, e: /'/, c: [e.BE] }, { b: /"""/, e: /"""/, c: [e.BE, r] }, { b: /"/, e: /"/, c: [e.BE, r] }] }, { cN: "regexp", v: [{ b: "///", e: "///", c: [r, e.HCM] }, { b: "//[gim]{0,3}(?=\\W)", relevance: 0 }, { b: /\/(?![ *]).*?(?![\\]).\/[gim]{0,3}(?=\W)/ }] }, { b: "@" + n }, { sL: "javascript", eB: !0, eE: !0, v: [{ b: "```", e: "```" }, { b: "`", e: "`" }] }]; r.c = i; var s = e.inherit(e.TM, { b: n }), t = "(\\(.*\\))?\\s*\\B[-=]>", a = { cN: "params", b: "\\([^\\(]", rB: !0, c: [{ b: /\(/, e: /\)/, k: c, c: ["self"].concat(i) }] }; return { aliases: ["coffee", "cson", "iced"], k: c, i: /\/\*/, c: i.concat([e.C("###", "###"), e.HCM, { cN: "function", b: "^\\s*" + n + "\\s*=\\s*" + t, e: "[-=]>", rB: !0, c: [s, a] }, { b: /[:\(,=]\s*/, relevance: 0, c: [{ cN: "function", b: t, e: "[-=]>", rB: !0, c: [a] }] }, { cN: "class", bK: "class", e: "$", i: /[:="\[\]]/, c: [{ bK: "extends", eW: !0, i: /[:="\[\]]/, c: [s] }, s] }, { b: n + ":", e: ":", rB: !0, rE: !0, relevance: 0 }]) } }); hljs.registerLanguage("json", function (e) { var i = { literal: "true false null" }, n = [e.CLCM, e.CBCM], c = [e.QSM, e.CNM], r = { e: ",", eW: !0, eE: !0, c: c, k: i }, t = { b: "{", e: "}", c: [{ cN: "attr", b: /"/, e: /"/, c: [e.BE], i: "\\n" }, e.inherit(r, { b: /:/ })].concat(n), i: "\\S" }, a = { b: "\\[", e: "\\]", c: [e.inherit(r)], i: "\\S" }; return c.push(t, a), n.forEach(function (e) { c.push(e) }), { c: c, k: i, i: "\\S" } }); hljs.registerLanguage("xml", function (e) { var c = { cN: "symbol", b: "&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;" }, s = { b: "\\s", c: [{ cN: "meta-keyword", b: "#?[a-z_][a-z1-9_-]+", i: "\\n" }] }, a = e.inherit(s, { b: "\\(", e: "\\)" }), t = e.inherit(e.ASM, { cN: "meta-string" }), l = e.inherit(e.QSM, { cN: "meta-string" }), r = { eW: !0, i: /`]+/ }] }] }] }; return { aliases: ["html", "xhtml", "rss", "atom", "xjb", "xsd", "xsl", "plist", "wsf", "svg"], cI: !0, c: [{ cN: "meta", b: "", relevance: 10, c: [s, l, t, a, { b: "\\[", e: "\\]", c: [{ cN: "meta", b: "", c: [s, a, l, t] }] }] }, e.C("\x3c!--", "--\x3e", { relevance: 10 }), { b: "<\\!\\[CDATA\\[", e: "\\]\\]>", relevance: 10 }, c, { cN: "meta", b: /<\?xml/, e: /\?>/, relevance: 10 }, { b: /<\?(php)?/, e: /\?>/, sL: "php", c: [{ b: "/\\*", e: "\\*/", skip: !0 }, { b: 'b"', e: '"', skip: !0 }, { b: "b'", e: "'", skip: !0 }, e.inherit(e.ASM, { i: null, cN: null, c: null, skip: !0 }), e.inherit(e.QSM, { i: null, cN: null, c: null, skip: !0 })] }, { cN: "tag", b: ")", e: ">", k: { name: "style" }, c: [r], starts: { e: "", rE: !0, sL: ["css", "xml"] } }, { cN: "tag", b: ")", e: ">", k: { name: "script" }, c: [r], starts: { e: "<\/script>", rE: !0, sL: ["actionscript", "javascript", "handlebars", "xml"] } }, { cN: "tag", b: "", c: [{ cN: "name", b: /[^\/><\s]+/, relevance: 0 }, r] }] } }); hljs.registerLanguage("markdown", function (e) { return { aliases: ["md", "mkdown", "mkd"], c: [{ cN: "section", v: [{ b: "^#{1,6}", e: "$" }, { b: "^.+?\\n[=-]{2,}$" }] }, { b: "<", e: ">", sL: "xml", relevance: 0 }, { cN: "bullet", b: "^\\s*([*+-]|(\\d+\\.))\\s+" }, { cN: "strong", b: "[*_]{2}.+?[*_]{2}" }, { cN: "emphasis", v: [{ b: "\\*.+?\\*" }, { b: "_.+?_", relevance: 0 }] }, { cN: "quote", b: "^>\\s+", e: "$" }, { cN: "code", v: [{ b: "^```\\w*\\s*$", e: "^```[ ]*$" }, { b: "`.+?`" }, { b: "^( {4}|\\t)", e: "$", relevance: 0 }] }, { b: "^[-\\*]{3,}", e: "$" }, { b: "\\[.+?\\][\\(\\[].*?[\\)\\]]", rB: !0, c: [{ cN: "string", b: "\\[", e: "\\]", eB: !0, rE: !0, relevance: 0 }, { cN: "link", b: "\\]\\(", e: "\\)", eB: !0, eE: !0 }, { cN: "symbol", b: "\\]\\[", e: "\\]", eB: !0, eE: !0 }], relevance: 10 }, { b: /^\[[^\n]+\]:/, rB: !0, c: [{ cN: "symbol", b: /\[/, e: /\]/, eB: !0, eE: !0 }, { cN: "link", b: /:\s*/, e: /$/, eB: !0 }] }] } }); hljs.registerLanguage("sql", function (e) { var t = e.C("--", "$"); return { cI: !0, i: /[<>{}*]/, c: [{ bK: "begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with", e: /;/, eW: !0, l: /[\w\.]+/, k: { keyword: "as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek", literal: "true false null unknown", built_in: "array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varchar2 varying void" }, c: [{ cN: "string", b: "'", e: "'", c: [{ b: "''" }] }, { cN: "string", b: '"', e: '"', c: [{ b: '""' }] }, { cN: "string", b: "`", e: "`" }, e.CNM, e.CBCM, t, e.HCM] }, e.CBCM, t, e.HCM] } }); hljs.registerLanguage("javascript", function (e) { var r = "<>", a = "", t = { b: /<[A-Za-z0-9\\._:-]+/, e: /\/[A-Za-z0-9\\._:-]+>|\/>/ }, c = "[A-Za-z$_][0-9A-Za-z$_]*", n = { keyword: "in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as", literal: "true false null undefined NaN Infinity", built_in: "eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise" }, s = { cN: "number", v: [{ b: "\\b(0[bB][01]+)n?" }, { b: "\\b(0[oO][0-7]+)n?" }, { b: e.CNR + "n?" }], relevance: 0 }, o = { cN: "subst", b: "\\$\\{", e: "\\}", k: n, c: [] }, i = { b: "html`", e: "", starts: { e: "`", rE: !1, c: [e.BE, o], sL: "xml" } }, b = { b: "css`", e: "", starts: { e: "`", rE: !1, c: [e.BE, o], sL: "css" } }, l = { cN: "string", b: "`", e: "`", c: [e.BE, o] }; o.c = [e.ASM, e.QSM, i, b, l, s, e.RM]; var u = o.c.concat([e.CBCM, e.CLCM]); return { aliases: ["js", "jsx", "mjs", "cjs"], k: n, c: [{ cN: "meta", relevance: 10, b: /^\s*['"]use (strict|asm)['"]/ }, { cN: "meta", b: /^#!/, e: /$/ }, e.ASM, e.QSM, i, b, l, e.CLCM, e.C("/\\*\\*", "\\*/", { relevance: 0, c: [{ cN: "doctag", b: "@[A-Za-z]+", c: [{ cN: "type", b: "\\{", e: "\\}", relevance: 0 }, { cN: "variable", b: c + "(?=\\s*(-)|$)", endsParent: !0, relevance: 0 }, { b: /(?=[^\n])\s/, relevance: 0 }] }] }), e.CBCM, s, { b: /[{,\n]\s*/, relevance: 0, c: [{ b: c + "\\s*:", rB: !0, relevance: 0, c: [{ cN: "attr", b: c, relevance: 0 }] }] }, { b: "(" + e.RSR + "|\\b(case|return|throw)\\b)\\s*", k: "return throw case", c: [e.CLCM, e.CBCM, e.RM, { cN: "function", b: "(\\(.*?\\)|" + c + ")\\s*=>", rB: !0, e: "\\s*=>", c: [{ cN: "params", v: [{ b: c }, { b: /\(\s*\)/ }, { b: /\(/, e: /\)/, eB: !0, eE: !0, k: n, c: u }] }] }, { cN: "", b: /\s/, e: /\s*/, skip: !0 }, { v: [{ b: r, e: a }, { b: t.b, e: t.e }], sL: "xml", c: [{ b: t.b, e: t.e, skip: !0, c: ["self"] }] }], relevance: 0 }, { cN: "function", bK: "function", e: /\{/, eE: !0, c: [e.inherit(e.TM, { b: c }), { cN: "params", b: /\(/, e: /\)/, eB: !0, eE: !0, c: u }], i: /\[|%/ }, { b: /\$[(.]/ }, e.METHOD_GUARD, { cN: "class", bK: "class", e: /[{;=]/, eE: !0, i: /[:"\[\]]/, c: [{ bK: "extends" }, e.UTM] }, { bK: "constructor get set", e: /\{/, eE: !0 }], i: /#(?!!)/ } }); hljs.registerLanguage("perl", function (e) { var t = "getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when", r = { cN: "subst", b: "[$@]\\{", e: "\\}", k: t }, s = { b: "->{", e: "}" }, n = { v: [{ b: /\$\d/ }, { b: /[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/ }, { b: /[\$%@][^\s\w{]/, relevance: 0 }] }, c = [e.BE, r, n], a = [n, e.HCM, e.C("^\\=\\w", "\\=cut", { eW: !0 }), s, { cN: "string", c: c, v: [{ b: "q[qwxr]?\\s*\\(", e: "\\)", relevance: 5 }, { b: "q[qwxr]?\\s*\\[", e: "\\]", relevance: 5 }, { b: "q[qwxr]?\\s*\\{", e: "\\}", relevance: 5 }, { b: "q[qwxr]?\\s*\\|", e: "\\|", relevance: 5 }, { b: "q[qwxr]?\\s*\\<", e: "\\>", relevance: 5 }, { b: "qw\\s+q", e: "q", relevance: 5 }, { b: "'", e: "'", c: [e.BE] }, { b: '"', e: '"' }, { b: "`", e: "`", c: [e.BE] }, { b: "{\\w+}", c: [], relevance: 0 }, { b: "-?\\w+\\s*\\=\\>", c: [], relevance: 0 }] }, { cN: "number", b: "(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b", relevance: 0 }, { b: "(\\/\\/|" + e.RSR + "|\\b(split|return|print|reverse|grep)\\b)\\s*", k: "split return print reverse grep", relevance: 0, c: [e.HCM, { cN: "regexp", b: "(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*", relevance: 10 }, { cN: "regexp", b: "(m|qr)?/", e: "/[a-z]*", c: [e.BE], relevance: 0 }] }, { cN: "function", bK: "sub", e: "(\\s*\\(.*?\\))?[;{]", eE: !0, relevance: 5, c: [e.TM] }, { b: "-\\w\\b", relevance: 0 }, { b: "^__DATA__$", e: "^__END__$", sL: "mojolicious", c: [{ b: "^@@.*", e: "$", cN: "comment" }] }]; return r.c = a, { aliases: ["pl", "pm"], l: /[\w\.]+/, k: t, c: s.c = a } }); hljs.registerLanguage("tex", function (e) { var c = { cN: "tag", b: /\\/, relevance: 0, c: [{ cN: "name", v: [{ b: /[a-zA-Z\u0430-\u044f\u0410-\u042f]+[*]?/ }, { b: /[^a-zA-Z\u0430-\u044f\u0410-\u042f0-9]/ }], starts: { eW: !0, relevance: 0, c: [{ cN: "string", v: [{ b: /\[/, e: /\]/ }, { b: /\{/, e: /\}/ }] }, { b: /\s*=\s*/, eW: !0, relevance: 0, c: [{ cN: "number", b: /-?\d*\.?\d+(pt|pc|mm|cm|in|dd|cc|ex|em)?/ }] }] } }] }; return { c: [c, { cN: "formula", c: [c], relevance: 0, v: [{ b: /\$\$/, e: /\$\$/ }, { b: /\$/, e: /\$/ }] }, e.C("%", "$", { relevance: 0 })] } }); hljs.registerLanguage("fortran", function (e) { return { cI: !0, aliases: ["f90", "f95"], k: { literal: ".False. .True.", keyword: "kind do while private call intrinsic where elsewhere type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then block endblock public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. goto save else use module select case access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit continue format pause cycle exit c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg synchronous nopass non_overridable pass protected volatile abstract extends import non_intrinsic value deferred generic final enumerator class associate bind enum c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated c_f_pointer c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure integer real character complex logical dimension allocatable|10 parameter external implicit|10 none double precision assign intent optional pointer target in out common equivalence data", built_in: "alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_ofacosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image" }, i: /\/\*/, c: [e.inherit(e.ASM, { cN: "string", relevance: 0 }), e.inherit(e.QSM, { cN: "string", relevance: 0 }), { cN: "function", bK: "subroutine function program", i: "[${=\\n]", c: [e.UTM, { cN: "params", b: "\\(", e: "\\)" }] }, e.C("!", "$", { relevance: 0 }), { cN: "number", b: "(?=\\b|\\+|\\-|\\.)(?=\\.\\d|\\d)(?:\\d+)?(?:\\.?\\d*)(?:[de][+-]?\\d+)?\\b\\.?", relevance: 0 }] } }); hljs.registerLanguage("protobuf", function (e) { return { k: { keyword: "package import option optional required repeated group oneof", built_in: "double float int32 int64 uint32 uint64 sint32 sint64 fixed32 fixed64 sfixed32 sfixed64 bool string bytes", literal: "true false" }, c: [e.QSM, e.NM, e.CLCM, { cN: "class", bK: "message enum service", e: /\{/, i: /\n/, c: [e.inherit(e.TM, { starts: { eW: !0, eE: !0 } })] }, { cN: "function", bK: "rpc", e: /;/, eE: !0, k: "rpc returns" }, { b: /^\s*[A-Z_]+/, e: /\s*=/, eE: !0 }] } }); hljs.registerLanguage("java", function (e) { var a = "false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do", t = { cN: "number", b: "\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?", relevance: 0 }; return { aliases: ["jsp"], k: a, i: /<\/|#/, c: [e.C("/\\*\\*", "\\*/", { relevance: 0, c: [{ b: /\w+@/, relevance: 0 }, { cN: "doctag", b: "@[A-Za-z]+" }] }), e.CLCM, e.CBCM, e.ASM, e.QSM, { cN: "class", bK: "class interface", e: /[{;=]/, eE: !0, k: "class interface", i: /[:"\[\]]/, c: [{ bK: "extends implements" }, e.UTM] }, { bK: "new throw return else", relevance: 0 }, { cN: "function", b: "([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\s+)+" + e.UIR + "\\s*\\(", rB: !0, e: /[{;=]/, eE: !0, k: a, c: [{ b: e.UIR + "\\s*\\(", rB: !0, relevance: 0, c: [e.UTM] }, { cN: "params", b: /\(/, e: /\)/, k: a, relevance: 0, c: [e.ASM, e.QSM, e.CNM, e.CBCM] }, e.CLCM, e.CBCM] }, t, { cN: "meta", b: "@[A-Za-z]+" }] } }); hljs.registerLanguage("properties", function (e) { var r = "[ \\t\\f]*", t = "(" + r + "[:=]" + r + "|[ \\t\\f]+)", n = "([^\\\\\\W:= \\t\\f\\n]|\\\\.)+", a = "([^\\\\:= \\t\\f\\n]|\\\\.)+", c = { e: t, relevance: 0, starts: { cN: "string", e: /$/, relevance: 0, c: [{ b: "\\\\\\n" }] } }; return { cI: !0, i: /\S/, c: [e.C("^\\s*[!#]", "$"), { b: n + t, rB: !0, c: [{ cN: "attr", b: n, endsParent: !0, relevance: 0 }], starts: c }, { b: a + t, rB: !0, relevance: 0, c: [{ cN: "meta", b: a, endsParent: !0, relevance: 0 }], starts: c }, { cN: "attr", relevance: 0, b: a + r + "$" }] } }); hljs.registerLanguage("php", function (e) { var c = { b: "\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*" }, i = { cN: "meta", b: /<\?(php)?|\?>/ }, t = { cN: "string", c: [e.BE, i], v: [{ b: 'b"', e: '"' }, { b: "b'", e: "'" }, e.inherit(e.ASM, { i: null }), e.inherit(e.QSM, { i: null })] }, a = { v: [e.BNM, e.CNM] }; return { aliases: ["php", "php3", "php4", "php5", "php6", "php7"], cI: !0, k: "and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally", c: [e.HCM, e.C("//", "$", { c: [i] }), e.C("/\\*", "\\*/", { c: [{ cN: "doctag", b: "@[A-Za-z]+" }] }), e.C("__halt_compiler.+?;", !1, { eW: !0, k: "__halt_compiler", l: e.UIR }), { cN: "string", b: /<<<['"]?\w+['"]?$/, e: /^\w+;?$/, c: [e.BE, { cN: "subst", v: [{ b: /\$\w+/ }, { b: /\{\$/, e: /\}/ }] }] }, i, { cN: "keyword", b: /\$this\b/ }, c, { b: /(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/ }, { cN: "function", bK: "function", e: /[;{]/, eE: !0, i: "\\$|\\[|%", c: [e.UTM, { cN: "params", b: "\\(", e: "\\)", c: ["self", c, e.CBCM, t, a] }] }, { cN: "class", bK: "class interface", e: "{", eE: !0, i: /[:\(\$"]/, c: [{ bK: "extends implements" }, e.UTM] }, { bK: "namespace", e: ";", i: /[\.']/, c: [e.UTM] }, { bK: "use", e: ";", c: [e.UTM] }, { b: "=>" }, t, a] } }); hljs.registerLanguage("nginx", function (e) { var r = { cN: "variable", v: [{ b: /\$\d+/ }, { b: /\$\{/, e: /}/ }, { b: "[\\$\\@]" + e.UIR }] }, b = { eW: !0, l: "[a-z/_]+", k: { literal: "on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll" }, relevance: 0, i: "=>", c: [e.HCM, { cN: "string", c: [e.BE, r], v: [{ b: /"/, e: /"/ }, { b: /'/, e: /'/ }] }, { b: "([a-z]+):/", e: "\\s", eW: !0, eE: !0, c: [r] }, { cN: "regexp", c: [e.BE, r], v: [{ b: "\\s\\^", e: "\\s|{|;", rE: !0 }, { b: "~\\*?\\s+", e: "\\s|{|;", rE: !0 }, { b: "\\*(\\.[a-z\\-]+)+" }, { b: "([a-z\\-]+\\.)+\\*" }] }, { cN: "number", b: "\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b" }, { cN: "number", b: "\\b\\d+[kKmMgGdshdwy]*\\b", relevance: 0 }, r] }; return { aliases: ["nginxconf"], c: [e.HCM, { b: e.UIR + "\\s+{", rB: !0, e: "{", c: [{ cN: "section", b: e.UIR }], relevance: 0 }, { b: e.UIR + "\\s", e: ";|{", rB: !0, c: [{ cN: "attribute", b: e.UIR, starts: b }], relevance: 0 }], i: "[^\\s\\}]" } }); hljs.registerLanguage("makefile", function (e) { var i = { cN: "variable", v: [{ b: "\\$\\(" + e.UIR + "\\)", c: [e.BE] }, { b: /\$[@%/, e: /$/, i: "\\n" }, e.CLCM, e.CBCM] }, { cN: "class", b: "(" + i.split(" ").join("|") + ")\\b", e: "({|$)", eE: !0, k: i, l: t, c: [e.UTM] }, { b: "\\." + e.UIR, relevance: 0 }] } }); hljs.registerLanguage("typescript", function (e) { var r = "[A-Za-z$_][0-9A-Za-z$_]*", t = { keyword: "in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class public private protected get set super static implements enum export import declare type namespace abstract as from extends async await", literal: "true false null undefined NaN Infinity", built_in: "eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document any number boolean string void Promise" }, n = { cN: "meta", b: "@" + r }, a = { b: "\\(", e: /\)/, k: t, c: ["self", e.QSM, e.ASM, e.NM] }, c = { cN: "params", b: /\(/, e: /\)/, eB: !0, eE: !0, k: t, c: [e.CLCM, e.CBCM, n, a] }, s = { cN: "number", v: [{ b: "\\b(0[bB][01]+)n?" }, { b: "\\b(0[oO][0-7]+)n?" }, { b: e.CNR + "n?" }], relevance: 0 }, o = { cN: "subst", b: "\\$\\{", e: "\\}", k: t, c: [] }, i = { b: "html`", e: "", starts: { e: "`", rE: !1, c: [e.BE, o], sL: "xml" } }, l = { b: "css`", e: "", starts: { e: "`", rE: !1, c: [e.BE, o], sL: "css" } }, b = { cN: "string", b: "`", e: "`", c: [e.BE, o] }; return o.c = [e.ASM, e.QSM, i, l, b, s, e.RM], { aliases: ["ts"], k: t, c: [{ cN: "meta", b: /^\s*['"]use strict['"]/ }, e.ASM, e.QSM, i, l, b, e.CLCM, e.CBCM, s, { b: "(" + e.RSR + "|\\b(case|return|throw)\\b)\\s*", k: "return throw case", c: [e.CLCM, e.CBCM, e.RM, { cN: "function", b: "(\\(.*?\\)|" + e.IR + ")\\s*=>", rB: !0, e: "\\s*=>", c: [{ cN: "params", v: [{ b: e.IR }, { b: /\(\s*\)/ }, { b: /\(/, e: /\)/, eB: !0, eE: !0, k: t, c: ["self", e.CLCM, e.CBCM] }] }] }], relevance: 0 }, { cN: "function", bK: "function", e: /[\{;]/, eE: !0, k: t, c: ["self", e.inherit(e.TM, { b: r }), c], i: /%/, relevance: 0 }, { bK: "constructor", e: /[\{;]/, eE: !0, c: ["self", c] }, { b: /module\./, k: { built_in: "module" }, relevance: 0 }, { bK: "module", e: /\{/, eE: !0 }, { bK: "interface", e: /\{/, eE: !0, k: "interface extends" }, { b: /\$[(.]/ }, { b: "\\." + e.IR, relevance: 0 }, n, a] } }); hljs.registerLanguage("elm", function (e) { var i = { v: [e.C("--", "$"), e.C("{-", "-}", { c: ["self"] })] }, t = { cN: "type", b: "\\b[A-Z][\\w']*", relevance: 0 }, c = { b: "\\(", e: "\\)", i: '"', c: [{ cN: "type", b: "\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?" }, i] }; return { k: "let in if then else case of where module import exposing type alias as infix infixl infixr port effect command subscription", c: [{ bK: "port effect module", e: "exposing", k: "port effect module where command subscription exposing", c: [c, i], i: "\\W\\.|;" }, { b: "import", e: "$", k: "import as exposing", c: [c, i], i: "\\W\\.|;" }, { b: "type", e: "$", k: "type alias", c: [t, c, { b: "{", e: "}", c: c.c }, i] }, { bK: "infix infixl infixr", e: "$", c: [e.CNM, i] }, { b: "port", e: "$", k: "port", c: [i] }, { cN: "string", b: "'\\\\?.", e: "'", i: "." }, e.QSM, e.CNM, t, e.inherit(e.TM, { b: "^[_a-z][\\w']*" }), i, { b: "->|<-" }], i: /;/ } }); hljs.registerLanguage("http", function (e) { var t = "HTTP/[0-9\\.]+"; return { aliases: ["https"], i: "\\S", c: [{ b: "^" + t, e: "$", c: [{ cN: "number", b: "\\b\\d{3}\\b" }] }, { b: "^[A-Z]+ (.*?) " + t + "$", rB: !0, e: "$", c: [{ cN: "string", b: " ", e: " ", eB: !0, eE: !0 }, { b: t }, { cN: "keyword", b: "[A-Z]+" }] }, { cN: "attribute", b: "^\\w", e: ": ", eE: !0, i: "\\n|\\s|=", starts: { e: "$", relevance: 0 } }, { b: "\\n\\n", starts: { sL: [], eW: !0 } }] } }); hljs.registerLanguage("diff", function (e) { return { aliases: ["patch"], c: [{ cN: "meta", relevance: 10, v: [{ b: /^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/ }, { b: /^\*\*\* +\d+,\d+ +\*\*\*\*$/ }, { b: /^\-\-\- +\d+,\d+ +\-\-\-\-$/ }] }, { cN: "comment", v: [{ b: /Index: /, e: /$/ }, { b: /={3,}/, e: /$/ }, { b: /^\-{3}/, e: /$/ }, { b: /^\*{3} /, e: /$/ }, { b: /^\+{3}/, e: /$/ }, { b: /^\*{15}$/ }] }, { cN: "addition", b: "^\\+", e: "$" }, { cN: "deletion", b: "^\\-", e: "$" }, { cN: "addition", b: "^\\!", e: "$" }] } }); hljs.registerLanguage("lisp", function (e) { var b = "[a-zA-Z_\\-\\+\\*\\/\\<\\=\\>\\&\\#][a-zA-Z0-9_\\-\\+\\*\\/\\<\\=\\>\\&\\#!]*", c = "\\|[^]*?\\|", a = "(\\-|\\+)?\\d+(\\.\\d+|\\/\\d+)?((d|e|f|l|s|D|E|F|L|S)(\\+|\\-)?\\d+)?", l = { cN: "literal", b: "\\b(t{1}|nil)\\b" }, n = { cN: "number", v: [{ b: a, relevance: 0 }, { b: "#(b|B)[0-1]+(/[0-1]+)?" }, { b: "#(o|O)[0-7]+(/[0-7]+)?" }, { b: "#(x|X)[0-9a-fA-F]+(/[0-9a-fA-F]+)?" }, { b: "#(c|C)\\(" + a + " +" + a, e: "\\)" }] }, r = e.inherit(e.QSM, { i: null }), i = e.C(";", "$", { relevance: 0 }), t = { b: "\\*", e: "\\*" }, v = { cN: "symbol", b: "[:&]" + b }, s = { b: b, relevance: 0 }, u = { b: c }, d = { c: [n, r, t, v, { b: "\\(", e: "\\)", c: ["self", l, r, n, s] }, s], v: [{ b: "['`]\\(", e: "\\)" }, { b: "\\(quote ", e: "\\)", k: { name: "quote" } }, { b: "'" + c }] }, f = { v: [{ b: "'" + b }, { b: "#'" + b + "(::" + b + ")*" }] }, m = { b: "\\(\\s*", e: "\\)" }, o = { eW: !0, relevance: 0 }; return m.c = [{ cN: "name", v: [{ b: b }, { b: c }] }, o], o.c = [d, f, m, l, n, r, i, t, v, u, s], { i: /\S/, c: [n, { cN: "meta", b: "^#!", e: "$" }, l, r, i, d, f, m, s] } }); hljs.registerLanguage("kotlin", function (e) { var t = { keyword: "abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual trait volatile transient native default", built_in: "Byte Short Char Int Long Boolean Float Double Void Unit Nothing", literal: "true false null" }, a = { cN: "symbol", b: e.UIR + "@" }, n = { cN: "subst", b: "\\${", e: "}", c: [e.CNM] }, c = { cN: "variable", b: "\\$" + e.UIR }, r = { cN: "string", v: [{ b: '"""', e: '"""(?=[^"])', c: [c, n] }, { b: "'", e: "'", i: /\n/, c: [e.BE] }, { b: '"', e: '"', i: /\n/, c: [e.BE, c, n] }] }; n.c.push(r); var i = { cN: "meta", b: "@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*" + e.UIR + ")?" }, l = { cN: "meta", b: "@" + e.UIR, c: [{ b: /\(/, e: /\)/, c: [e.inherit(r, { cN: "meta-string" })] }] }, s = { cN: "number", b: "\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?", relevance: 0 }, b = e.C("/\\*", "\\*/", { c: [e.CBCM] }), o = { v: [{ cN: "type", b: e.UIR }, { b: /\(/, e: /\)/, c: [] }] }, d = o; return d.v[1].c = [o], o.v[1].c = [d], { aliases: ["kt"], k: t, c: [e.C("/\\*\\*", "\\*/", { relevance: 0, c: [{ cN: "doctag", b: "@[A-Za-z]+" }] }), e.CLCM, b, { cN: "keyword", b: /\b(break|continue|return|this)\b/, starts: { c: [{ cN: "symbol", b: /@\w+/ }] } }, a, i, l, { cN: "function", bK: "fun", e: "[(]|$", rB: !0, eE: !0, k: t, i: /fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/, relevance: 5, c: [{ b: e.UIR + "\\s*\\(", rB: !0, relevance: 0, c: [e.UTM] }, { cN: "type", b: //, k: "reified", relevance: 0 }, { cN: "params", b: /\(/, e: /\)/, endsParent: !0, k: t, relevance: 0, c: [{ b: /:/, e: /[=,\/]/, eW: !0, c: [o, e.CLCM, b], relevance: 0 }, e.CLCM, b, i, l, r, e.CNM] }, b] }, { cN: "class", bK: "class interface trait", e: /[:\{(]|$/, eE: !0, i: "extends implements", c: [{ bK: "public protected internal private constructor" }, e.UTM, { cN: "type", b: //, eB: !0, eE: !0, relevance: 0 }, { cN: "type", b: /[,:]\s*/, e: /[<\(,]|$/, eB: !0, rE: !0 }, i, l] }, r, { cN: "meta", b: "^#!/usr/bin/env", e: "$", i: "\n" }, s] } }); hljs.registerLanguage("dart", function (e) { var t = { cN: "subst", v: [{ b: "\\$[A-Za-z0-9_]+" }] }, r = { cN: "subst", v: [{ b: "\\${", e: "}" }], k: "true false null this is new super" }, n = { cN: "string", v: [{ b: "r'''", e: "'''" }, { b: 'r"""', e: '"""' }, { b: "r'", e: "'", i: "\\n" }, { b: 'r"', e: '"', i: "\\n" }, { b: "'''", e: "'''", c: [e.BE, t, r] }, { b: '"""', e: '"""', c: [e.BE, t, r] }, { b: "'", e: "'", i: "\\n", c: [e.BE, t, r] }, { b: '"', e: '"', i: "\\n", c: [e.BE, t, r] }] }; r.c = [e.CNM, n]; return { k: { keyword: "abstract as assert async await break case catch class const continue covariant default deferred do dynamic else enum export extends extension external factory false final finally for Function get hide if implements import in inferface is library mixin new null on operator part rethrow return set show static super switch sync this throw true try typedef var void while with yield", built_in: "Comparable DateTime Duration Function Iterable Iterator List Map Match Null Object Pattern RegExp Set Stopwatch String StringBuffer StringSink Symbol Type Uri bool double dynamic int num print Element ElementList document querySelector querySelectorAll window" }, c: [n, e.C("/\\*\\*", "\\*/", { sL: "markdown" }), e.C("///+\\s*", "$", { c: [{ sL: "markdown", b: ".", e: "$" }] }), e.CLCM, e.CBCM, { cN: "class", bK: "class interface", e: "{", eE: !0, c: [{ bK: "extends implements" }, e.UTM] }, e.CNM, { cN: "meta", b: "@[A-Za-z]+" }, { b: "=>" }] } }); hljs.registerLanguage("applescript", function (e) { var t = e.inherit(e.QSM, { i: "" }), r = { cN: "params", b: "\\(", e: "\\)", c: ["self", e.CNM, t] }, i = e.C("--", "$"), o = [i, e.C("\\(\\*", "\\*\\)", { c: ["self", i] }), e.HCM]; return { aliases: ["osascript"], k: { keyword: "about above after against and around as at back before beginning behind below beneath beside between but by considering contain contains continue copy div does eighth else end equal equals error every exit fifth first for fourth from front get given global if ignoring in into is it its last local me middle mod my ninth not of on onto or over prop property put ref reference repeat returning script second set seventh since sixth some tell tenth that the|0 then third through thru timeout times to transaction try until where while whose with without", literal: "AppleScript false linefeed return pi quote result space tab true", built_in: "alias application boolean class constant date file integer list number real record string text activate beep count delay launch log offset read round run say summarize write character characters contents day frontmost id item length month name paragraph paragraphs rest reverse running time version weekday word words year" }, c: [t, e.CNM, { cN: "built_in", b: "\\b(clipboard info|the clipboard|info for|list (disks|folder)|mount volume|path to|(close|open for) access|(get|set) eof|current date|do shell script|get volume settings|random number|set volume|system attribute|system info|time to GMT|(load|run|store) script|scripting components|ASCII (character|number)|localized string|choose (application|color|file|file name|folder|from list|remote application|URL)|display (alert|dialog))\\b|^\\s*return\\b" }, { cN: "literal", b: "\\b(text item delimiters|current application|missing value)\\b" }, { cN: "keyword", b: "\\b(apart from|aside from|instead of|out of|greater than|isn't|(doesn't|does not) (equal|come before|come after|contain)|(greater|less) than( or equal)?|(starts?|ends|begins?) with|contained by|comes (before|after)|a (ref|reference)|POSIX file|POSIX path|(date|time) string|quoted form)\\b" }, { bK: "on", i: "[${=;\\n]", c: [e.UTM, r] }].concat(o), i: "//|->|=>|\\[\\[" } }); hljs.registerLanguage("autohotkey", function (e) { var a = { b: "`[\\s\\S]" }; return { cI: !0, aliases: ["ahk"], k: { keyword: "Break Continue Critical Exit ExitApp Gosub Goto New OnExit Pause return SetBatchLines SetTimer Suspend Thread Throw Until ahk_id ahk_class ahk_pid ahk_exe ahk_group", literal: "true false NOT AND OR", built_in: "ComSpec Clipboard ClipboardAll ErrorLevel" }, c: [a, e.inherit(e.QSM, { c: [a] }), e.C(";", "$", { relevance: 0 }), e.CBCM, { cN: "number", b: e.NR, relevance: 0 }, { cN: "variable", b: "%[a-zA-Z0-9#_$@]+%" }, { cN: "built_in", b: "^\\s*\\w+\\s*(,|%)" }, { cN: "title", v: [{ b: '^[^\\n";]+::(?!=)' }, { b: '^[^\\n";]+:(?!=)', relevance: 0 }] }, { cN: "meta", b: "^\\s*#\\w+", e: "$", relevance: 0 }, { cN: "built_in", b: "A_[a-zA-Z0-9]+" }, { b: ",\\s*," }] } }); hljs.registerLanguage("rust", function (e) { var t = "([ui](8|16|32|64|128|size)|f(32|64))?", r = "drop i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize f32 f64 str char bool Box Option Result String Vec Copy Send Sized Sync Drop Fn FnMut FnOnce ToOwned Clone Debug PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator SliceConcatExt ToString assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!"; return { aliases: ["rs"], k: { keyword: "abstract as async await become box break const continue crate do dyn else enum extern false final fn for if impl in let loop macro match mod move mut override priv pub ref return self Self static struct super trait true try type typeof unsafe unsized use virtual where while yield", literal: "true false Some None Ok Err", built_in: r }, l: e.IR + "!?", i: "" }] } }); hljs.registerLanguage("scss", function (e) { var t = "@[a-z-]+", r = { cN: "variable", b: "(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b" }, i = { cN: "number", b: "#[0-9A-Fa-f]+" }; e.CSSNM, e.QSM, e.ASM, e.CBCM; return { cI: !0, i: "[=/|']", c: [e.CLCM, e.CBCM, { cN: "selector-id", b: "\\#[A-Za-z0-9_-]+", relevance: 0 }, { cN: "selector-class", b: "\\.[A-Za-z0-9_-]+", relevance: 0 }, { cN: "selector-attr", b: "\\[", e: "\\]", i: "$" }, { cN: "selector-tag", b: "\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|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|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b", relevance: 0 }, { cN: "selector-pseudo", b: ":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)" }, { cN: "selector-pseudo", b: "::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)" }, r, { cN: "attribute", b: "\\b(src|z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b", i: "[^\\s]" }, { b: "\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b" }, { b: ":", e: ";", c: [r, i, e.CSSNM, e.QSM, e.ASM, { cN: "meta", b: "!important" }] }, { b: "@(page|font-face)", l: t, k: "@page @font-face" }, { b: "@", e: "[{;]", rB: !0, k: "and or not only", c: [{ b: t, cN: "keyword" }, r, e.QSM, e.ASM, i, e.CSSNM] }] } }); hljs.registerLanguage("dockerfile", function (e) { return { aliases: ["docker"], cI: !0, k: "from maintainer expose env arg user onbuild stopsignal", c: [e.HCM, e.ASM, e.QSM, e.NM, { bK: "run cmd entrypoint volume add copy workdir label healthcheck shell", starts: { e: /[^\\]$/, sL: "bash" } }], i: "" }, { cN: "attribute", b: /\w+/, relevance: 0, k: { nomarkup: "order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername" }, starts: { e: /$/, relevance: 0, k: { literal: "on off all" }, c: [{ cN: "meta", b: "\\s\\[", e: "\\]$" }, { cN: "variable", b: "[\\$%]\\{", e: "\\}", c: ["self", r] }, r, e.QSM] } }], i: /\S/ } }); hljs.registerLanguage("prolog", function (e) { var c = { b: /\(/, e: /\)/, relevance: 0 }, b = { b: /\[/, e: /\]/ }, n = { cN: "comment", b: /%/, e: /$/, c: [e.PWM] }, r = { cN: "string", b: /`/, e: /`/, c: [e.BE] }, a = [{ b: /[a-z][A-Za-z0-9_]*/, relevance: 0 }, { cN: "symbol", v: [{ b: /[A-Z][a-zA-Z0-9_]*/ }, { b: /_[A-Za-z0-9_]*/ }], relevance: 0 }, c, { b: /:-/ }, b, n, e.CBCM, e.QSM, e.ASM, r, { cN: "string", b: /0\'(\\\'|.)/ }, { cN: "string", b: /0\'\\s/ }, e.CNM]; return c.c = a, { c: (b.c = a).concat([{ b: /\.$/ }]) } }); hljs.registerLanguage("matlab", function (e) { var a = "('|\\.')+", s = { relevance: 0, c: [{ b: a }] }; return { k: { keyword: "break case catch classdef continue else elseif end enumerated events for function global if methods otherwise parfor persistent properties return spmd switch try while", built_in: "sin sind sinh asin asind asinh cos cosd cosh acos acosd acosh tan tand tanh atan atand atan2 atanh sec secd sech asec asecd asech csc cscd csch acsc acscd acsch cot cotd coth acot acotd acoth hypot exp expm1 log log1p log10 log2 pow2 realpow reallog realsqrt sqrt nthroot nextpow2 abs angle complex conj imag real unwrap isreal cplxpair fix floor ceil round mod rem sign airy besselj bessely besselh besseli besselk beta betainc betaln ellipj ellipke erf erfc erfcx erfinv expint gamma gammainc gammaln psi legendre cross dot factor isprime primes gcd lcm rat rats perms nchoosek factorial cart2sph cart2pol pol2cart sph2cart hsv2rgb rgb2hsv zeros ones eye repmat rand randn linspace logspace freqspace meshgrid accumarray size length ndims numel disp isempty isequal isequalwithequalnans cat reshape diag blkdiag tril triu fliplr flipud flipdim rot90 find sub2ind ind2sub bsxfun ndgrid permute ipermute shiftdim circshift squeeze isscalar isvector ans eps realmax realmin pi i inf nan isnan isinf isfinite j why compan gallery hadamard hankel hilb invhilb magic pascal rosser toeplitz vander wilkinson max min nanmax nanmin mean nanmean type table readtable writetable sortrows sort figure plot plot3 scatter scatter3 cellfun legend intersect ismember procrustes hold num2cell " }, i: '(//|"|#|/\\*|\\s+/\\w+)', c: [{ cN: "function", bK: "function", e: "$", c: [e.UTM, { cN: "params", v: [{ b: "\\(", e: "\\)" }, { b: "\\[", e: "\\]" }] }] }, { cN: "built_in", b: /true|false/, relevance: 0, starts: s }, { b: "[a-zA-Z][a-zA-Z_0-9]*" + a, relevance: 0 }, { cN: "number", b: e.CNR, relevance: 0, starts: s }, { cN: "string", b: "'", e: "'", c: [e.BE, { b: "''" }] }, { b: /\]|}|\)/, relevance: 0, starts: s }, { cN: "string", b: '"', e: '"', c: [e.BE, { b: '""' }], starts: s }, e.C("^\\s*\\%\\{\\s*$", "^\\s*\\%\\}\\s*$"), e.C("\\%", "$")] } }); hljs.registerLanguage("tcl", function (e) { return { aliases: ["tk"], k: "after append apply array auto_execok auto_import auto_load auto_mkindex auto_mkindex_old auto_qualify auto_reset bgerror binary break catch cd chan clock close concat continue dde dict encoding eof error eval exec exit expr fblocked fconfigure fcopy file fileevent filename flush for foreach format gets glob global history http if incr info interp join lappend|10 lassign|10 lindex|10 linsert|10 list llength|10 load lrange|10 lrepeat|10 lreplace|10 lreverse|10 lsearch|10 lset|10 lsort|10 mathfunc mathop memory msgcat namespace open package parray pid pkg::create pkg_mkIndex platform platform::shell proc puts pwd read refchan regexp registry regsub|10 rename return safe scan seek set socket source split string subst switch tcl_endOfWord tcl_findLibrary tcl_startOfNextWord tcl_startOfPreviousWord tcl_wordBreakAfter tcl_wordBreakBefore tcltest tclvars tell time tm trace unknown unload unset update uplevel upvar variable vwait while", c: [e.C(";[ \\t]*#", "$"), e.C("^[ \\t]*#", "$"), { bK: "proc", e: "[\\{]", eE: !0, c: [{ cN: "title", b: "[ \\t\\n\\r]+(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*", e: "[ \\t\\n\\r]", eW: !0, eE: !0 }] }, { eE: !0, v: [{ b: "\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*\\(([a-zA-Z0-9_])*\\)", e: "[^a-zA-Z0-9_\\}\\$]" }, { b: "\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*", e: "(\\))?[^a-zA-Z0-9_\\}\\$]" }] }, { cN: "string", c: [e.BE], v: [e.inherit(e.QSM, { i: null })] }, { cN: "number", v: [e.BNM, e.CNM] }] } }); hljs.registerLanguage("go", function (e) { var n = { keyword: "break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune", literal: "true false iota nil", built_in: "append cap close complex copy imag len make new panic print println real recover delete" }; return { aliases: ["golang"], k: n, i: "]([0-9]?[+-])?[ ]*\\n( *)[\\S ]+\\n(\\2[\\S ]+\\n?)*" }, { b: "<%[%=-]?", e: "[%-]?%>", sL: "ruby", eB: !0, eE: !0, relevance: 0 }, { cN: "type", b: "!" + e.UIR }, { cN: "type", b: "!!" + e.UIR }, { cN: "meta", b: "&" + e.UIR + "$" }, { cN: "meta", b: "\\*" + e.UIR + "$" }, { cN: "bullet", b: "\\-(?=[ ]|$)", relevance: 0 }, e.HCM, { bK: b, k: { literal: b } }, { cN: "number", b: e.CNR + "\\b" }, a] } }); +// @license-end \ No newline at end of file From 2b21a5bb812275b718c88057dce9d3a10f2bd07e Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Thu, 12 Mar 2020 17:11:05 -0700 Subject: [PATCH 213/345] Mobile: Change initial scale for better fit --- templates/base.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/base.html b/templates/base.html index 86c5a29..f90c0b0 100644 --- a/templates/base.html +++ b/templates/base.html @@ -4,7 +4,7 @@ {% block title %}{{ sitename }}{% endblock %} - + From 2e0319b602f94b33a6acdef9261eb32f26c8a624 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Thu, 12 Mar 2020 17:14:50 -0700 Subject: [PATCH 214/345] Fix project name in footer --- templates/base.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/base.html b/templates/base.html index f90c0b0..7e4f82d 100644 --- a/templates/base.html +++ b/templates/base.html @@ -31,7 +31,7 @@ {% block content %}{% endblock %}
    From 3167ab7ff08aa09b32d4aed892c7601a038f946f Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Thu, 12 Mar 2020 18:34:08 -0700 Subject: [PATCH 215/345] README: Update screenshots --- README.md | 117 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 76 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index 98bf585..ff22db3 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -linx-server +linx-server ====== [![Build Status](https://travis-ci.org/andreimarcu/linx-server.svg?branch=master)](https://travis-ci.org/andreimarcu/linx-server) @@ -19,14 +19,45 @@ You can see what it looks like using the demo: [https://demo.linx-server.net/](h ### Screenshots - + + + -Get release and run +Getting started ------------------- + +#### Using Docker +Example running +``` +docker run -p 8080:8080 -v /path/to/meta:/data/meta -v /path/to/files:/data/files andreimarcu/linx-server +``` + +Example with docker-compose +``` +version: '2.2' +services: + linx-server: + container_name: linx-server + image: andreimarcu/linx-server + entrypoint: /usr/local/bin/linx-server -bind=0.0.0.0:8080 -filespath=/data/files/ -metapath=/data/meta/ + command: -sitename=Linx -siteurl=https://linx.example.com + volumes: + - /path/to/files:/data/files + - /path/to/meta:/data/meta + network_mode: bridge + ports: + - "8080:8080" + restart: unless-stopped +``` +Ideally, you would use a reverse proxy such as nginx or caddy to handle TLS certificates. + +#### Using a binary release + 1. Grab the latest binary from the [releases](https://github.com/andreimarcu/linx-server/releases) 2. Run ```./linx-server``` + Usage ----- @@ -38,30 +69,36 @@ maxsize = 4294967296 allowhotlink = true # etc ``` -...and then invoke ```linx-server -config path/to/config.ini``` +...and then invoke ```linx-server -config path/to/config.ini``` #### Options -- ```-bind 127.0.0.1:8080``` -- what to bind to (default is 127.0.0.1:8080) -- ```-sitename myLinx``` -- the site name displayed on top (default is inferred from Host header) -- ```-siteurl "https://mylinx.example.org/"``` -- the site url (default is inferred from execution context) -- ```-selifpath "selif"``` -- path relative to site base url (the "selif" in mylinx.example.org/selif/image.jpg) where files are accessed directly (default: selif) -- ```-maxsize 4294967296``` -- maximum upload file size in bytes (default 4GB) -- ```-maxexpiry 86400``` -- maximum expiration time in seconds (default is 0, which is no expiry) -- ```-allowhotlink``` -- Allow file hotlinking -- ```-contentsecuritypolicy "..."``` -- Content-Security-Policy header for pages (default is "default-src 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; frame-ancestors 'self';") -- ```-filecontentsecuritypolicy "..."``` -- Content-Security-Policy header for files (default is "default-src 'none'; img-src 'self'; object-src 'self'; media-src 'self'; style-src 'self' 'unsafe-inline'; frame-ancestors 'self';") -- ```-refererpolicy "..."``` -- Referrer-Policy header for pages (default is "same-origin") -- ```-filereferrerpolicy "..."``` -- Referrer-Policy header for files (default is "same-origin") -- ```-xframeoptions "..." ``` -- X-Frame-Options header (default is "SAMEORIGIN") -- ```-remoteuploads``` -- (optionally) enable remote uploads (/upload?url=https://...) -- ```-nologs``` -- (optionally) disable request logs in stdout -- ```-force-random-filename``` -- (optionally) force the use of random filenames -- ```-custompagespath "custom_pages"``` -- (optionally) specify path to directory containing markdown pages (must end in .md) that will be added to the site navigation (this can be useful for providing contact/support information and so on). For example, custom_pages/My_Page.md will become My Page in the site navigation + +|Option|Description +|------|----------- +| ```-bind 127.0.0.1:8080``` | what to bind to (default is 127.0.0.1:8080) +| ```-sitename myLinx``` | the site name displayed on top (default is inferred from Host header) +| ```-siteurl "https://mylinx.example.org/"``` | the site url (default is inferred from execution context) +| ```-selifpath "selif"``` | path relative to site base url (the "selif" in mylinx.example.org/selif/image.jpg) where files are accessed directly (default: selif) +| ```-maxsize 4294967296``` | maximum upload file size in bytes (default 4GB) +| ```-maxexpiry 86400``` | maximum expiration time in seconds (default is 0, which is no expiry) +| ```-allowhotlink``` | Allow file hotlinking +| ```-contentsecuritypolicy "..."``` | Content-Security-Policy header for pages (default is "default-src 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; frame-ancestors 'self';") +| ```-filecontentsecuritypolicy "..."``` | Content-Security-Policy header for files (default is "default-src 'none'; img-src 'self'; object-src 'self'; media-src 'self'; style-src 'self' 'unsafe-inline'; frame-ancestors 'self';") +| ```-refererpolicy "..."``` | Referrer-Policy header for pages (default is "same-origin") +| ```-filereferrerpolicy "..."``` | Referrer-Policy header for files (default is "same-origin") +| ```-xframeoptions "..." ``` | X-Frame-Options header (default is "SAMEORIGIN") +| ```-remoteuploads``` | (optionally) enable remote uploads (/upload?url=https://...) +| ```-nologs``` | (optionally) disable request logs in stdout +| ```-force-random-filename``` | (optionally) force the use of random filenames +| ```-custompagespath "custom_pages"``` | (optionally) specify path to directory containing markdown pages (must end in .md) that will be added to the site navigation (this can be useful for providing contact/support information and so on). For example, custom_pages/My_Page.md will become My Page in the site navigation #### Require API Keys for uploads -- ```-authfile path/to/authfile``` -- (optionally) require authorization for upload/delete by providing a newline-separated file of scrypted auth keys -- ```-remoteauthfile path/to/remoteauthfile``` -- (optionally) require authorization for remote uploads by providing a newline-separated file of scrypted auth keys -- ```-basicauth``` -- (optionally) allow basic authorization to upload or paste files from browser when `-authfile` is enabled. When uploading, you will be prompted to enter a user and password - leave the user blank and use your auth key as the password + +|Option|Description +|------|----------- +| ```-authfile path/to/authfile``` | (optionally) require authorization for upload/delete by providing a newline-separated file of scrypted auth keys +| ```-remoteauthfile path/to/remoteauthfile``` | (optionally) require authorization for remote uploads by providing a newline-separated file of scrypted auth keys +| ```-basicauth``` | (optionally) allow basic authorization to upload or paste files from browser when `-authfile` is enabled. When uploading, you will be prompted to enter a user and password - leave the user blank and use your auth key as the password A helper utility ```linx-genkey``` is provided which hashes keys to the format required in the auth files. @@ -75,14 +112,20 @@ The following storage backends are available: #### SSL with built-in server -- ```-certfile path/to/your.crt``` -- Path to the ssl certificate (required if you want to use the https server) -- ```-keyfile path/to/your.key``` -- Path to the ssl key (required if you want to use the https server) +|Option|Description +|------|----------- +| ```-certfile path/to/your.crt``` | Path to the ssl certificate (required if you want to use the https server) +| ```-keyfile path/to/your.key``` | Path to the ssl key (required if you want to use the https server) #### Use with http proxy -- ```-realip``` -- let linx-server know you (nginx, etc) are providing the X-Real-IP and/or X-Forwarded-For headers. +|Option|Description +|------|----------- +| ```-realip``` | let linx-server know you (nginx, etc) are providing the X-Real-IP and/or X-Forwarded-For headers. #### Use with fastcgi -- ```-fastcgi``` -- serve through fastcgi +|Option|Description +|------|----------- +| ```-fastcgi``` | serve through fastcgi Cleaning up expired files @@ -96,10 +139,12 @@ of scheduled task. You should be careful to ensure that only one instance of `linx-client` runs at a time to avoid unexpected behavior. It does not implement any type of locking. -#### Options -- ```-filespath files/``` -- Path to stored uploads (default is files/) -- ```-metapath meta/``` -- Path to stored information about uploads (default is meta/) -- ```-nologs``` -- (optionally) disable deletion logs in stdout + +|Option|Description +|------|----------- +| ```-filespath files/``` | Path to stored uploads (default is files/) +| ```-nologs``` | (optionally) disable deletion logs in stdout +| ```-metapath meta/``` | Path to stored information about uploads (default is meta/) Deployment @@ -133,16 +178,6 @@ Run linx-server with the ```-certfile path/to/cert.file``` and ```-keyfile path/ #### 3. Using the built-in http server Run linx-server normally. -#### 4. Using Docker with the built-in http server -First, build the image: -```docker build -t linx-server .``` - -You'll need some directories for the persistent storage. For the purposes of this example, we will use `/media/meta` and `/media/files`. - -Then, run it: -```docker run -p 8080:8080 -v /media/meta:/data/meta -v /media/files:/data/files linx-server``` - - Development ----------- Any help is welcome, PRs will be reviewed and merged accordingly. From 9f7e6b6eea01ef3fa19cbcfdfb952021ca6aee53 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Wed, 18 Mar 2020 17:26:43 -0700 Subject: [PATCH 216/345] Torrent: Ranged requests so torrents work --- backends/localfs/localfs.go | 13 +++++++++++++ backends/s3/s3.go | 38 +++++++++++++++++++++++++++++++++++++ backends/storage.go | 2 ++ fileserve.go | 11 +++-------- 4 files changed, 56 insertions(+), 8 deletions(-) diff --git a/backends/localfs/localfs.go b/backends/localfs/localfs.go index 42e32b8..aaf487f 100644 --- a/backends/localfs/localfs.go +++ b/backends/localfs/localfs.go @@ -4,6 +4,7 @@ import ( "encoding/json" "io" "io/ioutil" + "net/http" "os" "path" "time" @@ -82,6 +83,18 @@ func (b LocalfsBackend) Get(key string) (metadata backends.Metadata, f io.ReadCl return } +func (b LocalfsBackend) ServeFile(key string, w http.ResponseWriter, r *http.Request) (err error) { + _, err = b.Head(key) + if err != nil { + return + } + + filePath := path.Join(b.filesPath, key) + http.ServeFile(w, r, filePath) + + return +} + func (b LocalfsBackend) writeMetadata(key string, metadata backends.Metadata) error { metaPath := path.Join(b.metaPath, key) diff --git a/backends/s3/s3.go b/backends/s3/s3.go index bfc6e1c..a558779 100644 --- a/backends/s3/s3.go +++ b/backends/s3/s3.go @@ -3,6 +3,7 @@ package s3 import ( "io" "io/ioutil" + "net/http" "os" "strconv" "time" @@ -79,6 +80,43 @@ func (b S3Backend) Get(key string) (metadata backends.Metadata, r io.ReadCloser, return } +func (b S3Backend) ServeFile(key string, w http.ResponseWriter, r *http.Request) (err error) { + var result *s3.GetObjectOutput + + if r.Header.Get("Range") != "" { + result, err = b.svc.GetObject(&s3.GetObjectInput{ + Bucket: aws.String(b.bucket), + Key: aws.String(key), + Range: aws.String(r.Header.Get("Range")), + }) + + w.WriteHeader(206) + w.Header().Set("Content-Range", *result.ContentRange) + w.Header().Set("Content-Length", strconv.FormatInt(*result.ContentLength, 10)) + w.Header().Set("Accept-Ranges", "bytes") + + } else { + result, err = b.svc.GetObject(&s3.GetObjectInput{ + Bucket: aws.String(b.bucket), + Key: aws.String(key), + }) + + } + + if err != nil { + if aerr, ok := err.(awserr.Error); ok { + if aerr.Code() == s3.ErrCodeNoSuchKey || aerr.Code() == "NotFound" { + err = backends.NotFoundErr + } + } + return + } + + _, err = io.Copy(w, result.Body) + + return +} + func mapMetadata(m backends.Metadata) map[string]*string { return map[string]*string{ "Expiry": aws.String(strconv.FormatInt(m.Expiry.Unix(), 10)), diff --git a/backends/storage.go b/backends/storage.go index 5d973c4..864d0a1 100644 --- a/backends/storage.go +++ b/backends/storage.go @@ -3,6 +3,7 @@ package backends import ( "errors" "io" + "net/http" "time" ) @@ -13,6 +14,7 @@ type StorageBackend interface { Get(key string) (Metadata, io.ReadCloser, error) Put(key string, r io.Reader, expiry time.Time, deleteKey, accessKey string) (Metadata, error) PutMetadata(key string, m Metadata) error + ServeFile(key string, w http.ResponseWriter, r *http.Request) error Size(key string) (int64, error) } diff --git a/fileserve.go b/fileserve.go index 27a28a9..90c1507 100644 --- a/fileserve.go +++ b/fileserve.go @@ -2,7 +2,6 @@ package main import ( "fmt" - "io" "net/http" "net/url" "strconv" @@ -61,15 +60,11 @@ func fileServeHandler(c web.C, w http.ResponseWriter, r *http.Request) { } if r.Method != "HEAD" { - _, reader, err := storageBackend.Get(fileName) - if err != nil { - oopsHandler(c, w, r, RespAUTO, "Unable to open file.") - return - } - defer reader.Close() - if _, err = io.CopyN(w, reader, metadata.Size); err != nil { + storageBackend.ServeFile(fileName, w, r) + if err != nil { oopsHandler(c, w, r, RespAUTO, err.Error()) + return } } } From 8edf53c14203bca15b39a9778abe23e14d707a79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn?= Date: Mon, 13 Apr 2020 21:36:03 +0200 Subject: [PATCH 217/345] Add systemd unit/timer for the cleanup tool (#210) * add systemd service for the cleanup script * add systemd timer for the cleanup service --- linx-cleanup.service | 12 ++++++++++++ linx-cleanup.timer | 8 ++++++++ 2 files changed, 20 insertions(+) create mode 100644 linx-cleanup.service create mode 100644 linx-cleanup.timer diff --git a/linx-cleanup.service b/linx-cleanup.service new file mode 100644 index 0000000..7a03941 --- /dev/null +++ b/linx-cleanup.service @@ -0,0 +1,12 @@ +[Unit] +Description=Self-hosted file/code/media sharing (expired files cleanup) +After=network.target + +[Service] +User=linx +Group=linx +ExecStart=/usr/bin/linx-cleanup +WorkingDirectory=/srv/linx/ + +[Install] +WantedBy=multi-user.target diff --git a/linx-cleanup.timer b/linx-cleanup.timer new file mode 100644 index 0000000..40d8cda --- /dev/null +++ b/linx-cleanup.timer @@ -0,0 +1,8 @@ +[Unit] +Description=Run linx-cleanup every hour + +[Timer] +OnUnitActiveSec=1h + +[Install] +WantedBy=timers.target From bc599ae0188b428dd07cc9e0dc6a1ce53c44dd57 Mon Sep 17 00:00:00 2001 From: mutantmonkey <67266+mutantmonkey@users.noreply.github.com> Date: Thu, 16 Apr 2020 21:18:21 +0000 Subject: [PATCH 218/345] Fix typo in readme (#213) This should say linx-cleanup, not linx-client. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ff22db3..c7e0adf 100644 --- a/README.md +++ b/README.md @@ -136,7 +136,7 @@ automatically clean up files that have expired, you can use the included `linx-cleanup` utility. To run it automatically, use a cronjob or similar type of scheduled task. -You should be careful to ensure that only one instance of `linx-client` runs at +You should be careful to ensure that only one instance of `linx-cleanup` runs at a time to avoid unexpected behavior. It does not implement any type of locking. From 151515f516c615c15f418c3753c400db21a4bd12 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Wed, 13 May 2020 17:37:33 -0700 Subject: [PATCH 219/345] Cleanup: Integrate expired files periodic cleanup --- .gitignore | 4 +-- README.md | 33 +++++++------------ {linx-cleanup => cleanup}/cleanup.go | 26 +++++++-------- linx-cleanup/README.md | 19 +++++++++++ linx-cleanup/linx-cleanup.go | 23 +++++++++++++ .../linx-cleanup.service | 0 .../linx-cleanup.timer | 0 server.go | 8 +++++ 8 files changed, 75 insertions(+), 38 deletions(-) rename {linx-cleanup => cleanup}/cleanup.go (63%) create mode 100644 linx-cleanup/README.md create mode 100644 linx-cleanup/linx-cleanup.go rename linx-cleanup.service => linx-cleanup/linx-cleanup.service (100%) rename linx-cleanup.timer => linx-cleanup/linx-cleanup.timer (100%) diff --git a/.gitignore b/.gitignore index c6750eb..ec613f1 100644 --- a/.gitignore +++ b/.gitignore @@ -29,8 +29,8 @@ _testmain.go *.prof linx-server -linx-cleanup -linx-genkey +linx-cleanup/linx-cleanup +linx-genkey/linx-genkey files/ meta/ binaries/ diff --git a/README.md b/README.md index c7e0adf..567d646 100644 --- a/README.md +++ b/README.md @@ -92,6 +92,17 @@ allowhotlink = true | ```-force-random-filename``` | (optionally) force the use of random filenames | ```-custompagespath "custom_pages"``` | (optionally) specify path to directory containing markdown pages (must end in .md) that will be added to the site navigation (this can be useful for providing contact/support information and so on). For example, custom_pages/My_Page.md will become My Page in the site navigation + +#### Cleaning up expired files +When files expire, access is disabled immediately, but the files and metadata +will persist on disk until someone attempts to access them. You can set the following option to run cleanup every few minutes. This can also be done using a separate utility found the linx-cleanup directory. + + +|Option|Description +|------|----------- +| ```-cleanup-every-minutes 5``` | How often to clean up expired files in minutes (default is 0, which means files will be cleaned up as they are accessed) + + #### Require API Keys for uploads |Option|Description @@ -127,26 +138,6 @@ The following storage backends are available: |------|----------- | ```-fastcgi``` | serve through fastcgi - -Cleaning up expired files -------------------------- -When files expire, access is disabled immediately, but the files and metadata -will persist on disk until someone attempts to access them. If you'd like to -automatically clean up files that have expired, you can use the included -`linx-cleanup` utility. To run it automatically, use a cronjob or similar type -of scheduled task. - -You should be careful to ensure that only one instance of `linx-cleanup` runs at -a time to avoid unexpected behavior. It does not implement any type of locking. - - -|Option|Description -|------|----------- -| ```-filespath files/``` | Path to stored uploads (default is files/) -| ```-nologs``` | (optionally) disable deletion logs in stdout -| ```-metapath meta/``` | Path to stored information about uploads (default is meta/) - - Deployment ---------- Linx-server supports being deployed in a subdirectory (ie. example.com/mylinx/) as well as on its own (example.com/). @@ -207,4 +198,4 @@ along with this program. If not, see . Author ------- -Andrei Marcu, http://andreim.net/ +Andrei Marcu, https://andreim.net/ diff --git a/linx-cleanup/cleanup.go b/cleanup/cleanup.go similarity index 63% rename from linx-cleanup/cleanup.go rename to cleanup/cleanup.go index 88c2bce..5920c22 100644 --- a/linx-cleanup/cleanup.go +++ b/cleanup/cleanup.go @@ -1,26 +1,14 @@ -package main +package cleanup import ( - "flag" "log" + "time" "github.com/andreimarcu/linx-server/backends/localfs" "github.com/andreimarcu/linx-server/expiry" ) -func main() { - var filesDir string - var metaDir string - var noLogs bool - - flag.StringVar(&filesDir, "filespath", "files/", - "path to files directory") - flag.StringVar(&metaDir, "metapath", "meta/", - "path to metadata directory") - flag.BoolVar(&noLogs, "nologs", false, - "don't log deleted files") - flag.Parse() - +func Cleanup(filesDir string, metaDir string, noLogs bool) { fileBackend := localfs.NewLocalfsBackend(metaDir, filesDir) files, err := fileBackend.List() @@ -44,3 +32,11 @@ func main() { } } } + +func PeriodicCleanup(minutes time.Duration, filesDir string, metaDir string, noLogs bool) { + c := time.Tick(minutes) + for range c { + Cleanup(filesDir, metaDir, noLogs) + } + +} diff --git a/linx-cleanup/README.md b/linx-cleanup/README.md new file mode 100644 index 0000000..7d4f4a3 --- /dev/null +++ b/linx-cleanup/README.md @@ -0,0 +1,19 @@ + +linx-cleanup +------------------------- +When files expire, access is disabled immediately, but the files and metadata +will persist on disk until someone attempts to access them. + +If you'd like to automatically clean up files that have expired, you can use the included `linx-cleanup` utility. To run it automatically, use a cronjob or similar type +of scheduled task. + +You should be careful to ensure that only one instance of `linx-cleanup` runs at +a time to avoid unexpected behavior. It does not implement any type of locking. + + +|Option|Description +|------|----------- +| ```-filespath files/``` | Path to stored uploads (default is files/) +| ```-nologs``` | (optionally) disable deletion logs in stdout +| ```-metapath meta/``` | Path to stored information about uploads (default is meta/) + diff --git a/linx-cleanup/linx-cleanup.go b/linx-cleanup/linx-cleanup.go new file mode 100644 index 0000000..13b3ef1 --- /dev/null +++ b/linx-cleanup/linx-cleanup.go @@ -0,0 +1,23 @@ +package main + +import ( + "flag" + + "github.com/andreimarcu/linx-server/cleanup" +) + +func main() { + var filesDir string + var metaDir string + var noLogs bool + + flag.StringVar(&filesDir, "filespath", "files/", + "path to files directory") + flag.StringVar(&metaDir, "metapath", "meta/", + "path to metadata directory") + flag.BoolVar(&noLogs, "nologs", false, + "don't log deleted files") + flag.Parse() + + cleanup.Cleanup(filesDir, metaDir, noLogs) +} diff --git a/linx-cleanup.service b/linx-cleanup/linx-cleanup.service similarity index 100% rename from linx-cleanup.service rename to linx-cleanup/linx-cleanup.service diff --git a/linx-cleanup.timer b/linx-cleanup/linx-cleanup.timer similarity index 100% rename from linx-cleanup.timer rename to linx-cleanup/linx-cleanup.timer diff --git a/server.go b/server.go index e1f0c0a..dae3491 100644 --- a/server.go +++ b/server.go @@ -19,6 +19,7 @@ import ( "github.com/andreimarcu/linx-server/backends" "github.com/andreimarcu/linx-server/backends/localfs" "github.com/andreimarcu/linx-server/backends/s3" + "github.com/andreimarcu/linx-server/cleanup" "github.com/flosch/pongo2" "github.com/vharitonsky/iniflags" "github.com/zenazn/goji/graceful" @@ -71,6 +72,7 @@ var Config struct { forceRandomFilename bool accessKeyCookieExpiry uint64 customPagesDir string + cleanupEveryMinutes uint64 } var Templates = make(map[string]*pongo2.Template) @@ -150,6 +152,10 @@ func setup() *web.Mux { storageBackend = s3.NewS3Backend(Config.s3Bucket, Config.s3Region, Config.s3Endpoint, Config.s3ForcePathStyle) } else { storageBackend = localfs.NewLocalfsBackend(Config.metaDir, Config.filesDir) + if Config.cleanupEveryMinutes > 0 { + go cleanup.PeriodicCleanup(time.Duration(Config.cleanupEveryMinutes)*time.Minute, Config.filesDir, Config.metaDir, Config.noLogs) + } + } // Template setup @@ -311,6 +317,8 @@ func main() { flag.Uint64Var(&Config.accessKeyCookieExpiry, "access-cookie-expiry", 0, "Expiration time for access key cookies in seconds (set 0 to use session cookies)") flag.StringVar(&Config.customPagesDir, "custompagespath", "", "path to directory containing .md files to render as custom pages") + flag.Uint64Var(&Config.cleanupEveryMinutes, "cleanup-every-minutes", 0, + "How often to clean up expired files in minutes (default is 0, which means files will be cleaned up as they are accessed)") iniflags.Parse() From e2a65a5b62a42f94d985ca7ffa3fa5e0d3673199 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Thu, 14 May 2020 00:51:19 -0700 Subject: [PATCH 220/345] README: Clarify docker usage and example --- .gitignore | 1 + README.md | 81 ++++++++++++++++++++++------------------ linx-server.conf.example | 12 ++++++ 3 files changed, 57 insertions(+), 37 deletions(-) create mode 100644 linx-server.conf.example diff --git a/.gitignore b/.gitignore index ec613f1..df2bae9 100644 --- a/.gitignore +++ b/.gitignore @@ -31,6 +31,7 @@ _testmain.go linx-server linx-cleanup/linx-cleanup linx-genkey/linx-genkey +linx-server.conf files/ meta/ binaries/ diff --git a/README.md b/README.md index 567d646..d509689 100644 --- a/README.md +++ b/README.md @@ -28,9 +28,14 @@ Getting started ------------------- #### Using Docker +1. Create directories ```files``` and ```meta``` and run ```chown -R 65534:65534 meta && chown -R 65534:65534 files``` +2. Create a config file (example provided in repo), we'll refer to it as __linx-server.conf__ in the following examples + + + Example running ``` -docker run -p 8080:8080 -v /path/to/meta:/data/meta -v /path/to/files:/data/files andreimarcu/linx-server +docker run -p 8080:8080 -v /path/to/linx-server.conf:/data/linx-server.conf -v /path/to/meta:/data/meta -v /path/to/files:/data/files andreimarcu/linx-server -config /data/linx-server.conf ``` Example with docker-compose @@ -40,11 +45,12 @@ services: linx-server: container_name: linx-server image: andreimarcu/linx-server - entrypoint: /usr/local/bin/linx-server -bind=0.0.0.0:8080 -filespath=/data/files/ -metapath=/data/meta/ - command: -sitename=Linx -siteurl=https://linx.example.com + entrypoint: /usr/local/bin/linx-server + command: -config /data/linx-server.conf volumes: - /path/to/files:/data/files - /path/to/meta:/data/meta + - /path/to/linx-server.conf:/data/linx-server.conf network_mode: bridge ports: - "8080:8080" @@ -57,40 +63,41 @@ Ideally, you would use a reverse proxy such as nginx or caddy to handle TLS cert 1. Grab the latest binary from the [releases](https://github.com/andreimarcu/linx-server/releases) 2. Run ```./linx-server``` - Usage ----- #### Configuration -All configuration options are accepted either as arguments or can be placed in an ini-style file as such: +All configuration options are accepted either as arguments or can be placed in a file as such (see example file linx-server.conf.example in repo): ```ini +bind = 127.0.0.1:8080 +sitename = myLinx maxsize = 4294967296 -allowhotlink = true -# etc -``` -...and then invoke ```linx-server -config path/to/config.ini``` +maxexpiry = 86400 +# ... etc +``` +...and then run ```linx-server -config path/to/linx-server.conf``` #### Options |Option|Description |------|----------- -| ```-bind 127.0.0.1:8080``` | what to bind to (default is 127.0.0.1:8080) -| ```-sitename myLinx``` | the site name displayed on top (default is inferred from Host header) -| ```-siteurl "https://mylinx.example.org/"``` | the site url (default is inferred from execution context) -| ```-selifpath "selif"``` | path relative to site base url (the "selif" in mylinx.example.org/selif/image.jpg) where files are accessed directly (default: selif) -| ```-maxsize 4294967296``` | maximum upload file size in bytes (default 4GB) -| ```-maxexpiry 86400``` | maximum expiration time in seconds (default is 0, which is no expiry) -| ```-allowhotlink``` | Allow file hotlinking -| ```-contentsecuritypolicy "..."``` | Content-Security-Policy header for pages (default is "default-src 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; frame-ancestors 'self';") -| ```-filecontentsecuritypolicy "..."``` | Content-Security-Policy header for files (default is "default-src 'none'; img-src 'self'; object-src 'self'; media-src 'self'; style-src 'self' 'unsafe-inline'; frame-ancestors 'self';") -| ```-refererpolicy "..."``` | Referrer-Policy header for pages (default is "same-origin") -| ```-filereferrerpolicy "..."``` | Referrer-Policy header for files (default is "same-origin") -| ```-xframeoptions "..." ``` | X-Frame-Options header (default is "SAMEORIGIN") -| ```-remoteuploads``` | (optionally) enable remote uploads (/upload?url=https://...) -| ```-nologs``` | (optionally) disable request logs in stdout -| ```-force-random-filename``` | (optionally) force the use of random filenames -| ```-custompagespath "custom_pages"``` | (optionally) specify path to directory containing markdown pages (must end in .md) that will be added to the site navigation (this can be useful for providing contact/support information and so on). For example, custom_pages/My_Page.md will become My Page in the site navigation +| ```bind = 127.0.0.1:8080``` | what to bind to (default is 127.0.0.1:8080) +| ```sitename = myLinx``` | the site name displayed on top (default is inferred from Host header) +| ```siteurl = https://mylinx.example.org/``` | the site url (default is inferred from execution context) +| ```selifpath = selif``` | path relative to site base url (the "selif" in mylinx.example.org/selif/image.jpg) where files are accessed directly (default: selif) +| ```maxsize = 4294967296``` | maximum upload file size in bytes (default 4GB) +| ```maxexpiry = 86400``` | maximum expiration time in seconds (default is 0, which is no expiry) +| ```allowhotlink = true``` | Allow file hotlinking +| ```contentsecuritypolicy = "..."``` | Content-Security-Policy header for pages (default is "default-src 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; frame-ancestors 'self';") +| ```filecontentsecuritypolicy = "..."``` | Content-Security-Policy header for files (default is "default-src 'none'; img-src 'self'; object-src 'self'; media-src 'self'; style-src 'self' 'unsafe-inline'; frame-ancestors 'self';") +| ```refererpolicy = "..."``` | Referrer-Policy header for pages (default is "same-origin") +| ```filereferrerpolicy = "..."``` | Referrer-Policy header for files (default is "same-origin") +| ```xframeoptions = "..." ``` | X-Frame-Options header (default is "SAMEORIGIN") +| ```remoteuploads = true``` | (optionally) enable remote uploads (/upload?url=https://...) +| ```nologs = true``` | (optionally) disable request logs in stdout +| ```force-random-filename = true``` | (optionally) force the use of random filenames +| ```custompagespath = custom_pages/``` | (optionally) specify path to directory containing markdown pages (must end in .md) that will be added to the site navigation (this can be useful for providing contact/support information and so on). For example, custom_pages/My_Page.md will become My Page in the site navigation #### Cleaning up expired files @@ -100,16 +107,16 @@ will persist on disk until someone attempts to access them. You can set the foll |Option|Description |------|----------- -| ```-cleanup-every-minutes 5``` | How often to clean up expired files in minutes (default is 0, which means files will be cleaned up as they are accessed) +| ```cleanup-every-minutes = 5``` | How often to clean up expired files in minutes (default is 0, which means files will be cleaned up as they are accessed) #### Require API Keys for uploads |Option|Description |------|----------- -| ```-authfile path/to/authfile``` | (optionally) require authorization for upload/delete by providing a newline-separated file of scrypted auth keys -| ```-remoteauthfile path/to/remoteauthfile``` | (optionally) require authorization for remote uploads by providing a newline-separated file of scrypted auth keys -| ```-basicauth``` | (optionally) allow basic authorization to upload or paste files from browser when `-authfile` is enabled. When uploading, you will be prompted to enter a user and password - leave the user blank and use your auth key as the password +| ```authfile = path/to/authfile``` | (optionally) require authorization for upload/delete by providing a newline-separated file of scrypted auth keys +| ```remoteauthfile = path/to/remoteauthfile``` | (optionally) require authorization for remote uploads by providing a newline-separated file of scrypted auth keys +| ```basicauth = true``` | (optionally) allow basic authorization to upload or paste files from browser when `-authfile` is enabled. When uploading, you will be prompted to enter a user and password - leave the user blank and use your auth key as the password A helper utility ```linx-genkey``` is provided which hashes keys to the format required in the auth files. @@ -118,25 +125,25 @@ The following storage backends are available: |Name|Notes|Options |----|-----|------- -|LocalFS|Enabled by default, this backend uses the filesystem|```-filespath files/``` -- Path to store uploads (default is files/)
    ```-metapath meta/``` -- Path to store information about uploads (default is meta/)| -|S3|Use with any S3-compatible provider.
    This implementation will stream files through the linx instance (every download will request and stream the file from the S3 bucket).

    For high-traffic environments, one might consider using an external caching layer such as described [in this article](https://blog.sentry.io/2017/03/01/dodging-s3-downtime-with-nginx-and-haproxy.html).|```-s3-endpoint https://...``` -- S3 endpoint
    ```-s3-region us-east-1``` -- S3 region
    ```-s3-bucket mybucket``` -- S3 bucket to use for files and metadata
    ```-s3-force-path-style``` (optional) -- force path-style addresing (e.g. https://s3.amazonaws.com/linx/example.txt)

    Environment variables to provide:
    ```AWS_ACCESS_KEY_ID``` -- the S3 access key
    ```AWS_SECRET_ACCESS_KEY ``` -- the S3 secret key
    ```AWS_SESSION_TOKEN``` (optional) -- the S3 session token| +|LocalFS|Enabled by default, this backend uses the filesystem|```filespath = files/``` -- Path to store uploads (default is files/)
    ```metapath = meta/``` -- Path to store information about uploads (default is meta/)| +|S3|Use with any S3-compatible provider.
    This implementation will stream files through the linx instance (every download will request and stream the file from the S3 bucket).

    For high-traffic environments, one might consider using an external caching layer such as described [in this article](https://blog.sentry.io/2017/03/01/dodging-s3-downtime-with-nginx-and-haproxy.html).|```s3-endpoint = https://...``` -- S3 endpoint
    ```s3-region = us-east-1``` -- S3 region
    ```s3-bucket = mybucket``` -- S3 bucket to use for files and metadata
    ```s3-force-path-style = true``` (optional) -- force path-style addresing (e.g. https://s3.amazonaws.com/linx/example.txt)

    Environment variables to provide:
    ```AWS_ACCESS_KEY_ID``` -- the S3 access key
    ```AWS_SECRET_ACCESS_KEY ``` -- the S3 secret key
    ```AWS_SESSION_TOKEN``` (optional) -- the S3 session token| #### SSL with built-in server |Option|Description |------|----------- -| ```-certfile path/to/your.crt``` | Path to the ssl certificate (required if you want to use the https server) -| ```-keyfile path/to/your.key``` | Path to the ssl key (required if you want to use the https server) +| ```certfile = path/to/your.crt``` | Path to the ssl certificate (required if you want to use the https server) +| ```keyfile = path/to/your.key``` | Path to the ssl key (required if you want to use the https server) #### Use with http proxy |Option|Description |------|----------- -| ```-realip``` | let linx-server know you (nginx, etc) are providing the X-Real-IP and/or X-Forwarded-For headers. +| ```realip = true``` | let linx-server know you (nginx, etc) are providing the X-Real-IP and/or X-Forwarded-For headers. #### Use with fastcgi |Option|Description |------|----------- -| ```-fastcgi``` | serve through fastcgi +| ```fastcgi = true``` | serve through fastcgi Deployment ---------- @@ -161,10 +168,10 @@ server { } } ``` -And run linx-server with the ```-fastcgi``` option. +And run linx-server with the ```fastcgi = true``` option. #### 2. Using the built-in https server -Run linx-server with the ```-certfile path/to/cert.file``` and ```-keyfile path/to/key.file``` options. +Run linx-server with the ```certfile = path/to/cert.file``` and ```keyfile = path/to/key.file``` options. #### 3. Using the built-in http server Run linx-server normally. diff --git a/linx-server.conf.example b/linx-server.conf.example new file mode 100644 index 0000000..eb2e1f8 --- /dev/null +++ b/linx-server.conf.example @@ -0,0 +1,12 @@ + +bind = 127.0.0.1:8080 +sitename = myLinx +siteurl = https://mylinx.example.org/ +selifpath = s +maxsize = 4294967296 +maxexpiry = 86400 +allowhotlink = true +remoteuploads = true +nologs = true +force-random-filename = false +cleanup-every-minutes = 5 \ No newline at end of file From 6ce2bd6b9f0685bf5d11e24c6a012258f618ae32 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Thu, 14 May 2020 01:12:24 -0700 Subject: [PATCH 221/345] Display pages: Add OpenGraph tags for media --- display.go | 1 + templates/display/audio.html | 7 +++++-- templates/display/image.html | 6 +++++- templates/display/video.html | 8 ++++++-- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/display.go b/display.go index 6ac87d6..6228216 100644 --- a/display.go +++ b/display.go @@ -122,6 +122,7 @@ func fileDisplayHandler(c web.C, w http.ResponseWriter, r *http.Request, fileNam "forcerandom": Config.forceRandomFilename, "lines": lines, "files": metadata.ArchiveFiles, + "siteurl": strings.TrimSuffix(getSiteURL(r), "/"), }, r, w) if err != nil { diff --git a/templates/display/audio.html b/templates/display/audio.html index b5ae1e3..ba491f0 100644 --- a/templates/display/audio.html +++ b/templates/display/audio.html @@ -1,9 +1,12 @@ {% extends "base.html" %} +{% block head %} + +{% endblock %} + {% block main %} -{% endblock %} - +{% endblock %} \ No newline at end of file diff --git a/templates/display/image.html b/templates/display/image.html index 807b7ad..985c504 100644 --- a/templates/display/image.html +++ b/templates/display/image.html @@ -1,7 +1,11 @@ {% extends "base.html" %} +{% block head %} + +{% endblock %} + {% block main %} -{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/templates/display/video.html b/templates/display/video.html index 317664b..54a796f 100644 --- a/templates/display/video.html +++ b/templates/display/video.html @@ -1,8 +1,12 @@ {% extends "base.html" %} +{% block head %} + +{% endblock %} + {% block main %} -{% endblock %} +{% endblock %} \ No newline at end of file From 5eb6f32ff0a0252caab5fbc8e154912b4b5e4676 Mon Sep 17 00:00:00 2001 From: Infinoid Date: Mon, 3 Aug 2020 01:16:47 -0400 Subject: [PATCH 222/345] Switch to a more comprehensive mimetype detection library (#231) --- go.mod | 2 +- go.sum | 4 ++-- helpers/helpers.go | 17 ++++----------- helpers/helpers_test.go | 46 ++++++++++++++++++++++++++++++++++++++++- upload.go | 8 +++---- 5 files changed, 56 insertions(+), 21 deletions(-) diff --git a/go.mod b/go.mod index 50a48ab..f433699 100644 --- a/go.mod +++ b/go.mod @@ -8,6 +8,7 @@ require ( github.com/dchest/uniuri v0.0.0-20200228104902-7aecb25e1fe5 github.com/dustin/go-humanize v1.0.0 github.com/flosch/pongo2 v0.0.0-20190707114632-bbf5a6c351f4 + github.com/gabriel-vasile/mimetype v1.1.1 github.com/microcosm-cc/bluemonday v1.0.2 github.com/minio/sha256-simd v0.1.1 github.com/russross/blackfriday v1.5.1 @@ -15,5 +16,4 @@ require ( github.com/zeebo/bencode v1.0.0 github.com/zenazn/goji v0.9.0 golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073 - gopkg.in/h2non/filetype.v1 v1.0.5 ) diff --git a/go.sum b/go.sum index 15a736c..99d63bf 100644 --- a/go.sum +++ b/go.sum @@ -15,6 +15,8 @@ github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4 github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/flosch/pongo2 v0.0.0-20190707114632-bbf5a6c351f4 h1:GY1+t5Dr9OKADM64SYnQjw/w99HMYvQ0A8/JoUkxVmc= github.com/flosch/pongo2 v0.0.0-20190707114632-bbf5a6c351f4/go.mod h1:T9YF2M40nIgbVgp3rreNmTged+9HrbNTIQf1PsaIiTA= +github.com/gabriel-vasile/mimetype v1.1.1 h1:qbN9MPuRf3bstHu9zkI9jDWNfH//9+9kHxr9oRBBBOA= +github.com/gabriel-vasile/mimetype v1.1.1/go.mod h1:6CDPel/o/3/s4+bp6kIbsWATq8pmgOisOPG40CJa6To= github.com/go-check/check v0.0.0-20180628173108-788fd7840127 h1:0gkP6mzaMqkmpcJYCFOLkIBwI7xFExG03bbkOkCvUPI= github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= @@ -68,8 +70,6 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/h2non/filetype.v1 v1.0.5 h1:CC1jjJjoEhNVbMhXYalmGBhOBK2V70Q1N850wt/98/Y= -gopkg.in/h2non/filetype.v1 v1.0.5/go.mod h1:M0yem4rwSX5lLVrkEuRRp2/NinFMD5vgJ4DlAhZcfNo= gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce h1:xcEWjVhvbDy+nHP67nPDDpbYrY+ILlfndk4bRioVHaU= gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= diff --git a/helpers/helpers.go b/helpers/helpers.go index f51d998..f13e302 100644 --- a/helpers/helpers.go +++ b/helpers/helpers.go @@ -7,8 +7,8 @@ import ( "unicode" "github.com/andreimarcu/linx-server/backends" + "github.com/gabriel-vasile/mimetype" "github.com/minio/sha256-simd" - "gopkg.in/h2non/filetype.v1" ) func GenerateMetadata(r io.Reader) (m backends.Metadata, err error) { @@ -21,7 +21,7 @@ func GenerateMetadata(r io.Reader) (m backends.Metadata, err error) { // Get first 512 bytes for mimetype detection header := make([]byte, 512) - _, err = teeReader.Read(header) + headerlen, err := teeReader.Read(header) if err != nil { return } @@ -47,17 +47,8 @@ func GenerateMetadata(r io.Reader) (m backends.Metadata, err error) { // Use the bytes we extracted earlier and attempt to determine the file // type - kind, err := filetype.Match(header) - if err != nil { - m.Mimetype = "application/octet-stream" - return m, err - } else if kind.MIME.Value != "" { - m.Mimetype = kind.MIME.Value - } else if printable(header) { - m.Mimetype = "text/plain" - } else { - m.Mimetype = "application/octet-stream" - } + kind := mimetype.Detect(header[:headerlen]) + m.Mimetype = kind.String() return } diff --git a/helpers/helpers_test.go b/helpers/helpers_test.go index 800d0d2..d891173 100644 --- a/helpers/helpers_test.go +++ b/helpers/helpers_test.go @@ -1,8 +1,10 @@ package helpers import ( + "bytes" "strings" "testing" + "unicode/utf16" ) func TestGenerateMetadata(t *testing.T) { @@ -17,7 +19,7 @@ func TestGenerateMetadata(t *testing.T) { t.Fatalf("Sha256sum was %q instead of expected value of %q", m.Sha256sum, expectedSha256sum) } - expectedMimetype := "text/plain" + expectedMimetype := "text/plain; charset=utf-8" if m.Mimetype != expectedMimetype { t.Fatalf("Mimetype was %q instead of expected value of %q", m.Mimetype, expectedMimetype) } @@ -27,3 +29,45 @@ func TestGenerateMetadata(t *testing.T) { t.Fatalf("Size was %d instead of expected value of %d", m.Size, expectedSize) } } + +func TestTextCharsets(t *testing.T) { + // verify that different text encodings are detected and passed through + orig := "This is a text string" + utf16 := utf16.Encode([]rune(orig)) + utf16LE := make([]byte, len(utf16)*2+2) + utf16BE := make([]byte, len(utf16)*2+2) + utf8 := []byte(orig) + utf16LE[0] = 0xff + utf16LE[1] = 0xfe + utf16BE[0] = 0xfe + utf16BE[1] = 0xff + for i := 0; i < len(utf16); i++ { + lsb := utf16[i] & 0xff + msb := utf16[i] >> 8 + utf16LE[i*2+2] = byte(lsb) + utf16LE[i*2+3] = byte(msb) + utf16BE[i*2+2] = byte(msb) + utf16BE[i*2+3] = byte(lsb) + } + + testcases := []struct { + data []byte + extension string + mimetype string + }{ + {mimetype: "text/plain; charset=utf-8", data: utf8}, + {mimetype: "text/plain; charset=utf-16le", data: utf16LE}, + {mimetype: "text/plain; charset=utf-16be", data: utf16BE}, + } + + for i, testcase := range testcases { + r := bytes.NewReader(testcase.data) + m, err := GenerateMetadata(r) + if err != nil { + t.Fatalf("[%d] unexpected error return %v\n", i, err) + } + if m.Mimetype != testcase.mimetype { + t.Errorf("[%d] Expected mimetype '%s', got mimetype '%s'\n", i, testcase.mimetype, m.Mimetype) + } + } +} diff --git a/upload.go b/upload.go index 8526260..3cac122 100644 --- a/upload.go +++ b/upload.go @@ -18,8 +18,8 @@ import ( "github.com/andreimarcu/linx-server/backends" "github.com/andreimarcu/linx-server/expiry" "github.com/dchest/uniuri" + "github.com/gabriel-vasile/mimetype" "github.com/zenazn/goji/web" - "gopkg.in/h2non/filetype.v1" ) var FileTooLargeError = errors.New("File too large.") @@ -263,11 +263,11 @@ func processUpload(upReq UploadRequest) (upload Upload, err error) { header = header[:n] // Determine the type of file from header - kind, err := filetype.Match(header) - if err != nil || kind.Extension == "unknown" { + kind := mimetype.Detect(header) + if len(kind.Extension()) < 2 { extension = "file" } else { - extension = kind.Extension + extension = kind.Extension()[1:] // remove leading "." } } From 8ed205181a5e83b86ff3b782434f2ca6062ab424 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Fri, 14 Aug 2020 00:32:55 -0700 Subject: [PATCH 223/345] Add buildx GH action for multi-arch docker images --- .github/workflows/buildx.yaml | 61 +++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 .github/workflows/buildx.yaml diff --git a/.github/workflows/buildx.yaml b/.github/workflows/buildx.yaml new file mode 100644 index 0000000..c8b6cfe --- /dev/null +++ b/.github/workflows/buildx.yaml @@ -0,0 +1,61 @@ +name: buildx + +on: + push: + branches: master + tags: + - v* + +jobs: + buildx: + runs-on: ubuntu-latest + steps: + - + name: Checkout + uses: actions/checkout@v2 + - + name: Prepare + id: prepare + run: | + DOCKER_IMAGE=crazymax/diun + DOCKER_PLATFORMS=linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/386 + VERSION=version-${GITHUB_REF#refs/tags/v} + TAGS="--tag ${DOCKER_IMAGE}:${VERSION} --tag ${DOCKER_IMAGE}:latest" + + echo ::set-output name=docker_image::${DOCKER_IMAGE} + echo ::set-output name=version::${VERSION} + echo ::set-output name=buildx_args::--platform ${DOCKER_PLATFORMS} \ + --build-arg VERSION=${VERSION} \ + --build-arg BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') \ + --build-arg VCS_REF=${GITHUB_SHA::8} \ + ${TAGS} --file ./test/Dockerfile ./test + - + name: Set up Docker Buildx + uses: crazy-max/ghaction-docker-buildx@v3 + - + name: Docker Buildx (build) + run: | + docker buildx build --output "type=image,push=false" ${{ steps.prepare.outputs.buildx_args }} + - + name: Docker Login + if: success() + env: + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + run: | + echo "${DOCKER_PASSWORD}" | docker login --username "${DOCKER_USERNAME}" --password-stdin + - + name: Docker Buildx (push) + if: success() + run: | + docker buildx build --output "type=image,push=true" ${{ steps.prepare.outputs.buildx_args }} + - + name: Docker Check Manifest + if: always() + run: | + docker run --rm mplatform/mquery ${{ steps.prepare.outputs.docker_image }}:${{ steps.prepare.outputs.version }} + - + name: Clear + if: always() + run: | + rm -f ${HOME}/.docker/config.json From 965d5f6c29e584cc84febf70762d95ee27f14d88 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Fri, 14 Aug 2020 00:39:53 -0700 Subject: [PATCH 224/345] Fix GH action --- .github/workflows/buildx.yaml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/buildx.yaml b/.github/workflows/buildx.yaml index c8b6cfe..50e8601 100644 --- a/.github/workflows/buildx.yaml +++ b/.github/workflows/buildx.yaml @@ -2,9 +2,8 @@ name: buildx on: push: - branches: master tags: - - v* + - 'v*' jobs: buildx: @@ -17,7 +16,7 @@ jobs: name: Prepare id: prepare run: | - DOCKER_IMAGE=crazymax/diun + DOCKER_IMAGE=andreimarcu/linx-server DOCKER_PLATFORMS=linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/386 VERSION=version-${GITHUB_REF#refs/tags/v} TAGS="--tag ${DOCKER_IMAGE}:${VERSION} --tag ${DOCKER_IMAGE}:latest" From a2e00d06e03a1de04e85b872a1cbe27c204acf88 Mon Sep 17 00:00:00 2001 From: mutantmonkey <67266+mutantmonkey@users.noreply.github.com> Date: Fri, 14 Aug 2020 07:40:52 +0000 Subject: [PATCH 225/345] Clarify how metadata is stored with the S3 backend (#223) This was suggested in #221. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d509689..ed90db5 100644 --- a/README.md +++ b/README.md @@ -126,7 +126,7 @@ The following storage backends are available: |Name|Notes|Options |----|-----|------- |LocalFS|Enabled by default, this backend uses the filesystem|```filespath = files/``` -- Path to store uploads (default is files/)
    ```metapath = meta/``` -- Path to store information about uploads (default is meta/)| -|S3|Use with any S3-compatible provider.
    This implementation will stream files through the linx instance (every download will request and stream the file from the S3 bucket).

    For high-traffic environments, one might consider using an external caching layer such as described [in this article](https://blog.sentry.io/2017/03/01/dodging-s3-downtime-with-nginx-and-haproxy.html).|```s3-endpoint = https://...``` -- S3 endpoint
    ```s3-region = us-east-1``` -- S3 region
    ```s3-bucket = mybucket``` -- S3 bucket to use for files and metadata
    ```s3-force-path-style = true``` (optional) -- force path-style addresing (e.g. https://s3.amazonaws.com/linx/example.txt)

    Environment variables to provide:
    ```AWS_ACCESS_KEY_ID``` -- the S3 access key
    ```AWS_SECRET_ACCESS_KEY ``` -- the S3 secret key
    ```AWS_SESSION_TOKEN``` (optional) -- the S3 session token| +|S3|Use with any S3-compatible provider.
    This implementation will stream files through the linx instance (every download will request and stream the file from the S3 bucket). File metadata will be stored as tags on the object in the bucket.

    For high-traffic environments, one might consider using an external caching layer such as described [in this article](https://blog.sentry.io/2017/03/01/dodging-s3-downtime-with-nginx-and-haproxy.html).|```s3-endpoint = https://...``` -- S3 endpoint
    ```s3-region = us-east-1``` -- S3 region
    ```s3-bucket = mybucket``` -- S3 bucket to use for files and metadata
    ```s3-force-path-style = true``` (optional) -- force path-style addresing (e.g. https://s3.amazonaws.com/linx/example.txt)

    Environment variables to provide:
    ```AWS_ACCESS_KEY_ID``` -- the S3 access key
    ```AWS_SECRET_ACCESS_KEY ``` -- the S3 secret key
    ```AWS_SESSION_TOKEN``` (optional) -- the S3 session token| #### SSL with built-in server From 456274c1b9d90f8e688d9fb4f4207963dbecf3e4 Mon Sep 17 00:00:00 2001 From: mutantmonkey <67266+mutantmonkey@users.noreply.github.com> Date: Fri, 14 Aug 2020 07:42:45 +0000 Subject: [PATCH 226/345] Split and move auth into a separate package (#224) * Split and move auth into a separate package This change will make it easier to implement additional authentication methods, such as OpenID Connect. For now, only the existing "apikeys" authentication method is supported. * Use absolute site prefix to prevent redirect loop --- auth.go => auth/apikeys/apikeys.go | 77 +++++++++++++------- auth_test.go => auth/apikeys/apikeys_test.go | 8 +- server.go | 27 ++----- upload.go | 12 ++- 4 files changed, 68 insertions(+), 56 deletions(-) rename auth.go => auth/apikeys/apikeys.go (53%) rename auth_test.go => auth/apikeys/apikeys_test.go (64%) diff --git a/auth.go b/auth/apikeys/apikeys.go similarity index 53% rename from auth.go rename to auth/apikeys/apikeys.go index 3dc5ba6..d2a592d 100644 --- a/auth.go +++ b/auth/apikeys/apikeys.go @@ -1,4 +1,4 @@ -package main +package apikeys import ( "bufio" @@ -24,16 +24,18 @@ const ( type AuthOptions struct { AuthFile string UnauthMethods []string + BasicAuth bool + SiteName string + SitePath string } -type auth struct { +type ApiKeysMiddleware struct { successHandler http.Handler - failureHandler http.Handler authKeys []string o AuthOptions } -func readAuthKeys(authFile string) []string { +func ReadAuthKeys(authFile string) []string { var authKeys []string f, err := os.Open(authFile) @@ -55,7 +57,7 @@ func readAuthKeys(authFile string) []string { return authKeys } -func checkAuth(authKeys []string, key string) (result bool, err error) { +func CheckAuth(authKeys []string, key string) (result bool, err error) { checkKey, err := scrypt.Key([]byte(key), []byte(scryptSalt), scryptN, scryptr, scryptp, scryptKeyLen) if err != nil { return @@ -73,53 +75,74 @@ func checkAuth(authKeys []string, key string) (result bool, err error) { return } -func (a auth) ServeHTTP(w http.ResponseWriter, r *http.Request) { - if sliceContains(a.o.UnauthMethods, r.Method) { +func (a ApiKeysMiddleware) getSitePrefix() string { + prefix := a.o.SitePath + if len(prefix) <= 0 || prefix[0] != '/' { + prefix = "/" + prefix + } + return prefix +} + +func (a ApiKeysMiddleware) goodAuthorizationHandler(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Location", a.getSitePrefix()) + w.WriteHeader(http.StatusFound) +} + +func (a ApiKeysMiddleware) badAuthorizationHandler(w http.ResponseWriter, r *http.Request) { + if a.o.BasicAuth { + rs := "" + if a.o.SiteName != "" { + rs = fmt.Sprintf(` realm="%s"`, a.o.SiteName) + } + w.Header().Set("WWW-Authenticate", `Basic`+rs) + } + http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized) +} + +func (a ApiKeysMiddleware) ServeHTTP(w http.ResponseWriter, r *http.Request) { + var successHandler http.Handler + prefix := a.getSitePrefix() + + if r.URL.Path == prefix+"auth" { + successHandler = http.HandlerFunc(a.goodAuthorizationHandler) + } else { + successHandler = a.successHandler + } + + if sliceContains(a.o.UnauthMethods, r.Method) && r.URL.Path != prefix+"auth" { // allow unauthenticated methods - a.successHandler.ServeHTTP(w, r) + successHandler.ServeHTTP(w, r) return } key := r.Header.Get("Linx-Api-Key") - if key == "" && Config.basicAuth { + if key == "" && a.o.BasicAuth { _, password, ok := r.BasicAuth() if ok { key = password } } - result, err := checkAuth(a.authKeys, key) + result, err := CheckAuth(a.authKeys, key) if err != nil || !result { - a.failureHandler.ServeHTTP(w, r) + http.HandlerFunc(a.badAuthorizationHandler).ServeHTTP(w, r) return } - a.successHandler.ServeHTTP(w, r) + successHandler.ServeHTTP(w, r) } -func UploadAuth(o AuthOptions) func(*web.C, http.Handler) http.Handler { +func NewApiKeysMiddleware(o AuthOptions) func(*web.C, http.Handler) http.Handler { fn := func(c *web.C, h http.Handler) http.Handler { - return auth{ + return ApiKeysMiddleware{ successHandler: h, - failureHandler: http.HandlerFunc(badAuthorizationHandler), - authKeys: readAuthKeys(o.AuthFile), + authKeys: ReadAuthKeys(o.AuthFile), o: o, } } return fn } -func badAuthorizationHandler(w http.ResponseWriter, r *http.Request) { - if Config.basicAuth { - rs := "" - if Config.siteName != "" { - rs = fmt.Sprintf(` realm="%s"`, Config.siteName) - } - w.Header().Set("WWW-Authenticate", `Basic`+rs) - } - http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized) -} - func sliceContains(slice []string, s string) bool { for _, v := range slice { if s == v { diff --git a/auth_test.go b/auth/apikeys/apikeys_test.go similarity index 64% rename from auth_test.go rename to auth/apikeys/apikeys_test.go index ded98b0..3c2b8e6 100644 --- a/auth_test.go +++ b/auth/apikeys/apikeys_test.go @@ -1,4 +1,4 @@ -package main +package apikeys import ( "testing" @@ -10,15 +10,15 @@ func TestCheckAuth(t *testing.T) { "vFpNprT9wbHgwAubpvRxYCCpA2FQMAK6hFqPvAGrdZo=", } - if r, err := checkAuth(authKeys, ""); err != nil && r { + if r, err := CheckAuth(authKeys, ""); err != nil && r { t.Fatal("Authorization passed for empty key") } - if r, err := checkAuth(authKeys, "thisisnotvalid"); err != nil && r { + if r, err := CheckAuth(authKeys, "thisisnotvalid"); err != nil && r { t.Fatal("Authorization passed for invalid key") } - if r, err := checkAuth(authKeys, "haPVipRnGJ0QovA9nyqK"); err != nil && !r { + if r, err := CheckAuth(authKeys, "haPVipRnGJ0QovA9nyqK"); err != nil && !r { t.Fatal("Authorization failed for valid key") } } diff --git a/server.go b/server.go index dae3491..4d06db9 100644 --- a/server.go +++ b/server.go @@ -16,6 +16,7 @@ import ( "time" rice "github.com/GeertJohan/go.rice" + "github.com/andreimarcu/linx-server/auth/apikeys" "github.com/andreimarcu/linx-server/backends" "github.com/andreimarcu/linx-server/backends/localfs" "github.com/andreimarcu/linx-server/backends/s3" @@ -110,9 +111,12 @@ func setup() *web.Mux { mux.Use(AddHeaders(Config.addHeaders)) if Config.authFile != "" { - mux.Use(UploadAuth(AuthOptions{ + mux.Use(apikeys.NewApiKeysMiddleware(apikeys.AuthOptions{ AuthFile: Config.authFile, UnauthMethods: []string{"GET", "HEAD", "OPTIONS", "TRACE"}, + BasicAuth: Config.basicAuth, + SiteName: Config.siteName, + SitePath: Config.sitePath, })) } @@ -196,29 +200,10 @@ func setup() *web.Mux { mux.Get(Config.sitePath+"upload/", uploadRemote) if Config.remoteAuthFile != "" { - remoteAuthKeys = readAuthKeys(Config.remoteAuthFile) + remoteAuthKeys = apikeys.ReadAuthKeys(Config.remoteAuthFile) } } - if Config.basicAuth { - options := AuthOptions{ - AuthFile: Config.authFile, - UnauthMethods: []string{}, - } - okFunc := func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Location", Config.sitePath) - w.WriteHeader(http.StatusFound) - } - authHandler := auth{ - successHandler: http.HandlerFunc(okFunc), - failureHandler: http.HandlerFunc(badAuthorizationHandler), - authKeys: readAuthKeys(Config.authFile), - o: options, - } - mux.Head(Config.sitePath+"auth", authHandler) - mux.Get(Config.sitePath+"auth", authHandler) - } - mux.Post(Config.sitePath+"upload", uploadPostHandler) mux.Post(Config.sitePath+"upload/", uploadPostHandler) mux.Put(Config.sitePath+"upload", uploadPutHandler) diff --git a/upload.go b/upload.go index 3cac122..bda0d7f 100644 --- a/upload.go +++ b/upload.go @@ -15,6 +15,7 @@ import ( "strings" "time" + "github.com/andreimarcu/linx-server/auth/apikeys" "github.com/andreimarcu/linx-server/backends" "github.com/andreimarcu/linx-server/expiry" "github.com/dchest/uniuri" @@ -166,13 +167,16 @@ func uploadRemote(c web.C, w http.ResponseWriter, r *http.Request) { key = password } } - result, err := checkAuth(remoteAuthKeys, key) + result, err := apikeys.CheckAuth(remoteAuthKeys, key) if err != nil || !result { if Config.basicAuth { - badAuthorizationHandler(w, r) - } else { - unauthorizedHandler(c, w, r) + rs := "" + if Config.siteName != "" { + rs = fmt.Sprintf(` realm="%s"`, Config.siteName) + } + w.Header().Set("WWW-Authenticate", `Basic`+rs) } + unauthorizedHandler(c, w, r) return } } From 9a5fc11dffe5d2ac6cb6e7edfa97bccd417285ed Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Fri, 14 Aug 2020 00:52:25 -0700 Subject: [PATCH 227/345] Fix GH action (again) --- .github/workflows/buildx.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/buildx.yaml b/.github/workflows/buildx.yaml index 50e8601..1938731 100644 --- a/.github/workflows/buildx.yaml +++ b/.github/workflows/buildx.yaml @@ -27,7 +27,7 @@ jobs: --build-arg VERSION=${VERSION} \ --build-arg BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') \ --build-arg VCS_REF=${GITHUB_SHA::8} \ - ${TAGS} --file ./test/Dockerfile ./test + ${TAGS} --file Dockerfile . - name: Set up Docker Buildx uses: crazy-max/ghaction-docker-buildx@v3 From ef99024433df488e2aa2d063044ee05f4d01ac78 Mon Sep 17 00:00:00 2001 From: tuxx Date: Sat, 17 Oct 2020 01:55:11 +0200 Subject: [PATCH 228/345] Add LinxShare android client to README.md (#246) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ed90db5..62f4d98 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ You can see what it looks like using the demo: [https://demo.linx-server.net/](h - Display common filetypes (image, video, audio, markdown, pdf) - Display syntax-highlighted code with in-place editing -- Documented API with keys if need to restrict uploads (can use [linx-client](https://github.com/andreimarcu/linx-client) for uploading through command-line) +- Documented API with keys if need to restrict uploads (can use [linx-client](https://github.com/andreimarcu/linx-client) for uploading through command-line, or [LinxShare](https://github.com/iksteen/LinxShare/) client for android - also available on the (Play Store)[https://play.google.com/store/apps/details?id=org.thegraveyard.linxshare] ) - Torrent download of files using web seeding - File expiry, deletion key, file access key, and random filename options From 91b9885ac6d6c9bf7e2837e8daf7ff3b1facea4c Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Fri, 16 Oct 2020 16:57:09 -0700 Subject: [PATCH 229/345] Update README.md --- README.md | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 62f4d98..622d950 100644 --- a/README.md +++ b/README.md @@ -9,11 +9,20 @@ Self-hosted file/media sharing website. You can see what it looks like using the demo: [https://demo.linx-server.net/](https://demo.linx-server.net/) +### Clients +**Official** +- CLI: **linx-client** - [Source](https://github.com/andreimarcu/linx-client) + +**Unofficial** +- Android: **LinxShare** - [Source](https://github.com/iksteen/LinxShare/) | [Google Play](https://play.google.com/store/apps/details?id=org.thegraveyard.linxshare) +- CLI: **golinx** - [Source](https://github.com/mutantmonkey/golinx) + + ### Features - Display common filetypes (image, video, audio, markdown, pdf) - Display syntax-highlighted code with in-place editing -- Documented API with keys if need to restrict uploads (can use [linx-client](https://github.com/andreimarcu/linx-client) for uploading through command-line, or [LinxShare](https://github.com/iksteen/LinxShare/) client for android - also available on the (Play Store)[https://play.google.com/store/apps/details?id=org.thegraveyard.linxshare] ) +- Documented API with keys for restricting uploads - Torrent download of files using web seeding - File expiry, deletion key, file access key, and random filename options @@ -60,8 +69,8 @@ Ideally, you would use a reverse proxy such as nginx or caddy to handle TLS cert #### Using a binary release -1. Grab the latest binary from the [releases](https://github.com/andreimarcu/linx-server/releases) -2. Run ```./linx-server``` +1. Grab the latest binary from the [releases](https://github.com/andreimarcu/linx-server/releases), then run ```go install``` +2. Run ```linx-server -config path/to/linx-server.conf``` Usage From 486cc6ff778171eb2b5b231db2cc52d5f484352f Mon Sep 17 00:00:00 2001 From: Steven Tang Date: Mon, 30 Nov 2020 06:09:53 +1100 Subject: [PATCH 230/345] Remove entrypoint from sample docker-compose.yml (#252) Resolves #225 Entrypoint in Dockerfile specifies default bind, filespath, metapath. Having entrypoint in docker-compose.yml will remove those defaults. Without the entrypoint line, the command executed is: `/usr/local/bin/linx-server -bind=0.0.0.0:8080 -filespath=/data/files/ -metapath=/data/meta/ -config /data/linx-server.conf` --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 622d950..cf285b9 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,6 @@ services: linx-server: container_name: linx-server image: andreimarcu/linx-server - entrypoint: /usr/local/bin/linx-server command: -config /data/linx-server.conf volumes: - /path/to/files:/data/files From 94f63c204506d595194bd52b5f3d3c1ba19923f0 Mon Sep 17 00:00:00 2001 From: Andrei Marcu Date: Mon, 25 Jan 2021 11:29:55 -0800 Subject: [PATCH 231/345] Update README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index cf285b9..16318be 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,10 @@ +## Seeking new maintainer! +If anyone would be interested in taking on this project, I would be willing to transfer it over as development and work on issues has mostly stalled at this point. +Please [respond to this issue](https://github.com/andreimarcu/linx-server/issues/266) if interested! + +--- + linx-server ====== [![Build Status](https://travis-ci.org/andreimarcu/linx-server.svg?branch=master)](https://travis-ci.org/andreimarcu/linx-server) From 63975c2019d9a943be9f6d6f122239749b0e75f4 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Tue, 9 Feb 2021 20:00:20 -0500 Subject: [PATCH 232/345] Extra footer text block test. --- server.go | 2 ++ templates.go | 1 + templates/base.html | 4 +++- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/server.go b/server.go index 4d06db9..903288f 100644 --- a/server.go +++ b/server.go @@ -304,6 +304,8 @@ func main() { "path to directory containing .md files to render as custom pages") flag.Uint64Var(&Config.cleanupEveryMinutes, "cleanup-every-minutes", 0, "How often to clean up expired files in minutes (default is 0, which means files will be cleaned up as they are accessed)") + flag.StringVar(&Config.extraFooterText, "extrafootertext", "", + "Extra text above the footer for notices.") iniflags.Parse() diff --git a/templates.go b/templates.go index 7d38b51..6dcf852 100644 --- a/templates.go +++ b/templates.go @@ -87,6 +87,7 @@ func renderTemplate(tpl *pongo2.Template, context pongo2.Context, r *http.Reques context["sitepath"] = Config.sitePath context["selifpath"] = Config.selifPath context["custom_pages_names"] = customPagesNames + context["extra_footer_text"] = Config.extraFooterText var a string if Config.authFile == "" { diff --git a/templates/base.html b/templates/base.html index 7e4f82d..847a995 100644 --- a/templates/base.html +++ b/templates/base.html @@ -29,7 +29,9 @@
    {% block content %}{% endblock %} - +
    wv0{gj16X9Rn@b1LuTj#dD9GZOZ9BOBC%Bh^#obw3l!V!&1F@I>|45jDoe|N`^D)?!V znUZfU`grdYIgaD-&7Zn7`rnBu-GA0|%BAf-fC$y1S+@P_a5w=p6)5O<8XSnJ61;oG zQfrAR;$)Jhu2hs46pjKSO}3O+1ZG>!Wm1+mM;ERasy&kjZCgQ#tk48tb56XRteE7o z6{mQiA^eomF`ed);G^F(NBJyw6uf~5<^9iuw80FYl%LfY9$Nvu_mZ}?Q8jD6#FxFJ z+ci~=lvLFs>!Y(;H+ZV0mDkR$g-dj$OwA%j@o9iCfV)jnkupwt^*1O*QiR}y6qrQm zLXoq6$oRKwG}X%ADoGchs;MNYDs&<&D}@n_s&xWmq{0*-P5?YA|JxZe36tl~(4!Rgs$2DgZEt@_Zlti2!cu_XhV(6R`~S$(({-e{BnF349-gRTNGWPu!eqPq7y< zF)!)(u7+lH3!}-qa_sESD{jzwG7f31`J}lViMC!&dgZ&*Sxz=ACEvekTo=I=N>lCm z!7k_=0W=jT?6fHrgoG43_eoOktKDxZt}0!UX5>i)bR8rQ`-7CBHJbIvoRp;23}FG) zQ+`q#K)hK@(ZDEj8FRI*p(qFIrzY**oj>NlcKiI@2grSX)CWL3l&M!c){36vp`?-i z01l7{60wMLA`t^PB0HV8CD=^Q)zuePa-;I0f>vEeTeUCEWWh+6U@N9O6Z-E#UCdR% zwkTvt1hGdn{zaWrjj7TP^ig`HTVzH4A_oCJ6)3FI8wmtNV4(#LYLZKuYr}hzNtdc5 z35KB}Fi?V%-Zdtt61O?c-O8)Em3c`n6&(eq5AFjIXIou!$!Q^R%eN#& zvn!gNX`Wu;OR&4E`>LC}ogJSakZZ+-2NnqA$ILM^f@n`pZk7S%Y+^Dl-GixrTfW>- zuUOILjnjgNxlbss4qvaBFxz1YgNV3Sb%~4+r_MFABK>zQ;i@ThD0=Wl)rmIk)U9-2 zpQ6@l74;QPA+AH>M$!2LV78Andg=6p$rXikB~rFLNB$OT4SLGNg$l zsa`_%ntv(k1UA8Pk^yRJ6GB|_L&F>x92!k^_2NfFhfl6+a#t+X+OrH|t*d<8^^FisZ3%1c_XQ2EZKZW9p(T_KvoxJm5)z3dg zCN@R*wx!#-0|v+|$BbbQnJ7R4cR)9kGgKtWb2(5bdOVi_rTV8+dpZF@j?=OIF@C5f;kiUKPpS@qL=v2$&(MKf_vlUwyd8?xvPgL0cqieqhd}QE3TsM0!s_#f%Bv zyfnFjG`F@jk`AYKo3kh<#pu)kBC5JK1T~OT)aLr6%D2qhXEKN|X6Z8F2kbm}kG2MG z3ju`nWaIjOS%CxE+R1Ua(i`_M26p{$ zqns?unq8VanM95kf2QFVl%Ia#^z{rLjJv(qpmnPB4s~vyO`04u33T z58?4#R4c!2#W|BA=muLl^_+#|k~6x7G>6>a#+Rg4c@VV%4l$-SC(nGH_>$S*X=tcx zP4D~@G_ohLw0$qYLC34S;Tj7={S0=4sKlc+WOx+wnXWJuyYIf2d%-me%>xcE2mgd! zWu*w4ipw@3o1Mb6TQC#-L)V-m*AX_^@;=WJ(k-0^sfMgFrfQ8KXSU)oY}j^E*G>yA zkU?$1X}NkiiLx2147M~H-2olDo3#+QXMhUX#P=CJuA_djG*aTX`uu>YP(kJCz^)c3 z_cQlG@uydO(vDLy02Oe~>v>6)9r?&d^$TsT)#Vq1OW2Ko`Dgsx_m`!jVo&qbVF?v zm(>PMS`p)PDs3F$-ipKcAzLFc*)S+l~HBiVXgd^s!->3dvplamLp7iIB z^QT+MJk97idnqRxkI@ksP=lD6;hX+>_zC3&qnU*!I)9`s+7zqH0JPMNtpO7UDaz(F z#hCQQ)LM!YdkR5esB)f-p5GAb0W8XQx4xwt#T=` zE3y*h^j$_X3aWew70P*-qQczlv!Wp#HxlaBqJQ2&bJ77|3(Y_!YR9tOKbrKN5JVcafnM+0Mu)&?0t?<5*hhS1-Hx-(w<=|8S1(3!~jWz=t z@a_Ygl|nEolHUm+mcHcSmPNLwIz8kY_1R*s5}fE*f)%1JYAx+1wr?7^uWmgm^EF$h zbp<;bybggYO2j-RmE$?LnDq)$`b&E^O`p`WCv#3efye|U%)q`H1-u+^m9(rjC-}9z zdA4Q#@SR5TaxbSKy1bK#pb6V;skjE$U65+J=wVgOIM(Ag+pVfGdc8VJ9M^64+xV04 zEy`r)?)3`)_pscq1lqY1RM$gpL=@^3npNd-?Bu=D>(`z3Gxqp6YLN0+8*vHNI=d0pa80 z7+~)vH|t$Fd)oLt!O+bB033tl6ip#ha597*o;{i~d2QR`$yTrs;PAmm33_ywg>-dd z5H?Fe%>H*NNb#56979m9f7?(*y%C)ZASzSmjgc# z-OoTJwm{WWGH6m9U^Vv{$2Zf?he>mW>aC+CH`tG%@pl&lp@lMF$d2zzp^bjO`X!9d z+(Y8c_RNoeO}L$Af22Y)kZ+iCuBFNz?7;A0&>|r~E`wA|!UMm%*8);H8#ZVJ!tqU7 z4*uQ%K8hkTE(o709eJg9Fr+&}Pq0w|rc`Le*=;ZL&5-Hw*wMIiOD&`EU=K%EkSXKh3#6_}FYxyk`%?71-v^^2}w}M8jS>F%nhs#o0y6s+C z)CqKXUqe2{Zc}SDhGhasMw-Nu<@j;a4S=m%I-~bGLL0*EANAe+dnh9I=6gR{k02>+ zPdSWpiZrFf&R)UYU4(>hsuU)I$wPu3eJ|*|Giqxf4KgtW4&FXhR+pkuW^?LYgBS5( zKhOft0CxG8!s7FO*JW;-MQ9IjNw^f6*_R&QX%@9SZqDbxo`7%Y00RI7cm1)|MO%AM zcWo_Ytke`9X+$E*#T2VW*ugfQjaW|rrjd15#_3nsT#s!zE@3(vVHo-*+))x;=5CbV zXFsTifBE(m+8keE#j0#VYpNuJyXBS#CBh>{NHPw(d= z6GlG-ZrLvYh5aHp&}gfM3nl;y_I6BXAN*z6mROy^n9j&tQ`LqoDU@0Mo{JKMN$8m% z&0y|RKUiiYUo;=7sw@k@3m9ZXj0)j!l0#n>p(9*tSwxOIT+q;cS~KYTHg{!X?jX&0 zS#_Ez3fk;THrqBpWYrv14je^;M?b?F4jE`Z4M$tNdD$?{7UGP$TSier|3Xae4}*zT zDFxr2i@Yq$L~6ZtnH%g6y>+-af{LX^ruQbeaoRklfwzk!CX|E|!W1-N`D%?yKog7N~lCJjmdvdhB# zgtJljDJ)QX>#M{~Ea}`3Ys2vfQ;SWo{$r0;fqjJo!pubvH<;_y^E>i^9oQzJy*3x0 zs*#TjBUf&!03)}8o%$Ex^v?me;q71UGGPPLKsMHXgWIK&Vw}EBerz@nd(;EI3(LaT zWwS?YK_WhE%3rBzAZVJ1Te(Z8msRRX(V`|OueELzV})G>?DsR1&HUurbva7e)B`12 z&1ru_GiWt-nV@x)*a8~cOAwzU%ss{EB_69WPb~!|pkIts;T-R$oEo`A+36XdO=7FO z;$I5A1IlCi{Qbl0P$k8%AL8N&wwPKL0Knk}TA42k4>NkFbh4NiXi#s4pY>OFA5Nlo z`C(j_1o`ajapr1y?O6%Wb#`eg8>$a4KQEu41{{CnhBsmuTXwTz`Hoj%7&rqt6`=HO zSQ2*8p|LiZ;lf*RO1tc9fIlosGDId>DL|?&DM^Vr{afemM$Nvs(+5%IrdFR?W&+H@ zwOKyPDEFEVQyH0>Yln;&D;ke6c<^*eBXR6yb0Qhff4(-b)#k!?w%T@M_NDy(%<+@qvpV^i(`9B`R__xBDl&%*-=riU4aD$&pjsi9SuI?ea<00bj%{ZC}C_KL`sFKm@$2%_jBfq` zk>I3A9Cz|WMA-Q3!pX@kYbbw69A>=o`(Saff@-t6Z#J??5VU&LA8Ed4`to6zH@oRJ zS^;0#DU%ZGIPxH54j+JgH6*ii@hKIny=}^{@qEv}X2JYAUmHH8l5=F!-KWr8Cpo#? zveSEuHaP`D0^=!9n5|lYxi<*5@xvCZMVJPwFf0%kMR|JcjyzAchEkVkJnSA0+myb2 z7!n?SPOG&-5`9OdoCti)OKV!ca%$=GBz;pQ&|4i6KOHjSFUQ|l7${yuWx?=@pYwO* zS9xdls98CQwpDwGa&3-LcR=zL2K_bRwQ-QiR@m86Wd)4uRT z#5}<05IC44;%$mr6gcPaktAvhf}+g@1}(G4rbvM*ax+xzr;k@30><@Kf9Q*xSYpz@ zDzxUapaE7G#<5b3YUsl-Ue;@^!XzqIb+#OhFw{jTQ&xtK*UIje1X5z>aeVs$tNHl& z0RudU-)7l+DYn+A1P@7B0)mjF$oA2M)97UW?~KHCBJHpfto)|nb@|JP@MRTT_M$`M4XXmg9RzIHWQHzpXgAw}d!<0Wj<;gkV(?adk_dzH zsGu=lB`aE}EcjNnUp(s!D;}t9KQn%LAyw0bZj%iHe15P-$%g*vaDlQ- zvNK>MNCf>#ep2B?bU7ML?_g!cxc-EKcTN8a*_mV^_khQf+c9^@g{TBZ^aVPsN8}aR zY&FqKaZNBH-zCr(@wVc}9}~o;eHM{7Piv|pu50E-9@p)V)9WSOX)2asxeqG>-i`zc z6(riODV1KcaP}Jc<%Schf2O*PcC=Q+JZ)^vUv0S_y_a-TqqRang|l%mA2=xSNU6tY z6A=DQ$}K&^IC%ly#t}f6^LU2QYoo;jAFli1|#3 z3pkvmQqTm_i8*sL+w|DT-g2%Kx996n2)VSD+e;4)VcrKAJ_h;)wWgMDdzpp*?mHkZ8T4_8A_qnw`wDxed=A$GK)!o=d)_J?f>^JPQs&&X#2-9k7MZDOuWK{`%(Mgg+zz zerDdmG5E;u=CAh&M4t8|!r55LB9p}<%KaLv4O)>Jf9^+ez-iC6jGzykFTF^X zj#yw_l?yC^U-id+KzN)7i;9D~ea>7r-vHw`Tp1`nt9PqoF>yjbpURM1QD@PFU;yR2 z4`XjYSuw=JWg2-ZO*^gC6x-Hw46kmwvM82K8aAOr?3;mKzJs^S-qn=^BV7(=!FW(FoIGCyIPI|xoboLcYG{K9Bayf zMWM8QsyLJSJMC@(@BpnA!pLcUfV$t;DlNO_w2#ZJBfRHmgT+*U^P42Ahk+QD;#0e+ z6%6^^$SElkxf+cy3rr9`-fgUHm(U}*N8khAy8d{AaXfq0zMU$S4h^Hd6zT11)P?dHTH6Z_(KEfg@{Bk`i#6M8Mg2I9J;Q2Mq32jc_;)7{mv>7dv437Z3|IGK}cci#UD&@3Y@ z6)s&JRq z7jiF#%4!+`O-1SyBZK}YxZy8#!yIy=exM&5DGZV>JL)<>a^wXOaK}Ao+MgF~WFKoT zncYe61GAnmpR=2nL*BAtE?Wxcc8!#etV1W9qk5V$QM~cf?KdplebBDU(K7Ol@p|z$I}ic>&~w8cChg4Y>P@WY;`QoJ52+v>_fpT#&hbD@Z2dQ zh&FjgI&189-;Uvb9ey|#13c9bQ!489jFqH?OjX)P|MCAGs%>GZk)>744t4)KEIXaub>N zkjv1sMS4*mT8Y%8dt`8N!V$feOf#AOm)VVVlRShEK{{BkGFL=vMF~lNh)mWZSRq+u zjZtA3^g6E(ES^G|T`m3-o|8v;Rq9sn2t#_rwEExk<9NVrD&&3cd7&cs@QH1{>Bg6Pl zKMCRq0{;se`a{rgTdrxGajj2Q>EfzufM=%)zpjLvG*`3}ysEOX4Uhsfk6Cuxh)!oy>FIeV6cR0T{ zN7>aVW}PW372T4bDlv=k2PitV_US?N5bU$Yy}DsD*<4S#a9(uFn?&^T(?JTJF*(0? z?wfzF>V(#9@t#|tJ}|8qgn+HEhYP)nFq&`7@qP*kI@4oQu?Maf=wLtg-O22G-y;`z z6SjSO+DfLwyarnR_^P52Ibd9|MuCP}%c}@&6_qP19&_;w^ybqvy14mC zvLBibMh7iYmThegz^7~Y>)n57Xnhpgbd*;+d6$bdtXLp(r) zdZzP321252bR{zV>Ho&D=%%rG_?9|RPxd?Dmv}e@SuW8REJx_!zTYU8IE&0v^oFtl z0~;dINPR(Ic>wngKns#>`!3Hy_SZMdPa#)>o2KHb@HB}xHtc2yf#M?Bgwv%cuM%CT7+g3xytQCQn4IZrEg1EYGBBwq z6+_p#U?!ZsE~7GeXgi!gpk(MG@g$TC__A~m2M8v9B z-AUPhe*g}=io(GywF3DI_9;0E^B`JJzpf!GU+p2Z^uAi|UFUY9@AC;U?7~6jl;Y#| zu-XweVyoDrJkXheZyvVCzK`l`eZoO>5nZ(iuVg2xdfmGR>que~F0@ElpSvJvJC%kc z*MIZuj{7NYrpoF4g?j4Y7q+6b*lkX2M8XUe*H$(t+%oH*Ri<`EJN7spC>7{dDt3(z z>95tT7j|m&u@6SX4xv?gL}^QxB98~YOOXc!V|!u`-?+m8M(}C(zjUx4vPWq4pJs)n z`q%>h&0tFx^mt72v0hZk^+K4k)ZLq#6GXvkY_@%{OYSVd{c6fUJoYi%qq%!8wEz5a z;J$U>V0VxgtTWeJH?kr?6Ug(|eW*letP<@JtqNX8-bh)iPcg#P0bHs5J%>PG1K#C*Q@5D7r?lXHk3MLd?QObrYD9KQWUe)YdF?k4hw?zM@d$E~qhZ|S$!k%o zZO(`-ik1qRZzk(^fF|$2Csu$n)WCC*i98k{TQk{uz5>Cf$6F|%2R{ZhY*t~P*fCQjfydb&He zq+o%d3n&WK5R^$DM?l=XAMP8QSr`Ax!X$=mQ@3FjvLf}TWm|mp zbouvMd`l1G(V!nm0gxqKIJ5tVZ~P_7K`d?Bgn6sjYYllrzLUw@w`k&ZH%XrjaO0%) zpVYkcdSZ%Vzj+k-87q$4N_qh7^#HE4TFtQ4AQJfsx+I1ZZZt_IOU|a{FtyQY8f>_D zR$PQF#~R8ws?|D6a2ZHqt($FTY7nbZ-4#v->I8J?UP>_=Li@_=)(;O)jUhoOVmAuV zhn)%7-m_1qGE0keUk){h9^^5m1JtX0xMshu$$6xTQy#?98Sk|k-s`Cmr#x1DfI5{E z$+XUAK&myyQPU5NUpxEqVhcwwU_e?5m(-ayd?h^3dm|?3es_g9)0_|1X0}+$2iNL^ zDa9pCoZxdFx7I@0yX25}PD-OCYCA=%h~H|~JZ9V9D==(4aWleToRih%LQu7WboT?I$j{CF z*uBFTSUEAv_ZrTNeD^yqeP#|j%B?573oTPku?wk9eiy7-0BX|wls4*4P-qWTR*gS+ zG1?sO-}N(}GiVY6qiTP^IhC{5n>`E!}aZ09?5;J;6_s4$1^qK9{4i0kvPA z=2LJUt0dF0GT0SIS|iF$o+Haj>lF1zKguSgyzn2dkNhjTvjt26Z>u}NZnJ9JUcXdj z%(_=YiPOh!%^tS9#D6x?kkRmiOr`bmI3{$Y=aTS{jS~*+?4S|aO5K5HknMnbo~qKo zgDrYWiy$Fj1r0U@wr=TDyGArDJ#P%z`9hWQHB^nu2Psv(7H$i|*!P_)2&-*_ zpg#lwb1Un<4v9dZ^1ufZ5L6Jn#UeALOi|oNdE$8ZpfOl!0b$b#PQZc<5gW!A-LH{N71d9#bX2zc;B<5VR4a~9VNUbMj`Jn=$9`NQ z)MAx5Zn(i^qy~~fArjRc`?Xq+p)~GrKLKJr01GC~zMEIPj?4)^&#@aJt*%fv3ya>h zo7rnICmU%4clhkQUpjZ(cN*t>Jx)jQwIk!MWslHDv9Q__P5M0;otn2XB86rIV<9aE z%;Jq)*xssjBws`;myLwGEbfF7tZ$0cm;a4`0Myx`q?%{}k|$(@eAN>p%!_McVt%I% zcl|tr-tc;bntm_Fd~^^T}v$#jO*3a)zX9aZv#v zr+b~m*+ z8-lp&OMBePXCXia5Yeode-z(x0I5MO61nA#5hdyRKF3*S=PK4jK!-*CZA+X&wh{`z z_|$A(p3HtHCZEm)aA+9Ne+<_Ei10BmH5AXK_g!8J^w;dF0*Pl07E>CVJe|rT6Z?RY z;T0d#lX<|9p8h@Uco=2$ok3S79;>%W#IN+j9Ati6sjEIhO^Co z=4h&49Sb8J#+dWZVX&AGXA+-QKhX&o!6JGHh9ObJ8>-;kZ1+aKVnHOpC{~$*#7Dm& zIW4Dh`%>AM8$}RR!nbrM@{MRgnj@YP01HcQ{8usZRCM4$+@}Ei)p=_uU^?L5f9aIQ zT>=k_v{o%LjEq1O*LhCqr?yeePd$se`xtex8(=-w-s)iYW3bJvu~O?)xorruG?P#9 zTx<>pCa3bU{QvDoG6%qLA~i@cP(nah)M}HK1^i)IfVi{a*!zP)aW8Y!q{IQ0GdWVi=($qJHzBii8W0O_flzd?{ zC!*+;qciilJ29W175$;CWsaCj^e;AN#5nnBB7K5?xcK0_$OOCmq*!lH$j6||e~>3mmqowS|t8^U=G3@+ryI?dV`mI19gd z<(A7~)cKTXE%zV*014|M0O9J8MgNG5%YFE@jg59Q1w?8GyuzgkcQcH_nGKqK_G9(~ z?%o(yL|6AlJy?+T|Fk(6l}H}pu+Usy6|aPp2whezr0`$HfvC_$W!l5#g%{Ee&PH30 z?YnQp*!V8Tp9;?AO|d7MnI#-*R`z-&Q;%%u0XzILe5dkgpg5Zm3bQiI5%3@^ZLNI_ zhJ*<8y$%cBI&%UcEaEb=JYRtj$-eZ}o{X9-Q~_Vv9Iv`DVqtq0wma@^yegACR7my6 zD8;B;e-fvdIeZx4#II28H>w!EY}gQd&x9tVQrnWI`qOpx2e6gvs=l}1+I6;Q*&Rk_ z@g7i3`=)zMFs6S6njB1xeppHKj4OoH0RFuLzCZ+P4a8jzhZyYN#N94*+ao>`q91vB z78;OO%Mx)0!ou+SBm$=UmI+ZI?W{X=hVhfYtX8V#O%E$q04?8>Mz>-(SwXmAV?Hvq1S?fN1vDr{kyc<%=(V#fi@KG zqWd+ojI|JJ8k&aj*%~r1w=q7<5b*#B;t{-kWqR$nBu&a&(m!Exj7dVM{g#Z3iVB)Lyk^4eURByB^Y$Vv2AH%*>oX zkJumGgd8bT)g)+ihr_rToB5Ltu6D38^`g-#(r8cB_6jH!`10-~98j}zbF0v-K*bOX zBObNmzjfM#H>nd9`oo{^tC$7qZJn|v?+J}Fy*x=$GarH7e@O7{X@jvjVzkF{t=>rp{3Vu)tojFX|KKvge=W|FK64%@6uRtY3h6kg~fHTTctD)a9 zc7X#$g(}A&-Vz+ITE}VETfjla!s1jGYIK-tJHatxp2>&I#u1NgGS^({W29TOTE!5s zpQ~a{#xj9_kW?6=EJtgxh4sRjk5t{ud>~COPCFuWh@5vIUI7(9ex58R2sc|f%_6gE z>TC4VeRg2b>G903%Z)VJ(4d$=7E7O~L34vhCdP!w(#U(XPiV|`BLd5(t)n4{7w(aG zOe#E=ztO*~MXTnPTGLU!bOl0lMii-e>eXDY?)xbU{v|Z2Dfp^pr#MJbmzQxbdt0k! zw33zE`d!5$wQ~o=qjW?rpaZC-m;Vv0{Zh~!aioVPatHwy-X*Fc1nDFl7>Ki;)R(WE z;Vo`SXd|OpMGNp6S-s;xT*O#V*u21X7IY%Fq=93dtLQhAuP`=JhD@r#>bVbMK`V$T za^0>bS2dB??5}DsY!Mv`t@ENhxl&WSQ(E~X$C!x4`v$m4hh@{79V4LQVUM;_<#=@0 z?);Sn9l*pH3#PM|v03Bbtvp+O5bO~s#+u)OP0PtWm@6J%p`+c-xZv{)YNdjQL^fv^ zTPYv;sA|4|fObhGppbBn0b&_lw8015OAS@~WOThb;KGDP?tuTTEFnCg0V zM1=HRq2pyS&Ey@|=|W21m4)w-oNRVT{`&Tp`TG{ibNC3 zInprbuQ{tsicRbNTEeS1ygL+DUIQk7%Q71YZ13C;5qbdRZnT(Q?mgSQNljU(ROTPu zYTVGcTpHf*qx{$a%g#cWi++1n77rvaW5LjpHAp%+;jYDS{53K@KtbLnuM%0Sew%gv zpXJnaws?og*0$`>Pd;=9PLnnT>nPPwGWKCAt7aq2Oyr`wu`xV^4)2xx}wN>B$V zk9XbzBoF{5cG6FjGybPVD$by^+nNDKrCuOZ8|wt|Acu&W;ciRm(Jv%;V&! zmF%rDTJIr~gR7UEYzEB2*6Jg)YS_^?h*SmbdHC1QR(k;4peIq7sXqv@NnvK_Ii!6t zkLlnQvKQ&sudSq)2WR1$guujb38+6s)C6>3ZEnWR6gb}=w)bB#A&e+b+M12XUvEC) zB|GMU7MA$5LOc(M+FzqtPnS_rb7%gTf0vECC+{(1pNh%{0g?>K%}oe6!_`-W!{(2F zHb7e)qYc#whfbf`Jd|!l=@?sK7ElEb1LMRFeV zmqwWN0`EsDIT1TiClwO^fbB}U>IZ36oCocrYLk$6K37MiiDk3B#7&N#xml3V6e@5AsLyIbM3Px_(pl1Zr>mM~|EvUfa6LxG`E9@_J(h0f{Bn)sv=yOjG-AsE_nbJ<2c((CX?NoN{v4#XX~;rM#N&DdOD z-3qW&Fgu4ln=G>^U^d%SP%ThjB=9L15{`v}Z-AonnY=dj6M#NL4Q#kFYS?X|$ozaK z`;&X$)sX2m?lE*D>k`g`&lffAVR)x6{*m|-i4DABAD0M97YgkVY!Fj%yJ8pq*2%gw zdHVRgfF8~|8huT9@q+3a{-bA$12U(NA&0maY(O^an})o!T}&W=nYq?(qe1sRC>v(j zn*=!DNC<;rFOTG&F3K#Y{NjPw(aJ(xg09$2@L_WyCIB2!S2iiMAGLp-O-UX6gBt|x z@C<^~oXL_)wSQ-?Whoy5a0Re{RDZ*D9Jq!Pp(^`V3FyvlyifoF9%KZ;R<#Q8Aob8I zfcz&&_%oJui=1iz00Ni+s^W=%{$IuY83f{$er%{fOIL~^=MByFmx{@qC@ynU;K zS-v>Ko*4yL69S#sJe>bMeCh`mKBI5T5p@)FGjIfv0x5>kBv@{4M+O@gNZv4z!Tj3- zEwWr2Vjc{&Qy|a-(?f@x_m%`pnhC<@_#70K!Walj!*Qil6|A#iC+gdsu=5lTpoE z;ht=-i0*zsF=8a~$8;ohu`5@{14YLf#Bx7-79in89a(fBFOe}MMuGNIPDfdSa$2O( z>&cfkuuYq8!q$*Xr~1J*10-vylqvJ{*Ug|Deew3?ogb_5CDp=U`<2ILP_0^E-m}kM z>Lv8YIE&@S2~hyhh~3rr{+e<|fam|B+`E5|d(b~DrYXe+lHT6}EaVMXu$vZ$4W4M2 zXi5OQ49R=l!0aRe7_wjACD8p`H+JAwKGIC~8iR#FSnv3fg^qkD_lQLzU624)t@^7-^b~0+Rg$y9AX>cO zC40XOEmw*l{e2ZVm!`Hc1yL_TjYlvlbk&}{EPmY9EoUqMHg6X7~@4=N=_dmgiMDS z1?Zp58e3BimVbad4ZL^J`IhCi!z#2si`I62l|`b_lzMkfWG_GqD==0m zw6hVD=LgWiLnwq!t0kR@AVNBs@)Jt1-}W&(33 z)O!HR`HE0xaO4}#$xl7V>wYMhbwN>;R>2HY*IwLm`|o;iM-2Y@)?fOxJv>3sA>#Y5 zr0z35JD8(oU=w`cHn+IO?gY42v6vLKDXZ+pzqcdiC(f;;(c+Hc0L*#2;iZ2h)4S)? z9rC(1p<3oJ802^M+hlIjyhy?R3&S)w3O)w!FI2qi?O5ms_U@uw5q7C``x`lv8Sg^e zpRh++T{?T^WFe3A^DXSbJGt4GLjdVvM22cqE?q50NKh{bobM_Jv>k(~g<|=Qy8|;J ztUuR2!co7ByIV`ZRXK7MXsnR0{CBf%_jiOWi4{DTblF875QA`9o3P=O!Q!k?JCFH20pYf(55K`k+#&AhB?N znI0)y_H371eHa~XEwnR{b6ickJkwE^|6C8>AI_a*8Y}nfuuU(w=s!2hC&nezr6XGh z<`mkJwb8s>W5x1L=bBC;>lym*!XZGN%dhmL4>g+ICUP0yel<056n^#8-FQ^54bq`F z%r$ppIlA|yBKTUPb}|BK&++)apZfuK3sUt<-EQ(bh*4|$B)ELF+Jar;isYNg@C!l* zJl+?cM3u@z-gme3>kWA9^O41r8y=wMIR0-L9W`(R5Cbz*;maX*z@3bCnJ%b4vq3vo zzZ1+W1deWe6$VFWRg?$n6A6-_uNG^${KeK;XOWX3@h!>HgrMKIb!FpG)`@T;bD}7c zkALV92gBXdDxA2Xar);Y98~q(4dVT;s6Iij)XRX})gG2^t{M)@c&TJp?mRi3lEf!% zoCZy!ZKYp%A>}cfZ3~H6W1ENREgoEy zwDM>xXV~w@XM?LmcgKGunb}v^$8LB$b)Jq9#VCwF&&>^v+dqw9i!)B8{C~+ewW#hkSMO;xFJe>=lP0|+_7oLYOSX%h zFHaqkQg#x?ca+x@inCDZ@*VYvR_XTsO>>@M!50S>wB>l10I~nTo7Q+Ng zcyMZW(;TN=ix9@c%S0rWFvAEcwh`|m0B zo$RUFwDF15jdNd2K3Yu@wo&-N7F9+9O!{DA6Y2BC`Il7OPOls?WJ8KL`s%g&Arz<{ zJZ-45G|0P7&|PZ#cDHDqB#7)?=WL*@m6TuyzUXp0b!=A9$_ z;@j_x=E@=T&JlY#zPUnIHn~@?Mt&aoEURl1K#T=D2&0v(SqXMDXnm}mNq`mSV$tg|~ z2Ix)pPg>fpb9bhqY&>xsZWMNk^V<&4jw4ZIQFmq-4^{|Fieaf7muv(B^VpNbG?HaJ zmKy)7A<0(aSGvvtp|LQ5dQjfrh=9IcO29{A=I@V=(+>AwAgHDxm#!-4VhG^`tyP{o z#8ii;Kqi`GO80apI8?Zgw~eRos$ijj=;qL{cE7taE~eaks1L>bi!C*^K+V71r{{&| zaA-fSpF;j@fC#&1Fw18d;0$84fUyLJoD>{J;rDyl$l3I|H1X7bv5^_k@OcW4vNKY@ z7`WvADXF)H977dC`<+&cmbf8jE#Ox1VGw7Bozra)U>g>>dhv+jX6VG%u0E%-kx#XP z{ko@MKySIc+)ElXhw_X zxdQEOVn);kn!dyns#N@RG(B2DQ<#2sJgB3k)`C47bmlw@%{(+VMBe256KL#w(i2Z$ zE_AS!>%{@~G^1fD9mN@~;3S%Mh0e7@Ht}Hfq#$qUe|Wva60M{;Z%um`#kOe%=<2E5 zhYub?H!;4;-*(=LA%+k3O&9G|hS{LZnhjE$aiQ7e3Ip|d<(Q8_h5srM6`atFSjU^1 zzyxTnPLajQ;D5h;Ci%WbX?pREi~Nb8^O!Qy@k_d=<>-XKhJM9{VJx|hA7diT2Nu9% z54wV@)jTZDp|`0PBurVbJeF7HRev4`Z$4LPMe`@xV^~OkXr@jh#BbA`vyS;UVE9is zP}uh0`h>q#dUf_)18DSrN=4cmFehapgj@=RBBX<62Wss-3@r|}(x{&yne6*gXY>Tq z<0=Kd5iZ!9X|)+F!%3k)GXGlPy^Bme?rP<%n zzwLsmmnr9DL`SSMfanMT3r7sgq%OyZdy8kW{sOGDittLu~X3YtBkI6c-TIu})0 zq^4k@PWjx6@fus6vj@Tq(cH-e?9-(9k;1Z;VH};u4wq8C-GBa~zHKEW%27d&!ST0= z{{zf%Xt?9gFl7Mv-qt?>2eiscW|=2;Wdy9BXcvMD$lqIqE+mQDQiXmb66i;>U2%NU z@|A$26c}$Gyz6_B)TJsS&U>sufl-b50r9S=ztz*B30mzGYz&y=d}-U_;&K!a^>3Nt zGh7aDnfoc)R^m^9FK(T-_8oV^aX~xDH_dV1jqYRBftf4j=X)Gss*CA%S=Nh#zCisq zWFbHS_o%&k+6rU!2qN$MSel@T9>`V5wH137R~foE=<(dVvdw1KXy-{Or^=xv}^tcoAhV-!kh&h>Q8C}8q?(Q10GaF(fBHRFQ4G@P1>s8Uf3{= zTqlPVg#7_aOcuOQ!yKCuvzCPkqy~z)?UaR?r0XV-ua4u ztx^YBjpUiRReRGU6Gb#^ko6E=ds@nK%D1cN>SV zFrT@5en8-r_bK~@P6EpPNg9&XOmr&VmXyY&sYY`6SUDj=rq&JokU_3cN@Gihk%zyS zE>c?x#hv6(n$a0ko*UBNrKebXi?VL6s#mL~2S#s{z-0pv@VzM+U#?dFXqprt;SLp& z6pOM=;mcUVbH2&Z`wiIxI!4=EpbTj}C$vf>jA`20rp`(}vhV-^2qhr^;p?D9|Hm#B zigmBQt=N>u7&ozBDAmHXGoasBYeTKmbX06xz8*Fa(Xb63sc|IZi&6QrT{R8qk=mNm z?MBpN7$@O4xD$!jq8Pwa>d09@y&wQ10|4$ZK0=UY`SWzXwMd+P)?#Nu_vJS#wCj=u z%uT>BbAe!UMLv_NZbaQXNQA2>3+BWt8h-Aidt9lrpor|ZwXxh4x9JU4(sAEN(!;Se zHr;V)w;ZUB@IlQwuT!^QX$?4o>j4I7EkTP1UxFucjZSDiOQ$Jc*w@_e0H1f+_J6bx zM|!E=4%HG}+b-ZRf{MlU{c>Gey9gH}__vw^PbS`qp8~CZpl-^`{owkL&kkOcRBGcD zZD;mYf;G^Dpd)6sItIlPAZhZsY-G|b9f2+rraS8@-{=?IQX9k<4<=j}{MYc2WnL+> zMLrz7ogkgF0MjsW_h5KLIKHxrQarjUmQ^rRZKwjhm*g_-ARXJ6BTm`g$lmDsUjeS_ zff90ZH~euW0M06_!O7wdfuPg{?^Nx5z$z06s31t|`B69Cwqxb3!R*jtidYOe40j0* z@TbU|+4DQ8l+j1fN(_7DLK^F$nn{#*jWee%Z%nJQi4@y8eqQ)22C(CA&Gu7=ggx1b zWWCQkB_w~d`64`=BWwhxntFZ$>UiJ1TBarQ$$OPrz^HF1$itmM%Nsr?;QGwSMBCs@ zZebAG0^ote^U(1fo45-0vOd<|ZyZm24>4Fo{K>%mU2lOMui(6B#Js zDBQm&%}nhHQa%M0CA3y#BlTP0(9Tjc0Ex=nm|{qQwA&zq6O=Fs(Ll}%^GR(ZQAW*r zYyx^FupRRdVWE_$wEcL~`W^4_-Jt4tn0TwXf?`MZRfk(Wj>+^`BYsBq2F8$%w<8@a zu#^%UgOzXIa}yV+g0Q7>046KW!w>>VoJf*@v(@vvo%>V;NZ87^3cFK*yFt4EN&_!x z@2x^X#1VBEu>lDv@&y-M9dxZ&(lX-|tqB9YB7mw+ue^CzgW$y$siX#1>J#+IH}^ZL zZCveE+CA94vus^OA_5R|xT3>A&wL1xAsuXU6EUs68=>7Vgy}HW6(p~oP*kc*G(M1h zA$B*Kc4edz*{yh)N?O#d7=jj3!t*;nQ|)e9Bj9xFw)}tFz}lF;!`^|uYV8mLwcKis z2^z&OoyXSNKfzYZaPCNohD<2F`?#_^64m(tH4wlBl2EpLIV^l|af$-7_IC0~m&LH2 zGYh5)Lc+RkpoR1^^E0 z8*SF%=tvn@w>@02gTYB{y`_9~ZMM}1F2hXyT>1KR0DD_hmX1z*0(B*lkcMg~Felv7 zEEZCh+d>by_j)$t{Z52`i;@czMeglGlfN%JAJHPsKX|>_2fe@lyS^x9V zyobDCH&0`3jJs~XYm_a^H$o}E?5rV1pK=U+!rrfsLj!<3aWiTk!(}mC^XMW1{xBEM9ZF zNIB8Cd%f3={??$Absq#q=x1&Cp^PkwKRUNZ&NhJ6`HSLux3}DrBDXpcj1zd-ptO_1 zsHQ6JRkpCqAnDnC=lJR^f4GUdDC?+8oJk(e^|J3QUD9yRjkN8joAQhcA$YG=#rRjb z@)b`)i0^{t7KYWW<6}6gZ6oKjy|i zL!F@eZS*NZ#11RcMH)v%AsPwQi?#KVzf`^FNu5}#>DdL=-3I3xw=5JXjC!9A4LOF!& z1OzLC1+TfZk2nX4a_Nk8!G^(QV>9cQ0iyvQF3N$H}v zbhUlPZ3`le7c>{JM-M6b8G1s~E0lwv7Z?g)A;;Wn*L2|J=&4eEQylE=b3}}mh-%XG z1pgekGm`93Rcax8t z9%5n7x9ZTJY69CnHU~z>x#Jak-aAX7_aNUMQ)SwO&>#wXJp|QZM;b-E61x%Ey{G8Om+y#;FpW;w(b3ytDDCoRkg%V z+$$D>D(62*LV5AOt|zp#tohy}S(PIiXuv_!Myne6#MDKEP#~7Z{c^K-T@3=Ua%s5F zSSN5kpBk9>M55CI8VOMMW#7atk=*Z$m3cS(RW*uz09x5xW$ZFC4rD=f>w0^)%U(4t z0Y?)__W%u?3qk$9fmkavv{QHy@=p&29u?QM+awzf#d)j?n4Bc5Q3JjqBFwG)>$abve9^T z=}cGtoVS))rv^#`Dkgy?$ck&^?Yfjus|qjwEfFHnlVPe4yo{=vmqYZ=lRnrbjWJrK zsK{v$=&i&fXn@g$c>CYPB#<)K+J6SN^(<&?lC4(dad`}w>SacU3;q6JasVs>gPxzV zbQnEq@LPq2hS=OaLtR_?Lj%$*Myq*S0T4})Xy&=dgFW`bw4o$@(5CPRj^lX&HjHMH zfk|q~s7JGx9<;z)^O`2{t|sOWJ7hS5!-7598?VYnlLCN`0W)Kh@$%4h5daHS0X!z+zIlAUU`v$zN>-wK^xsj=7*0PY;|WEkmhK^Fzi ze|_Nqt)aMK+o|7;gKB?f9{O!LZGsP<`tl{!yN}xDr!OlB%RHg34aSk4{!NCy8amC7 zfLa+nyxLTnMm{aPNhW!+@CwabkoVwtrkof81}DZ&j>d8FKNI!Zn88JQYs5@m$!W1z z5(@$#$tzMInLZcob-Mc%?VU;}KPbPU-)ZEk;y&$=w{)x5dCXVQ-6mI^We-%aTFq*K zt>E)+*ycz+GWob_^gkEd5}AmmjUnY^OOVq36ph2Lw!sULsJ)_$iVvBjnU zp>??`-Ul}bCo5THr?op|s_x&AfP?6)0O2i`v6N-6-+rP`ReBz<`RHG(Wqx>jTn6%S z;5P36(KTe&u^ME>=;pL~#qka|7NkSud+Me9uo1uDG*Veh11Xian1Z3Ct0RL^<(n-n zaRj*cb{B1|dO??&;b4i38IeOZXA4`nN#=ZWay9D8hK(Z7Mr8?8RFe^JgqB@Zw_vm+ zpkq_Wq5w6A`_OVSOH+U+?yYQckwi-V`u)J z!>?8nsAdouNmkIhZXU?^OCwAfgk0G`ol!d`)rXzw{MCNNB%k}nDXpfC*kw9b4zvTt z#SVL~7J4g$Go_Yx#)F0kZ3VtqXo;=Hz@!d%jeVB)Yc-ErbK^ny7@8hxhO>+ zmHSTELnh4IzQ=0$DGcXXrglT;wTJ9<#Dbt?^aeMl>$Ygt`CM!8d@C_y)xqCN{KN7QP++2j^q4*Sca9oMZ3vW2St_a`L7U7|K> zTiKElWzay=BsH#If-R<4wo6u?j`{GP&<^cbg#!dwbr#|>1x^u$G?P~Y{cg=RDyG$3 zWb2v2-KHP57f_@e*bHwP8iZi}mJ2(jWN*$F)lXTgrm&G1*5W$NBpGY}ONh=~ha!IW)pIO05*fd$t{ zl^l86hpDryUHV|c6P0DKYxvv~_E@~NNK)%l>IpQ@tsdkug`6Pa6|!0y$|(AEN9lyI zb&j|<#;)`uQ3Xvv000dVA?&b5|3;tz$*g%8S_NWSF{twjS6)YqD7ypefiQy3ypp|? zPCpw&eK27h&94r~fU+g^HDmcM>%}9B1>HEd32yPF0|z0G@#f@*6JA#j#4P(}|NYks z7H(n)+RkRU4^#V1NamA;3%jM3jE1*0>ZR@h zY_g}1Ucq{Dr>CRS`3xF$XaEQoD{%Zq4q8$@_^pN&So}k0>3d6^r*y03&GR)XvtYT8 zpXer+eMCw=gZnG}vJcy7%fQD( z%8t+K^Cxq%k8H-fFsYHrw8<3pNLc|x669MbMb05|3A`ecG$+SyQsNU!Xob5KLVnzxamu+6%pLm0fFkokOSj9g)i_w)pbSUtgL00!JFv?{O6??!`%LT=rU(w4h9k^$JN zXLtV}(<=GPGN-L2C}NdIujo+LIJl|%rvM*Ve*XEsn4mKtc|Fu$v={6e7F{q_Do+IA zZb!>|K(N@NoKfr+BDMrzhY(OOJnLQxhp5=lN+Zh9B>Z>Uc%+uB|3_$^7J%F4xfe$( z1K?*?p}wMhv6$s<&)v;`r4Z-N6}%4hJX8m7>F#~Y^J)Yl^Y{>*Su+!6`0pSk@AVu5 z+ct{B=%$e&_JSe+_vk6zLK*LaQXDi>Uxw4J)MeKv$3y~4bp<9Qs@0G*XldFNoU^xG zI>gC$g~N~q-{*E=aBr!xGvBG`(Uj3r$VzO#XpYxW#We~Pm*G~<<~Gk7=Jw;5+Rk64 z2(TXf2jH*Oc93x;;g zVVOLGzudsBFr~pc!>$S-Tc!LclS-}JHHCJxKQjJs7UxeV0E4)SUUI|Y=|jdC_i`38 z96eYTVma0Kp}tC(SxwEkLSZ z9u)a&zmjfz2dcz96f8-_)j*uR}jb zp9ed)^t`~wgcQ$V+=P>tkg%A^vUB>t&og67`qL z|2Qq0Pc~=2z?KDC@6d11BIF1laTCPxzum*Y&TZNA%e_TNmZb7U!rxlTu6Wwi*YH~jrSI#Umt>GgMMQc4m4>T?rNk2Bm;EMYZ#CW??(HkH&ih*vX+t7BZO*W~)#&=BE4=b%-v8Uc*fYHB4F;xOkS zJd1QWi1GTxK%F&FA*jaD!PP1E$ZPc*u02e~$E=nn zH+jcMhVP%nbvH}jpbAlym=`i>Vw&5ITON4o<~zqRgPv25J3XZ;2y)XwBGwD8DE74s zzP8V#>IF@BH1b)A6vM(#leGnOzHJ`sR1DsirH~FG)20e_Fa0%;b=FNHs z^6NFeER~i*EA;Y)9J)_jMbkKKbO1|G1RvKYb7iqSTH?i?2L(-h1u!+sS*J|sU>08K zB=8U`Sr|^^u7=NehwDDiR29fET;wj~ckXHnFR3oCzZh1URLOM``EOE9gEZ@=ruE<| zKU8#s-UH>h*2jgUar_ffanZC-tMTBa)+*U;6}YiL@NsqN)+_RN9GrfJbd49cgfa|L zeHs&Hl|y|$8E!E_J392k{pnrk%r!qmY93H@3z}!VTy~aJBJQ<|*Wg<`8%zay&$tJF z9j=A+zbavV#=Q`(!!giYjAD%_W%-|a9u%nU%gk6Cklw|PM+z+-&(!;wW(No4{evP9 zvY$|d$CUYu4ZS1%qHVCM1!3#GcGq$>I$L2SL5e@FL9PE8PZZ$3bGuIZ1R&)h_HTrb zE;pQB<40zzms-rLi_)QbPABrCwS$6TC8{U6t8tC37B z$3}HaG#GRin(tj0R$15Cx3o48FOMgNn}9<4Kppy+gLunvPwbGD7m87Y;8Ryy3R^K4 z5=@nOv?+#|0e)vE|NUlS~@p;#1QXundQ#PQ2nqj?a6I8_l!)XcmIdh0D!|% zjg9SXbI-IkOsc?tY7?@lST8S?NCo9{2NlVLd18*{oi$IaW<&S`EUQm90w3(63)TCR zhM!4FZ+g#K&65>9CH?~Ik;NSJdNP9nx&7BfyuFQTXd(l=XQDU@SnAt7w=1sQdP%^B zG-7z*vim`H;-`zWB54}fGmyn^D5)u>L7Q{{M^}*x(EZ>YfG!vC8#fAoYpUWQOe<| zR|Afd`EGO(9mO2IeI@vFv_n|%r!uX8Uc|d->s$! zcy4O?y_}7WzqppXl5dD`-1W>^$bL|J-d|xXmIY z=LB~bigY8k$SGFreeqA-RLj5i6*`1VLc%{L83m^{;8$@_v{_P*Wti8f)t0)xsJMqy zm)Ou15Lru;e-po$_AGT9M=)83gdNL0*J|y(vQD+-Hj+rFY(dXc;=rIA3v7)XhVW0E z97LVr*L{9S94zh;3a2k#ASybhw8sdF;C}=Vj}adH!d7QI&gAW9ylz7eBzs?`Km zeq9TuEG^u<8K(NodEsi{|M>kaWc6su?tO3)PAd}Y&g>53dYqjbERe-JTw_!S!5H1E_Zfrb4idX5qD$NSKdx2rCapSGjp%_S zi=-h6!+hRMXy2CE?Z?*Rga)!FwztwP_J@ zv6&REsrpF`*p^U1T@DEKxv2@#9fv#wvU7(TB4QJ{fnzm+7?8zyj_!Hbq#{b4j$afZ z8u7>aiZZf4U7*>I*>n0i%3I|SqUz&`u_am_91X%6sn-VZ(I=CTO#G>=Bxb44MA`?8 zlp3Ww7M(sLszXYE3m#d#;W*!3j)hr@ppjb9in6t3=G?3Dv$QkG!(7)t3Sa;3` z%EpP{eEMPl_py2aQ}nsCdx`U5M!K1YjZc(} z8pF(6HEVEUba%;sSU=?z|J&lYS)RU6AptAF`(cQDz-{A z@mF~1H=8S~(1=CgA;}+HS`-{LcCtDmX`j}vc=2vEWs$aa1B-@bi!Tz-Ag|6$zTISE zH5O$%C+r1r0KRs5 zjw`fma_t>Jz^cKuLCupVU7~n^%>=K75rPpg0=YM0P8{ zm-Hqn=Jq(@$b9p9_SvloVbzV@4VeUpkq_lSV3s zky1~HBk6t)VWmY&;#0WUp=7p6lOx6=a3y{w3MU^2E@vXTF2{7_D53O`Su^Di|$fRq9+&HlT58mx+j$khSY|l_t~MaqJN_00k5pRkluqvL?^E6 z`Gjo&aZu7fO08=ul;4ZgwAoEO?5^f0FmuG!C~F>qvZvlXfh9U%zI-xn;8hvi3x1t5 z=a)QW(|H$ER|)gqTh>LpjMmb~kH;gMQGm;Tko>xY1q^7avx`!METlOO!W!Gmr^!e* zwqt}BXn(T93+c|QjIHsiM35w4AEDAB z_l=gZ21hqO)gT<0=)k)j$)Oyz;30NRyOOR4{HDo#qXy}e zBkA3TiJ6`@P8rDtw^Se6jovqQcIpHI%bug@SRRUr2Dl4#gvno)ok@!5H$Y3>R6Mh+ z0C%YawYM7`7^~>{VQC%n5Fi!g-(>Ew1C-T$#EVj5W_HN><~T3vZ?@&Ecd`rLKx9<4 z0r*7w9(}=&1~fKMD_SPfY;_$wuPT`UP_|(|Ig^aAT`=Gp`YGP|4`SXdnZGNo9pB3C zctseX-V9{~E08<{N_W1QHV4fp9W35W_|9tKtyGAyk7aCp6xSRM-ZjxQ4{Rx;>iG}C zh$(zGAdPXoioUL<_-u~8bjmq_P!eP|>T~gtX39S6qM^8np?mK;2*1Jhyc1kAK%+5c zkQVq~eZu0@o6rGOL!w-{fi|k9hKEk~SZ_VB85^JsT>OL7L(CN4Wlqf6>DOZA*tLZC zzDp_PJFM}ieoDGD-c1VEf_wv#V>8Dzf`#8$^}9a$Y7cEOELxacH@ENV zA){*Ge(3}fV3t#z0ydNI-Hs+u;;H-GVXphVF9hkgNy*NWQf{bdMhZ2>re|q6%Gto? zoVS>=Wq#(sLqvof>LkS8?B+hBpvjF;{|lU1bHTHUh(Zcv@pPyzi=05rudq~%IhWL^#4n)E75F>~Gr!Dy^{+}`c- z1q~0m(Zdwe=Pw2*)?QM}#lGZ}F56P>eSO*gP21mX|GMI(?tpw*!@HXPn1JSsU4ExP zS9GDU4n5U_bP6=D_zOLG0IOYDyKmUJ{$ImG9MzyUNY?{qyVR$SfKzxe+H@Ry#zG^7 zKJ&Y!F`jcb?+f%6jbaW-X7l`(dAIs{=T$y_^K7`v%h#fB8K_bhGCBTwg|3MuGn4~8 z3>>5B9JoSVbfGR3hA!rh)e&Rup1`HS9}lVGz)DSgVmab@^7G9fB*WYcuBx0Rt#uM} z`Ielrf|Ktz)Y13{L4IPfpVXAUec@3`LILIuS(1y0t6C*fAdAZBP#1+77_%34bB(@R zA)Sgdnnc{1==CzluAm;akIktSB4onD&dSWOGG)ZQ8IQ8t7*I6*=|~D4;+iBS`SZhW zk5-AmLk4Owx0xVEB`A7$) zM-i$&damXY%v{+MTL8kWDo(*w-^FyDQZa}05^?ULIA>>KlBewHZKGbeZuqd9(?p;h z>@H0QdiOkGT6WT2lpb^?h&2MhDRpnP*r$H465AJJ;}QsZe4A5xiYLL|=k>k8h)1~y zC!9=3g)>t6&n>tl zpuQQMVM`QB`7#=+@MDb|!%i}X7jiH*J2^`xBoNt6CF7@an z?k!wz7}mBnlfQztNx|5D<(GTQxSVAUEEJFrE>>q>8D_sJIKXBE`J+V-R@|F0TG6*j zVV(#erI1a==>PVfg&$`AqSJDu!2S+{f#5JWLE)>-NsSpvhO2l?mcO4Ib5hXktwZ7^ zOn0vjnA5-$uMZHvwc({7GmRTkFc?GdN{D9O+=<{JsO`BJZ1kBn*mhbPGjxpB0f2zr z&EiF=5MY$I{&6mNawm=&-=u^~%yv>oluoao$yV-cETr~000B=0jp|>fAp5M z{1VzE9%Y9bZ$j=o{p1IrzjlFy<`|%V>Wb~XVXz8_;^-)y%mDI61rGle&`+wiA1BGy zs18n!zX<86V%Gz~xcW`k(SZ-Yqi0E4=H&88DRcva41qP9jH1e70&u~8*d7^p#4B!w z_>n{6)`9`K>Y^lZl2IY(!`gedcdOj#AEIVblx3=rO{kaALpmw+&AvDe$ZtXkdsY4A z?T9F#q^NcGoJu{YB?2X7m?M)xH%{CRFjUaF*@tZe4=gDS2f@jvkST#+4mp^Mly2_=@s=pCN9#o473LQqfxXv)Z zRU9r%a1!-7+Ye?jXh8NREh1<6v~1>Da&{PQwDFW_G(`)~W2b(cYR&m<{~lBAJ1cXU z*lFA&m=N$QP0IWbnC(R5it;ioe?fkYgD~@{{RnMAtzq&~?9|HpP2& zlWjF)fhU~h2d0`@DEV%o7RTJxOM31aE=zqs1{q9JwtCHC2S{$@_P&)1CRYf@z@p5F zPf~U&6$z(Doh7`+{L8L7>b&1?>p0y0Pv!lI`o%CP&Zdq#)(sUg2N2DC?rM_27hxe24Bp zJ1#Eq#bZrtul`gSs**PRzYeDwN25q$zt_+=a&AuZmXi#li1|)R<@8>BeFoCsYD*gY zqWBj)&kAgMLrEHZh$<{e07nIiWAj)QbGaix5woOnjui1JTgxqq|cll z@-{XAYCx60NC?9gfXYP76rk>Jfmw;KVsr$L~ACTJV@ta{oMuEr5}ZX}QN za_zC7f=XdNhYgu!Nw@w7%SX+U*jp#e_r$$id-}1xmFP#b;C{&B}U-e>$9Ml`DN;BWE@I%-$V|?7a(=5rl<~rL&j_ z*hKs7GdriONqjYL4Xu=#Mq{f9>nSUqTl_z7P5gCEBYevKDDwzMO9LRLJ{xD zHhj)k?U^eF3_$C`Fp{SjWgyTB1qyNXr58Q9o~I=lF7S;$h<&7vwA$39EKC8YHv}Fk zA=VH$w~5D7z3Yub{= z(n$&Rr~qZ}i+x0Ai%OV;e{%>Rf=y#5+F2WBFsvyx+EF(t+JR%lz$%w>I;tX$nF(dz zrfDFKM8y~Hxm}V=Z!8QPC5W~Eaq12RIF)+@gh^2@Rf8szo2fcN9EK%SxUlNj< zm830gr-q{qT%14ud3PKc=bBaoTVKM@+au#t$SoLky6`~_MQ$QB3+vAH&tFWzY4My@ zk}BQNO%@3DNtd=?X^#_tS1zDh8SjzpS<7RAZb@e?wHLCU3NuRkn;f&Zn24*o6iOsE zOVQ`BqO1^2H-5LtB{-JD?yZJ-!;Vb$eHTUbd000!IA??6M z|8C`Az~JeIcTpK|fNizMI^~ca&?5Way+2;d*we~1=@OlG!Vb$h@CJsaFqi`vY3~6< zzSG?Ky_&!L9>mI;jfcF+>;|MFBn^_J$I-p;Hw78^Oos^in4qmf_YEPD`Ar8yE@&i< z@=KM4Q)=8Oj|{qMge9ZN-xC}QFEp?l!Jp9GAR#o|?z({esde8aIU)3LY7 z!qHat8~i7h7M~{6eL2TQy8MvQlUAk!ON!qGL9ON#mFy`~$)0ad90r@6G^oa@HZSYT zZXjBa`D-!ra@MZd_E<~=$hLC`P(z`Ww;U!JAQtvZhvQP=`&JmJ?XZ6n8bW3B5mNQ_ z#vKdc4k1CA^*fU7TK}M($HOIGL&?%8KyLjTexqtI*ESOwtHmg?B>cZRTB72pNX%)Y z6v;8j$h!V^pcW5Uudi@Aul_v6Z7@xNP4<{^=Qx6!#Vqb*UV$VIo#ii4Ts<`e@33rm`~&1#=r z?7CYl63*=wCh#RwE4pQYT<^7+Y@1Y7(S;Y)V+PwRZceGt%-PK}{sR+Cov>DLO5 z%xgfu^o)ECh~(Q z#Lm@zVoaqbhw|>85iV`<+EW@F4WI=pn}d1Fm3bS-!a9(Yq&+`$O^eWCU>-tA*!_X~ zp>3U4jh?CMd>{mJ`zt}`8|MC4q9@tdKDrIYEn~7RsGbJa#OuL(lgXbjU}eSkTG`}+ zaNCt=LS_A+muz>GYRC<0Z%f&oyk!dfdu>U=Qn5kUKVY+M23P|iOWOSBk$D zT%HAAt3XX;MH+T2Pyx4)|FKb1$1`UJ%_o#FlxucezM}kKWb*gAGw)hsXeR-dlY(TE^Npuq!J8Q_-D z|B&&$Z}nQ4HfA9Qh=nP7I%lG2s_)s`p|WYU_q~yrDv3I<0M%OF$&cAA$6Vk`d~9G~ zSS1>34kkc;ThxZYBl4iN4f{%S!FGfJR_&(m)cI6G+$O2ANC<2ic#F<;BHus$nZ@6G z>c|toS&P6|E4bAwAoYP1PrtWEa`kNvCFx0Nlz(DJo462^C3_>257SP7rp{JlN?S+3 zXk;8Q-nLXq%h9TWsg&^$h(E-DJ}~j;T41wer`rYr3xk~;9J@>8$!I?W=@0*H1hwuY zp?Kp#YeP*p7HawySUpqK)9aChrZ8~k{N0xNu#Jf+WWRR8UwbegI+!e~yw7SD6&pN} zOJN~a-!};Ok<_bc$?(OOlVu_gPAM@IJBwc)>#hoT{W1d&4ops9Ge;Bcj(6=B zffseoz+;tC*hIO8k6!V*L7%=>NJo+&)_6h_ZZo7xYb?YordH-zT}Rc(eg;kNw8zmH z6Lq;9vc9cxhbM6TYYYUdQe#Eb&gE#NSPEp3hUnsqw())b!rTE)6%%jy1B|B_U|2$Z z^Z%MUHPR<+P-45I4(fX+FG16#yLZYqS zJ=I4-lWE#p>b>3NhNJCjgNAZ9NfF0dPSA|KkC>0z~(EGh>lRv+c^2XVg~MleqXx-tO~F}#%%VYUtFb{JwuWQQ&6QVB(%7K zO8#UStGM8*G%UQrEH@@Gg+=w#qj|#4FN$b;lnmJm3tu&HizZ5T8xDAauTIxn z_HRq#!oMVjA^59XT--oMBl=Z>s>z$J83Z`8q$wpZkVoO0*C_4I6Cbo!45EqFcJ~Jn zKvhM#y!RI|G}RGtd6O;X6EqPm+{9_{!=`+*;Mm9Qe#D=$Ppx5tkP+QKG+q_bXL!AR z)GBAsBnk>L)S#B-59~g4zb+|Rss37UHXxPNYny&+32ueXv8QeXZ-IsPwj{=OBd&uP z!(CH=s^nX~Td7MbR+?u=xD29(rX~@i#{A_8v`s1UahLSigX7H;1S$1W3iY;j^jf83 z(7}>|L0J*tBdOx&=t$R68{XkqoEPRjBS<^pr9p#Sng4+6XqW_i1(=Ke47rH zPa|DwR%s+dd?wXPlFJ2CGI6bH<MM_73YTvbQZIX|G3p$tE-;OdfbGM)(;IV zGQl2}hZSND4h@{##F0+W5!FabXVV4BaaWzaV?S=%iY4h@BI5z`g z$Z%v2{`NKa0pHHnae~tg+v?gNVJ0^}MV&sz+FU6tBKeoN*jeF8=(a1M?6Cuw7n6pb zl_N(|I0kk;ry)0K>%Av8{_ZcnR$*S7*V$mQ8I{(8pNYt*t?ogm&rV?q*T~n{3YbFM z@7G$fg_ZZXc2ao=NE{41>_>XQa+67+P1C7VngY?;DrdY=My1`K?fxQOV&|MES@oYy zyDwkg+civ4CqXYywqf;lK_d!cpbkx#Ol@iUXPDc3X^CkoO337LRp`(Y;oa9C!2Yk* zIN5s93;2C|a1X8=OT2H^C^EKXfC~tQaAH_%4^xnto@=otbPAm+g2U;* zUOqm`?iK9`5H2Cr6esDdf0>o8mC9rmt(9QRbyaMcBLC9uOKaavjeUY~!^P)08{jpf z6?wnb8ixg23zQISy6B-uDR0~^kztiBQa0kZDU}Q)gsc*`s2aHllUYETMzgnW1gY%M zx`_lJmi#a45{O+{RkpLA>D-#p1uD=VV$}VlY@_}38R|PTJ<6hmv9IG7O4WT;+Pxqr zg9Coc)O&RRWw~fQ42hwBHY)?iMqh8l8bC%>sr_HQP$jUdJ9d{P4Abw)jxf7|{Fbbe z@|=!Q_Ki<<_R}gj9#O5L1w9gQfmOsuZw$GX{S6F??N6`sSTlX|s(bd~igRF2+>*yN z?-BGY5SbYg;f@#gU>5reya{*RL+uB)+OXx?_VdnPlgrrY-0O`91blwE!XMq(Y!XDdAthJxX9HuG{S-_^Z^nwHHgMka?zbW z45@k?RX1;<3fqClf4{-Cvb4^nfyHwq2s!tbJW2eY*5uH89Fqw5wU>s{FB5uyEsLUy z^q$W%KX}I9LJ?W6)IM8V(!0*jNR{-(Yd=9JST1XD(wd`VsQ4^WV9^`jZ$Y0MkzVy8cZQ#|lSjq_>bzzV#?e59$~(}&^+WD5Xd5UA zxyI8xey|&JK6sCcwESB};6}*Xsf^%7ziD3{?+LiTy5T@aN$!0C2*Yc0V0z)aDN$&{ z)izHeo0N!z9OfggX_v2w59};eT8yE@%YqR6(~yJm?#Z}EdTps|F;I)fAko0mS}%dN zIs+_RlBF@Xe>HCZJI3r_HCH@=K*dGkrMl5OUTx~%9q?^(&r-PT`2zgJ4-Y42F502m@aJS3>qpEMUoV0BDP(zi%wYvB`rq{)xO+f zF+MGZi4TykC>rM*Fw}G%>A-(+aR*BFl$S+VJtv%Y1jVYX+?2}up3Abs+aew;pHre! z>1S|REEBr;cB9G;oXh%O# zUDj^~d*AfeR>iA|S}9z5X||vLlWS3?N!0YsWVp%_=cQy)l8gt2Kk(gO-9VG4x;GDh z9Q4XSzJp^nT$)1_inu-@xiDb=oPjsH-s7nN0+0)N30eyJ_%c)QlcqiJ=Gkc!M_47w zq+B7|!+nXIN1kf@2_1ePKn6YO9*S|2A4kUaS7w8(-SFNr?U5(9;SJI4{H_K0dIHhz5^o`bNSsE#Qke&8@fhLWC+JR z9%YxjX`IlGgHcQHyxcgUxDjMNZO*vG_WfgmuO!~VtnKvqtj6$ehL#mD20DE>acPG)0{Sp#7P_hv-#3gOeCoga{AzI_r*24@)cSh+AHHYvWh-=HSy3ng9lSU{;MZ`JmtE z;j%m!p{OWHuz^cWhz>1NKfFK*!N&Am-}coyW=p>Eu^Njap8a(v5QS&FVm$=cix#O_ zDOCopff=vT^Q867 zWLsuxyJ#^5+*3Zy#`AqLm~ADuKHj28Qrz(o7_N1Fnqi{QD0Ao1&1VUt;{y@Dz4ZI? zn(|4l^fgo4Btv$Br+G|L39Ga@yTetdM0tF=7whANPVbW7;MpAGS@C|V3G*8eHwK(i z%c!^T0df4W#%n1+TCP~hy?H{)gcA*Nr!8caS^0E%{jNtn@Y&!5H|AQxb+qV+XaD4H zBaU8k*KV_a2(hiDKD{*Gm=0Kz5As8TIg%IGxeI*NZsrT}?>S8iW2!w$O?e1)8#sLt z+cDWSPd=fzX-iHCvG&s23A_qwEvMD+?cOieLd z^u)QXSnb`|AcsXyMFXxQ3Kr!o+FA@_@OzM(&Av zF;ZiPeXnYdiZWd5p0zI=`U&A>Yg@0V48hi-jXLU*f5w&NAu96*DhggUG000X3Apqg+z()T8nk>Q0l~CL= z6FNQ1jvQQkG@`+mLCjSxUCoBW8NFHz6mA_n+@#(pfHMSs|4PA9p6BIiRMBP8Hvrn- z0#>idmIpuc4Gt@yChE|fxgc6iLyA?W)2irzI?Q|pN3m3S!I90J7SVB4>}4i8+DPR% z{Q!n8W+NoH2Kzssr`97MjNQs+__?6=8ba&VaWy$*729oe*{ttj3TGW#YOt7fIq0aK z>`!r*C%`WTOT|k6I2$8t?*~K?<0|c+Gb(md{nJCW3?1JYsJP(Z(B}#5Kfxo@(!dy= z77bvdR@SWj>|}^=Ic2pi`%aBrkGP6&`yo7${F`HSzs;chLdq7}ewKzNCHua{fgN%T zha4?V-jJVAv3qmIz}Fs=p@VBHKDcruD=smysPn{*ddH2gb2J&BBJbr3@M81M5zd82Av0X^H zGE;M`Czn;43V5Ug@+Hn-N0h^G3Vck1Pdq0YcMKtAn zU_ban<#8w}XGxz235vJ7>gA8)*mbu?_kwcU0%uKW8!jajSjC&C?3$c4ff86hgLiZ$ z7s+wQ8MABfnZHiEJV0$~2BTGsYSpmGP`!`@rox%Tzf!pS$GmT=YP%vQ{kuEwcw4~y ziL@hW_z@rsc@qj0T{iHZE;P$BLqR>K;HWVHtJXhF>(NcR!Mf?yBjt*(dr2hXD0(+P zd(OL*FPEn;x+(*onF~(dx~LKOd{FY|=*G#%qTMS66vS44o(yGzS)3z*>fRSnJ-t;p zK4zBdSvZ@ZBVDmR>a>P`xr^w^!+VX9Xj!>NDyin4hk2Z^7cOSw0G~mpdLusR3e#FfHD)>C z6!77^b(EHqdHr1nNgh4ue*3Xh1FKtb(F;hokZ-c-0AoNvRV~-%$aG@ z1-)@pkEq1oJH5?IVB{O|<4uu>zdOaiJQbfaEm$T#^gF|(cmXsiXbj-Q+@hS;eR+Jo zQPW@DKAmgXFH$S5C7Zxr<3$*(6!l)x{B}&&89%<^5pVClu{e;Iz(>EY215dHmc?EN zA<`m=Mq}GMKC?ftM;oi(Gv;Wx{#Jb|y0D@06A=+|iWE&a zBHJpo_G6Lp3mr%IZfTaW{?lNlrv$jXV->?+QFm0N&qLrnui4`}Gzib|i0AYTq2P~- zH5XTemo(^ZgL6ZtlLh{XmWvwoH5@M|CU4V7aMJY<894QO5eoS9sw}i!*LW<+6J6RI z_F_ET3N5qk`B5Z^=@3*e!s?hUR$^_vXt4ZeLPAqe@L`^~K!Hx$#C7n#y6#l(sH#6q zc+*xV*m&%rw1yTUD(T_xW9mHjOt@lL^@@6TExmCoXIZBooVkMTo~ajCk+OY$iB|F& z+}Q<%bZcOjpBO3a>k7qDY1&e_J$&_xG}A_-tU4&11DN z#{<1(wsI-R=?w_wrhI}6;yRdj%vbC8STyt%r^Cc!v(tcn)^)(*@aayH^lPlDb;EQvJu4`)kxV<}Uad0KReO5PIzlH~3Uwn?^;^J_BzQv~LFT%;X zP;OK=Wv={)U5^_ZRd;1`EuDO=;#x9=J}!rc6}rImc#tJ2ribZkT6pe+hb8&-rp5$W zl|Fii9Ybo*k%~D4Ax7u&4*Bmfl%&|H5d8%)<+Q%??TWd>hVMf^qX}RPJrS={w zRqr?6vKW;@zBwa~{0OiSH2YD{hlocDSrsVvFG(k19ha0kz|Dtwme4~*a9s4zrAoC- z6{R*51RTPicc~VnJd8b)f;FZ}GA9D41raZ1YlZ%v;SjI{yhGzFy z%(Vo9^jBf!2B%-!Rf((fWjCE4nF;GsDFc&MIXGOK3kgY#BmCF>0y~}BJ*F3jG)uF; zG%tayySH=;Jm1x7D(w~aW24F#8$8^%_z&Ca@uU>#V3Ex6?GC&aM<_h9ZlBL_0!wkl3b@Yic|5Miw~Ky)wO zik9NrPJHegQ0pq){Vd}ka*o3}B|%6_@gma=Aof@^cmSm-jYyB)i)ch``^M9Sqpwyn zPG#aw@Aj_+^u~`E?6O?baO4HrV+m}lN;etX0EBLz-*gcqG zK~I3V{UeU}-^pAyp%QHL9sG0E&YsXvgLscPg$YzDNUIG)?<8H$g3QhDuvpwZ!?%xy ziw^@9X^GJqS+!C2l&x`h2~7USZx>Fj#~n%E(uL$@95uNx000B=0jsWw|L%&MvV#a{ ze0|@7Zq2Q@%r01~IMi-#%wj@xhoB=)V?k*nF`+hShUofQ9sWwx#hu1+T?__j$m1W1 zfZ}VCc{WB2NlpJ?ccw?Z=u$S|SD9Cf(Y^7Rf8RI~6_qeCm+N+r3SyV7Q0g+>6m{FY z=OaUJn~?!gpCGzeoxaJv`T0$~x&M~kTg!bFXOkyJ&Bd!q_vkFx`y0yLa3aD8`cfLu zLlM6k+(6MbI$UTQ_x=W=SyGXP%>0thi^0G8edMjky4}13X)T9d- zio5Ps4y6_W*qg<2{Sxwo%F!;Z=g0vYOx}s0aV_B{i@xRAh4G*0#R8@ms}I+nXqi2T z^YG3KlNVeAsCp#9%Z`aM!(>Si0Q-2yMXAH!1e{F_{xU+2EZ7`{DtKQDL|Ht^FBbaZ zU_<`CVvuaZ<{$=40_DydUJY-r>IlJp-AbSMcm z3j_#0eyiP}szp3y^91^}w2oyTGiA_{btFg@h)mVEHwjZi;1)7_U|f%jM1U=c>BH5n zCY%C~T?JngepxXESiTAYVk8~jMX{-*L7cXxiWOY~3@h>1=ubdS`Vk4o^-}SyCW zxvyI4UMVpm&^@EW;c(Y82dPpw0dX$oK_Y7*V*Tr~Lk?w8qUKEcMO14WYmI9pwnXD%!McaKRhzXtPKb|0bb~c;CEB~(~v%7m~?04 zqCF*0=Z|vl!pI?=vmBpDljYbY|apVPk89R6E!P9 z#wJ{+(n=u+SN{VJSNd8>>UpM+X_%)T^Zf3GBXZn^ z{DVVk8C02Bro!`zXWmdI_}s_isyvl@2p@sxaCtk-roKeLJ9pgNMy3A|(61@bCfQ!Z zs(2D++FXBCZ^Hd`!es6k;L@J(iRsQ&nhgfy5gc9-<(8;-g-b&I++lU$*HXwo_!qG0zaN>^5r^Dd!;|s4Zunn+Zup!h z(kLxoJb$xzP4uQ{ekIsA@avS)GpRqKFzBu6?Ri7L6 zK+m!d#%P&Y<38)xcUjMX^rdB}sLDzG*Sf9~ULoVkG^1pzUQKrZb>F=OB)ENqvI4;< z4Gx{}b(X5kZ2F%IfF`Yis+r3dz>2JHlv!da8yNW<3n3eViAnq~C->PRQ$=%}X_nXp zGn7AHWl%PGVarmfV|`Bhv_g=0iuG*ff=0?OCsHTh z%lvwBXnqV2-+75KLM>HkY$eZ#6nBn0k`+jfAy59_9_TJ$d<S<|xeUdZMbHA>d4Qw#jJ*BBFHIeJ5f8~#7(rGIIq2#AZ;66vR{?BRX5HkFt z{M*%rC|_TVP4sI&yHn0O(QsMSZYOJV{p5ivezxzKa2~Dzu+p4anft?!wzCnmH4~3Z z>?JJ_000s@A@0yd|5eiUyRS0VxPaSVkTyhb9pl7S@3p%*D6Oie zPR=Hk_*shjSbQQg*n`WN8UYi% zUDpklsddLh7uC5HKHO)flpplR#?nL`0f@C80<`W$!-Fd952*7TGyn5E;a463Qe7y2r__pGt^RMIz0TP z=yc-_D%O6Tn{~S{(8px>(=Vnn?~1&Vbe3y{9$Z#W+y08%qMrFlf#W7yEaTd;dphQf zyAAXC+{QXL|5_Kkb$t>Dv7~jdCKm*&$tD{OkL|VQx^l;WD#4Pv)fshy>GQUy!a|bR z88~MEAop}Wz6dxp?~y-lHZBlR0<#zb|4JS$9J0o7-jetVXSybs4FVfQ3Q2#cYKAXK zhM$W6T@0o`=tIF(WM@HNwM77xHv|IXZh8*w*d1Y0FaHcy zfXxx3TtmVirBuv<`+myJU4PvTU?2=1Fa3<$C2ndj+y7C~5}glcr1D1IA+NZ_h!1f} zmwJV;CmjTjFuedvx~4sd%*xR)T53~!U|1E8_?E|=R%*yFF0{EVD=9YZU^C}nfiFPJ z_DN|JE&vVo1c-7)b=R_T{dFlPf{eu`?fP^+Z@*`$7EL_wxhw~|{8xDPx7)t-Cw>56 zh-E%sXtO4QCSaZz4~&>7re$EMw|`O{p9G=e^m_4QM6*Mv=<7}vI9+Lm{S)xOD=r%? zEGi{-~si`JH(wQ;|h-ehdv;eALgWfZGSpS06iwhk`_bfHg-xT??($D2L*p zDGXG77>3(V*VlxWnnVZeXmBhw+ET-AaEi2Q4a@Q<9jREI=x46(+OOg30YY|Zl68YZ zhx3MK!{1fV9r2~5GAb4KWnfp zCJp<7WBGYjqfzE1wU&Qh`#RWfd({RIW72BKl#Edsb0S%x1A4Zr2q{nT;a)oROm}(G zXcN_c{_gs<03!q;%@rfeS4}-xB?$9LA`4D7BMc==tPINwZ)Mw zibVrF5igc3ut5x&jm&G51UIqj^a{*DSizNGKKIYUNu964$*PGEb3s7<`_0J*5{Ne( z837 z*vr_ywnMGy#JIzqxJ}Fnipy_o+&3tqo19R8rJWzSeM0 zd{}V82($HXnXv&@B(R@f;R|FX6ec-nh*E_%lui>^LK!kJ<-BxD)t=Tm8nHVX7$3)d zmuv76V*Hvi%^1M&%9BqU`c{~E7ABJI62K0*j8Prx5@H@-Wu+!``RL`u))$4wP}Fk} zR!^Qqod8@l<$`P#PkFni^(q51_~;HK(Q-u({gA%m6ci>kovRp9(WO+S=%NgA7I=0F z=0w$IP7>%gAI<+)lEf{@Dj0Ch#qrtW@85ZihG?e05`Mr`c`e)3*l2(b3VqTL7>_?x!*eA%g{{aM znq740Rj;l7gRu%@^|obG!HaDV-0t&O>(*BAP_^3>_Lj~DBtN9a`tB@-F|Pxak_5a@ z0L0qM#0yxYu{4s@_pKuf-8089x#Ab(xyyTC-mOAnC%E`=7e{(2`o~!c-XAb3RP^S zD6}y#pWNat6Nh}qc&SU}RT34#QxN%tYuRn69oK{3EzVY=oUQ@J=zwE2?}Xfq6c1$N zd%4P^f?gUcEF6Lb4xZKCGeR3aL4nuyH-s&2L(YBJ)L?S)g{lud_B_P3oY8+Nc^me^ z8A`2bz)M4Ar5{v1t3&n|s#eyp50w@vM#;=R011`{P(qUPRPGNvJ8m<&sa-9n$HFIu zH9)nRxlSq@FhxMme5k7IU7D9$%b_?)Xr^qpfd1ygS_ih3g&dD-w`PG&PDmr1Wvq9z zh;+~Zp(xA*r)xy`4%t4fY?%s&!c9%DFZJzcBO*tvoE)cS;@C8 z=+?^FxSc?t_9Dwv)krY=utAG0>M;XqPF&d*F$1g@64%G=$B;L6FDzw@8)-54VCuN# zt)>Ok5{gZkcq$lgbY@g-dr^3KSY3})4O?A%q3B!e;MMZ;S82VC01@nHO!eAl3^#Gu zKAN!mmo}Bm_7ZFwud!>;uS?Iy9y3(~x+5IyL!xR@B2B0RmH56@BERxM2%HG@8ykeC zu8-)CVQLfqZn{Wr(eHTbigegJBcb&R6h1O;IbGZ?Q2YT`@!zOW=)}{jwCNV$w&aD;M zIFQb;N>g(GND&XRTmE@&wR+EQCeRABdeuS#kvh^zCX`d9{<4t23MC)W?SVO^s+GDk zp1l5~uV3wuEl0ld(cTm*5an2w!ALoI+dbS~Lcz@7xttmvYKgKM{2f_Eq(n~cQ(IP7 z1^lW4!WXIqlZnCVCYriZTwCYXLfcZ7r5)5BH;WevV5!dM<18jmX&nW#J5t- ztAEN3!n)LEFtlx7Q9|2{Rz|8>lvD2Bh>2`u1FwDLrrdcc3RvqV5Sw1GYIY*fTk)%` zGBc(?-rUMU$`{H!CWt&Ur-~^*sr58pK zzjCaaK!EwBoJRx*hk?FpI$UN#utGRo#&`Hxt1!nxQw5pSiJR}MU{gVI>oLg&8dan6 zBD$tWG_Th_dub?)`IuqTMt&nN=-h}0=M+T5*+PMhpmdzIZF1^*h#gr#1y#0GBv@q` z?4Hy1M}st+77Gj*t_%E+;4@|4A5;E_p^GO*5!K6(;;Qsc$(>=OtlIWncB;c*0^(ep z*S$dJpY1&T0;`XEck%$dugjc2G$6>*cn2ET0>8w?2^2uCJ1Ki}259#Yrs<3C!q!Vd z*KwG>MWWk=s?0e70%zbfLW#d1P-?bcfjl@{E{Rq7S}eM+FxayMyZh&Qh3{T@8FTe0 z{7&3*I;ZoGX(oBLXz7nJhrqcs9PkMX=JmZO2b_-imVpK@$V70~SIEwBH?v{xB6k`!1~C3jsd>o*u)xVirkuxyO(8RKUDl$f0x3|#BE>FsclKcs&3{_GQv7RcSVO4>3Ay&ay< ziKc_rGSZk`i99YsKvtz@oHh+E%f7G+}VUEKPr5@E5f z+duP|Rhx26Tvnnyt8Kk%Af+E^YwW~h?xWl1?@1ombTH#p#PH@t zI?CE%a7Pi3qolja@bR-^75haNoJx{Cpdy}Mz#ztnE0yaJWdAoc_Pm)zkML$N2PV^Z zQ80teWj3Nao9ua*CDhe+8$CD;G>g-|mWarbZEm8RvnoIqVou8!4Sp$jXEXqlE&YZ+ zLmK8Y4Hv;=Q`RSs=jp2&$|8eSL-qv03Q&ex_jo_J(imxqmu7fu6J#|xO{!YBepRFJ zR@Ov!}2VSOuEsJ-2tRGIqQm@a@ytvyBQ2mscT_OkhzH^t5 z2E|^tNA;l2rHVcw3HSC*zR?Wo;0?`t;d!m^(9&Fz;kY@wt?*IWu1x6``mr%mS3KWS zmjWpe#%ZOsH3250w#(6IRmo0gwC@SAh8}CAM^s@^Jb7Ws(l!i;#d<;vc|<&Y;=DW| zfc5|dT_RGUcK6A5&%w2yK5754$}<(F?Shoa>0LN4QRn8cQ$zToHr0IQN$BbU2(oZ$P zEF!w=#M|De|MxW4{w_xDIG)Hs3Kb&MXuUA$Z$ZplEyJkfB#JE@c5&u@L6pEi0=l&> z>CIZ};jjHH6BW##vu-BwXqUPktNsu_eHf#dJN_(FO>s6K6NdSyAjRWy$}Akdht9Kg zl}R`cdIyg|0YnI}Ku5I=lR3T8>A*7(6VK2^sLRcJo$P>^3n_c`l?PDM|M-QCOyWxY zB%m3X6JBC}eoz$yIV1Qx-8E3FIVCT6{ZvqWIdGHSg6Ja9E3+VaCFFL$+rQV0T$2Tk z`b&a$Pl_lkXhA7Eh%#Lla@H#G9@@I~t{7TwTmv=4crcpz8)$5sx9RvDFGko;#`vGt zWGTP1Y0j~dR>iHt|H4h2=KAai3~+_Q1xO*xScdVqd0ZPm`IRtE>`xotRstbr>D|?Y zc3JI301ajeugtD6LrgM3WIg>T4)5pTduR);!Z|w&iOZclLK`Ef$EhEv8To zVg4A23Bu~iXQtbvM?oMNMmgI6~{l8#dd<>3x4hWgi$-t}-{f(rVlGxA~qn z+O6fV>8&-GI+$*dXuu;pelcaA2$h}uNEZoT_SFED+j7Zy$uhXKfs zL-sXJaU+7YVxK=hyYmGq$nFzi23s2Dq(u`C7i8M zW>CG`dYJ}Vkc^b5#lJP{z!{EIq!W^p{vid1-FiB;h~=U?V?>@@KCNQjywXfG#sKn% zAP{gu-c?|d6qt(q+Fe27i4T>24(wZyP^S)XXbF4pmwuA82Txzp?+_E5Tx82QD3B$c zuodw$lXluxB|leYpljBRz~@k0sgGsu6IKHgl)~Za>7nPDPd)jcbK5a83C9l(&bCaU zgBoJ~;cs>y$r=IhE*u!?W0{vkCRV!Fw_gZu$HFzw9R^Sgr2Pi?Hg8OI5)rLKu^$8u zu8n&+HHv{K3b`iTq09{r%I}gb!stOtl0D*TD8q`gS?CVl`)Q^V8Ql~lI>@luBjpPt zZYjMGj;_W5)t#M0aBS9exct##8G51pca9T}xh;7`PxbgVg>EU#J-$nEfD);;0X*`C z@DHC@ETtd4B&@l=t%rbum}+Eavt-vojB-^y_ithTbvkQ4vOU1e58aDG^E)ky^#^uW zfs>!L3xkK2A)etR%ixbCOJ~`DR)|PreTpAhZv0%{M7C~N{zS&seU4y34Yyw@OmHzp z2M1Btkm4swbms%TD|iviG=U`wYjr4^6}jsDMm(|M z1D~XLKJ~Mxc*Jp)IzRwPK(@b$H-=S2I-a+Z@!^duG4EZaW$WAAn?mlqU1GI7yDzz` z{4Mf)!(u$aiOUGk2fd!YJCF%nm)tw_h33%LThW3P3GQV2jjY9`tIu9rhqD~bC+$OL zdNae(e$T4VWtPN;TV^81YdwnnY?1`Y#sLlljp z<;q3gw5RXxfH`&lBusy8<9`)J_gm0mF8Pxnk{LahrpZ!uPG!03)WxKgA!f|WKYQV z^J>{FZmzY#-LRR$(6D*)pT8mqj9Kt(dW~w?ujaU790QsXw(>R0GBZXzA&XQ{Dlwel zB}H*hn{iBnKy9p?c}T6&5*F))Pg{%dUNYPx?o>pLXLcFpA$zHPXgHP^e`Y8J%NOOH z7spB&B_)`;nlOEGgW%45;3Hakeg~`}(>Xvghs`=knfDhv1nDe(7-c8>gE$Y0rQ@ag zX74#H65J_@qjXDmj?!#{IagLw$Hc+tArYSckT=-S?rou;v@?9_$CC? z&;S$0*?I3dOXG4JZ!q+{iy z4XA>K_bw>~I@;`Ns+y4{QGL0|fu=R>)!`xT&Bk+2toX({0rc!wj`C^~ot6>P*4`rG zsZy&MT9vUCJDzk%;N{zXu5L_$E^E0t6{K;4o{nK$lfIbEnRyr_NUChBa-Dhil_TbP zNe##1N|5{(<%~X~%n1^7`q44@3=I247CZVk_G0w+Ukwsj04XB_wA5aovUZ_kW=dC- z7j|XH3Pyk%OGqf@t99)`Dy7eDwr)}4Wo)@exe!8&nLOW zvzjj3pdB4saFSvlC!i*_gv{-*OSw2SWe&idZirEe?>I>sL>`M1$Y`HpQ|}WX!uf|* z#PNG+!d;wKo?q)3@k?w^e$Ug72)1h461dr$Bn|q}Q=lfwcHlSn!?PkJkld*eppG%yMRyiv@{KayfT;m|Na-_ zt<;T$3JveJ-GbN(G69RIov774ej#T)`1N0rnQqbM6TLMPa`!OI3G5+yfPw&;aPWF2 zOL#_=d4_ScD6i{_K5I%~c>t+TlUh5-ag%-Ndr00S&NIO_0WM zI8dJo2bR2f@L94ooEy9T141>?u>>z)b4B}${VkL~p8skoh1ev?D>2!9@CyLSKXs~f5Ts1B>MCq-Nm!u-=X+@zdGSb7hEblDtl z%wIBNvqAZKK+d#;2y0Qy@B&;Iuj3=C zU#*>-&({pH;&(hn`L8525eD%Xkh9I=rh-llD;DBL>+@-kM`6#3QITtM;CjjJ@6hqf z7OJO?IxdCk!FYFfh_A#M0Q@1iE;(j%w5FM>X)0XC+;cp;aY$w>-hZ}}IjG6r#1pD&^5HaRU~EdQ1$W_O&k!FdbdwZozm;BTwisp*~sm6+oGDx=*ZwT)W-YP5EUDqnh2`*|Y!B z8p1w@^`}E}9Lrn8)$%Pd&^)W}Z0&kB;{Z0&%ousGxhKh-N(B?1ghn~Kz>n)z+RGb= z&#GS;=y7V-x>B-o4m1Gmv`w*@L7E{@-#dz$9nluSCCma7JfLOX^8sDE)MG?R(RNSd zXsj)s%`Lxhu!XLJmOHqf2n!%Ve+Z88d0I^wi<97)Ffxy*J#qZq(^X&Ek%%=Z5f|n6Pd^! zekWZD)}8oC`&v}XSbt-Q14eSr*^)4cF50}aN>ruEBr!`bnjPG`(J9?B?z(JrRN5#` zW=2_as1e4v9?Vt)U5(QC^CWF4X&>IrckW@LZxImt_8Rc8x@5xV73CE(fWOtv#-8zH zhzgum2CtcNs{7i(@^^))wdLDSh~XBGbU=18$^(aJ5we?jIoX#;zPa`2R7omjFevDowRx_WyJoBGi5;kYslCMtr}pnhp21h|`Lo>32$ zXGL0BeOwTKmZ*GOVaP&X`6c>%2`5NNQ^v0eB6KvGJ7{13a@TuZYo<6Ilh7F^++puu z!^p#J9b z1MF06wsUx~(`VqKpGf5zP*{grV&&`(tI9>83 zC#Pm4iH=1CH;(-)I*fa9QLYAyF%&W|9Xcc~wIAW~Zs8RH&>-s)@|t8RjBu7k!V2oS zn$B3o+L0l@z1keyD*42B$5|i?jU(w9`ZtrP_F<}vh#gI->@|atqkf;^78LOQI9z!A z?JSy%Wb6lU4^9980|5a5;j8kA|KZaB@{D!M71IfbNOz9NCs8KxQf;fRsBh_0@%ti_ zyfR>Mx_tVTAvcR=&tUqLfzAe?n1&Z8P^Z;>Q$Wx5(6(KU8?~Em7fz$dHr*fZF*=Jq zt%aR{os3mh#$XwMz`4nxow!{mcNHp;SQJQKCmAdd3brt zqPRX%uQj!RNamf~Ze+ZsoqSNMkUyAJ3M=>g+u=IlTm;YP`0k-*}5Ctgod&risdT$;{?lxFbL&_C#1}@ zn~{?~`HDnlOim>&CCu7&*MF{J53ft(Ak-%OVlVdQGt$_IeVl{_362XWfNRKICBMx| z-QIV;fSMH6YOW9hd8u1w6N;f<07@u@$5Nulpkd^vNyf6k6?s@WreFO(0BQa*Cs77W zpT^UGB8Tn>+qM7%^8z(?qtrkQ>E`pWHc_`UZEe`J0SOqC3i=yZEdNzqw-oEEv|?zy zvyS|swBSfdh^#=avGw!e`Myd9nyEk8Ufti}+tPWewS~Eond%nOp{^#h^&aYoVcp~( zZMnU1N^6-U+)FC>bGRijennI*&Fz}pC??K%v5AA;&h+}naiV|~Lme8>nwMstCHQXn z*xNz1KUS5jAax{)((1IErkH-LwvR4OzyD*=0cM~8es&%OdN(01M}L)^MeWh=1TEk~U{nobD*hK-yc_L{TFk8fZh|UTu6COQ`i6RpZ=bRXWQfpax)>H&$&2ZXc z&8*OBTR2`O`{s@6sEdfamz^vbD)L{79-FTdL zaCcaX9Nit+1O4Ao3x6Ahv39_Yx>$%{gqkdx8;K#tF05DqqE}Id?WKP*Km)DgY*(Xk zO{d9`skBj_&_~AUpadh;2D&P8l43Q7V7RLOIV<>5^@VmyXF+aroU2VlQ8_xJeBB-G z6BF|$e_cibd~Cgip6M|?rRUNbY*oA$7 zAp-(YPKK}D+!SrEN$#=2ZZgg$GS7taK5lE2tFSle85rjx@~i_~8C-ReXFa#-xx|Be z-r2?@+;woliJDY6;@ApUA{=<%Ip`| z*lQS4iBQRrSxF%1T!U}5+nS4O`&~V|B6!-WS9y3nxdCVG*H!jFm(X4?BgfdV3L6XxEY%rOJye2+=gF|vI4t?u7$}lWQhynF%CRDckyTw(!Kn+>l*xP~sBN<_j?s317#rIBrrZsb zv^f=%{8a(5>CdzBQ9R@+n3c@IBE5+k`i{t>mIpoajuwYwzdie z$IY#AOx>mgR|RW z+_<>O;(>B^QuTkPgZlf{qGbZ8x-WT+rJp$JkV?sMGmKV zfo@n}b{6_)y1gF})A~9X<)91^07_;D(yQXe=qfKr#Mkl^z-Y0?l|SzH)aPZRfL37o z045Cpcc|@I$L$Te2~3Z5(cJBnH_C9mh!pY)U(N>qvvd{`+aLJSoogBC*Ot1C?kmRf zQ4qzDCw6RW!}biEx;4<1rkRZ;Mlwcsaf8>c))D;TUKVD<@unpI{{A4sbEgtoUT6&4 zj2|tKKR{n}5*cbRhL{!K5}E}3>g8czT>!2SSzU?E zamHY&zy|bj8V3J#sloHQh>5ceRq2z6X(Yvq&GpuKynY+5tm}3~U%4k`?}&UiDxH;; z76)KjF2WUHO+PSN0f*;6d&cp_YHBt=buUQ2OwPHRuuJLb%>Yk6W-4t<#F(0W@LfRO z;DCN*bM*8Uv+~*53lbsIEgSZ|{{e{Q^vDS2azRmruL*)623z^6M_Ev+%iO4-$o>B= zxDLb&0pWQDZ_7T#;#;KKiOjbBwx8pNpWN#7I*2LA~?a z0W(~eEgLV$&^1;Q7Il|7YET(Z0FoaaQNERK!KhJ(uNeSz=O!I*md`$2EZiuR{cEf`Uy0i@!&81!50n+d1TgJH2W7&PxO^Lo)3{hR|28rv## zo}JE5$dSEv=uD4}O~>O7xjW>3+#!|hlbs$uPbAFd7pc0z9wyy}*u$kW3!r-gTf0 z=v8dMBGn|lBj5L|c$0~+-KKK?Yu693xt2ROpP-Veh=??KyETxgAYDrEpi{o1mMTZ= z1Haa;q0!0c3xfaA$)eWh4eyhpW8FA{5L?gKm6zSRu>d{Ko!GZaORruUqEj(`R7#X4 zIc;MvoypH{{k(6;jWPIAls|-@15-A(*k(^Wo6+jn`H(ftDgz!R@lmO@x;TF+6llTR z9n-7Cbzkcn{#VRmj~*35T>~rkP{Dtc>j$4+Yzh3^!bdN?9S|KAv1~}!z}r*Y|9C|f zFG4*B(5*NID}%Oaa@S#1cTWiksrIOmK?6GWh0K+td?HBnP}Fk7fRjM;ciXOWSdDSj7<+zcoh5nlmsCqQlc+cp+p#TU{-vT(8w9FmXWFHMG-{Gz% zhX0RtsLlv$*`4UFH?AvSRP-Y-AS&#wu1mMRRjB%+7-5dJ=tR;PK%GVfDWxg6+bC_{9*J+AHSlINBx6s1|hcZQeTC)5Pr7&5L4yvGl1sfv7mQz z2j?R+@Hq?H)^t=>A&~2mnA!7!;s4gC%)z(+Z`2!@>tt%+-yT4zl=t8|3+DROcciUU4%>;^-r4JaXw`biLbla zO|s9qblD#}fFB&Kr6Wu~iO)iutd$ec1G*;HtP9T$PljML{E$z6RNkf=?B8{-9RnKyOVDG7X{& z2?zjsNkeP!XHEY3?FJ|gn(3kko^RHHKLIsMaTwo(1NC!&{HBT}OtBVmEKBB8F!^EB z_if%+n&h2DB+46QQRR`VS3>B!3djEuonx84CrOl_<``@BgUJg{GIN2f%Shw4eZf06 z$@8U*P;oYXd>qRGV+&pIwiMF2hOgg=R=vEooDJ<_{BmLy2-=y*?YNfp%3G2M-QVU`Y zCYTjdWm*5vNIMA}1ftAVO@Cr2K-pCTOW8{FVf&`JVIR1?B|N2u$4=(WV_j z;J`1*z}oq+QVXIMdcz01LM~U4_GPzn`wNwW7)y1f^yMU)3%)mjwb+HHq2Nr58soR?oOkCQ=soH7Hex%Psm(ly%%*sbZ<^l>LBl`|)sY>wdKYsK*^ z_}kq%nRpujRE`;}{1g7_!Wu}`OAf`B)~;sx916^^Rx+myH$!~&0YWzZn!@6KK`wHG z^zvc)tyAErGJCy`r%47i-G#W9aIw({0H@_Y7UELcelAgjRHrYx1hj43F<-t0KrUOO z4xOu?as1YXhoB|6FDLPyYTMlkUyyuvu+$A&9>3zFyR6Z-r;G z-FRiLQ?gU_vG9TeI6P+)6s1*G60mcG7}KSjQFm74gzedvsL+M#fw|#9z-4w|diUx; ztD57-dk01f>IBaL%|^-PGGkHtCSlpt?Z?c_&+%i{tS_ZU>>Vo6$1AAhW- z&eft}A$z{4d$G!g2Nkk=DnIxHJ zzMJyb18qgLftpozBC=eYujs6SC9DEbOlg48>r-Du2usO&o%kgx<)_J-CGXAe6DY(F((roQdH4@1*KjT zRRE@8;Z3q{2AWPTF<2_dGBGcn%wk$_Jt9wvi*T4_rp@sS$;ScT+_ga93Y;piVF$OZ zUBIe{NwgVuYI#LNRO4{s1HpDx1EctneK(bSh_mMHEd{NIa6^(NRw9`4pS;46*5KpL zI}TSKskb2jn6L`jW@y9YuG#aot`|D%{FePHJaG6i-77oQA`#t~W;24*T$w<^5imKg z9m5zzpulzqQb*@1s9>tsan!9nq#t46QC?K){Ac3xdYa&(i96b7r@?*rYXhV||oKkQwx$!mE-zme- zfq`Jd3;co#e(GB*#o^(waeQ9D3I}^CU%oJfQm`vn<21MMP_%;@&ZN?^sNzS`-yLk* zou6fq*`Y^lk%G3nB4fD>I}l`L>rN75d;PE%pM0PqTYK1S=XFAc-t;e8CgDh$} zYLkAa%ovgBa@C6b_w5)!hXjVQBtrjf1cCOT%)Rqll}MTy5=l}Gc4AP@&ht87WYQ^Q zRM{@l7L(Oy{H!~wyt^OYf`LnC;c@*w83`+iqWadpskq#WXQqYu7I(8Rf1TA{3Cl0K zdczhndwqH{Hix`)(&^vUp7ckOhcJYMaZqYQQk4MtT@NQ=A#qAnd~f#Dok#K_^dCU8 z&t_fqFDHg+=$@3|>;7Mr!UGDT(a-Ym*XR>xvNEJ%0*o>4*I+W2i+y9M;AqhbgawcCHb@xD`=^p{l9J1%xC~n+&Z=6 zT}J=v{J;0M7tA>A*Q+8kWZb?MJ~45~(j~wSqsZ5luQ> z1f2T8w|}CgE*OJ_6mUh>IbWYkUJqiO%~cXQtWSGO{*8-mu&w?EER`Ay9{~OcSXCom zyRemkIBp%!-*c)KZe9t0Os^4~bCKr3z-9u(po})(MhLy9Gog4TpDgT*lGeEBhceC$ z4auqH^gw1M5I|iIu9QIZ!49|hOHEnP=7VvW;ZMR;ak-WADYMjz*^P14gbXABlhkeM zK_^Ippw&U|1S)sqXJxY^C49uDp5-;WD~`NrZxAY`0dekA(j|ufctnAkzgEf=%2>^E zx|karCedkm9Uf9hbwFkw;$4)4g5~gmiS#D7fqkH~_qA1C^+73Z6sW#mRtO zglk*P9W#HG-hDd)Qx*;0HzMXUBhIj<*|wJV5m+qZ)>VZeszA@qdse(UsRd!Ukxwub zxZ$j2EwGbG#Ui5iF&{`~UtSD&KgMBX7xX1c<%HhdC_#+)u^M_>ptUH5;sq0;w$f;r@`BS_aF?SrfIWs=MQSxhMf;j+W=Ame&muD9)vOQ15bgDr zgR{2Ik%~5q;pqun=|r#!l%j*oPBQgP#lDX7A@K)5B5)SATQkJve4y+N4d3cwU#txo zMmSrCSq#&>)CoBRtu_6EYz#3p`$qIdC$?6_l`Km?nJ%_9!Tqq{s(PR9JEo=$I71an z@H}-J?wfcDG(zq?dw*UEy;trq_f;Jy+1}X1Zr+xd;yu#=)rsA#VZbj0M?%sb zQ9pFo;s#@_O^9e_y;Kl;*kB&NG2Qb0_V?4MKm6SJO^Lk8maMRb#|U#hxmK)at|p^u zL|FCqjY07vy#;YNt>s6p~HfIN5bbTXIQ-W&7`g}g!H0bjq zY1xHB!14_pBDs!yI zocR8VuRe$IL?*Tsw)zh@8iWbxM}2zv&m0G5gS5p?ju7iV0JP$#FXDm@uIZDtcT%TGv@LmQgQ7&TpCB3 z`&0u*aG6PrA7`f&!R+Z_!9W3DV^$SzY1V1BRYF700LP)FHbYdgQ(QT0;j&INgsnx2 zLqTR7i+$OQ^j0f2-J_8rA?-l@jRu)oBkF&p4%kF7WrYA9kEOZw+iF{DVP6jax9C*1 zc`VyZQOP_&s~`%{K<58l+s4=?xx1Ki-ZZ3$%L8UQn{Bc4E$g}Y5M;}isYh#csJx)- zQ{##>R@mr48EC+E;rc_Ru^JDX-YSu^DKo%kjpPUq6fER2erf_~*hQ9kNx15qE;=H5aA>NQoXz@#*sX&|9l z*BWGrry~@L&*AjK+AP?g`8dt>5}m_4LNQ~N7M!eDdF-zsnjyKW+Shh41Tn*|X!j*dVsR8S^H5}aN0aucq8Y*Uu=prh&I~31XKkYhnC!}NRm_xWE`*Q@q zTg{;r_<@(5@Q~;3kzuUN8T*O7K_|Xul!w~SPFJzj0Cepe@VvDbVO`a;3~d4zx$u`oa@?njg-7djkgLH49PI;MRyh$d(20 z052phe()w&U3$PlQF4RLb6lh?SNvXXG+WFFfvaM7WjJm}yoq4%1PjU0p(#(Zl<=A< z0#RPDo!gify`0PN(hdumy^nD^-Q0(CiqeBX;ian)7DLev$e)m1 zMV8H^BzV?Xar7os*|m?JUIIR{Ji^|PGi2TEvtw8H5gt`)bbl~s@bx)?NcOcnK8Q)p%Q1JiHq zx4=3Z@@k5K?sf~3UfquCIaC`EUa#Uq|FiAGS%}ye=0hv%UEsvZL$UYJYfPszW_8~WbDr5fTnP+YN)yhzs;no*Dlg~9(f|Y>;RV7AKvSXyaXuAVgQ#_N(k~~*m)8W zGY@8=ra=So2+P7I`x7vtZ|dAkE<=Z78hea3Nk!!4^BQfVnPYyuHG-~bm>ZSNtn(kl~LxfQ_-ZW{S3c_eI=L- z@?Uk~l;lgaN?;$07bMiB{aeyWh__pbH6)1KKx!oSg*`1mT;-AICw)X#9f_!i!%m1y z<^1a_`Kl^>6s_!r3Dq;dBkJ`nT9G!ZhJ!3QU2_Wz>$0w+`Pno| zA#h_sE<2VL!$?}{y9apAIu%y+^AjHmQMpSs=Jtr|HgV`)mrWVXw?+@XP2)iwQIxMr zm3Z1!F7mlop4iEcCUaAtp`^YxLi+;|o@9!Yfjrmw#k4@wBHKEo=uX9s z!v;UBGR|X9I}2#^C~Pl9hz;9m`U}Oy$!W-?ku9h$Wl*GqBoQM@xwM$t$BcBhw@5Wh zo2l@Yoj3nODFfVYp<=uE`!{1n%a<^qg5r0t0*YPf7_uj5@~z{q(_U|NG6Zp)SYj5P zZ2PS)Cq>THv6?n3}b26qi@>0aGhSQgZBIJ1`78~u!bUZQy;MJ;(Vkbg9KR!>fhsoz{Vo=H9AV&=ZU@-=G*tzg9yXf~ zK$&2TVlWRKBaj4I2{f}l4(UD^9Mn{C+N&9O6h&2EtgsYw%g7k&OrNWb+tS&~gn?Z~ zy2b`wzmx8>lf=ssf5?V7!1{sk-_;=aA-<2WTPkR4qB$`ZPp=y+H-xAoO#ywjXRmP9I41hnjt5Ta`;X@JRpG^=}=J z=vt@OP&KNZ%np^eJD82jYFrj^8*!CuSi;eS(MfO$lC+Ju%y8` zuo>S=P|&#F#}QA|y<^bmV%O_{001A$Apqg;;6?xa3KU0Sv{+dW|Hsj-P1jR!XK5h* zCR>?DZn=)$5(7C7^2LaF(|vI{XW3k~p)Nw-1JL$&niv%_ZIzkc3-p^smTzA%%%v9+^(`pajmKh#}J?(A^P#l4T;~B5_oW8>AV9WDBy3PM&FPlLx%En>i-sqeB4fW2=S)i%;>GcM1P?kO&{_5AIz> zJjK?$B&z5fuKu05Jb6~Y8O=O%fDZCSY*LeWuGKM!!0WBHDb+7M1X>pn9hF`-rKJ3~ zweS{-DZq7p4ymQk!);CSLOAsIqpkBcV*Yo$9ZwboT(1R$q1S^3N}`wnRz1`$|T&#_N#sFN_>V*nL6)57qP4~oCrD=Ocs_3fy3b#ZJ$OGKWCoc_O=25D3H)EZ=H+g&`rozHimrBWb<$ke5+1p1xFJoC zrQ^RqBcSEi%S{LV?1f?@g{O1h9UeOJVL%cRohE?YqKxmtS^M78+8Y@p19t1dH&p+m zO8CiEV2Ka3k7dAojVZ>2gj89Hen7swomdP%z4&A$v}M1=5JXQtstDddN+^gy;ss@I zuGE|=4OCLX!i0{Y1`M1_ARrv`g8+Plam)iqz=!;yQQhB15+7@ds>MXlLj#1vGJ`ua zhP~C4$9BGNO+Xbysp^!hZ0#b?#1-U4^dzL^Tw(oDPmr9RH8?hd)~};*zQ@?X2*Kgt&{pJ+ie#{RudC-c^SJPik8S}{wUvvTZ zSFjFe9v7u&FzY$t6gtk%>weJ!FUEzz5Gi}K^5Z$?y5P>kxClM`-OEN4C7S=HGY8AN zSDO;U2hX$>aHr@eJ0CS`>aot!=y;OiyA$n-`-Ta3O=#ny*86KinN3tbT;K9ov^mbt z?K?~J(uCi%xY}fWe88u-$gG*tFtP+vdfs#PoPy~tQLD7GfT14(^FqfP-)cC{WZ$x$ zy_k1^W+-{W2VelPtoL9<3~2sQ-m^4PPe$n>;)oso*j6ipDso8ei&%PepBJkGxZF1H z5;9WlGUKvxshyD7qlrb(D7*}0jdmK*5|l0PekzHUJfo9!J&wfq{rf2ziye%>($Ipo zBc%JzJPXX&o!8e~?_uVTR<`#Q{(*MCYoDWeKA%i5Vv{J4JsF-Rk_SOm7*9$r)@&Ls z4YRlGeueCz+b4AZ)8FhNs>qM5#ZyuEKSH_&iM zZw}t=W@vj56lt#e&nNjrGvJ(;+i?iwXmQJ*pG>tb<;bgK0$(yD(lm zc?WEL`fipuvke`6R~2wT^#Cn5oM17ULGP8q)p)i=JvBAm)dq>~-!qJ(KVgaf@|R1H z9WG-!KPwQ9*CKJH4NV@WU_dgFVEyyAcDYNK2MS7#XRuWDaY=Z|*rD*WW3-dE`Kh%` zA;WN-wYt1CnLx|5-EQ;3pn625pD%qjdfL~?QdMzu7q6lK)*s#IFdp!BAz1sTj&aAk zOUOd+stxQz8#6Qm>J-6Ul!EgRc$y*qoK3{~LJ|diY#KKzs0!<@?ADSou_(B;5b6Ns z!k-esoT0G9uD)LkR4BpKuPGAhmZMzLTm^jnOz$Bcgk;!6vAFcS}t zY&+Fm7RpbS_dhU9Noeh0V<52CJ7FwJN~!Y9gyIRLl`qkP%?wUE9>}Y={)b)cR2m!hY6d0>oPc)isZNh?TLg}6Q<52AIP;6?I(*0>lp$qZ8pBXg z1Cr7}7cQK}83qzHgK<_iM>F6NPsdz|uTI%&_*b~~F2fQgX8%3_61Bwd#81OLZFGZ~ z0YKW8O$&6&2@zY4O~5K1om7%Y?8O4LT8Luc@*m-=QesvD3U{=AV`olu0hEXHO4VlM zR-I+oiMzA)wu{W0sc6uUxOX6Uw8Tl!V@vgfyEM*e%2)QQn?6Yh>awkbOQ=3AL2qr< zb)PUlt=T8&9Z9k=bJXvgrg8`NUC@lu9GK>5->30ApN;tOJY?BB9!q%F0O7%_5$O2m zc-);Aq{NUtGaxdUwkrR?HJs3(D5v-MlB5UM<&_wxzZVsGO%n5L)<&<})DHB~&*9$lNN1@lpSwpZk>tEYXN`}c#^H1dbb zQLCZ|`J|7e+y;m|$aHb*>w#2NtBQ(IYshqTL!*Vuj54$YmSU4AUtML_DNFvG6!v~7 zog0IX7PZoZ>R;Z<3TRZK(lZ@L^X)u+ng^(ZTILiA0x9c;6 zin3SB{P$|55J^80Wc<_JALw`d?Ur$&+kP>r*lhn0W$O&@+>2~qH4vj`t_j@GNaLyZ z(K$qa$x925K2n~DaEne?d<>3u?+v-y`uX^J=hn+xG=}oaR>KFPK&kz}64ETuF z#u+6zWL&N2ot)P5hBo^#S2{PIp9aNVNHVL^J2+$I8J`;2*sa+F%d1aEAYT22eYYsS!qL`NabK#a3Zf62aPXk?h&(|WaDJKA1AF$k%v(*yV&>MxkN=VmE2PQCq&!! zG37oJVhzh>KeM=@q)tqy01$>W7Ody6ks!8Ay>B!9uItHftJb?Ry3J0@iUT@r?$5Ky zN}&?Mvmkfp1q~kD~GX%{v1?dXl>sjD!@I@ztYjX`YC0g}gfu_A~CDVy}-qJHT(_ zKyS@ccna_(mQIFksV_I_nGBe0vn+|^Jc3E&Tx6Hw0>YmYH4gHuM8UY3)Z1ywDf8I> zfnFWgTUR(!-em_n7=79sCVqJB%ixfo)KHqK1ZH{Gy|g~OVbGHB{6Rx&cVPZG7F59R5RXA$`@2MiUl z;hA?w$0UiN@l=k0We2UmCH41&E7K!5>jg@o7>weXm&|QsNwv|VR1<|Rw#j`MPRfCz zR5$G@@X;nf>8-7tQQ~!p8Tu1U_W=3=c&!UFYW{)zV)Y3nyIp~9l}jp*9LSDDVSh*M z*tHgQ0q_&sI*B;2vW+iC1ml?b26b@`M8eWV3*rXGqtOY`Acem=`eQmm7e-*xCHszN zR^qR-d_^;6&9M`9k3gw90zWTwi*zDfx0!soiqy}NOt9(Wn(tkJhgnwPH9;;KB{39q zulcHEi)H?{Oi@@I^JhbH#WFAA*1wd}^gQp-S56|zBA+2WQ8F^w(}89-Q&{cKLdU)@ zKmzKnaW_Y&t9^)=IZsQS8PG>*Gbb@6@@p-t0vMh$Mkt;SZDQq3x{MRJ&k!T-u7TWq zK?EBov9;tJUhgHfM#&)A=u2jKF8<`Q6PpzC43rbq#KlC~%(sfdczoFoy}i&Cx9FgY zcI__u0^|$4(wd8N;}ZQqkcxU0bJ?x8 z1FxVy4Pbu4K|Xutn7hS&WiR-8$<_<4W>%pueZOd8U+AFosw!V%nu!+t*+dEJf@$`R z3RkNNKtsL#0+T{*Fc}b-5bhQsJtK?DIE=(Lhi6}?c7ysG5ZLyk9+vGcK^SOM)jNqJ za5*pFBlH(&P~Wkyf>Uc_A!zwvUG9WH%GpuQ)J19r7ZWH(K!!Tlv9QaT#&Od)KsPRC z4^GP*i0#>Gb-|FdWD=+}iM=$~!{shR3W!wy|Ew`hb;_=4u_KOE8m6-Ii0^yG1p&qw zgJPs{$*ueMMhkkI`xr>r`~-SN`VY@s|*zjMRI5Z1vIw+ES~+5mgKk3I^e~frSVn&Wy!EM z{Sk;o3Minyw`sF|^k7~eWRjhkKUPKYorg;%`+^_(Og}`6=PxGJe)AqpZr~eD;vWMJ zCR7&%Gz%g#Z+s~I@tXC!dGV)B;F9m&Er{Z~BW?T;&RChamN^kH;5 zgPst%pkbz~lcHQ8MDMWy{8XlPCVst6d=w8XvY6XVu+&N)eydLiqfFhH0D?e$zae^4 z|1jBR$CiTqm3lB%_{sv+UX^AGF^@L@@~5r35daW&VGr^eS0GN=#m8z=8^dd~&6hd? z2s$K6;64>NnjkXkTtEocWrGs4g=1jlK&$2F9NR)+NoHM;T~+V#&esin0%KE&3|?nF zPaTCZ(O*!s6CdcSV){&282c3wg+llM(iIukl}vx2_|}tdZM($Ey38e;cd1E;~gUccN+BcBj_HtfdWBZTqh9&@rd03R`g$ui#mZM@s91hDqc*TxP zm#Ruk>l3TS%}kW+X(ka#6BcNj*0pTkV`6$*+@GKtuq0l0(Hjt ze-Z>x0?Bl!(7uC6DrKRCa|V!)7D;w=>^i7p0FtUd&47%0bOLkpD6>$z{1$SyE`RlQ zJR%HsEOhW{Rq#(ADsp`1iLED}uLL(GdxqC%0$M4U<)D8$F}i;+ELI%326(HW{09D) zj9{wqMk!oLfta2c#4)Y%QxU9f`={;~4YnTl@9E-Naeao^%nWLV4*6b? zM;;u#_!UoScvbP(zXN~_4ukDhF(vDlU*L@4Q9W!$bX%}1v#-X_J(b=aC8uB?3QzwW zChOHPft50l_aF}^LjjH8WASEL+K`DZ=Pe5BzW|iyvdT;n5KIQTHH;g08IrnApg)Dw z9Op|ev{O{k887lB}gSrW&x<8@mCiu^ul@{901JL9Co zOQKjeS6bm(D>bZyXci z=es%plU~PFAA@njPSFt4+I&#xPY-Xhik`ZC8+c7jR5Q02ch94Sy6^E0)b010ITcO$ z4J)V5SH+GVgt;Qn+n#Z$vYbnqA=PIENfkmIP;z(Ji0VHHloXUu%r>9YFj))YAxBr ze;v!VPo%pkS(gE99N`sbi%Gl5TL zSUsmhDn4dJ(Y^Cy>6;>P0CIo|(*f|QX^%1jN(o0ga&=Ec4WheW>NIiJN51$nPj+tl{&ircr~VR9jnFN&wcWKFGTcysGz` zh;$VUfztE1ktj-F(_Gi|zBl0M_IqH+fPa+V*X$o~{DpL2#AMC4uS)or+C?$D>|L|3 zeip2J!Qket3=q?3y!&Ec1IY>$kQ~C1G%t>8UTD3FeZ8L;X1o9jgu71GgBO+ww+8yJ z#@AeiHAjU~z!M&dO4)@}uV%C93s)^;2A%2zNl(2bO$9Psq=G2kbf{NFHsa34JVc6!d*I4vqJnBp@6DlYF*>@sM)u~(=txZ>O`@G>JD9rmx*3%j1DOjhJbcj)3JNn zYC0-W-M(zRO=b3m;%+(lFDZTob42D^VG7>rj*W7m5b|91U#0T1mVn=sKVpPeEP*q* zd09&edX0ScKUGR)^Hh*4dS_9T&MO0jZ)OU>WStm&wVpdP;kDBUxsRwaoth7`Prfd7 zfJyFD6Y<}!-o4R0f`cS&w-YRPU**H5z?jYpDH{Z)pGe8(t$u2)y2?eo#t)q}&KvJa z%pat}(|X8F;;Qs9ePdIZF4>N`b)iytn3}`Y_ldj($e&Bn+Konp0NUR9K;hN}`h86Z z#%utiEvEoQiLOI}lI^CEfw#2hPkojri$p}I7@1{Amf6Yt0-GAMC;*g!oOL- z7VY7SjA5xe%}D=SLKLYb1=$%pAnktoB`+;ckSe97;p933L{Kn#Y8l%i?lX!|-l|63 znVEv160|XmA_Df4f8l8{eqXwrfJ0`kLSU=jVR|d;J z*GoqRcMM<*d&!0$j0hE}weO<*>CtrS`2kU=Dn0{Ku!Jy9#M){8U1Lbtqgbni1SFCGd`^HHP;8X2r&f z0T}os{EBdnx#Ng}c$OJ)@?G}5$P%b>9@~(Ol|F&|zCZr{CSE&3OqR;!i%wW77}r&Y z7mn9_LBbR%MXMaEHz;&QIrlKZ3bmS=`_0dqJqi%nWj?rr8AQ~m+Z~sp#tp8YkM4?W zKu@;zlC&DLnu|UzB6tPnuJM5&rOCo=&}+@;eWiVUqjjk8*8e$Opvkg-yaKWd8|+I| zec3h~RJv!HQh>!0AEP z?huObck>BBqd~ft%3dsESf(#T_gReR@gxQ)kj|QV-H^FBywyF>ssOxUFROEz8aH+61=-@bK9*{P~zr}VQRdSYHooa9Fa z`inLQ6CjI^wmqwpYBq%RWc;tjjpdF%rdppP(b zCS=(6>b)hGw|d}w&DY$|p1Ff$o1wacPTo*Gu}At!fa1+VX&NchK6g7N08WyTqRq&y z-rub2Pv{_`{TLU9lA7$Q*HS1WskHHC{SJSS@=p&5=B3+X)we4d8LbImwfv4G`70Fdy!BFKunr2mWT$+vi$}`R+MhYHK#_DKM&A(5* zFpc5!9PdJ8bgM!tq6xs%+*o$2P0E}us0UdC0p&69RxYsmoC4HNLNhgOHQiZ&=!}n4 z#6f+)BP2GHJYW3+s5j}CWR{|9&55k4w3jE8_5*%%ad9Ya>+(8$VhG@4+_LU3^V8$_OdD7u{M?=?Iiz9e{_&-M3S;}2krll`MQ3F!Mbw*k0(l4k z)Gv&){{Df%!H|ooq5#l7d4a6CjRAetUSDGl6uyhCpt7}p6p_y2|EgUz_Bqm>l~itV zml%Go^23!@tGee_ncV{z28Y%)%LcEx|{}SV*@-g!vX8^ z$vrx-sUC%|CdgFHxef^x+J=@!!ult%uyM2DjlU)1e55uG8nDP@%AByTeVRN8d#pTz zqmL9Q7_rK($<+%ER9ZFeFDTNebSM`XN3bz0-&BshR(1mL`AjdJIdjOCa(*@Z4BO7& ziVoLo1fN^+_Tk$kQkz-qX|G-sW1JPH(HR|KHE^R0n=88PgJm}rUonuDh9JC+pv5%* z1twSE000SB0jxHO|KyJMc4f+rI$FQ2RDv?q#VAsQWC-&4VO|yre=FOJrjY;=C~`(k zgWj$hj|0?I)|kO5#owcLtJ8f!DSOYb6UHL_ySfiNXLnRX5w?L$l%8T>$S zw<+rzL&QOr_?5Ke+j?#Ce)IXvhH0p7C~uhs`q$m6hK{pfh`<(x(P% zusJsX1F4Fr10PA&DP7KM8pkRCWmPDCk%E z-0$iyvBjA@$B6-UKzPo0!w7Xo%%l4L#ccimgg^sIX0nE5<$xyGlz{f;e+m)69$w)zH1Tm_UGngqJcvezgO+d6 zrkWoF$q@{?g*yD~OsN~N%{9I}83dlU{dnJc891;UH_tUHNJ{q~x6VRS`}XP2zFJXz z=Tw7}o>TGs19W9`+y`%XtoDAJ?!qo2iwxuA#gEj*$p!j_bZPi{>sv>~{JI){n3biL z`Ul>6{Ys`J-iE0q;!BVQN#+6+4H`|x6LG7TvG@wr-E1b}foF&WFY=r{Csf?POj9s1 z6aqW&iKmky+QPaYmDsycjxh$&AjqP2m5K?3C{8!Sbw$O+sEpw8P*cHkgt3b*7O@OL zgooy?NK?^AqA@e+Wn8JzVhDC~WHBA^AAzC3(0bw;)8GYCapW5Aedih8IF|6sN2(e6 z;Hv8EsPnF9Rb?^4Z{K$9F+;c7LGsDNo*orhA`W@FS(9}T1*a&JoXzUWnQ>hyFDua^ zF5ul)YS9G6Fl^W0Xz?EfdN?={U6*yop^&EI@op2tNrvK`U0#mZeYDJ6VKDg>`mE?N zE!;4GpKvb61%ERPq3kF?0!go(6bZ)rJd@xC4d&RMl7fP{sE8n}U#Gp7B!SzGdl{A* z3<(E9vt-KL=urbwqQjw5ol??zaOAU0Fs6qZ2X^7w1=DDVT$AbAQF1|tSL0QNnMMwE zwa{#GG+E8z#<4;Cp!g)lrqb`xo4SQj#K8it_yIqfi$4>%QnI!SKSDy!)F<~lB$FNyECnR>g|#SKv++5 zYpfh0$QKfw#tF0B)#-EhctTM$=yT)2sWZ4%Wv;%yV??lQT}`%7zhtbNs>{k2=wFII z+p$j#O;6eDpuFAJXPz{pDsgZy+2^(OCJ)z07rVSbF|OCarshk!@+2aNE2=st|B>Zt zoEY?`L>+HYJlP46fxfk{h*y{sAB^@^v8^{f|C8fT$JN5591z?(*V6AAW_bFfmyno5 zTn-eR`VuAO(|)4@0f3MV-M3Y|k7ty$eU)hHRyXi(3w8VwQvzw)CCTNDW=>jA7e0Y> z0Tkar)d*rQ=Ms*hWmY(bq-yAy)p#FwYeUHhFraRn+X>k|f3Px2gL?TX058f8vXYco9vpS<=e&14>z}y0# zNSw56)|Wx})`7F7>;!ukmg8#}-I{DHe*};3tTW9yV=HVKJh8-UJ4*YwQ0%(&g)a?Uh!MwqHO+4eSSvh=^uBxsJRT} zH2D~maUqLs{XprU2%jL)8htm{RSCPjYuEhO^-Zz#DdKgNA?v*-8z`%H5>w~~ti{~@ zN1eaH#*F^C5lA+`*D_R=`w~=MzS17lc#2<3d|1ArdT0g|B+q3-*MG$UW$wsv*XBiV zSJ>aRFV$3Y_rbU}SQSI>j}eir%G9O(ux?rjT2vgrG^@dbdaTC7a1#&fvJtr1j|s6z z$WIFFwL=AOUnu3p$|@Wl1x7eLmkz@f+T#<{$FgNxjDJ7?X;#f}?d%?l9eTckz06^# z-ven)?~X6TL1X@mnp&Ej7p0plpjiXFBH0->>YPt7rrzL9-{0GcDNq_V@cqQV(A>;wct4TLQ4-LWc4@i5;RkE6&9NGsB zK<)+)6^F>SDM(EVVB%`!7-4+9RIhsTOZQXNXRx!k)^Dbq#(_%H0kA-d=7zHQ9cRE8 zD9EQqNGE9Uv2~2-f2?sF4zREidL7+0&!eXoUBhhYxD*6yY!{0;(T#q(gyA;coVp`K zsrTHhp`Zb!Y6+U~MIl8T_K)i29Vgi0!8o=#Dl07u`V=cywI;>ITqA0a)GcX z`fX30PrC!Lxc!%x2E|1}{62;j`rM@R@O_g~x>-abfVezWF&~{tn_CMDdNnymJt_Wj zVXbkfvfp5If+Y+o!AS|YvCyd*#37P2H)QSwx@KrK|NAWUSQzzbA6G;dV0lhZ{96v(OZytibREwzzk z%7KrmU7ZKfXAbNN(rWf$OrG^u=u7GEF{`}lnx^BVbWn@3ZH&K)63o!@)7JCB)DmLZ zPB*ZuW@-N+5tt3euvjWwOj?B*&?te*M{2f%RAKVrXYbM}#NmGrTJ4uFv87sN9zZGS zY>MxSzWj`Rk%`F&7ovpD=VwBi47)0pASnhgN%RuPOpkSav0ceY*qQ!wgAmRXzB_gcBt&hK0s zLbNZfoxUDWvCFzJc&ElmAoY%g2N11idz!!oK)c%o!wx}bvk>i%X0ju;{>bniO6QP# zNmgCOiNLXuLPURS0R}gYLjom-8g2AZ$;`*RK6a(aR>#dwbjo2!VESh;5RYf{XM>`@ z<$Yl9ZwQ;0aZ#sa51~_nxt&2ij3x3Yiur^ak=MWEvjxhJe4EX|M={wBpYj+-w)z~i ztV}#?@Py@4Lgh~Q8T(+pSOq_}wm{jw|F669fg=>}r0{Re%U3W&4$_PVTj}eqN)-TU z@9jh7AWIawS!SQr-gN9pXizlhY{nCNaVxPC&XmI+S{v(F1LwD>6Tz(Ae9f)=iagD6{a&m zb3EN|?sAI~vnpX5ef5y}`I8DonCWbxTYv&9StxoLU15GP6bC2OD;BIPZjJm^(Ft2L zMl~cF=>uzsL9fb&-!`EMTG7`JVA#{0Qae<$0N-;{aC8DB@8Sg`GEh&;rGIgXea*&f zi(h$V`MTv1J)xZCsY}_}J`#q@Bi<{KM5MKsWIEI$(Ba-cwu85$zXn=mCDZ8JM9*)V zt@(ULtIpy>{JI<$CA$Z*Iv*3s^fYDDX`r{>Y-cVsMG{$SF&ejxrFMME_9Kw5HxbNT z50C|Lh)A~r@G(mN^SI9ou@@5|q47X>19F!!1Cc5G!Os8bULg~PfNy(MolKIaj<;jI z3w&HJQlq@*v}=k8bX*7lvpiON@f%QSSAoLbj|>WLoL@XkW-X>3v|DVO^#S<8#AyJo z%0OLFfbBh{=kqL-87BS7x3EDdW+)X*AK)ZQRcAO+{FFd{Rv zs0qg!sXu6f;|6MXg7yFGP&j--YI*S1*Pw8YX*8rX2f5X;^JNI`OZbdU*McLP+CRm+ z4-6IUYKsA@<86P_H?t~s)xk&#p)*;8!-(S^7ViHKtp5sm#CVy{BB8F_9F2?>sQfOU z3d%j*dPYY)f{#2<+Ff=B!MD);+7oFpJ0TiD#!#q1InTx;>n%W=S2j=xQyt2JBo}&1 zh69M;2^gUMLDGsI7Gn(c&+MuW+lQg8nYQJp^MA{Qs;H0{aSCgDTKKds$UF&R#<-rk z6(*Re@^VbYohPOm2%WbA1KtA8t92j=VLRAEo$90?nm=Ptow)#q2FUWpOouZ|@FdZ7 zLIOTTeJFGI#Z3KjaMDJ9TCt~8MP*uo8a|by^ZqJ9s+H5uu?98VOi;QtV1yb zlQZlHjCwCc{^5yWwFd%P-r1@>0Ho~-9CWaIlV`!|b#>`XmHb8jds$bRJyEMWoKosH z!}3Y2i8)hKfoQ_B6>Wgm8;y1uW?*2i&Mn2n+uMi;M^uivd_9R};l##6DUSfAGl`i& z%g#8h^@Mv-xj_MjH@uen^Q01F=4f#BA)r6goPMMxa!&1f-41wi8-LQ<0*IeotJ|KB z!Cyay?)0tG4n?WLNiRf94yqr$A6i`k0tq-~-&1>!TVMJyka=X^F<}V?l0$E!u!J5^ z&SJWxX<&zGpgd<5UR~ep?MTQ4vK#udj2lKOycGc&L7`myPDp+$17z&c>hw3qK6T(Y zebp?H2!P8sqT#Bp44GpC^vt7lrNNXx8=A5%vyGkw82Moa0Op#>pa=o0O1r``Nq^m^ z!rqUp*XX1NWLTn8lgHh_FqjsAdn_l<+B5{&Og`znyBPR#DiOeVcF_Sz+9izA+SOQV-Yq1tbuRZs*P;(R z7~g&mct2%PKEFIglJ0c4w9h^ST9;2>>kd+4EppDd2Ca?+!#L~xG`w=#QlCY!ou9)t zNX5%(xh}UC?7pU^m*L$rC|YCWkVN-$uit4=A!5wzs#amiWD&%L?$lN-=meUBkKuv) z*^T`cv&}kURyi__FJSF+BQ{{MiMhK0iCes!jNEk_egf#NVbcRBCdM*Pq;nk-M}Q@0 zno~0RwnMHDIp?~~(LQq(m<%FXKUfdqJ68AvV0AC|A5-8VeD$TXuAp$TV*K1Yc8cNx@e*Xm7i)Rt}R4jJ(WczRWZ5F!*(+*NN^2 zumeLXh2~^I2QLE+J68w=xY;Rgo&FsQg&?v~$_IQm^k6O63^sMX^7;{vCp)VJP8@}T zTyf{emy@^Sdl(O|F;#)o2eTyeX9}2lCX)`40jsqJGhU5{F^;wIuGuh?ch+ zsJl#d)XEd&@Vg%XIV*;8zd`RE5Z1QKaa6q@4n4z}b(o2pifs62DzM5A4f^ z)8Fn8C-wXR*fHcG?aV0UNGwwAz1W<0if(v^j=)uj51tucF+vBx000TXA@Jx=|Cv)i zVk$Fro`&A(--iN)Nt!#tJxhJ)Lw&^DA|pH_{r&;B0N( ztdCD;)bHDj7=ICsgAYrCO&zR=Q2#-eJxF=+H2W*ep3ad3W~rkfvPmHPd+3wo4R59Q-!wYJO4xYtOW^dQ=l$T9YZm^0=>$}Ux@GPFpUe@{f4K4jbR0aP~$QWTNmpfhk{_4UQtXB&6C!o}! zbAupx)eu{Qc*$hRT0;5*J`lE8eD1r1qc_^@K3#J<qj7<8!vi#ic*gdt4I}td7(`ZiQW%Z%Ywj)veJ@_xjNS^|7 znrGh;$%tynRvvAT6@KHDnxGk7CYVR#29e=M+NAEhjF7(dd&Yt>Q*Z&XZ~o(nM^nw5 z=9ex{ho5j)Xo6vM69e|>I`?apLl{a9ib9}d_s4pvOU{+1s&wC+wW5IgSfqM`2&)Gt zJpQe&6{|p1pvnwA`)u_*5GT44W{gH2*f^qs;<2>Xrg*kfvFSl`zC(3B-&N#Fq%#D* z*a+Sm#2zwym4SOx3IY8cK(LgEUa&Zicc>QSqQh%uac=sCoQ-Bni zvC${7Mr4x2v-BkO)h!noNIJH#X&cqQBW}t5T;A7`opQ-BcNQwW1-+PDFq6OM+V}4e zswLzW&-wRA54xhzd8QKB447xCe06Xtk^D0Tr21)Q4I5g0{ov|HSM2ol+|Xrj~v%$8*Jnr-XSLWC=Y3eSp}y7H$xxV@LIR6rV6aT{;&3Pn%x@abq4h?&uW zMKDk~I58lHW~@e%$TCjyt##^2R#H|DH%YTyQm_Z5S(LuP6^LiG#|;x0g7JK;6CENQj7zZyoIHZ8uTQ?Y!gMiG$u|t& z4k|22(VoHbi1U{(h7DSlRt?+DRs{1bxI5YgM|C9Mp+p4p-$l=da!v5j1-rP;232Ck zVqre0X?!FYq~A(NxBhrI)i2OMNIPW&^nw}l>;Fh01`DSZJi%@XDDaPfqKwa$oV_XT zq=V_-%GCKC6P$)Bf^4Aw`ZhBqbr3cqT*X?`Z9w&=ZHDG}#m@EU{NZg*E0DgW9v{(( z(+^=;$RZ-fQbvXV@!e3$WxAa;!l1Zp~_r*hznETHzAfEmr z;XOdn|IB0nPX0i{G!fBg=1W^!fbEH&6m5Zi;~ITVdCLWHcH)xuX99W9Ozxtf|M$vYHCdX9Mx^!BiTmUHS zISQTGjMwgmj;R*dTwA#o*Tmz5go~=7o?NYL+Z_j8#BqtYA>0r+Or>YdQ4f71P_7@* zjxj&|xFmVHJzUhB81myJ7EwW0)u>anij>(@CMT%~_#>|On6_&NjUcM)dWow1?*Tu4 z(4`?sS6Z%evIGth!JXLoCv3OJk{Df!+g!fvlb=LV5T_@LceFa;M4^jNjDNqOHD{7u?53B=QCG|q;o zo<45ckI=#u$d~~j4D4W74)b@LwW0P{0>&%yfBKMUqD3Ofo~S_EF)DM=l?7Z8ucjy zCuiMOWwL3u|61(PO}agmy{VsgY6IV<`Uzg{QbC{ z%%Hy^T6}#`^4wlNfC4r_Sw+)oooNTHO-QPFSL}4+R)ZzuiNtU4r063HVE znkK>56@$5iWoORXq2qfcm=w0J#^5q$BdK0gva(9@{&R+J>`#P|N(GlGpB4aAk8TeN{l4||2bey#iDR&*F0zFxutX=D{2;ScOk zFRZrFdD`C+INv*IP|GG95m=MvkL+Agt6V}H;h!^7X;Gow_Y6UkG1n;kjqeKI9*=z~ zo%ovTpao5w?qor-q5@$PARQ_&`74NdQ^0Ia^y!*l;|fRXtWmk%=hXV|#$W+96)6me z3K4>bB#9mJtGTJf&ADa7%}Uyck`*Tb0aEnZLee$ys-|426toQ3B$N!Zs(Xkxk}4C` znp#T49qd1}Z`U!4l3Pzcw!xeVJ9@-x@|jrAH^6Xi2sdTy4BwRCEVcNONb_+3EP<4R2`&ai=KoLbVue|J*E z_avc6oCD0TSTe)cnF@g50Xh{a45V2gO0QCCUD-D|V^_LL!jdi$rvU=N@5^XRR&Ee1 z5tLJeK+)-Vw$`o@uc`oD3O2nLDjpoxb6wU%!Sb{*SAV2WUmfT7uujUcw;Hs_TC<$v zq()vA#keB!NS6N=z1}uemL_2BzW`EX@LR*19cr1}ZgX!-OLQx+4b7#+FaD#f!HXY} z8HSLsqk^FD*^bc|;{V&p$R@Bo9=^CaJHJ1BA(g|y^r#Ey2c&o0d*@Twr9${Ts31bXR(F&#F zedf1Cumr_c1-!_v${-7yIrBQA+OyI;m)@40e9_k;BPZFqpo3;Jh0!lrcbzq(s80I& zEUdG{WF2&zjIhrlo6)24)IUq{E zNvR{G-S<^@CpfGsB$9>n5iCFZhD>fgGt*p)SV?Q5htoh-BKBE8T452{-Fr`Prj(|# zDH!0<-gf~dG7>X#N-i|nYc_D9Z-Cs4zHoAm&!o(8pX#k;KNEVdd5>_ubt;6>S9|jF z&(>O^hkEJeVt0M{Jq%{0nFWhrscdpt5M+XXFcOF^Z|{p! z7%U}~9Po~40l)z^6)4QaXstX|+U`nJ`{(~Ecf&6wSF;^EV+qg}ND+zB z@^%}oy2h3JbRIaOse8lS^0^?ob0NqmwL~RF1-)2%zL+y5em_3dakO%5;O+W{1gUEB zlb*??H1qOJmtv7SMTJR0B3M=!7u_#6FdP9g6(LM?T8viTYrCt}Ntuaxb-J0AGDM3} z&|COCq!7!isiA<9#?X!tJWMDeM6AZ<5;5Uq3A?tcBz2L~9ls8{6_OaN*mqw-msv|5 z<{B8O30>2u%(4J5!gqyKIWQf{54#0a#`Q2mS^G5&Nc=(|zp<2^*c+SpPrT5@xY=-Apwk}j&6r@0K0WcLP%%p0C z1S)5Xk*h?h;-n`jyp@QOSgwL4Ow+9=cvK?VH+RuEiJ-0fCA5tpiIg0be7z=Up+4*2 z?Mq|bJEo-eA_kwTS5E zYma2uh{}{AIa(<+gl8lp>gAwKXcDFvO=CJ&!P^T+@pkLqDF3->s!2mMpiNnqZ{hxn zZ4X4n)fnm|q|OTR0l?}|omY)j3f8~kxp^-YFEm;*%_V~QKOgW9LB15XWhSk>&X(=q zE(pmm0Srkjho!J^op;l~R+x7}ktBo&Ln4vRoDhBEWx#L&Ditj3gc}hGp+bsP-D^y? zxz;kTU7M4-s;LrOWSs$9LVY#DePL4kkr*an26ehe(KU-@*>l87QGoG2SP_Z2pP>YoCvw@Y7t`>w)VV(7peHxCkpOL|)B)b*D+eS{Tt@0vf_ zZ%C;@#^_F-=xefe%V=y^X5DoYUE)??KP;__Qp|8W`LIh04w>x)ZEDIDCFG8tKiO#0 zLOLKp1Q}x}Arb&M0WuXRjI>Jy2BAU<3@hffa#d(>3zDJSIDI zl(+SL$gs?lV>b(aD{i@}(wVg@SC0P+xuCA%O8x|HcIZJ#oj7JZ<0Uxf*AIQ(&D3=s z6!-GA+8MOKpp`EA+XE)oX;zyTT+Ea^2042WoR;;t9Y zr7J2Dw#ur)$t;!R9#cj7mm4}=NgO6Z=?gMqTgnm z?AeId1GH{|_0Tv6b(7O_=};}sQKA+y{yfQL)vWPm-zVgZ7t;CUCdS!jZ~D0S6xy@E z0GiJL7NU2B1HK35H_)7D%Mz`j!qYKyS$SL`P`;F-$+pvKL~#H!Gph(_4QAG7=74Yk z92F?6q+*m*=bEdMoK!sg(005HhA~$*xsv6nMhqi|;D)8WNsOt| zo2W00>BFlV#QjtkJ-8V2yfV1hW+2P<`q8Tn$X`OBByl3l&T1z1y85+@ zC8|_+{dum*yYFgP#LZThbW%lSZs;nNaRpwcHT+$lo~xViM!0LWsEUsoGTytqUM5&# zN^CXRS&sT8Iujnigh1c{EEOos)L9Ttpeb0^6m4;JqKG{SkUp`RVKiR}9 zNRp9kGZKVvOf0jo_4&H$XTd1h8>t*>Myp~}sEPIf1AqY}6(Ov2Xr;b2u~PRaOuU;n zSV<+_sh+?+MlPnEFWUwiuqLw%P`o0|by743MFA@K3Ew(1z?@Wu0Yg*DLxV8@6T7r0 zk_h}5uB96DH;wnCF^an;g};#6cevyiSB9qeHzPr5wu+jtZSks2>l(333Te?ks66(J0SIS~ZGBbi&cl@o$) zs_IIJlBPtVQ#uN%pPzFCF)r(J)f5U$1!UdcF7%^YVS#c7 zT98yPMDEl|Xkb|cAYiF7*5sj8_pS=;MEdG?U~(8OcSN8E3PoH3V3BkJiw?h#QMbaa zCtAm~w?wDEljq`H8lxy+pzTwZuaS6&-UZ&{oJ5d>=s$MuM&AKhsT2iM?aC4%!zV=S zc8=4pw#`$yVuL)kBAk#3xx4eqtMsQLF2fZXqzx=gEHr6K4t@B)4FEU+CKV|Rq&XD^ zMiHfPRS6fEN|JdZQCz3x(ZvT`+fe4ZGtpwwPgTKl)y{L^kq zOO^_37TjtohCUpkagNm|2wDpBu4Ib=)g@rmTjhob6f{?wGDQg@yyVJJQw%r>Q9KmS zGIsdj1AqZ26)4GqSOr?+nOY@Y%$JCU0z^OWT8cTnfuYA8Vl$a^0S!(wZ+tZ29~5BXQ#-%X9tX-cUzglreb zAQ8$J`%2714*2CX=QhZ1lxG6j-J=AlK$mi7z3 zZ=vYaP@{i>a?@r^kEud^-f^uz<*NCVm2Hwd=!VHUw8hX&t%VPTP)Mt5t~sF}yv;<+ zXCV`E@352|Qs^KPZ30xPw;GkBr-kA4#?~wf9`rc)Kr7o-`naK(4goL~A#7Ap2?9hw zk<2bDhFxoX8FjlQL?a&XV^bYu;4+1tb) zG+?GzveogXG%nq8-7J#7XT;Lb%8J>xl}gk(Nm*VU2p-10PeoQR8c=4ZDc-hBu;(tT zUsIF%IVyD^{v^lhZIaFP_w7h>-qfK9J>gJi14%6E446w%mrV_l zo>+45Vdzwg0UXFL{x|`^002xUCAc61f9l|nkIK2R)!_;f?FxeZXu-Gi*Xqs>jKVN86}?S zUhI#Uu;#)nqT9LY?$(U?(k=nvQ%s;CE`UN8Vt^f>bNAvn%$%mt9F`l!={-)uUNuoc z>*e(=JN}{x=6PUVEUig6dQKF+poBiDE_3@2g-vDFl~=ARzr`vXF{(Jr5}-ZAmiBU% zq?G@VU3a~NF)*jyq3!GjgV0iOQsn@XyT(Zpxzn9+^Z~w5BPH2GOKg0J(@)yBf`5rJ z)$oMZD(F(SZ{e|PzN_S*MFpGf0TPW!Ki@N|FTByew{ssR!pmEn6VGYtRnI;tR-UED1w+8Q2d8TOHBY2LCj1>8%NRb_i zI^L1_Pr&SMJ@nJ{>IUILS#)JBZ3}upl|C+#R`|%!+vZfbMCLDhU6#s(#ZDh^YKp)5 zP*{z-Yo(IH?j7?}R-TdPNfPJQ_ zgg>v=hZ2XMtu(g{?#E{ER%H27xpU9t&?`^mR?gQ^<2ghwa zg~5i#-qL@bDA4*f3z(mUi#~gz>5nO2g~F4YPH2%WVi1tb9&)9Tbh3?>mC}DI&q8}? zQFCrzY7J@}$$1Hw(d;zs9u;G4Q5<<2M%^|`c7~#63)9pKvaOq`uY6^ty|x!T+9SN( z?zjBZk@VOR^0BZ$!a)&05od@EF#s0h5Bpy2mS^iux)ehsmIXB(@Wc*ZED*DM3`I<> zHEO_+!?y}%`-X=t(?#>@y|AWm}U*lA+8v_&RCD^lygk;WtLVXaqtDjmrHQx)_H!+LX2>(;mIj0(p93U4YQX- z9$`dv6k>m`v zIT=X+a}VIMGLz|fXqekA3_~QUcxboBsdf}CT1Zr!JG}dhPA)ZVxD3+NGR+~t`e(V8 zqre!9I+Uw>Cf8yv=M~-k_V7vJzcmJtvA46G(z|hg5$dkb{<`~WDvp#$9dB$h6M+zh& zy@n*FHkDh`hXZLa>`?;*q@>^YNL%^|GV3v_q`R3q7sO;Y)5qO3hUBL@qx5p6>(A#l zU#7vuP?TQHc#3(3FU_gEFN9%TOxwxEj85EU7& z-T82KS_Wg|xC$9B!TaoBKBG!66mbc}26JA@!_h!NO9YzZ&7z{VN&foUJB>mz5|4wi zhr{_tcszZDwpVFJdM&PBnVUvf5vu6kf0yp}#m)ugUA6COm=(Ujk1roJ)&neulJU$* zmo$X&BO4d#g{yf^(X4e{wSpw7;A&4JcU(>7V98f=AAV#IU)?_#OX?FCcv0Q2__;bX zCTPkGXoq@yK>^-_XrmOTlKk-={H4tp_k8()Nb$gkZ? z{rg4qcL#vAgj{@pJ7Ug3#;nQEsnXi# z%M&#T$xj@L(vmRfp@g)wP~`*8>h}{ds~^oiXaF5kRmVk?4HWts`+h#BG za$B?&EmD1(o85a@N+L{@j)?oy*_SB!h@aA}lBWFh0cqMYKNdiYW9tKSTbx{j_^hY! z23f4!oXy#I2%XOWAyJ_lK&Ev!go?Y|5oOA5tZ3=Sf>`2iM2b z>o_uQai}zjvfqAROFn(s#{eeZCoF2Zmi}&Sayo<{M+y&1mfO)(lX%9M8(6+5$obDQ zc?^R`k%Aq6DcH^24tg04!`{a-4WwY3Dk$$p;Y(^77CfGb1 zTtYN#mIE2nj2>WbBhg`M{tN@^w^sBhmnY6M1@*NAwhXM7oKpX?t%&`XslsytCeOJ% z#l5mhSS0nZ%ka0avA>Vvisz4GCN)~E7MS8DnT{}``IIMVOy zRPlAeQ-;bq%UOraU4rV^*tDQrc6Q9(0M(#h zA`p3*E;pTeVD6boOo%d1XLpa>Ew7fAsD_g%x&w?fA?41pwpPY=Yh&={%z?0*MNp5b06hEonp-r1y~JYXfB%u})p*Oizk50a{K7&*;J5C+m1F(F zyA<~@)SK4Q-?#c#^jl(Ko2NqAu5Q#oqZ=K0KmM&1nRHA!T>?N>AQMM*F6VoNT%Lei z<6@HQcKOZTG^|Wv(cfnoKv*TfDF-*f0eDjqAQz?!qY#P#mo5B|_G{aiqSOUC&}$c? z?&ojJyd4<8<$j3#{(W?XH=P0}0jq&I^JfU2>T$l-!Hkq3xJuB0#B z{dsiBC&JG7dKCX^bH`ZYh9NiEJVm~_E5{XA!AGpm3NNGrZzx>vO38*%A~pj^i`oDo z!ZuTGsLxR?%m-UEgly8L_$A5@j}RiF8l)`4Q)T6e<3<^9gB~pO{=~UPfm6ncz8!Kt zgRFyeeg$!;D$3(Y^vd60m^;= zY#}=&c#xS!IQYBUr3(P|OvvLV58E0=T}l`uF=wR3hHV?D*as!JU3;n#R1Nvi*UZly zN3_nmZ~RoB{xI1lkd)wbPOrIi+sqCoivpNDlfN9&7k8-Z*g;kQ(2$_BAjoE7M?s~N z2Ude$QA-J*ANBq6>P+2I6+w)fVE`U1b1|5zpsZ6T6eK`yHs$B8Mw2?&X;WXiXuhsA zT;Z-U&@Msm;zIoE~dEsZsb zYDEmuX{ekZr&9enY^*%E!<8_hRYSVyGTsh;^nonM>;5bJ+5d0tshl!nqoRs_sF*WS2F`^i zeyItI7IG>cA)EVLxPZv_%3S#tqk)||!xmNBepQsoOezXJsFtCz7=E_iRU(WUlS^FF zFl%LkOPIi1y92s?T6N#ENdslwpnNHGZ<@k%aoML&rAo2W9_ajw)2vwBcx&^BB_Bsh z>wWcXyvy2W51gjEDmYd%>~2AIi0@#(B(MjxGbjg!v`51}Du> zKI?#sN-YVOOop-SV~WKqn$+npAf@uVBIfxr~ zrq=IJ*V#CWogU2@NPf`#2VtQ`viLI#HCc7vP8^K+&Clditvx;`*o0j8q{m9=JCXlv z9M7`PeQ~BZ2@f~Epzl~Nl}1#QBBh#Ny>l%+!i@Eb8tnmSe?45`+MyK1bg`}lph$Iyz8C8i)hGGd${8a95hf`?s;pp z36jc+C0yl$5=`==G8!FVm175z4o*4SRn!kIxrRQB&o;cCgBjJ5rDBExZX0HWIONMB zjVZsEF+e!rQvzLtzTik44zjetQ_SI+h#)tJb-QF_tQ6}KU^)^0Lt3hLA>0)v;uugZu)E`Vk|^}ppl}jgyVwy)n&yE-1*Fh_L3;LYq`#?G{%I6x;1&9X z_JES0*~Gb{0z9Z2r?d{`?mNxF4)@>2NirZq%YHZ`!nzJ|Ie{CZThd#7h=z$2Ue0OG zO-sG-x%eHLdn`OJkl79)w$60sTwH>?WH~cpI^&=I4V-57I0B`g{~d{kp#L-Y*ZZE{ z9${cHYW-AGPG!qv%f~Jy<^NOcdRMvQIV^z=WIfo0-P_spK!cK%vf17K1)UxnJzV9mv9>1dYUbJLp z5ol7v@95Qor4~KKw)0_C7{rkh8$8ZlRq7c124OK<*!?qM7pZ{Q-Fx{gspecCD8^qA zVS6xz@RJ~OUC%HY?$mfvtv>TJ7b>g)XI>r zBjUipOnd=`t<(L|SILMQ*AYnkjYl|oHw*#rQf73UP+1JMvvU48%afS3Md5@XhgX^X zq5m;GE_(x(OZfa_1;}6W1%ivZU(+4ySylCRmf4=HRY{n)L)mdP84>6^jH{qwuHAgH zJbzsN(PCDwX3!9Os0*q8B2CGOYSizD@$6CC89;nYyz;^7yr-dz^dISa;L?8v@EE!q zP&-=*TfMivF&*8vnK$07+DxK$*oo6Di^R>POWol3siDRE`xC>3xh>kzdu`|*PKG4R zuexj4)%{hfw_~<{7x~~Fipg~A2 zL5|phiyE>8I843|gExihP8>*vnXsJj=77DLJ0e4Pgq<66pqiRFA=ao^DoMci?#{ku z6J32yrYeY?74v_jsF&j;PUgsGDmDe@un#Inzg!Mp$MKLThiC}HN33vA635U7T~Sye zd3of4CUb7dLbfPiS-h)VOd|x_?+%QUJIqLjqtvO#{yTsCzo{9+H#ep_z4pI$G9BB) zX0BlKT-O-pAu18q<(xpE?yeVh4pXr5l_Q=44Mnsl9Lb=)7G1BRVjSf1ocvW^Z>g(H z+d|9Cc>VSlPt9C~r}6M~r|U`nwJ*W!9pyK`L(nQ1m;|cn$KRU8-_-s&rp9C?!6fRN z`7{TJggDO|%k8LiiVNtz)L3+$OM{aZ8I09HxX4j}h!iiMWz_ZF>8nNL;Cwsn3_8S& z7GcM=>Vv=Ox?4bAmtsgy!0kq%UL1NvA!Q29UQaXn&J9~&%k#XO-j!Yr3#Vubqgz5E z8d?;f$GlR**e*oxI!8}##ZBM`^PqrjnCWegb7FjssX_LV8S;MJJL>_{&1kdTEm-WO z+?3L2fc8^$|B?$mfYl+%+-RtPp2Y<3Zn|SV(1t*ZcFWe&(O4UT#vGp-*H$i^-MfrC8nJy7_yZQ9=FEqxudKm1&~S2(UUA&c+2RgRyo? z+rv}1m=@xZ3~Z4rB9B!|(=hhK{M5H4`Z})x=u$C}=D|q7ZRGD+ggx$*oq?)$z9|r( zR*lHDdHQ^QCN@s>X!t9n_%<{NxwrKz^}(L+_)U)lULDrATz&inO>sF+e62KObeE{V z3}hD3S(MHSmPV5Zy7qWRTle>%=kJ+Ln#fl~t7ZhL{i-@njQFx7dp90u)@bvzui3Vy&R!Yl<_QnEfe(deV|_g zlf13vy=MZkXQQ7$sj1iQ*Wc`gvXEc#+crd7}CoUveMus}RJ^3+w^Jmm+b zykHEtY*pufgynzaVSqdQFOtIQWcWG@&X-Z)v2CxYz2ux=rQM%t?C!Iaom=lo;s9HE zJKK-DYjJXOahI$YkthfTT42_o55Kp^6kW+P7b#I35aIGLG;TA%_X&O7zhtupBrxpwR zw+g!(pdgD?j;C>_6Bf;Q&k@MOjN?VfXRz_oZ4HlLy+Yu>3b1q<3sro%ppo&AIdeEJ z2?(;~s&7AMoit<`>nhz&1J57WSJwQ{mWP6iW5q7Xo%HUN6?9pJ1-q8<+fvNkUvH1x zKL`VLo0sl$&fO6M+gXm?Si~9sjA;jv7G%r&JEH|+VK$qML2$h+oC9BL-Q*4i+w+-cM}9+#6E3EF6Q?O6BB5xqi0Z zdy)y6x}xrgliyNszuO%im5sQ2+^~P=`Vi;u#s$Ns(Qg3Lsze@em8vIMO1JR!9A%ir z86L!SY9<|cM-=O@f0Qs~R|Jh~P5k82RbtBsr;dymz{&D+Lp4c=4AT_&4A)5%JMoZR z#%jpY1)Z<{!Hx?m2idqs}y@G zZP*a@AE6SinE<~F_}@IICR>yo%aKCM5aD;$&WUjYVttLeG(?r z2s&_+6|FbMZ{FDbw6QDj|3WGjCQI~6 ztRJ2_A1=@HQ{EU2*A>*cPKN-OP0x1)Z81)S+B33e_^5Di#cg2Mk^PvjAKm3}eU#2{4lo?w($>)N1Fc~FWwCa?6Y<+w9u^c)^0CF4Wm zUS9#fnvNDAu2jX+dE14HVw-Bwx%IZxR}nOx9K%7z+v=ek+>}Rxr^TPKzO3R?Sk|3oA!}bxxmQN0or^@kL@7 zF@Me4vpcqjXeFPYzf0OSy1yQeaLlmc<&vhd#GV$I+P~3$i+xB+e{)GODn7j2E>qcC z$9(22nvl=j;7Fd|afd;DrYK^W*VZcj-mev{c1O7pk_FDm89MII)0kvKU|wwR!BVU(kI^@t&kEfW{wgNH^CqUsTvP1rY7S0?5G6q zo%?*w50O;_`uft`dC3fHSR|w9P_#u!Cj9$!u_~)lS|N%0xB+qhEY~pA{JftVj$cJ| z1S(sE9(=#`+fJP~xS(PBq9V5EAvwM^6E3#s%Gj0}gUBM>Nz!Y~Uu1PfDtgsM1x{n} z>PQSp6dlNv{_eL=49oEa=3cyPI9bm&7qzb(@I?^OKL1iPEA94`%=^hs2={4llC#J) zm5rR!pzcS}x6=L>sK2yts4I)|}>;)~!8!-X2p@F$|8`QAaUqMm{QtDX&2UkR@BgLA$HLx5vJogoNg zaGb1BVj zUB3v7Xt)c?5RV#WG2j8;koJ-QDe(W_Ah|X!EPm??su1IEU@)0T;9%oq`>nY+g5A8o z+%nv(y~my4`Ebg|XkHxKvI)@CSzd3f=OPRld-EKYFh)poWF1?DMh>NE=3P;%V9%Af zy}Gc1=v)Bo)H(A=#PT3iB^_OjmPXCr6_2=VLuEZzGL+|~Qzbejbhb~YJBsUYuYGyWE zVKfk4Gm6xFN}dNAk9jcwdTg@ALGsN^!)L)U0U;5(gsW3%6>I3GBEZXj@@7Bi{&djM zVY(Y|(=~cKA3O#RAo;(4LGLWov*vNW8Gr4A-TkEnL5oShKwA-Pz~bU~ZTOg9T6Wso zmQJYSbPxL&(li-wir^J$8$|>~#q^QlB#rO|mfE#2LW04;kYLHvH~pOqVftmC@XUZK zhK^iw3w+fen2b79l=>;-=HKnFs`{jk;4+tl4?VUtO>kJ?ZJ+yPtg*Bb638X3sY zd~$C|=aVMbKj{nxn;m$h*>o@ct8FcDX7-Y+#%%??`vE-1iPd>(Ghr8=TbzI;V~DTg z5|E?f(burnLjMG7Hk34PlVeL?1YJKNrSm8jj}-}eO)^%^mglmj$>6!g(3xJEX|vqO z;!HVHgMjPlzgUB6b1*HM1EK2lHGB4`*m5T%3O&(;bX|H^_dqr78!}25NV|QHL=Gq+kO3NoG~flvqF5@v{23NVP}eDBq%so%e6@XzABZdgU}VN zAX)>h%*gl3Aa6L#nG*|PhDEe!$90`&9LAY#y}n%xfd#hd9KX~vOVxh96Nm-x9Owm5 z8M|VRsXWys6W@$3gbRH=@EI-yMcGan0F{#21Q&`nZFvv3ZbbU2q&R}-$bB?fIjWtm zB;3$Vf<`2JE-d;eygJiLtz^Ek-^{ZSezA?xyi(kfKrBcBoBzz~rg7D-B_Mmp5&o)w zQYrRa`FoFjCEj`tH*VovNQ4BNYDH%TqQqe)tMD*>S`=3|@}R7&>ddb+B4=C@9Syx# zZgfw{FYF~{W)E$%I$LB~LP3jsWqSe8As|BZwSmAq#ex^xakQCxOl}!D*nV*`>?Ns7 z5%6x=By?9*V_1`Xlxz*vT>#v6J~UUgO(m11uWLlMws654Yu}FMS;rdTHg0b#r$WHt ziOrA5EbICC7=<+1K$VWTZKqW4Wl<< z2~PLL#Y`0o{Y~`f??iNjo>g?rGJBGzRSoj0bkN`V)`hYoK1UaZHUI|QYHki%Sx=QS zL#GNh)Cv@d6_t_u1*1)XtF0yW+j7AbK5nDS5L=&>-CNZF&y?M z`Wi`>KW`$AzZ#MYC0w{$e`^M;gCg~pAs`UZHc?sN6JY14^dAt5?X5;;QQ6mHI2+=R zKep@p#&jAYJMIJ_7?1+9cafyS1nXuD-_q?)0l60m4_{saVp?;2D%~Xmxo*kL-K^{a z`U=^$j0nF~j$^h-L!JYXdk)Tc=bj<`eW9B@b!=lxPPFiajdD#hzex?Xqa?I9)Vt=@ zGF~qrD27$w1Nc^W=D9Pfn*j_77c;d-{|c29)FiZKYEd{}=|Km5fBU=1j{vIeF`G*E zMtHV-6!whkva}#+%pUYTBE~yr8u>#?1^#mgBF=IIGT2|DA2^&=dsMM)$iPwcw zz2o#%2TZnsm!Fu-rI?>q+HjizQKU!^Il^}{{hY-E;;xXAX*ey(jBe!A2+b{F43{o2WF_h7wI(nr#-_-(S%V2Luc~N)DP5#mno7y%Q(8S}o(f`VWpEFBB#}i) z6r{)z2A8cU{h?fF6|_|mB$G?r*jwxxr&osxu=~p*t~SP_q)On(O**+>;qRu90|0=z zX5$v{zA5q)&&9PQ1O#)br^>34jVs@Iz?Ge+y-Zn>;SF1VNWFH@ONRa0nl(p_qY;(? z9cj@+Qd&dYpvrLAyK>`6j~f0KleW@WcKg9343HHmaHMbTXf+x{mpmRjhb0dNsbO08 zM_CC^xQuep7ago^XpXhGaK9nRb_;&I=Lx)TDb`VaI3mV#wHvzQy^}g2_`y;&AU{T5 zcYf4K(AY4gcXQyum=Ei+>3(3Y5p3o-({OpfUUijg*ymbf8X{{kX9P=`B#gQZE6`e# zl-5#}%e!8YsybJ-B@*D=ilgzTuBuR{Q zX?QljiGsZ^Ol-z2BIq0Ij7r%(b*hbU5L$Tz%C4Z0Ee}eg-C{VXTH7T0snd1vEL?+< zsTM8$FgTLZ>b^XtR!xistFFAJ&ZIWAfAYNsaC%zBC&nu2tHRczBQ=~fE(Lu;ixCS< zUbyd-nSWF@Po_nFw=kT%rXU(R&id=C!)Z`Zv4=$z3Cefx8-GXXXCA7T?D<Yo5 zi=GTDr1|2HajJVlo`UCqi^kw?`JF(ua(S`X#exuOlOr9=5FV1R{M7os8YM%fexwem zatl(%d{+S80_l>~47FaF5@` z%F^o+AN3D;rxnUzBvOT^ul72rr~LVhZDVMa9ZgsKo&$e^%-8PnW189m`!nguf=Bn< zDCP7Ph&qlX3P}OcIY0O|>|ycw7CnR-X>2jhqcU`Qr~;Lw^d;MY6~RB#5u<1#HaEl> zlL1e-sTjKf>0NY(4|AeN#A71uDGy22$BV!XkcF3UHG5p;t^|~|3H@k~>$<%X$yY3G z<2?!drK**A4{q#3U9CTNbY7qO8H1L_%MVvfhy)JlFTneHFld_TxFePVoxix{JaC(RzkT}tIU@AfiTu%h>cuMEWo|{HVNmT>BzgMWU(ievCoG z`+@ij0lOqH8*vrc_Zob%X6BWvp-}{t<{JJo*SZl?)AMhpZ=_rXLdu@a2R%yN2N`!V1xzMSmN6UE_d4qa~YhqkP}B zICsp(jG-wHFFY1t0Cd>w)4Axb10z$D*f%*LkZ3iOEk3ltR4fjukzdp9B{4vs1Y&r3 zfK$c0m(0#8iL1-M#QML1^cfS5@c6MGv9A=EPDHXwxjTs`Fm zC9>oIm=8YwfM+{_WL_MLTAAssTTN=O?IZbtMh@_%yYxqYqZ~MsMT^ec?t8L0m-@MM zcYI{$;i(b&^7o^UN<9th`UFJt%dZWKI;N%is=|)$CFs+S!XZ>JRk9Tovmk{=t^FSp z@@uI`l1brZ$77k-rW3qN6i@xc|JRjH)Sb@5^$*ff%!0Y>carT6r=_>$ogOF*@7?S9 z=#Z3sEEHC|C!GY=XGa4O4bx{Jzsx8kVzoh@-%hpmpbKDLI*EZ+l`1dbAO{4t6p0t{$9arp$h_vQQ61O0ppyHY&E@E zPSGWlUDxrn`=umn)ysSch}ClnD0dVJcC71!`ku@-5tMyOpl}A!I7iK8P))tO{QX2K z>{=#9731g;|CMAtrg(3?(Kkx83hk=1>#Q(7p=N7zTq8lz888`ip+4~ky9$>_OMQ}%97`M)M7Xy}|W-!Hw zEdexhd!dii0ZiijmfUGP&C7IFPu6*3y_#ZM_}?jfDK|p8q!ugO%=No+YHGUN(g7Os zRNBmQZt7uCIPW-~5f|1m8!U)BxaRFy9c+nseDzv%Zp2HkG;P4VNN~h`<>pi;{+qHyB2!QJKNiIS zhUsu-0{sCs8UFip0AT*gEq}-|B0Kg;tR>g2DQbu<){Ft_txDjdi;bdepN3i`c(ILE zJW&!EpLD!=D7`o%Hfc05mm_Mti64O!{`#0RJ?lQ&7_L)&nspOW({#7rX4ZBcKe&Yi zDExcU>c;BZ>vHUqq*U zt^-W;HAsi`K?9a5D$Y^}jlV90z;&zII*?*L)PTWb@M{Tm(X`?TThy%l*9PsZ`)5d^ z563-W5oa=qh_<`w(QZbb;4yEL|8q?0YvK*#Kf2q;?QKq+{ww7v_bmrE)(A_UP~ioo>X@MHCf-A zyU!5=U)A6@OV4f*E0{?%YnKm^8AZ+7xg(o$4ChbHR2S2Y#8~GPjn3kLQ-`GK^D`)1 z$&B!u=-#cPg2KQO!#7bN=s^ze@LxZd_z~B!iRt^7VI1HQRn4=L

    +;o^o(HSMp}*lEx?dTTY_FrL2){kzRt+#d-rbJ4wSmC zB4Q_BE|fLdI#}A~Qgpega(z+t6jCfH?Kz?S0@rp~{X9BJ=#QE^jbWAoizHn&cFC7L4yzN~G0P}a$zNbO3(Oa)M=;*z4+ zY;&od4mve3Xmh^vQ>T_g?qSW!PD)7lV+ZlQNEp91ecOVjRBY^myO>!T<5(ad0{-UL zbto9!IHAA{HEl|D_ag7&;@K|uO9-j@3W}7PrZGP_ITk+5vvx!-TV7i9C0zMGa@+8i zv`_LsV{Cs~AVrGrzsg`Yp*(NQMPJiuzaEMX%V#k@)J9iER<5A+A9g0cLj%bsn0CSP zn;v2iQiGdryUq@w9JO+%%KW+t0KDG=di!^e_bYDGd1KS@un!GRR7{R;UUswPbOy#5 zWv;iAmXF|FQRT+Z?^b>Mh?80L?Fsq(KKyCLyx?GJx1#GB?8W%Txod3xWH2s}KnMr- z5*X4XP2O`SB%P1EE*nHZFx}qhA zu3nn*wM#2o<;n#2K7nJ5%s_B)&j89uk)qh*eIGJ;^O@_&L5VRM$coYNdIGN2(t=#%1{aPB^<@_6HjkWIh{QQmSR`n zuabq?FTK<_T_u5Mcg=Bpe(NDc&<%akMZ;#+q`YdNU626efS;zSbs!`k@w#+%*B0nd z*|$dwG!QIX-$0wS)MFfv18MyQ-D#uYp~3!agWk-b>ZxOY?{>B(nh+|5dZ^8##0|Xe z12g)bEyjA-?}lA7w?N4=I?n7cXKRJwHGb~7K{V86K8(VAt68Qna*}j1hdTsMEF)AJ z?l@&BKdz8TfPT*Z<5qj=p$b1U;F=l_APSPGwRmf$pp%y0< z^}(L34BB{y;kBEy(&OlKlp z0R32r_&|4HIxtE``DJ=w1XCtfE}=4=s(>@#D(oY-e?PZzQ>y~O@X)|xRY-b@eSaPq z+pnw)L9`Xu2-mpxj%#_T8#9+@LTowLQpB;l%^?lAQWIjK56E~rzd16ka=f>A{1CvB zAi;@$!ci<&NR-{g5s+I=T-AjN0tRczN3bcjyfAnv0hv3TTYV)Z);XcFHpkD0tTo9Z zIlCeOyc@5b%X8PaGh(Y z&jh-$-G4Nn`kOjwkkYkWiy~`lt?PTd#&V|+^D0zK@h$mYKjr5`8O&M>Tyd|r^6L)i zT0+T-VC7(eaE=kpnDg54gWoWSkaXD=mHeLM`FLxh!W62JK-*QV5a~LkWfJ3*Hy{X^ zYMCFiD08xMvNvFG*$exNXK#NZA;XpLYIN6wvY9@`h@S}5~e6le}|3*@D_$Lmas7(}jC}F5bQLZ|ykyVt%_4@e3~w7|q3>>dQmM zvZ+*`TtT{u^0bYC-))gF!@?Hpe+eowlmk}N^i9krd2%P5YnQEvFk@QZi}$Q9z@PWU zi8vt9%2COv?;$lcit&2nCgw<{HJ10U@?d@!0q@QSUl+`~h<|%mPX47#jf9PvZ~Vv5 z{@fJ$k4^qx!A*QGdh;%z3-4}6#G}cfy5t{iBe;0_c4b%z>#r+BpeKNNbgq32>&eFj zRNE3&lUw{rF|QF-YdEV}M79e3)XnUfjm{AWL+vmNv3OPzM#YHPYoE`5kXhoZRvil> z4{JBnX%ybQ?{=YygAnNc_3;TqcI>GiuhFaml;6~-d;`5nx@^*^^wDhhUeK|^^x`4i zT%X?a>4o-~|7td_1>lEW{*s+9*`nuiuZ9=(wu4NwLR66^X7HJnGKi*%b>TxpkN(Br zxEKo+qzMr|pf*DqQl3NN083n83sn=^fjX}5?wN%7Y4Bi4{*+g9jc-38h^OEe4QHJh zpS_y9yDezVeuaKWRjz)JUp{=oI=J<$M;RCZzkfje^bK!QcTPM;aGmUyj0NJ$xnwp5 zEExjSQni}~9v_e?;sPam?>q)zP;e&+Jys&Vp1V$rGeE z@7S)WF497_=xgiY{Va>M1q?qNw-1S0fUcLn`fP<(nuVpUgQCqeKiIZqPywMX+S~{t ztmN=tnXD@;hm(c+cw-L7Z~miYg;-j0w!3l8*=hG;E?3>iW5nW@WL-t^k!)hhoWHpi z0b1y9qfNiprX7aD-qp2rl7YCw(R#FfbsEv|Ry%a=cARn~jbTRB`p%t%&NBfX6(S!jnJy1Z3OL};ZlSPK1YYtZY2Z{nmvS}(tltf1T(uq!%0(c$P2wT z0kPD<*^Kh=F&V19F7sTjDN3zCEMbPj5fG)UJ>)%abF=0OlzTiRp?x_E@|fKzpPm)C zM~a{oteKfAf;jHcrj>-7ccsQK)x4fN2E8>$~Sq!ltWZ%SW)BKZ{plx&?--uCT5 zsjzOloiZ}uivqJFsFbugl|?>i9yKJ9aaIDxI-9>|e}aaX4`qd-e~YMSPDYtsaYF5g zvSsmwLP4cHjDT##wE0WKrpbP-lhOHk9|s?E>gvPmYd198HlU9Df5SjhA#=VLYBc4Y zUr4K9`IjRliijtktn-|=eDN@F*1iHY_OIiz&z-)p)nInF3i58jH{&SKqYikp{_(i> z(tw$LZkam+#|Fz$Gi_HvxeN!Mnd0f{Q9s1{(FP<>ZS2fg&mP3vqZqsBK^J=;h9;9l zEbQ%7RjFM&`^Se|R34IBw+IbFiaLZmtr-3T{aF)A&@Wl65i7DLGaYp{EQA^J#bg4T z6~o3LV&H4^=qMKO;tby*rl)(9FtYudi?~YaF;saK$+uf#Jc7zpR}EC|-PHi!KE1s$ zaS-1zu3u7!ZV@$ry5LPD0^%M1CU1J}QIcMD_;BUck1@?a^O1Hi>=*t`Gk-{;onhiU~wmSv@@GK zfoxmXf!=wZFqBDwlF#g1e#@zXz!pARhVV5)Eh^S^7jM~v0Upns2xMZ%)`>B$m!#)^ z)r1Cb9l&RxIoaLprOma4fy$>h7oWf(%SE1l>Ao<)W}x~7Q69-7D`9qo`h|8hhvmb) z?8102=V7r-2^2H?>Sk?+OM)snNe(i~Yws-BiL(*$eA$K;+sZy=(ATnIhMe5CQPGL1-#zDO2`Rg&%PPlpeEqeF z`NdZVvV`ufn`mS^F~h_REYUd4@YeBjp9v_%4P{~l&{0W<{)C%eDHfh1>zXZx(b;b} z7z!?viia5HE1b_(2`y*UG5waDI9 zxaxKh78K|+)xL-v{}2AMNOAE=%ERXdN|A8F+A*NBFx=Mk6z!gbI-V9^D;1PNViNNW z`0x4qr6e?R5dJ+<)jxr=haRp`klO(i--fOTTxj0x)REcYfP z9W&(zBBh9W+{HuzeOGbBUc(x0@tu}u>e^`V?EeIBO5WY0!=zF0#e#sveJ2LAHy&xd z5D4GI3Byc=>xu68omSW!lb>hsu)SepfgmSPJdn3r#Hn@D|Jsri-5yVPh4XH+AVyA< zXyZ*{zpXre7!ROUk05@XuKZGZbEQMQDvU=nYdJMi)Ax9^ z!P6UL&hIdO9K*Y*!XT&HH=st}$0c*2`zuOxKAxuC`kUtirXV!~9p>V%;9}+sbQ>wt zOeyT!BHJ$S2Af8&1wMXL=SOBP++v$i6#2PT=B;A@$Au6;)mVvVkskm(>zvgV$xw#> z{;u+-so9;Kt&+Z=1=lNI4hpa?au7-L>`+)TeskezHSOB z5#J{^_`NWxsMQ@RMCax=g~5eXp)VB+Zd!bv?uS}gizcBx6CriFVf$|{y|UZgL&077 zo&h1->k!X7O!wl)o_4VeNRXm?Vgq<7QqfDo`q1E!21z1air_tSjh=hNxOrA&f-0l?cUh6U6 zGiujBqagxqZ77nG@P5oab+q}hk!SkpHmS_94Vy>9rHpvh@)6)Z*112jd8f7XKw->{ zv`U)_{w1SN!aAF@HS6&uy?n1z*ANW=^;IvWOy73$*+|r``+gK!0>ff9-)0ty#esKf z;DE;Ze|Vvd4*uz@8PN&N}ubTTLq7+ncG+5H3!3WetL+Q1&KqjFNle6RcRL=r^Dg}4s_I%}GJ4t!7sPF7G-(soM$XB@s57OQ>-}g6E?^p5$AL7K*?m)2QhyPAjwdo?xZZ8A zO35TiIB4mjp43~Dczg$Nn7|s!2(G(0wh0@20?I5eyKUg(?|)~WEJggXRCC}&uOJ~~ zLY~9`V%dKfg|UE5o=^IMAF34&YY!kUBMp?Jj+Om&V3`I>SRE;4BrY&%TVbaISHss%=<4aZAzO zn3OPoJJ6y#>5+}z4B8hbTc_;hHl2{PY}V%me~CdA_;q%%FD2ebuFP;aKQi0|U>gc= zrhvh>IAyGDB|sg9|GsKjvRV4TMDR(%`@!=k#DN8{HRv6qi654x0{FKA9n5t9`Jq!L zrOwvn*A%#c(L@202W+d3V*+<#TB9X09P8LK>Fyn!4t93-y4Fw`DB(Ki9;gYoRluF- zF|2vDBXOAm`y4P)e=HNkYQh@f&BQU?{&ibUb4e$(=D8j3x%p=1A7?b#M3P45{-j=H z?GY`^=r}P6ix1XmKt=4JuS}aSr}u3MiNN*d{I`Kj_`HlgyyEAJp#o5Hi+82a%1!}c zW|yNG|NpjtT96f4Iu)tSQEj6FsAIUSVkG~SEl&cwgQ(6ZLQZYM)oI@4~vY zMsa?x3b`RzVl7F4`yXWC!}L|BEUx?59OK-*cK`apLQL9cM&--;!+V#?5r~`3UoS~k zR{-KJclrZfN*Gq>=4}Ym04^g-cc(Md6K8FG3|r{nYmgr$ijAV;x9|BL$FezcF6lOK zq`{fMH9(h(I9We~r>4yleXLA}jgX1({2R8RF+UJ;rv}Ia++H883_UBbvBd!xNr=w$ zurd?<#mhRmPOETM-*Y3uL`Pk8-9^Y?=m|y0+t{ZW!e-gJNoWxj5ow%kjeNF^0;qGQ z%3Mrumq-cO&IVLnGT+Kkw(Aa_l*^j!n!+xo^OE7HPP^Hi*xvu@S~-NmSdgG=^@J|C zuNH1ttjmY9I6>TRmdv5}74oxg67n8~+XNmY=dDQT`0MyB;Pt6Pd?22}e#lF+S;abD zZ>YfmO#1p16(p#p=pcb}F|nb2;{x5a`{u-J{V+yed3*SUrLA`6YV}P^dzTAw+^=DR z?kD1|ss+#eQF}>ApgRaHA#9*!c3 z{b;4PV^@eCYVbQf;`_kK=KB5SV(+_ds6u*9;bVIpBh)?+-u&Z_zUYDI_H@4vsq}2w z?)@k~?#YdTL_aKQvLK4j9Oo|LEs(?EFzx3xKYF&RG`o()ty28+PL^ct`*tVBYeQ-w zEb;!ksC-sqU#BLmKh>Bed{INqNra2j=S5OXYy`vt6mAbY!RhSSQ^&gq9dG6Qi_-|ReCnUlps#ME`ArDla z{G^+VAFn<^=t_fHHajrfoc%#9+|W#@u5rP>ejpwz--c6Ue@|ujycwhQ^UA$$gYQ=l zK3*o|qhM&CT-#)f#jn9d+AK@tor zwaK;{g-=p{h`ysw19mM++xf|xw?}C2&Vl{9+;Dndx2if%doe{*p<~dja03v$USE!( zQjN1}(vP*+c62dmQ8U@D_;|h{0Q$f%#l&Xa_OUosLsb?c&0Ln?(A$#Qz3r5wZVX0- z0daLd-p~_4`ys9C%=hxLxni4bGC7ajUragXxUpJaz&acEN8o*%SV3*UphV&6i!Pi_ z{HS=TzdgJ?G(Ha>5r+pGTfNMsAG0&Bl3EAS%iva?&uo(Alt9tOFx?5EAEk@;zya1; zsaxYOKcYsWO&_47v4upv-|7&~(os)eLnVe4aRRGFK|d-h;>RnB{PFJinv70!^+rvF z(u3)gOmXi~cY5+2M4p{s&q-IhwL)%<{B7hBw0=|-n(mg$H^KVtwCOY9pYmcwC8bIs zmK8EkEyLEif33s-{qtVF-}1U|GOnD*TaYT4PR6K&_s;{{-|=Oe z`2KFKI!}|ihcG@)_Z0T*tK!}|*vgIw67wl(yduOGxPs5+-<4v;G*&DE@84cf?+8$t zYE(+m!HnBOZ_FgV4$NnaZCL>`V6ggC`~Uz9<00V)PyeQoV~dg6JS>RAL$r2na&uh4 z1WAqKMRutOlW#1jR1N^j2J$lMGlO`6f72NqIW!~1P5KRZR^MYuwowJt`NSU2*ylv; zBx~O-1rNVLQWl$)@!+LjSGUD|?r-`EKo9U5$bILZgW-q@kz1HR2*Mf6SBe2G`Lm}~Lr2GpWF<)=8OIl; zo9CD~Z>coQ^3>Ti4eZ`zszQ4Oy*CauYkhACMzxt`vUhWDR*GNv^@aX;jgbxHQBM!P z+;RFnR^{ACQ2b5LgCV%JjMgRBGD*>2gx0RHbNp14AP;`?pYPu)SqHFdNqsQ`Tcq%F z=yc%_eGasD7t(IlAj9s3;F+{JERq0!gpz3&#;FLp$dZ81iWx>-NVHrt{LX|%Ne?Z; zv|=Gj77L-~yXe}-rYUGxQP?d#(*{pp(9F0es-RL)<-T{sdi{uHUY!$J zvm(jC1(dKLN)o12)A+2ab>?+A;TeU9s^;4GY zSp4m!e_=2`aP5FR3lv4H4v+a87LtosLaI7<8G~suc8-!5b2<=|DUc>VPS$>B`pc1$ zTb;9!t6R!Q3dp_WeJ1~RC@IEF_iH! z0|4kambP@@3$c63%{!H3N|;w8BT}76ym73JrAw?4FS|(ip9XI*I%zQ$pj>!f*L-kC zICn(1GajVUe}WzGyNT3>2&|et_aC&g4Kz>%gn4Fx+j6KHjQ6lyU@_>dbMasE$^mFY zcAfUYCx*{mmq+vTytxm#^JBoSWpXNB+ z1H-3@xhfB{3hk;60P+}4-bz}d`cd@_fDrGhwM$}g`ve959EjN^Bgqs&Ww=~?J{(qC z^)!C+ig0F*S%fbcqP^g`95Aag^BAztv;&I98otZnB;-q#Ouc~uNB}RaP?DEu^NDOS z53uz8cDxwX&L zF7}ENWTIz9gazzeI0r#u!Y9l2l0NG7Q$qEzEs3F|)ZLpYYiFBkv@!0Y)3E7eGwjjuVuwudRuiYten3}O-Y zvs?(<9zbuigdqm(i(eD|SVHRMzoz;IGI91eNO*9J85<@k{OBWVI-`Mt&%)_k=L|gS zlOp&Gzi*v48@f+b{pN5VnGIVDUZXhz$I^ezhK|JhrZ@%ck0TEV!Rv# z${6490YKE7n4}Xv+5Q9`rm>RvrbYpJYajD(0o)(mF73dibT;i~T1<{l`9r>is(~8_ zJh+_2_#fSV{8x!`maQonf4de~N|^3+pRjp*&D7hp{8Tw6$;p*qOU1=ws<;{v!v0)t z&(3F`x(%m#8SMc4ZsG5Bv81hCuA5QZx@kmObWaGvHTkCS->*KbYsP*Og>nbbD1QPcL+N13uwyK0k5CW2Fv>*U?^f;@6 z@xRCqpr>{9`t8?X_wT1mP1tYbd%F)!4afN$veUiC)baa0Py=$6kPcToLloBkx@ox{ zU;nV2+meE&r8Rx$$nD)ujcX)1jPJ$kT`{YFx=Z zxY*r^|C#@A!vlB%H!df6f+`CL0fU9KM+O9xzoBG3L;Vpyf1zeKdr21iEE+W_(d+n+ zcqK%UF2LcJmJKw`?^)AokU44u3EsmL4bGr2t|Kq(Q`q#NwDD~y?I5ffuoe4j#b;#e znABV2P%Z_her$H{QPtK8F2oLo$NFVCp4l69t>9eqPu&CC#@!p)c##`13jKpQUJp&` zc3l>V=B65O1_^%kS4?KXWr*{zQ`07|sYVa%q2_?1Cjf|VR_2>doA*fVP+2r?A$;Sz zBoPnW#`PT88{<8>f*6=fGtEvw&Ky|P`1Rxb(E z-6b95&#}%cqAwaoNM2_x3@)$w@VcA#9i)`ugQYCt#Rj5Ti`u~)NL}&#m9E?n{Vg53 zJRs_OE|`~YjH%BShee$dIIzQ_G1$UaqI#st5;vd``cU9^roob+8qyU^2~N~z9$IkL zY!GaIoBM5J*x>M{dGSt!7L|)(>Ku^+=HnwyrHH}LOXT0F`&^TIm$l_Iow~3O0vSH8 z`T=G6slY!3o479QKUtAt>3Mc!GVoG?pf#E{^l+o1M-ueZ|5BsGA79eZmQB_`5RDVnNN3)mopvqb3h_{E=2pKxv808uyYZ77Z7`1ss8(H2&}?g@*h z-;%S#$i(Sp(kN0TzdOZK`etL84WQx8NxC+D>orlnG@-dU1iqzrr7e$S(W)u&N66gf zqn3*E+}EW$Wrt{5r@Uc|a`S064$6*Pm42mAn!adJeF2vpKXK= z&2;k^A>#I0Jz)nAiTel*8H$6?t$ zeDh&)h5j$V#T7%6dI^H$F$J&gI*V}CwHEh#@R^0I#G42QrOJ`U%&SC_Q8fSmWd7Du z`?`D|cka=ps1UZ&vW0@qfunLf2^_m{+jEWhhcsWNhB$E8xw1DbM;Y?@5v{(9RFvm` z^kr_XJq)vJl;Cg(x`UbI)?**~^aOKS%kT0zojM9R zv&#B{(2=v-yHvw#;j7M0&Jht>#l*=kfzrZfkfN^2y$L&ozxd$| zoQ^nL@0cR3VIz?17=Jl2N2kZQUJ@l=CZXcYnN^CbNonROX^r1) zG%W96;zWkmkz)mOhCY{L|M~ZVoo?)EF3IVB)5OE`*)uE;q?4ITa+^?&LvF`AhCt>Y zDy|*U;=0BB7>hr}67olDMiz{x&%h9pO6~@!Pk6M^NvxTHXkz)bh))DA5KR@&fch11 z=P+%AX)082S7(Z*$7o~oDeXsDe(1&$q*+-TX!Kn^**NVPZelY!eCqZDr>+VrY(MvE zP;#6v{`bk1Kao;Yp6QD#79i%cfB|$E~r+ z000b^Apqgw2v7gQ#I~ZnSlv>#?iWrnMbX>kk(!LgbvELY}VXSH;hO{M}*Ni>Yn>Y2~;P2Zvg(n7x+_J0Ev3tgp3JwsnGelSJBY6~7HW{o+SD4I;wJ@qAx-->5f>-7OWv5h4bz!<5io zrz1%|^IvxfB}X18n)dl1ePe}_2WWjy9@~9MR4t(;L0yAS%iIJwaQJ3?+_{HC>~`WG zk#X}@pP)7*Rent4VRmL1o$f!gjgg%9*rh6$_01FR{>!=Y@1!~&Io0T#dlfnrmNRxN z;%oQgOgl*j>&&%1Yk`;h0i{ksR>c}FZIVfydF*jzr2H^=zB~2dtA@5W7KW~jG8BIW zy-`n@mR=bpc*Uga5s%D`-U0Z-2<(&k2;BlQumNl*?O#i}IRk{D8wLM0=ie^~uf#o7 zg{NUT5@7bd(q@au%}Y#6d7E#mQj!Px(4oKr$%Mr)7EzWtjU+5No98DXPCdcJ)veF; z**wn2F&AyMB!dyMH*g>iA8$Lx^kJ0w34@$ndLEtQJ>&{aaND#C96B6w0jtJ)HtK?L9Id;qrd+?1!iZC-{ z?sYOuKWOEf^=lI}@D{T=bjupTF;Oyufnwau56O9$*h;$VQNmocCQM6`v#hb=;)Asa z7ypGtkx3y;rdYT1T1+7K;iMd)y@M^-7UiXtiruB@bq4*C%`T-0(3-e-n3kZV3`a_N z2-x?0IX-1`ESThaeQBCOgC6R4kW^%ON%{Cmc%z+z=O&I z*5v5~?dQx}KV%g=wx`fMLZv9Q7-`E?0kTQ*v)e$N82wN2+g)M#q4}+K{-zH#p8d1m zI3cAb&3V))lmoJgw<(~0ip30F31eOCF?Y8z7RP$>G;N`>sWz{E&wddisf+IWP)r*g zO@gCf{`eezQB<3ML!@`i!89R3lugT8K}6arkw0<-xd{~@s7WFXWd;9^XfZUF%kv3I zHqV&iiShggrsjF0uR?sIP5pmdIV&xXa4wwS5ZJR8prpOMH93a4+d4|npKLh4*wrw8 zUs#N%^P+7(BEbXE>HncP6q|MAAkdc{lR9=RD?Dsv1R#1BKo|X4+w3W418-Q-MfvO= z##9v%SKi|BXDRDZYaKo?b|BDd!k|)vzoiBOufz?W{9n~QUgP$xsHa|lZ)<@~m^C5C zeafpmTBE`l0zkNTQqJI9t3;m47z1SwCxvyX>C4cG@IZea78dyYV^^Q$L*&X4u7)sh z9_nZ>948U$iid>%mBf_#7e&^wTqf+4L2@vBn+uYzy}hGysT>J}Zs0C^{@DT9uLy_i zP4LaKRg8(VrF}bG_tTV?+T_ar4}2dRju-;(8;koCJl>5Sf?vU{pHkkQcozkpL+E4~ z8mG7Ugu3m~C_)H`b6+f%+h0Gy`YW<~NA&%lA+m}4oQCo4YBFvhd{!K4Ckw@X#ko`N z(rBcFmlVb;g~a}^F+;_q;`^Kj1zPWuj;!WzQ@S`Kmxecr!@(>oXeooDqeb%);eXPYb2J* zg?)(-9Ww;=V=ozwQ+7_=Q)R|+R2W-lADI3%FdWM46+9AXf%=XIQ#`{2F7H+r2cEfU z){$yhY8Rq^1arK#D8S4pFJ?|$jXz6-^vuocV4Vo$jvRlGLTbNCcXg;|Uvzi5oj=OfkL&0=`cA-e-r_jI%X?SLjv@F)|;~ljX$i9m=i=5x#qU{f zSzs&oGB$d@ff*G!cnm02otrK(;X|(itQ0!eqP%1v&L(1YCOL5yc>2SI7TNZ=4-?hE zy$yW%ADFfMw=?#!A45QA`FjfD51%8FYsFrdQ5phPI5mW?p$7Xy2_a(%W zO<;uxx_Ga^`tJF01An5g2&B-ebR_4az=27g6cj$+3cpz!^YSaic>z*bqff8Ur63sl zqhlzO^b3rejcX@D+qF*0t#UY!#;H{2*ZO{y7i@NYvL>#K!^h6aqUE5cmxI1GR~^ws z7#mhdi|!3SX_JDM@>_`We4ev%c)(zI4Y!}w1i?w@9hbgQ8w(6?g|w_=%lP4K?vxsQ zV#zFuZvNZy*up3VsOs%aZ43ZTgue_9)6^#dik-D~l!PO<}-&_!33y0+YA zX}-Z>5!h{pjY9r8bTM;6Ph+oBf_)$%3+RuXS`_=2s>8iO`wIj}3V+K91GXZN!c`z` z&W=mFs9f5Xdu!E_E)-@rvDTl@dYItdY_>^8JzHpWOKez2t#Ew|uhOMpz%PpoTLX$* zlvo-#R=dQxkH0wXhSh)>(f6%<}+fDyQ7F)poSwkC|Eeg!k)4s41tsZ9T+C!kzpyOKNy`vLGVsgD|tw?{bprWS#fDAGyXL(g65jlcJ+t zKTpD_{ay5S=Qg`ea$NBc*e{Q$SIq}th#z6HwHwJH$xH<&TJdPs>i4WFO~&$~_|pl|V#&p2=W8kYwih-p+APB0Xdpw znNC;Se@%WLuv|48R_Rq+h7$%MR9zF0Km_=BN^JJHZyzw^PNTW1^&s5w>nj*H)jlw~ zyOuLKZMt_~mI#YbFgK|EYG#BA4oeHHA2UZrr#X60iH|=k0iZ8l*a5dK=heY)(k!SA zAe#{Boub0ZO@yfYn!x?<>Y>eZV=LFMECPq9zb3H+s`gAjmZ$D#qXpdVUs2gcbhUY; zFdV0qzKk{PJUM?6gT>g1!@&}tCUg@}Xn&`A0>gO8H5E=1rz1o}C}pjS+`ob`mcf3C z!Hh5f01rbU;t)&!?Gf#@&TzxzTWFud;pDf}%#0I?lY593v*HQGM!sHLPpvX_tP{}k zsO*+twY4|$7OWCIJKJJ)?vi07(Lqjjr!voS9&;^@Mfb!Wf)GnLI=LDUi<^apvV!!t zKJS|9UMYOY9rJ8P*LZ;N9XGdJKOP$- z(A0gB#V&Fv3Nv_K_}Ax}t7iLh4swec@pjFU5rAViJFN(Tu~XVy6-j`#lyNiU9yF3N zH|6hm^p0=dUR9T|Pi+aX=Ryv&<#fov^n+wc4ejM=3JvwFcaF!C_h?{h8Yrmhsa^)c zY>1DAOc+!3p^d3pQ;m~HVzT1xgaif!2A8QrEwT3#YiEiy;`h87BL7aV+M zp**CWV@5)o z|?q$>>lL~W34hT9K-XI7vJ%fjS#`s&0h`f2hja4-YQDF5YJ zxCB;1HMz;c3Ze%3H@-AM#(WNwe}nFv8@&!-q|Z&{X%*H~ZMnA^71$Ra_4xcCF>*g8 zhNF2n`D;WZZ^5b5n0!3>62qpb5;>G5hc!tMu>jx#W`?Tz;FY3nS|+I916SRn!%AB! zw)>JL>6|0nrfjpJ<8Q;JT<;gKGJ-7JVy|tjV4~B`Q`_#`W96ta4Uu_XO0e7LX=afG z7LrHypxOPUTp&Zl`Q$y1_n?)DZMwUG`~du1ba@~~WNAWhNiktlsq{0z9(<{Dq>VD@ zqMJb2#rIvlLLurbQaug2UT@}hc-+&B#YRbzcx}p~rb(WUf=`i-*U2cL7+N_7qVPz& zVua48G4~q%;gel@;?X#bGoVu-G8jMEZ`{_i=%{aIoyWuPJ&-S50!5WsgJnlhq>~xn z*a|VN?&CX7{~~r_6pubeILW+13r+gO-uxfOi6kEk3!#;?sK%GsDYV!*0D#|if4Zkt zAX=Z$v1SimgT~dYCZa&8x%)CKq~&|;v_rEPEa9DuxzZ<%B8u+8@oE78qj$}pYwJ{n z9JwRU01m~t)P#${15-+mfF(;F9MM%bDd%C7#KsRhV8rjM1mH5 z!{uOB`%*ZYhO58dv;@*W;9{bmH%v3cE@sZE#<3+%`7G`*eiG`P9g@2TI|&lGjGEP{ z_bPF=WDp5I;sT_cLXZq<9?HH2K96X-%Viwyj-k?*7<8TB z*B*2L2C+F-h52E#iB=w;{5tb+Z8L#_yTSy63{n`;gGTFk3B+_S1wY!v5ti7GmA3@) zH|#%s*@I}CU8d-WhuL0)Uo6vK5J?0cQU7i#HQDcF$|?`>^*vk0v;&~T&UD4`QXVJPO)z-av%Y34yP3W({zQAao<$g>Ye`cU6^-yjh$Bwfwn3@~ zC5Q_Wm=P5O!aWEDy9$zKacAb(=YjYd;W@n8WFI(u1xW4y;w~_Q6HdVm+^@;h==>(L zE?`jVG0`XBE(%bi53*llC%q<$Q=J`{BxoDfUf&>O%Fdp~+SV>OI=f|Y{zUIVfpi>t z$gi0tf<{nOBoP3wg6wRJ-q*Q?*3q$?e;^&9h80P6XSLvqJ&0!B7NBD|T9n0c>s zI44A>uQhJ4DMS71Bn%`N8puaceaWHrjf7V0bTiijW-&pPn4Ct@_OE5SFo{G~1xmsY z*XFv%3^gSeh|V?L_^axwlQ;LB6Ie*g z#WQU~pv(j?u(M-j5zmn%e9Jsb_Ds1a)fP73aytinjzYUYL}Q>$?B z%iN!Iwv1{kCw4S+RDJ6I5~B%nBcp~YSttHVI4c0B(XH84l2@D}b>==Rn~sEUa5)gd zi-15xk;B&4$Ld?fdOIGUU7(Ep97d@3D%((Nqsbpxk6=pgaunrJ4Q zsT~KtRD7lhBiNLO&Qxk=@m33(tibWRQ+dd|5Wre%W3P1rc(oONR6QAZb=S2;b(XWzMr-Qn?-C#&P*Fwp4mzface-f4hdWZy||ov7k^#h3)5Db1@U% z$%u|>=;y%^{Ij3jGOUy&|AB#7>TwBrZ1!uJcv6ii5UtpkV$f+0LO%Yiyb2&YVIcEc z$95~Ns4PQIoQqtw0F|?Wvtyb?Inlq@u5uMb;W`x4jd7LT+HVViaWT2S)aFMk9ZZML~@P8|~6)&mfu*@}lD8 zSvVcA5tCjfmuK9h7flNcGwS}G&TK( zl4e*z3r!&s(GIYH7MrAdXti8#$_$mw&TlY=N#ODQ$Q!AEs?OWBtjL#PjZ<32VHm6t zxZZNikVvP^Nq}#|=3I0$xXCWT9DP#x^heV{Op{$#uphDaVFbsushRQQs7PqT{EeKv zj2yK_DbIqkoOccTPw<&JJUf!%MoF!CA;FZ^5J>MGof)G;>%(He$hYb8lE@s826tf)ib*mzBi`KXp1qBdCLBiToO3_wp0S5=9U zJP$q6OTo@%V><%`2BvT!6&4^9q~r&{{YKV}mMVu!p{9z;`cZ9q!^jJg*{e?xvgRb! zC}Bc`xPix2L@_Zy)385PXdxuHijF1Kj=q}?HYr8B4-KrTdr-_*F9^?@sIPJ2PHk7F zc1Z~KMprEh#U&D&0R%OuW)lUpc(qf6@|lrh1()>9v{)Q3HmhJ4L_ioH{Vp1{M$U!)&-o;omw0Tr4VQ}Z*mQN+FXR8 z?^M7_L%0G+L-HC==c@0x6y(nZjr_xKPG`(1kGw@$cDb^XXg+JN-IxH_`Y6!ST4wy^ zLQVasr5KSGXZM?wO(DX`vcV|)Vzfr>sN|z_pH69%ucNT>I#f!ba3@E-qKYmz2`Ms~ z7zD3n?|Pc@tL6rc$b7Y1r{NZ`;Z%&Yu^qCw-4ztl(6Wnld^8bL_rQ z1CcZ%Nou!Bzcw+Wr_r`quq7SXXRBR|Yj5&8ow~#P z(}40_PD1S{(fA&O1@iy^6Imeu;o=ZW|Nhd+B7T8OFyQ~j>_(b7Hu*?JYp}mIsx>#Q zQ5PF@v^Qae3p+Ekj)}c8r9q0hQKa!gTO(BkGRl;$bgew|Sxp;jr3CAxyvq*v=#G1H zB?0W%PLjgpE7Z5NPF)|D@F!QL)n{k^OaqN^kTo&tVPe}6IX(Pj(-$uR#f%5R4!1#g z^ipMDk5yZ`WZlKO)0(a|EAR;NV*Q)W_Xzn9(a0p+#^g}z(J!8v%8rm|r}zw;wlFd4 z76srO>JqYu%G987Dg1z>wPH0f>HW*h@Ok;ZiS170?mJq85nOVKYe^0g$4u3DB=bN) zRYet-=Cjug;)v?>U$w|+)Z5&XF4U1ptQl!F>e;7pc@AkTZ5YIfLd0`A zwm)sLZs+_hhT2clV8#qJqi%09F!Uy`7Z%au@$L>HznS{;h)*>w;;_NuF$joy08wh;(dk+#;;$Ym@2ZFBO8Y>vh>d8P54-(Lm+vrTqj0uPYHNDK}xkcvj2&0I! z45uAM9{)0j6Y+jA@xak6HzvP_c zBin@_ZosZ&s=jFL^4=C&5#vB~!4JCA01^k9dIQP1xdok5lG(!L9B_!@5m}suEIqyN7XoL zN7LrVseb_iL&i>UoN?rcG~H!2;Z|j#&;UE4)B!m~tA$FKo_MFS7q@!^%VH^o7csul z*&C#ArrdLKCDPzjV6ANNd4fJRTuL%Jg_}W6*G7mrQq2oPWxD$~2pBIJ_FX<5f!E6O zxSm907L+SzuJD>$;UvQK<1goqA>O*CzMhYHhepugzJs`LWH{tPxs`!63C%-ZxcTH2 zp>Z+&5u4x=TFPd4O!5p9BmDB&!FUOVs%^r<286AYADO?M zf!spK$iF+&L09z}$oRUa{|wkWEvhcAqUTGcJbL?2G+A;H_Itb8)Zbph!CT@fh37{- zI1;FanA=O}d6Tj=^0s{NR`f%mC#ulxI1k?xW-jvk&dEv#pwTDCpCA|nF;2-*M;3aK zj*8j6H|Ke;Azm^GE1jIVcHM_awX?(Q5EdX}T0ZmK2E7r|pw&yz1(tic3ktB6_yFI` z<*to42XQC*Bk6tl<4YH%bH*k;Le!{O#&0=S#|YglMKZm6?KvV2)f6!hWB&ZBH6DwC z3|~FkQu2B=uTb^Hqqo1g$S{kM2%3dc0s6btbT?erK>OH-f& zqv~8k_w>_zLOi`oJdv~h&{NxT=|UuX8EczQLXL&(B;A%3^ZR=dV>c*`Ru@@7D?;%Y zaV&LPJxQjCj&)3|aMIQ?xlM9iS``&%ZFqT2)RLWhte}@|+199WAQ82?6zGd;b>5UMNVI-A znulOJocv=4{id9jLrVERO`xz@*~1HC^u%aWrTyOg@+=jv!l;Vpe`K}qrvgG5fi$X} z?&De0=vtN}JZu)`Z8p~MJ{eYmojT{!8E)b6fP&BDa?1*mJNI&H@J=RQ|E4WF^8?q zrCK%;*?%Iue=6QZ*Bcp?K#>yzd&?$h(K0g|eOx5YWL#~_tl*lSvHPY^hC^QIXsyI? zE-0nzxpNO(0`uZrcc9v{-J?u^AUu`aLQDf9m~YNH*9^7nQ1ggUUe21fdLOWqHJGauu*aLt)uci*S5{7uhu;L*FSazW25H2FCti}Ntc zbbU62S@HabR8(+G_!2djUy++keIdmst$T6NVD(2-$L@R0j=ioj9j_&{JZ+=KqK934 zYEl1>kJ)O52gNSYvB@Dmtt(&tDWPM4sj#rY?eLHO9pu~3TtbKPfl})fVy)*M$9JM* zrb;rb(U(mMQuV8+d%9|hGzGh&uhq3OeV^kaI>dmB(t%pd`ZRcfX~ZD-Y2*pIpL5yGSIq z(zw3S0A=1V4?r7KtM+)-Ky{igA!8*dCLhobR0bJT@LqzEg=E?UYE$R7iTo2(hjMqi z=bZ{%#_JLGZMu6#u$l=p)d^s~&Kz)R`2usav&qGEy@dGcqwh_(8J!7=G3t}ZQKa4W zR=rrfeR;EzE&MUusP(t|@%@rM?Lj%a=F)SgVsA*xzuIIFm%uqLs$)H)5s}ZuD$`GJ zTUHhRcrT1Y?9hTL8E?mVn&J}XlVj}CO-W4$-3%BAjOxEfze;Qn9M3Z%U;F9OMx3j6 z(SqUsdzx9Uzd~pA%etE42~Iamu85PYjAWO0D`wg^2gRTs)x^g8zbh+N@zdK`gf0g?)jzgo4; zg3=}PwVS*r@cJCL=|;>A5NAH&-3XJp1;~7J`!x_SpX=spVlS|edz(?PB!=%KkLWx0 z=G*T_Sb;HgqPus3&kF`?wwYyc&z@cmp!H1^KkhS=wDp!_|Wz`GVv#3!_BNgb$rSK?s$ z7etUJ6T}6Lg`HlDPm|a!8r7 zZnc@q)j3$e6*)|!vn3a%=(ZthbfC9nKZSPK^XXG9Rc_UfsIHa-$9p<_mm*wIW7`0@ zFX@fiz}b*w*!U%|fyj3_GlNOypRUVIo*Jw3+L~n4OzM_aMaZYqMj0Q3IE6utSn@!& zgWobH_AVsM-3#3S3~fgzh?{n-`ZDl3kFV||k{R~IJwbP8YdJ`Rel9akYx)<%s z*{(xX!yFHhjb?vn)(Bw04ZpaT2N_0iA|mMe6mj>5P_pPEF8)qikx^0Xp6duZQ*%fg zDDN^1U@J$kNZ&EhscJZ7>K0I8?-b+~yB!L*cR~aiJ?tp_ZEOiuFk$cfpX1rfD^s^f3VR8 zEP}hNK3VVcfO&2RRAa@?B4Ov)`&cR2CiwMR^|>kq25pV5K98#%$#d|>vB(o;R(NR{ zJO+nx@ixH(fr+T@0&4@3OidN=d;##VJc0JF$M=I`K#q_>DW<1$Y!FE+O_P=9>lw1a z+_J*xd9N!Hatu@ktQfQwys%S>MX?mqo9xQ5Ej?i;Qx$xdzOZFKSi65R3_L8#m{#*Z zF80;>gEbk7aP^wU5~^jr@4xb*wo&k+w6l|5>T?#j5SQD852w)t?*t=ksT|NS zI*prixqzaKU$g$on~ziz_Wqbxp&&67xDs^mK!ZS|7@2}`3$N*TfQfZamuNk?v!)lR zL(aEcnI^Jtv5`B&8{tP379D1A>PqlkND^@Z9qerZDFjv4W4!xZoft<54WY73b{~d{ z2{fH07RrfG&Q18c`z-mxsaoPaHex`|K5-g7*)5SA+G(X> zYN8`>QR?pyXzSr9l?tyD+2+te3DdTLZ0ulqgA zd&gq1jk@j-$#!qdk|U~%)qAiKTpwl1sS6S>{(@eO6BRWy7!03$f4)IQU6kam(&UKe z_`XB2vn}Vk5mQ58x+(i;f46FG9^9UH_wxx;EH=;I092J|ir?)-e!u0?k}doD?8$s~ z)c6WT;zPSHu-Q_aT$wR_W=^ah4wWTUab@&nObG17@*#Mi`5pjCK(@ayr|$%oiv!&{ zchlbMen9A*?4Nnuawko2kqv^ju)tt}4JcmYo5KITE)8ygef4$un z*&LA9Uriww@@f?jdC4o?IQ?}?Hyv@Zu~lbjsZH@Zyh++7-uTQG_9iBOkQHwF12lK* zKe@$CizZQxGDOrvL1)7&hP8=kdF}^0ti6$=xM70LwEWC-HI$Z&8O>WcKz-usc<12^ z@oAEe7A6=JlIas^?_Ori{H8wDg{F0l+^6g_=wrYv`axN>u(x$*#6UdinYBl{=8^lf zXj98`BJ+D#$NdBckP_C{`rMd>@svq?(gE{_L8vUoV$FIAmeec6O~;;~!GMO`_?pWo2 zE7D7x7y5tP78Dj{{$mngCou$=ztm4K?v}`c^}9lLwjNyu~$)JJTJ4D}0X8P3Vm1TyCB+xy=8a zrx$$v833Kl|IwuOkhH@b*6WqP)^8pa{>OY0?QVx@X_iufAqIUp&o-+M{mVo^LU(7; zpQj91Ae)Z}P$NGusg|);xP1Q2hxA1r`c29$CgfJT_+zPfurNQLWT!;7rUkVz3tLWy?x&zZsIWizJ(;>lygg@; z3Sp?@`GtF&d2U;z`}N64Yw)Rgzb-MArfL#LbkdNi+OZ>cLi8E~9Yuwu5S-du6Bbp} z$$)||&FaHV%j@&EIbj>McP8o@7tD95D*n4vyotAs7^|UgW3Xi6redfsh^9DK-D7;CdpWm;*}000loA>$xR|D#mJQ_0Fj!Ij-=8;iu~0cokdXIeX7lPKDViI-~|g zGOFK@J3JJ50!4b~_=Ja&T({B?NCJSheWG#(HDa3ni~56joCWaeXI~b{*qnufd0MR# zyn|K|KDx-4Zh;cTzox=Mb)nSg#1W+2Bqf)x+@NCFqHCcat|Q?-+R-O3MRitLick51 zxmWLdce%_J2}1%`VWGXuSn9Flj|l=mbOb||>Q&)y!dO&3E$#6GnLQ#pAY^gthWj#Ilci9vob4zFojHDk)iR)(w*f+CQUt($)mQZ z+#_~dEQKu`Fn{EtqmPu1&<0Ta96TrUlw5?EmsrEbAF{`9nCI-F;mos1o01r03mq9) zeMJ8j8wex(s9M#GGGJ$%;TJ5rXD-EzC4?i$NGc2rc>2A{7^ z1f~b3#MA{}p|4ia4yXy`t0}-haOzvO@5m&9CtJ17#C|KQ#ct}0L-Y?frltw`3sWwCC~fwLWQyHFT*gx{rGl-t zv8qEwzbqJ6k+v2y(uBYu~=sHa$*7oNZ&?5Y0D9lGu;`|s}$im-SmeXaPzeR z|LQWJSAMJ?sithgDiC?cil6=xx905&LYf%1G( zgCwNAU~4s-JFNT!vdQmAgCbeQON3yce(C z@i_)x!~2pozgwndn{4A8+h5Vb8&7V+XKITto;Ptd49gsf+&Xsu4;eF$je@QonR;`< zG3cuHO;otNxO^#NeRQKlgQ)W~j`V)efqPbO5xsLA2Df-H5Slfn5GN zVnZ;c0ECQXx~uoL1j%-N)jQPiA>0$?Dk1L$n{JIr4Qkspw!KZ=4rMJXI!g>p?&dKw zb<~@4Cu27o=C$fL=Pz4Vim43@VnHyu*Ws|%jG9df06M(6qqHHPB z3!)Gmk)LiyXtq;v8!m9cOJyRg@^~S4VAj*i_Wca8@Q@T@VM_hQF-fNL4%_9$Y$#7a zQAnI>4%PfynPvd%st9CGibesK&c6ID=0#EZ{ATYz=oll*zSwUZghe&Xy>+YKkS-L3 zOt?66%Rte#3J&u3mH1*WCc@+5l`pzqj>qP2^YDBl;*>P}vy4-$oSGEwEM&T}+=-Bj z$Y`&bFmmKP5YzMQ1T>OJyOq8rs-Pt0CHyiCs5&&CEZDp1?`EEdsvy_*&*`-fZJzps zN{#jv*5r~vAF()VYq~j<`BTY?)Tz!N%&li@YUZ{2qHx(_Ex}j6^`0%^KAdt2P^9!F zTeD71ee9wX!rT8WD${prr}^1#OL)sFQ>Pd-7{e2E2#DUi9TF8`L;si+K9FcTB6K`0 zXRk^QUjjSd>ky+nOT(K_pFHCzX#)8W-A=J9UGIacc^;E5=m zBC@`TGV0Q8zOXjJgNZyJ9Wkj~$96s~+jIw)w8^kBg#|yj(w6*geQ8oBwvCcSo+4y; zUh%DgQM-+m?N5aI{ylLFA-&n>B46dQ1y_?@6B2 zHj;j)!pyT@L+(fjPH~|YJvop07IXJqiU+;?*7vck#OgFgnXte*c1z1|vbg*LM3&Fu zb$Gel7q2XCOMy{rAS~2rESMQ0#LD?>xq>~;i!%Z3b~5KP?HIACO4JnANhm%T)SaN$ zTB!0HcfZ}0mDpJby5rGY;@crj(pG{@=VV~;^Zo_exzn+z7ss;`SXr0{g_1PO;vhYy z;H4?0j36$%)gVUDgXx1(&#{_)sEw(?hRR~Ey7$v36%Fw6J5GrFA#H5p%U;lGz1Qga zAU3KNj4B$6J$z>q%ZXJaS;Wj-SzG(N4L95f_p22wGEhS~8x5l-&%6x;eQ^f|jj6Ie z&QHsfxizUDv#@o5lBovgf&h?K01!Ful@cg2A=U+}-0jOrGVjmcTN*u?3|0YS7X0T& zJP0M>(c=ME6`+if#((2Gwx}wj2cMmb*ZbkffyewSLh9Nm$?7^Z?70yc(&d~y}rE4I^OZs z8iw!aNa;apEIHw9ftYG*_vO-0-?3tvdryf^)s`A?&i7$kx)^R_lx!FG#j=%n_{aY!L3ZH6C z4?ghhS+!Q%TlN&|7}Gw=lbfM;|DSB5;fqzqnG zfnX$ovv}V@xbIuF!iOnxu;Ku#t$iC4F!mWtnZ3QgVAB@EL0VxGNvR0oX=~!ozXDdd zqq~lE_dc&bQk{u0rgn94Bl8vag9%K9o0&j~^0ArcaNEVe zeV&}7uYHKL+E?$}ZgtEzPBRCHSBNvbhv;}_6$#uy~@YT?Fn`r(}D`OWyP z15wd=cK+7&u~9E>i#ODQG+BnV1rm-e$)}3q;rg*V^5$jh1R`2bSln*PZBl&6dCi?3 zZ)96eAwgLT=cSe#lL;Mp%$En$k}?Z+zt?18mcgtx$yx%SsewW4%&>jS zts@IkG`9NC4=cP2%Yl8h5Zq(|%r~{n%v}r=JYR|HyH-PVrvD{#)P6&ahAc&dY{P%Z**StJe(F z?&t6SGkXb+3C;3RR<#Jlzo@EUle`^rOarq7QwC{SQ~_%lyQ(iGnj0m(N91uS2C#!s z5)~)~wT4%~a;*Hwm7L)~&XUU4Trw;L-Kpb*n*zvQ@E?w09cui+$7}D_HY-i`y0kD zr%F4Hbzi-wpZ5x;Yhn;QyVlLEGy8n~#xx@z+}pzgCxa2*6KW^3lIYsJA)0iR`kTQ@ z)CjrVu5v_ExXFnh(Anly#U_yNpYg3BmZcA3rSGfGKxin_q&ON`!sW&r)NW6>d1Y1B zaPo}Ej=WSIUZ6@RmfGe*W>M+WRewZI!rI3??;jWIo8{&|1}`qj(Lu_iL)Zo2#wehi zT^U~+a*CGQM=lNLg5Ey2s`Lm1`#mIT<|4!aWg0+&;0d-H~leU~GR0#o(eY1tMF zNfW??LIAV-lu7&8{%Yt2=LA+kM6Jt;-Zybg{3h`+eweHM751A+u;tC{TDK62gL zlC?MGXG{2aB@r1C(LfHR449UDzQG8$b4_8X0>c*nS`JDyQ|?q{ftNj#GMWSY=$JpR z5>A&3^oK5&v@0%A&@Jf>EH;pCd#tvQtAcF4bNekW%3aFY<%OUQ-VquSh^mV%D_=Eb zLsHrJv-X~4(>{C3^_|2rAM(LrhkxeN3fPi8CG9Bc(9ZkW%vc@?*C}yL0kDU%MLdz; zWE?7XQ)T}exJCP%=el8i+Ysv8cV93nTHQw(jkK5fYUr*2e-;Of?Hc+$Gr)D~z@Bsw zcIffeJ;X*`@?%KoNy9?t+G^_fquOzN4nRu`1oh$ zCqp8F*VvO#LZ);#Xx1}J0+|Cj!7j#2hYjPVJaQxb5)v2&AE~SML`Rh})$aF6O)O~R zI$jC9pUM)|`e&xeyWNbSud-^4FJ)f&Y3f{{Q#OuFHiK#)^Q@b&c!G3=J?I)AqU^?w zepE)4!?1-%_YvtnQ|k5lX)AD9i)g+#c>l!RU3M@TnwASnRJ2bK z_goOHf=BSFd2bYk@l=|YjxG@ZmJpDx<)=-me9oTC?c|=w)r+>6nOT$gC`HByhd z>IEYl0RthR#cCHb^Zzf$!h)r~-QCoUoh^J2$WtNnesCR;1Y}2{x)>vv=z2imQ5$uV zO5V!W!nzHFSTgdZLYPK7YSn;~*9a(LFRDzyTg3FTX< z2SOzV%*+u*=qf1xVwVW$ln5%xv=Mt&tPIyDr~RQ%=WaorQBO!DIXjy3HPlfmVj}2f zDWo2k;&#fb-NNJGCIIEb+pJn510S<10nDKbuJLS{vE*34lnv&fVL> zw*DnDN z&Tz8}B#8)d-9rL^q6CL`m;j1`-Wd8c&gvBWcHHpg%9X(;6;CCAQY+|9{%rrY(;S=& zj4|;)%@)O8Qvb@WDUjhHN&p6E;&^Qq`6h1Fs}Ro#X0Y~hhh3nZyz1^(mWlfEQ}6&s zSIr#Xy})-@Y-_ph9QwR=h6>Ke=Fg~5TtHu)ufxrcnfvSW4tq3-c3OCAIg3d|aDgbd zGfkE95VAzc;|^4==F>s1_%MT zCys}JHUJt~Xhcmn;9W>{(ZW>*ERk*Hv_@~30qNPvLyrABruHviugM_Gsid^D)_A1{?f z_?(K|;?Js7lg~++a8nrmeMH>>fxGcWJu3+65{9Q1S6;>qDD1`CA1}$GqKxb{ZaTIh zb+Zc~%JS<_Gpth-x^`NDQCyieYAinOR=I9T$ex-1vYN5Yi});9!mcE)SeZyQ*fJyaDNWQ#PoZJm~q*`y1EdC`rYIva`Rd0R~~odigk?15d5!8Rhr<* zL2k%7@Q*>oS-F^a79v9To3P!ku9GTLPXY_rF>?z^X$7fQUO{Jw95KE0kMHD4DKfjWPv00t?960Xg6yAJ_7wiPbI8|r;P zEmB?bxuaE5ml34M|B|z>g6AvLs@a01AoQY!>n_R+YHPcm^Y^e2Cj41;p4s&hKOYi~ zGhY}+v@_d6&S9FFPB~8Z21V4oY|{v(!w!0}E4qWW3iX4|)9;pd z(Okaik}p{`iot))A4^)pKHAJDkY7_Fcr4A0v5bo4LgS$Ry6mR<`LN$Nc`6unM0l3_ zIpvu(KU_&?aae3OBQiU(I;jePpX`ic#2Xe2vw&q9 zH-BcNU{16G+BNl>na!#rECHc~$4dx!m5(?43m?J&M2tVZTT)JEGm_~jsa8S2F)1kAVU(!SBB;q~N2R3q1hIV<2oa`ebHsX7!Cluo_y6Y7Ampj@b+1T>~I{?uY{ z-3H)R<635I7p6%BuvpzVnmB;s(cgjtO!LIHAh=xO(z?yqX`ssBk$T9MgUCh`&g8c9 z_b=MU_N>3&yi* z2LOl~=K1(I_uNCF>`+5<>hpY@_;$iM*=Ur`XnRnYQ6JQ5cWd8}-L5P$ChC(On#no? z>R|x*TpxyM4rafzD6chz5~XIvvYTgjb5XMw463Nuyk0uv4@Ry-KTE4C^aJ?u101QbXGT8^?-6xPBAzUF3n#Y%%qOFpy>nm z?H)Xr7it9(>Fb0`gsA}ZM>+K7xXK-Xdu%eiZtaM^q1sYor0hrHS769BimhMtm6n!; z3Pl^BKG=RzX*=3kpz!3QNV~(ns4J9wvt*H_v^i4<*e$|A$K^sU=cne9;w5-2vkBCa!_5t^)zAQaf+;jJaIDd#A(UAfH!2;H2W4h1$g3p$7J z*!u1;1!4x%$0I*m=xYs-VCoStl-@E%_br@r?Nsl<4_x&H}r=1 zc*{Mu$$@W+)y1a-t>zrS<~8rd~SJnlaoesoalF_bXRs!LL=c z*23KqO`HQX?G39FKiCyq41V<}4(%Hg0pU7jrnmrpi)qT_t`0Jf?v|G57PPa83dcK1 zhLt4o*@BrrkXc^f15L-^J#h55*Zy^L0&pG{4-RJT7l{_Lx$&-UM+B61Fbf+eJQ@L& z3E1Rwt9VRs@1Z@I?p-`;xnHMGUA9Z=-i9p3r8dn5MHL+vpp(v0u)SXwx7&-bM0aI6 zjCgC)v%+o8TTMd?Yr+%J+Y|iw9*huZ;z9?MUh^=1+Pd>o#v$1JO=|cE={FZPj|npm zmTD}@`W0X8(%fGz(=*rIjx?2Y#PE}p`2r0N&AV3fP$)&6mEcgU(PitRF{PHMWzBQ_ zhNI?pBj5Rlo#E6=nlSXlYr7@Rzx(ryk#s%NWl4%yd?`ngK!H9GPP~;?j9(x0y@*4- zVvrO{cjTx8SVIzEW>_p+kCwYvPx?sf>KU1DhvfGCpowhO=xg_6)%PLLh9g0FJ_UEX z=gHS{FBiL+J>=GvX53fKGVbsiuy)mP@JSZ&NsfZM$&*k!m_rp{u<)+%C~vf3G=4|d zi)(-P$n0<3QM93QSxm5|J&M1-vL3J$Tq^0Fq)1la8H-+RU(L?-zvF zhX%E9v7puCj(BeH`;i#dOpoLEl4#ZEv+R($sPXY461U{mFeBNg&r|Vr2YLxGLS)W3 zIO{)Z-1#sS-=BTL%V%lm=Ic>lmcf{6JF;5XMl$&h>l-Brr?oai^ign@A-4IP)*w2f zmaXWc0(%nPEQEET=al5d50$W1qMuK)g1e3HA8W*uPcbiz!BaBLRqs0Y(VLVYYUW;u)}(_iefby2rFrUoS75e2 zq<3yQq+jaCIH}yu zG?ug+oaUsUqiS{;HRu{Q7}hQIb{mY7RGMncOQQUc9Q)_mz>B3oocki$$(r)M4%luI zS{d^7tsUi?)c3!%Vq){R|0+6pRBGkctf*f2gLjgj-^{W86l6fid zGk2!{tOVA7oPKVNRAf7li_G#I^wp-eJTfgX)(dOH-C_{mrm{@#abmvIFR-j@q;a=Z z5Z>&7Czs5RGesF+2MhtV*xG3YH8-u=8-fMvw++^zr~{@C0%x%3K9rS?Mmj<3@73HE z?cdQ(k(p6)cS`USh{&q?Yh@mgHlO!6-xIu}&1cXk$_-Cw@?p!*q%`a?u310BEl{M< z``-N0_}5aee!s&t!i|AA%bI#E4YK4xvTw;+SwKG`J`wdJFS~i=x|3#lwqo>c>V?WV zE#(yGzb*4yXgy@m4hMQ1M(q-zr&;pEA~L2Qyx*yNOmS@hh}&&2D`wV<*WLI>8z}ZZ%?A(6#UrXWhLyr;ww8T>ji9WG-luTKzi@mzq>+NZBi3jipUMD!^R|yZ9 z<-fD2)t|#?iQncXS4`hN5S_Dh+8V)~=e)}DuiKcn1X61suM^2l&tWMs=P&X64EV`% z>#hM?;fhb>LlOSq6&+f?!3kJPKtD_$@%ckpNw>d*Q5^S%B~(kP@Ai7bfm=mE_lwes z`|mdkjM585o+f7VHoF23i=a==CWoSM-Xm1`xObW+N%p92Xir#;W48SU!M5N-<^CHr z4i97~buiM&7X@%Qr+Tpi{6xv_tI27f1}7m1`{m|_fQJ+mTCzt!*CpM4;LQd|%cB;h zGW%#!BifxNQAQ3%F4omY>C=~uTM&;%O)&nEidi3A^&Yw*A$Hs08QBWpqRuLXpx=jJo*VPl5LtYRxw6A^u z`r`qa8Yo+6VgIgR;HrP{6Q_3U!W%|(;}b}2P0^mno?=|(w^@!M_7~)@dA7P)7X*)x zm;ds40aWGZwrk5P%Zq=XHosSkv9P4Nb^$hy1F%&vLLsp|7?cIg*oEsmziY8n)h2vGdr0t=mlqv8)bA45e@|H<9l`GS~SDYK^4&!_Bml34hNEO z03NKgq=SSTGNN4t`wEsG%Q#@ZAJ=C|N~2v)RG;zkq?0RupO9=5v!L8pLlsWbBC=sD zAY~oR*;=7ukT#-lh<0(He9MNxK~en=@C z#iPxBovdK*ik0=KD@gh*Kfh!E(>kIvo00{v9J$81Pt{W!I^zBRqd8lub@z9AJbW53m~KHIQI})MFkAy z=c-n!WS6^+Y3T(B1z9SR%AfaJQvU756q5sB(OnFkgo)XgUa8jZwuy&XbZkh&*jM;9 z1T;0q)_6JdR)Wv|*7C~ohTWy55If6G{2uW&;r+WSEFD($jZTTeJ6sgdDGqL#g5A~Fd1sqB|l?w3ZeNN$bNzp zCt(K0d>9T%%`G{(gL-WbVDUG{=7)k6EAvnslnV+NU>cBNinb-t9QPLp{y%~wDbB~sAOJCKv$T7GnZREvCTIyR4Gs5==H;TtO&JhD2 z+wTETJB5Bv6)a@X^lW_*S-CMUHAzJ3n|s3xBF0&VWe6!tSkrvTfW}S&FdxUhu_Hs4 z1B=|9$wvrEKgNbcNP1aL?pjRXa;D&zRzu4%N{?O&BAcU#$rJ_XH|+XqT<#;&lrH5U z)#evZz4lb*Bzq|g01xgUrM$NA{F(|BBs3b3FYNNi%5{bIPI=PGc7gZ%)bK(8Z(@TS zz3%ddr>BgfydIe>EP^Uwb#=}D8zWcAK2af45I9ahcwYMXx^WXqm}V>xl%W+p7{i=# za5qUP#&Yer0C9=vi!!S;1H`>QRUVadC6VD%pbGkrQekf&SqOzHwW}|(#z^u{UC$BUVt|~r z?h0z*u44|jv{dzC-yMI1-?2r`Z$r#V3GRMtnjaWvzvnv3mx*&SHkA$`(*AkJlHoKO z%Uo>Y0XHVYoNyrU0$`OVrc{412(PO#*^w7(v6GFxyVjx`0%YjWgLWr2(=TvLVU_{A zryoc;H$q+l*RRpZc7X_!s-n@jp@9)2vpeava9Q%^;$wXB8>u}@daT+wP&P4EzQz23 zTFTzBSv2Q1LGO)s!AOFiDQ>twCr5ua-DUc zf;B@Wb#R^WoWT;IN49+w@v{7T^-ZMFZo7sZlWu5r?PaCf?iXH2M(^fBF)({*+crX2d&pP`H3Nj1 z8(W{w&`vT3CfXr`oJ;~)Jd)B$f(dQ4`0`()(+aOU7jJ^(Y<`{X()4h|*{4HN+{@Vr zl4UDo#Jq_*TyCCQ=9~y~OYn@tCir?HA{r|=6Q?&ail5Y`s-~+DgFu!r9R=*Szp$&T zNNp?~pFe!R!Zc{fO}nmz3SjNuANd(SrG0tns4T3&7O{|ofarZFzCR4Cc9EpTb198%^be2?P~z|j%CZi?-dqvZ^%ndRCE;FKCEu2 zZuZ_R>ynR;S0`jzQ47FfmH%&QtZ>?c3X|{_&XTY3*YYzRhk@*EHe+wL;;Gb=#gcEx z#IQOK9FDg}Z1Co!MmV1*gCg_=wLUXZxu-xA(;gGWlxzA=z$!-Hv)1cIe^ ziss{jW`jgTRYmni?A)aoI^4GqFVkBS!f;%a8xDpmBzZwd?6@--UZ{q`8K)TlbXlH~ zQu7ah6?J3pTwSjwZ}u&^j0PL&N?jpEra*SfGsra;#?R{BcFa~P7YamMQKMtka-f%^ zFYY9;C4+|M+#CbMQN;N!9IC%aHE;m}G&csGO4*OcezYO}@icb^NOuB<(v3{t5t&1V zI`4Z0RFB;U{+(^;SHJfPRBKj4LVQLPp~qTWyO&*rva5I13VGOJ31kyNDWpg=I8WBD;GyhQ5A^L`-hOE z)V(xSBd>RFYC?~el_S^Gf2vIu0(^dkkSY|u)%?O#YK2rs{+&q{BapM?%5|Msa4&AW z22I&Tzlpr6zT)(InS#Xji#pbhuVr!$Ou4%;Ix&{ulpip~7SB5=0U&K|bGm~?FAp1{ z46bLh0tZvuR__}+48zKIgFx;;r7DB7Zntv^H=Gnb0L2%dc2hTXgtR0iymtFxxVR${ zb(QVj@E9Y@7tW0sW4tY*dFUt+SethS*ySxI!aK0DCVOhjI*{!4$gk&pYz9UPyV6fx zPvr7ybQ;FOhR01;x#++j?zBPoPmKWcB>UC`^rB!MUYHepg3ue)v@X$($;1biHwPxv2mz8%D>Z9ul$vsGZ)F{=ok}_7Mm@ zvmvmm2TW>=uD4g)w!iLvY6}Eu>YD+Gn>ntZt^385}aZPlpm+^oAd3GWo&z7K2WG1%H=5`M{wBO%SRrxS@-=hsuO z7Qq&c1C6`&<>1$4^XR&J#xse^DaYrQ$*n-xp#x~>L(AeEJm8;6UvY3?eBD4n8IC`+ zh#UaqL>>{wM58qj_@nWU|DjU8QqQ|5I)nMi+n{Jr1x_EMc8+j>D7dR9dB_^|A zJ5!lz_LfTJizMJp^F z0@i!P%m4Cs?={mL!p#P^2pXeh<6nJM2m2e^&%U^GxTA1vpBYkb>p@B)_gBPpv!Pl# zzCl*6vvIocoPCt9crHB&!Fh5|Z3`(>HfE;a=E~6_ne~DQz6=Ny`l*ZwEqnyCu;Vcu zRKT<Q;qF`%i41j1UyU#tzecf%e40slDnWXB0o)8)*w)kp1 z31rDi4aFa{dcgD{lOkSC=z$FjpVLzlRpj3Rur%dagM zCHwMrvzE@bGPFfznkL3n5*G>U(V3*wUq`Z86?l!TOhlw2Fzj;(#X4`lHDHx^&2C~I ztD6IhC3yXK&&_ZaohsBcC8ALJUU)Z(c%YtnGf=A)er@LBG|wEm#p7F=EaaPfO|dco}xuLVZgw6BVP^m1SaMtuLn-s9mMU-uE8Vj;pi*m-ib81AWl{?f-np6B?Xu zn_ulrT`-!<{FVDL&HOhm-nLBxg;{%c$i^cZi|_v7c)+)C>M?;I2>MI!yk^AI7(2@I z0ZSf46D~g_>>%Mn&m=-0R4W==e*{x4jh!&4`*Kj_pe*fEgivV2eCCY7%+#R7q=ZKT zyHD&!ZfM~Wl9 z^t3L6q1PX0Kt$aFxlLZuEq;9u%5FP_bQ)I_5+E+5O?plt|x!5g{8cV zGl)7k2z6D)Q3xpEd&wRi=!OqQ9tk^u(GpDt&zaM1ANS)5TDqoFnDm>ja}tyX(Cf*1 zIva`E9ZJlmo-zG$>Xj7BeR>I;=1Ebg2hPLg zcQBBIXQDW!1p%XPcMASI+AZ)lZ*0OjP=VB40pOX1ar-+t0&0P)fUVVnHv3c0n-=^u z6##lFIIB~9X6@W-gEy+Nv0*U_5qZo3rM5oN!F0ta^H+34jzTKe2k0@RrI&M-uFA&y zQl-9^)R?uc$wBm)s2x^~>wR#gnSxuM0nZ3<3mPN09}@aDfr-6GRgSDRc2J|8vBqn9 zH@5fUQ2V(@%5*$Xo;6#FMiV(pZL`~a000A`0RZ8tN{|2R12|D0S*^hE97#UZf|rfy zr#N^=%f1k%3!Spw>Fex~b#vTXV|7)kO}pvrx3r7V!-N$PNV>Yg;1;;b_pIgeCiFd= z7C_s*qI)EOxeXvU3mokMlMllaGs+_W z#rM60)4Ud|`eOS>hc+)zUeAtu*T8t;?=|9>Lw->d9{ce+ep0;{ejPxr`o=zVOHqFk zr62&z%5mFdRar;dd(kKowENf}-+|59vb!s5D%vwpO;nPJ$*N8y;8P(^wbZ~Z-lDbA-V{TJSNkGtK%lbp(W zT>ec1SF1%m5m5W$un*pRI;w^UORH@-n*8NfZUTFL#E+)z6Lj&wiGsOEVU<7RMg0An zIrp=;6sIfe&PTz~SMAUYM`yxS-nS-4O4TyLHwA+BzLwGB$OZ4F{^ngGO7X2S089E(FZihXh@JL!dCgPEY zhk%~FExCgTzanFUB#$?+h`))}-bEr!g8SR-Z(Dy8e(&@*<@w zC4@+Pv=5X*d}>(4MS?at2jU@lIgJ~Eu)t4aqgE<-xqKw-=PLehKO;N3?OAifP*w`1IQLK|7!dPmVt!%sv8_I#4Db*)8DTfQuB6m1#(BYKvDjcDkTDD`URL%p zR}Ve)I3C2;h!XPs>!HA%WAjXCrGX!fsIq!I<_%FeTG5f9WxxIYB{w8hYz?OUC8x4$ z=+*j-<#0w!N!*!7LJu1xF~9F2BftOv340;sKuiD2jLK}Tt+3%8s!MGIyh?VKEpA4L zyOL^e1vxX?3?^2AB$KFLmK&p2erz-+G@QbPqlykUE0gRVSjcO9TMf}r;17VqiEnE) z>5^}zi$c+c@;@&3Pa%!DnV@;Xq(7-B)(qfPe7W_Lr2x| z&X;?xXTbV&!_T317I9r&7;=`wx%rF7pm^LAp&1@JVGF*+z zGE=FG6esKHVs^wq)=rDWWmk0IeZrz#G=trkl)s=mtZ#YVsm@CTnq5-HB%=O2>ByD4 zt#J0@RPV1|qt-4Dd*60$uTB772di*G*Nx#joNB*;lZP#);SqxXW>o|zEb$Empu!c< zboppOF-hCEVnm>^wjjYjqs=(>Vcr72&bKV#j4<2Ail2d9Lk&PtbT>-ztgh?JfNlg# z<@zh!#&y3_a9^jPAM3%W#QBjgXp>jMlsaWJGiQ#=Ck?pxWbdWRRdv97Kb{qp+56AY zlv7Ij+4Yn7^cSraGr|&}Xm#S>@Zwbu><)gf%z*Uk z221ibwlOqf(8YbRF;+uVIJ{2xUl_e~1qO5mgR=u6Y}wsxTGnqq)}kVc5Pc&P{d))( z=%@*|1w=HpBsg;&ZhMerG~L-lXqrxp%HFQZV;yFb7ApIWMlGop?67V}X&ZNF80JxU z*MkuJbzii(0`*i`#RAmUYy^A>#p}6=c9H~(xyODTYOHp))QvX373Yt%0g{VKETg$? zZI@)3q)>^mVUzE8gUM_V82U_uH)O{shbVy*(I^161j7gni zK4@EZzW2j7Qe=B+P=f5}lL_!@&SD7^)E$LAnEhIUhnO?2T#2&I;UE42G~dI0M@o_e z^L;&aKyy?3`^s%Gl+Fky?j=a$YUqnPeCg(ip^Ux@25`u9si>1_BmN+zB$~eFi9*gPO;T?Qzl8Z6Q*&bW(|_bG zspfLzday@EOX5pL0;j;}+UvFR_#0>i5&1r_b0B#18j|OfVgl;REz?+MHD7ntLQ%yS zv2^y9`xDY%EJX9X=NZginrCG5OGE+vpn${;^)XY8T3wssUYmZH%@$rqApzaCbKxkY z`hU4Fl#Zio`It2nWacA>_M-ZYT6`0@yZ|#0R^NgqCJ`*Cy8-#tRgcBAyaB>RUuefDoN2F$dtyLUw*Ujt)cJSg-7VyTbM)>oQJ|i zFMr#N?K++TA}vy0ZsI;>L_l*1V&y*dM5{64cZ6Tx*g<4( z#OnCzU#y`cyIAC}NlIS5GM6JSKS;Ae5az3PYzi{fF5t;{){B^iS{oll z=xSEjbr<5M^VAYsp2G7*{(+b|SlB`OLy$6AW%C&-l*@FSP*nr_M1s`n zS6On32^JFk5A)AtO1rHx`q+{(Dk@KdY2q_oxmL34s0j4NhS-lY;e>N82K@zJm^Iow z6xWw^M(;+y{UKaT3lfR!xCV648Ll#=pROmQ0aBm88$NFR!BdS}o`$8y(6!Y#zmjuw zm&3ghn3a4i3}F7v=hl>JyAK3#8VX(da%w-MY{gCe3zRx(BQL@`>uGBKitca$X z$(099@S#eOKu$wAxKPqBxXqZ2TQ1SsH1e2X(-B3L>!D0Yh7v==25)4MibPPn`6X?J zKmg0$c}yTz z23jaqJ>BCb+-t~;?szMIMISo@S`{$2&tvb;4*{PBSo(vyUf#14PAqT$CjQ{C2{aYb zd0QG+caA+sU_t>uV9KZv{`eGx{zH0F2)W+O#Up((9*It|mk)>4^|J&w@;KnOfPe9O zWQ_#a{{NOmgusmP!}xu5S}|S8Tlm>d9!Tys`}8+1!4_kDn5-7?3-Y9|!;#%A&{9Wv z`JBspN_F)ete!&JZBnY_rQe$nG>4R0^PSpv|U%d%&MWb8&$bJwM z&ItrNG58)84hz@Nf&n+H_v{zu^+Ppyi+lC~xp=Y9MD8$Nn6J$AHiw>7;xh0KwD5tG zbHH;WhRSL5+?Ya}2vpfRml4!eOwHWUiu*&00X0HRyv$I1E|;?9t&Et;(^He4&>v>DD+_?2Ubqa=72cbQXI)De2Fp*sTlv?$ zgk=4i{=dHgCi+y>ziG}zNhMq_NOw{T-aF#Zb8gfGTgB?z3z)kAoQ>-k{4A5}RmPV5 za!k8+A%BmI)OlgTf`9-32~!~e;pIR}|Gm5S2n5`K;dSFYyq@>WxxkHSQ@NTcAM<}@ z#JAhxSbnVU{SE)HQ4A|!PKDNFG`^B9aM6?Q~* z(TR7JELuU!eHi~Jf;-@1hxe5rdgqjX?*dD$BEnuy#D?+YXw0*r^L zCyYO=AR*is+E-Dh(Si%)x7@Jrvnx??SO+Km{jM23MyslUC%FT8j+lYVmlyY} zjE-6`O-}||tQhr|@>_?~S@4Th*037&Pf#fQ?Uui-j>Me=f;UYaT5TP9Cz8Y8{STL| zmTzx>r5`ZjZfI;W=ybbi4cAX&$J};61{A~en+sgZWc$a@#4!JkC>)HVkP92K3fLXo zhcz-PNC$3FE%$du9Z=Yk7cj3T4&VUjOS7EO7$HtlhIx5wvUAst9%=t z*N2#TF(Co=_@_V%)JsSU<@Ke8(Qr}fa0vgg?AhhWP&Vc67jBL+j}H0L;I%3-N26yg zk4pt@>i>Xi>2-|U~uBVffzQH%f1MDN;sq-_VNq(|94v9}gCNO+IeF#fz& zk@A&^MNKMaG&9Z^@~@VG10U|i^p`~2Xs(c6X9y6h{lyiD+__$PXJ?z)(?nY!%3vuTxiyU`1D#+$lx{$Ed0$$x*ghTA zwuAh0OYIk%_=K5Go{Xq2km^=@jZ`O_9aw4M&+J&hH|r z@I`|n6(A!b;D&y!#KF4SgnWlMT0hpf{a;{joB_hC=9ii~n$(FfirEZ=lecrT!!95r zI(0R$XC)=o1=xfP*%Gmv{SS^eB9fQ|JnlF|1lpa};_PteNWOyJ*v;;UCRasA_JzF< zf$P4SJFd>+2k@Ok^7l((Sdf5)cNbs{Oedqers3NO+bp!{h+!snO^`X_T%t|lSEER^ zU#hfIiRF_vYzNww3sW|s;X~eHrFfnd|AQi zwB3V1Xi{1jR(9(y3Y4YLS$8v3 z^cX;lXfUvk5$JQ6uojG`av+JiTt8F2n*tN=;3M^p{fC*^^fT{~DZdl9?O;qB1<-|1 z{*3j}5^O3{<3{9D{PXaQ4hxi0T@jf6J0d&(%J0{bScx6Wx~1|}m!@0#obsru8KtDk zuyD>gL|k{YaJIK(TU+Kl+rLW3ryzeA?ihOI<6TJq)st%7t4_FHgfwJOZ6M(O31|P{ zZ};WApY8lDw_P;rz6@YRQheD<;Rbkp$uzJB)SRQ?Ah8U!HML~W-Vwem=dAjpIMHAF z_K#t9>okZWLj{M8f4W9@7VfjYdV(u&2TvYn&D{T9PZcEPRGq%$e;qvC zWp)?b4>vGBa0G-8I8@>fQUf>qx9gaw2HLR^936%NXn%{H-q)6L4E?I(ovfluv3bO+S9+RLsZ>ojLE9u6{jX~GgMC+uTYTJcL_nGA#p9BXwbtdfqqyUGT)qu z(-Y zf|>t$>b>;fuSzP}@?j4KT}nRy*bd5E9J2qam-$y6Fc@#097f~7JJpY3kONx7Ofso~ z5#w3HBucQRM~i~0Zk{>hJ;VGVzEU+W&QXX|>u~a{tVufIPFFsoU+;_F%Ci4w;l;_Z z)W-8pMc&uHU!g76M)v@M?{ z!ki+5++l9yf1QTjN_H{F?ae2-MIWljiZqBueNAx=lIwvM`#edO43ZnGWd>_C!@AT( zYuddSmrk@byrnR81e+@cZBqHr=y?=i&_o-3;I6A%Y|ZY9R90HT8;s z`Uf;>w=JP@(+9-4L-;~yW|QVT3XuzFt6PY8J(a%$f_p`;lfBT1G0#*mCxyz-k>!u^ zObAWp!gtk(?*-ORXKg(7WUea&HpeXE)Pe)h3->lJJ3Hnn5 z^2i)%s_uNH6$?SmO4bAWZrflNj7Vb5BYfX+t4dn$i&r|DEDHCkhKzAx&~@q-(Gcg&WC;^Dn+Opjz2} zr{&g3_z4`zQF|f3`;&XQE_9}yd!brW^4I|LV$r#UT>D*gxehh=R*3WyOS;I(dqPhsw>dG5Pk#*YQ(16h3o&WZGh+Q~+WNnB z-PpgI2B$QfJZ41j8N}S7udhq8uyQMb8y$6bAN3i)M`Mf^@{%rL(Q(@j>NPE1hmRql zXIJ|jl0yKnNTU!U{1EE=KY5<>B;a;lw-=9TS0<3$LMmThMR@D#=6KI3N4uYc?3|#nsl$?NVhsBlHU3R|; z7|+zGrFL=zERFdIytAizvtB959fU|dVFkPYDmq2LGSGe6OoUjg2&rML36IZoV^hc7 zzo^VZ-b4WB>hmh6Ls7JUxw5Ezip14~Vxcmqw?*-h@H9s?r&10FqR<=l2cnk%>ciZ} z*15*GTc#h*BX%{j492Vbwfr_QUMvK9NF0ahx5J5;XBIPSxbzjZjsYob)IDDACsR!Y z>RC&J36ZI(Za;8I$=bAMIich526NrZ;SV21Q>rE6*F4gZ-ADeuE@t@p$XYX~K<%~r z8Z8{mO`su=ypL;G^w|GwrdE`7^KAYhR`0kFTecxIY8jh>79-!2sO({tIG#!%w`SQ$ z3WNbg=1|OR7qij`%ar)=fo$j3(pl={e_$;8>zk$Y+&k6i3X8+ezH@xPtjye2 zs=!#;rDk?)Qf-MLQwMa7m)=d+O1F^69Qi>qtn@xgOR-q@hN-thfK+ZaI%pupX+FD; zu}a_5r{#R}srpV&_|O!e(BA3G2^j*S6ih($rRQ(o#T&YAf4MZzpDs5)ZW9iNit&_|}UM`pl>uhoVVBd||;PB;qkWmBOso=Ck@rBR~{(OIh9Gnar+Up1e8pL_^UDIClxB2ml#zxI)NMhH`OyV|L#K@wRNgWOgStBH$cm1!AHVoleO&LV@z1*r#Lq%r#uISPoo28g-<#vtE5Ia z_;;F}N{$8VZI5w%yT2N)>tN}|Ih-T>E+Y^*#>gdq3*xZo)hEMXY-Zh>?GAMFM&5$dS_hzROegL3P zbI35hZ#REG>H-`0JZ?%)d6t3Mr76R}3FYIF;q9G21W;S|q}*K3Jx2V~HhC2+7TGv8 zb{(sv&#+t8CGgD-SZrKJ!`EZ=xEd1(1Y*FuWn7ZxztNPu>zf0jZf+O z0#XfhK13OLYj^qi80^L$9j3{>l!Q_Xht)4ndf%cpQni$mu=2={m7M^MNvV0`x$sZ` zKfnM041Xc!P)q;BH6&~Lf}~gbpKB%q)uF}aUxc!)dqP;DRoC*?Ilf?f^F?+!WaQkp z-+au=X?939Fq2e&C&vGKk{rwlJ@lru5%k?^h{2T4wCkKwIfYS2Rh_fAlfu%cK32(vlgs;DRC%AN zwq(gCH)G}+!}jUs3viUCP{KWx^4nzbK>D!C#Sd*ajA53V_+5=c7gWf!Q99IN$|3R% z8Bfs!j0F(5gOV%PL8}^DnKZYz2mzQUdh8*3$xp8Zt`@F>XLBF zw+cD&?xWMO^2&cwYvnE`s|F39oGA;&hF!2*!m!v|*pn49(b5s#Izc}mBdr6VB+jV9 z1-*w;K94SPv^lOSW(hXWj^QlHJ16m9Pn!-cZ)eI#(641^d9|(XzCqDuK;@Qrc+?(> zs9VMb8q|zUHhMS|dr5GTvs|pR&C)=24Xxv|3EiY1$yvR=DrY*vMC_6!xNxj!0Q?CPUEB);$olilHH(nn92LQ zC%TTV#+wE0YDEsclYFJS;vd!mOwS$kn4DsJ+%)5B z%8M{C&V|zuJ@dK&{pHJ+XsXHPkid5c!q_ez+mkD~@il*13_L>uT(ax{T0wj@n@mZ{ zsvV|QCi+P%;@?$0!}?Z{sXuMQ!qRPFM7!Emd{*&2(|hvRnSy;xWCh8dw(>Zl2wigZ zf#h`+{RQR;wVaAr&GUVkfGedZ8oR#Qfq_s61})K{>bF>)l0DIs-J?zBb&}DEHCN}v zaIt&QTL@_ZteOVXuO^l8=;~-fjG3(hNKACQ^>;1qwGj%(X1v916Xmkc;q@`;ED@{S6fTN>c-G$cH4kmdyvYi*xG9pNl zvv5bujTgmlTPnhe^3hui7zfmZ9jh0&GNKNasL>6_NV(g*a9zxayQ$Rq$9K-7z19ZX z2X z$s?C2?+A8)i2zH_NB|ljGDnPtFP+mp72% z&J>f2;{#)iWSSxmPn)4rEpkZZIcXC!`wlnJs#U9a3dZoE%U3U#`|`T9S|H{-b<53k z!M}<->x5(S0hQSG3bC#Cy~K;d?ly0PhPV)vR+E3At5$YdyU9RMSHzvNd(8lNv^?k4 z>{J)I_|GCYnqXRvzH_u}+ZJQW?9vSOG8-J#y3>k`_p_jSv`?$rmTO zS;dmW8J*SpVE*^{7Sw#-{r9|MY~`MuI5D*YZ?4Nqg>jlBKm67-=Ek?#n9pq{T58U+ zaiHKQWY3Va-r-u+M7VmA*P&C#v}Q#cwIVjE7v>SiyJ_u~sK*_jaPx<|SGm-DoU)rZrJ z%Zh1Wfn45uRLlK2i>InLA$2aV_UF&%TU~yUfkL%*xn6=flL|%yC5Z_w~xBM z-6csQ97VA*Xt@ZYZ3Ch4tg^0HBxDY`J(hyQQh91%70p%q(BYYe=Cdz%H6Q#Wf6OoP zeFn7DG#nRo#`s{{=i8s=&SHWRrfT4QWBfIKA1**pW>Rv2ai418&G!%RWNitHB`k`?-jiJEsA!33 z%m0`vVOgQorrQe{(s=$c3S2Uv9*yPt3t!~Kjb-J}4euRoP_kOrC9vUM8peE??l+OG zl3G{*ia3RTCikqzQRB9inM2-f?PneDwx!z9T zFm9pe>;VN{&+|B(awH<@C;jX>1(dt=k<4nxvz}msLmlGNk0^Gu9>o@Pdg)jL4RI1O zr)h1I5wSYLOZ*kP8{iNy?ntTGady-2l{|45v!ERyA7b;8siF)3{wewz|^N{VNF9^%RN zoOx|JT4e)pjoqwI9CsG&guEXFi22`$gdlb1XkWJDPAsqx9&~gMc>sp!iy6NHhg+#w ztEe(%pi>y`$1o*9Gu9ldkt32ng}F=NEPlaBJRIFG8V>U-z69$jvX`28Tzmi$iSxL7 zij;S{bThv9gnpy}6b+1sBXvsu8+Wb`=4Lt=a2X52Nw{}ZBf5A9N(CmXT)j+f_o7Og zQ^Q5tLXI$z`1r+?Fj0nnOl9;1MvX#zxeli73!1MV-4hbFCJ zg>6Vv@laMC5d(j;#VGe<&x0ORgit^8rsp3dmqgocX|Vy_n^H8`@$L)H9(d=0*2hkg@$9ck3ze(; zILQT+<1(!8t0b;u*2ZMi>Sy~4QI&P+y#6|k+{^X0M|uI&b7tux>Rr-`t;5C5h4}NU z;DF&etY_(t+ved~npxL<Y;$tW23H8ZvnVh%rbf{Q<2NPW@_ndW+r7ir}l3FP9X;O zpyn0NQY$7WiOyR@5!w7HF6gG=pB?I6&E}F*VN$lAxmu(Zepxco^N*JA)9=oOcicp^ zFlVitm(5#PG>V&_N6BMs3r|BBW|w$t;oJf*zs9GHKo`%q4zSrJz61P0WU?!*+1J&` zFMYPJ^!^Zwf{klL1^3Y}n>5j4X-n51r3+@hNSVL%BW`E5cJq%w5RkGu%EGfD`|zME z5#w!CJpa zUc^NMaher=u`{}4`0AV}vt#Ugxb8ifwvLY`Td=6X7D~iG_Vb=Z?4wi?c;%StlT2}( zDWyNevsXik-us7a2QHTnSAa)aaW(mq1n-@pVnPkCN$~N=ud8dC5I0e=s++it9 zYuuxym#Q881g+M2{)2`w0aVDBN&+ayu$ufYY&6J7{e9vbD;dB@XYvNzqHhB9=wqXN zv0tMX(ZAD-LiMHe7&a>JUuFquz16~Jjuj2ODS_XO;mOaUE`NK0W7g^vLtDHFX>gTP z8)7inMBpK^{T`Jh)nZ-j6cuo$1Bv3&`p%Ya7;O3u!9x=s_rx6meFVJ|uwf?qvpC=0 z=q4NN!TXQ>{tJb9V3XKkliSD6zYV0q6z5E(zxl}ED`^I%=2oYn&rn;WX2{O++~_4* z)!Hn-hf?-!EZMu{s?5m2|9oi81x{;^{x8TZwNMP#NPXLX68WPQ3k`TXacd1quBG6( zUJ9tK7+N$Q##yIl_8RG37ZhMlJwqY=$<`&GQzbZdaS_c%?*{eEQk~=8YAV7&fWr>J zv4uv|T!O1AQ@lp-Url{>7cKZmH;QZ241y(yAfPNkJ zFSLUFsh0R=0~fm%E?Sl@Ne{`TmJv&cCC8ku93w`>s{?uX0=bcBQr`Y416e|(?G>T@ zxIJ$CY3<)5L^SF^fB)b!0mtHD2mPjPOb6RT+4QQ?g5`36S9;P!TikFtz1m}zyE1LZ z-x!{(t#G*xL7N5T#RQ|suASPMF#de@AJ~6&-eEr7R1H@}sUN37#s%e7)gEe@cmi^r zUl}k6|CtPOnJJ3xL=mYhRbAW9^1iBb<#mzGDn_XG526@oDRIK&O2odP&?<_NK5V8N zGwm3Ha@bN*V%B@AuFa4O20&!=;?xoft z!$-n}YsGv`|FV6Emy^G&I&3BSRo4f~_M84q*yLM0`udfr2TV2T0Ek5_H!E$|49Fh3 zM>@(2e@iU1seNgB*tE_;4JdJXDRz>(7V63&nb3ZD+%%N1QV(p-hm zp1bSgJ1ON@NJ`uErZ+3XpdTDTfLq`6=lEhX+S42 zDIx@smwcuCJ>h2HxcXDRr9zcw(?JCWe*na2|H3eh78AR!y1=)+W2W>jqZwxIzftDs z*O%Xr6^GD9))`gSpT@ntT~zUS4hv1nqUhq3$922l#wlfHw$5u22K#Ic2%^$N(w}xH z{a(^9)4pK*(6_d8E3YF)RzgGza_ME4rdn*p=LEw+jx zETEXnug56mC!lN4JAqDpuO;X+55Mi9Fl+496ah1|7TKcr#46A*YgJ=Yz_p7+sZqYd zA!FeHWUOE>kwX*$1d8d1w~6H&_dR2FmyZxszh7(Ht|Q~oNaC7k!3t4iA^5eihNpkZPPZrO055QVS4`m=wX%;H6YR6;){Bd<=8zQ?=`7X~gg zA%M>I036$q)*UfZ7nu|QU5Ju926?gIZE!)-L9jRCD|C5mj9O=1`A$2uHV@h?Vt4mZ z)c+lr|EsQ0xdkpH7}zTqY~I$34H&i}@aBl~^>sD^aT=9^8qf_I@GGUziU~p*m?fk4`s$lm+?$fr3YLE%rVe0?VZ~~ zJ8e9V5?G8pY68rO$;O+)`z>bPoSPLTW;ibd?gC_bL?|>8YvkcjvZ%H}75m5+rHxK!1{1n_v{r@Tue2|-{65Wj=?xI<3v_gN zW6u%=>o)ori05sv6aD1b?~&7$QZl_!7uRO}yK3Tt0G#8SXN3NCki!?MnPSTBFJ@8el>pdljasfc~H?Fo#EePLZ>!y)q^j z-x5Fb12wktKvWVXrmT#mS{?zudfq+!5fwFj39nF>@!=UoW=TGxF+e3Gy4Hp`By^gN z3hw45R!nxI_DfP#i!i)Zvy2B2&((S8IJrMch`O4nT&7(%&5av!X2IQ1OY&*LsoDSl z1J(hl(vSc3+PKGo)xTRMi~0T)Gx>8u^rfkb2R}OtLD-T=YMkJl#N%C66k0UX&95_j zrn!R|agQL((os_e)#*lg^ynA^DU6Vevgf}{9y!mS^$zztP3mIxu$04IbKObcgTj?C z!Z$RPlfiGRwQe{ji5&2Hc*U{`&3>SM#F8fBD&zJ#FImJ?I6e!E`~-&H|Ci?%cP-=* z%Pi6RjO}{b7Xqc^1sRT!Zk$e4h##11PgG`lfEfb`1~6?`m;PS3+0_O2u0;*pAw;ex zcuTtc*HVt$Si~B)-2%CM09+>H7U0la>tABz9#}w((#I4}+6*HAWINd{oa9%lPYpKh z@zAWSk%bdpbOLi60cS$I^c4rNCD;EH{koW*MDFqF+2Pg-{3dN;vS8^(5{4Pi( zojFEq-r%n$SJ+u3GNMG#jB7~b7dE;`T*sQ?1v$4`jMfpfa5&~>TSK}%EIqUp^#!*0 zjt*YjTUg4eG(Z^-^?v^X=m9p?zvh5ql*?B;UY!yB*+WiO7@fE?mF);Fz=`I0uUjwR z*~@P_B&b-?22$%#w94Exj=5ZZ5GXlzTD!;4uYSMfzenXD)JE4+*h1*V&hp{EVC91j zs05-Na+56!9t)#t6mD0g)!t=U7i9n}hb(C@wihXDCA*(bj}DW3oR^iQvU=EARM!*~ zw-~}_n0I=Q$J>mb z8)gAazv3fyO?;wB8Ijh3(a+phe?|{dTTW=#{|J+2j7(CLYPkfUHxWYj?53~S000A; z0RZ8t(vSa=F6bRlAy{=9s_Kan^IpzSYO%BLzl&fDA6e>Ss*`9heSrp7omuTB$=_ZS z{Z&MtCl{y!R>hfy!vu<&Begj6wdU3R8M(;)QAMA9L+)KO(*_iZJ=ya7ZSkMcnSIe* zT_PN2E%>EL?tDG%qdXnTQZ{XrW2;kUserRHa0iIeN$>>_w18_sDZGdrq!nrZj+|R1 zSuEkt6)Bi-5P+cHX6|;?9fQhXc(W9+UKzB%nVQwr z%A@P!v6PRqLR5S$E~HM$ABr?P84C_Rk4avY5%jiFdArC{y}izJK(RXxK(JGm$8;{L zfyCjR_trd8QnktMQo z0%l%auhIlXQzPu&A3MZBVlXEQkHYQon0J#@2alUx<1ww~Mm6$j{n&8-p#pr}mpp66^!E(q3$g;{KNzTk#d9~<_?S|zD z-mrSSz6$lmw7FNdL`EtNjF2ZX=?fnM#zf2FOR;H593Q2`;A>={=H0hqA!G+rgo^^1 zam>}Ra80oXMCp3tN6X?MX1T(RB2a2lUYw-K8J)Srui2v$h6_>EnP^BqwNak<^rs9N z81g_b*_Y}rpG zHttd7;s_*t*s&b@8-l~nWv(e689`y1Cis5V{{X*WU-{&mYeo7*l zOqd_Y-Rt;g1N%+#JQwD6z3>2l;LXVQqAfjmFhj-2-L?D-FOlJUoWvc#)D85K+s#m_ zk@+s{?XZm=ZNgZy%c64_Wx9Wfh`U(AGv9;q7I?K^vA^6W3X|iwY)a^a(0~(-W zPw!H5Dqqm(VI!M&$zud*l)S8x_$>V>UaW-SL!1WmrlmAGdzo%f)Gt%%i{p21L(Lg` zWP*AZBLTZvr0~9wX2amGJ84UO{($a{3$);@aC|=ZR!02Fp25`B13o$f6Z_myif%J4E9z?Hyc76qsOu7X#= zi2hHA&LBtas$e_*%lNEe@i@JU>C?bQz@%JD| z{{Siq|AY-NMVAH8k9LZ18W-#GgFUv}<&Ipb1p<@&VVDN!ZY_c@*FT7m?Nj{0&dRwr zA`9AJp}^T%>kzQ3V^Q)!ma->JSjMdZJ?3*D04+a#{AANIWjE=CqN(QO zoZJ>{Y(vNdzt0>XuBLd~S|&;Ea8D!8H>lF01O>!kr!0L#N|Q~X-CnOEyGNJkVmZwD zi?-n$16YNYi@4h;TuyLAHLDNS)xH}8XUK+{wB$lZO}johX#l-hdXZF`^S{E*icaL; zTgZyY`2NlBg`wqwv?7v3;;Xt-DjpyIa=r-3ms%VY100P*R*z{*VQdPZL-8crev+1~U{a&t1tUJTsho6&R68!&@fQb~Sw=UsMNJqTQ`VPDdj zN$^3AzpWm-gmDV;>l6G-{9-SqsqMBvt>LZZ9z5pm`8)@R5!!gFqChXZZ-#jbei=q2 zt}|e$R{B;p6#G-PZ)~Z)mw)-;q`11fY%MR>p=bWec}Sw!nh@pT+k?sGsB!`~<3gY> z|6)0N@$!POX*Zkwxj=8@5y56KL&#lN@|MF`QM<*#=#Rz`p!27f zP#Tx;J`$xWVH?h}Wo8a7d~ZY(m}0=m(uXRkqCjShD_mZ8IN!tBg%4Y&J8L_Yxs8m^ zU&UrJ>2lQx?v-BQNUHCg42>t z8Mg|K^-WqLp)qs1rfBH3d;Q$G;u{wEF{q{{g3>0Gz;OY2@(8wvo~&NHMRW+xab_Gl z&wR)2qwT*G4;NPXBq~huA?GKzORwC*Ru1&UyO`P18 zw6e0_cLw(?cfHj7SjCqs)=*Tz;cm@!Q0L}cwxYxEBTBeE9~2POhLsI4rNCv)ACl8C zYf)^Z3qo(HuIHyf3QyIS{pt{ayM;;WRq%VKhDCq{`yRUX>&5>va`AbLe^w^8itSKR za$5}Tp!TUYS3@B8$!dWOQ~^TB$xOBr6>95iy=ja$j&op%beyUa;udAMlbNNUuk9o^QH~ zn)nSO7pIMz##Vs;!h%-$mIG&E@{B%4swOB9J$CXvlyi&VSz^ShHCq)}1QFyWpnf2T z-7Bs*@mmL3?*>;Wm|G0uQ?W%QQohYd3)@RdeEt>Z$T~=mstEnu{6+*V;IMeKpPYOyPnaFya)V`3#TRY!5`#jPocp z@*+l#zp$W6k=%3?AwW?b6pg~2Qu=mE0&B?2#H!Yt<$|dcdTL!1W)_nzN=eekI8I$& zL6jksPe4RYP!q8rzfmvQg@wI-jaZhfH4oy5#uE-;`z;$f-TbmQjmNp#n=i;XKXT1k zdt>H8>DQ8e)Hnw2l;9PaEf34oJ3T3Gb3#@zKjrCvOXPFBw0S_=N?|t~gTv$>tIvcq z=#l;^Iy%())oJUzomr4V2m4c~%UPWuV;^Cq%QXbc)!<%VLK^fJ>b7sjtu)C-H=Fk) z-KZ=njp)wMQrBorf5H^0E7Yzl)YPY4I4RbNpd}eN z*p6di|A#m4-#G|s?RWU#Ns@%0pYqmWCOrh3gYv#7_^F)J{4RAdVBo1o&kvn7uzaWj zZr}ao`j_uM?foV_6cJGW1QSrD6bRQ4yFgm#W6utqlD?mjt0QR<1or3lP9Q?FJBU#_V2QKts%djq##%*tKU;39-(JvTSE ze2s+0DU@8(r-le*2;2uhpC;A_D!JJq_>$=tZVTQ~E@gY>J%+7>6ZI=~(r)#l(x=f> z78`>!EBSb+Pcw7tq}=fQzKg`4RVslEp3nY^p7Frqk0(wd5G+j;tZHJCUW7nTsE`#) z9O<8?>1meB>Z72J6hyqZWTfOpAycykswS(U2pF?MmV3dRvJRH8mV`3Zw0y?>@)sls z98SyIL=`gZzSHamLLw7(gItK)Hk*iIGJ`1lHRg%Pkq41svTi2XMI^|_1|oInwt60p zM)N0_oX&ntnGDK ze0*ZL))HP0hAxCh&lsI3lJWHwTwWpe3z5u%W%;%SkRy65(!C4VE!7N)m>eB}FWg#JWTz#D%fqVCap{2E-E^Kyky zghy-2k;u+!BLQZ~{5nia$6JP8dolEunf3oL?U(pdx%xv?2peV~VYmEC1Drmq8(pBx z0Bhy$6Mub~8a3UKjt?z86Tqkk7B)(NqinlJ7|2hE0W|Q&(zuSY=vv5e@qI{6VyfLf z0OhJP?VZFxno~^(vw#GZhLq-xad~^B*tiNuhT0KoI^%ERZE5Ki6=?3zr$Y)IM%=qT zSLLe>T>geIVEh{#_mo&@%~LgQ*6%J8MPdDH;B#Y7$kykW-d>pJ9Q!AhCMy@U&SU+2 zY$m~k0nvtCnexg0SFNatc4&~LG5FE~$2VJd4`+wgX^j7Z@v&prbbff>8s&kWcS7?> zV{1omF&xLlK^xtTtkuuf=wAuXjRfeFu@v#Se+*bZ$ED(9>^M1D8qZ*pHnZSK17t8< z{UUzQ@M5yYxHv6 zn?n8`Tc>@VM1-l-0=SgJn&_?QNCp#k^T+BZsmyX4&}=edaX7E?N?jea9K`fVeGhw5 zN+yw~X${0#b^C^2f2di7cO$Tt6Nqm=ZG7`?E7_9!(+IL}qWb#qKCV^8Id~ooM>o7I z3*gl$MbLj3aGHC2(&)~rVCc9FDF0GHqKJ;TySCUKkzu~NgmUfrXfIo+7F3#C;E*UJ z@t&0HKrbjNbLMI%>lhwHT3s&Z;|w0dKeWeVf+wH#qerQc2p9w;yqYlk{%FfI3TnOK z9$Q5pt`}ro>$~6s2jRlbiB*Ne+tG-IRvUJdGp5Yt6Popbo^v_OWwO=H zHg!phLQ~d~a>YQQ1Xhog&KdFdDhs$q96QM}=(mT1z}#B<&0}n z0G^p8%Jdg5uec8a__Z^NCcZ@Hll9(eh^q z*~5|ueLPg4gKlN6hSdYg7kbs*ZV!HpCO8Vbb~L&rG}_1bqJslokCjQdTi;M7c3D?b z_1i3|MMy<;A4Zo~j8DD23M`a_tiV+$&2Jl9v$Mk8cQCyOQhEHY-xY}lq8au}yhWO< z@TUKgA`1t_VM+`=QqRpF-F#}K`L4^sC(-FqiW*0>N}8iNvp8Y9fN|mGAyHw=L97&m z?|09OV5=EQg&j&$?EnA+?*Xb7ivPeV++@Dlzx^P+2^d8!Pi>S#;~>rigF82B+s8f- zGH_|OQEP|c5ORp$P3rO%n&0RrK*8voUge-}K34jWE2CeNGyu_wm7l{_GKP8H6#F2$ z_I;M{`dBdXd0NW_+-}U%F>{!#8;e@WKD~`zvnc74s%SZQ(_X(M`yYB}kzkA`{w%I1 z%iwoaWA!vj3gET@+uPCK#h1YwZf7$FtXjiQpy@q5L)xTvBz%aoY>V>_`tYuxD)ATS z6V#>R}`%HBPzTey4 z|EnXzw1wsAjF+9V>mfFbDLXRt0dN+calKmx&$Xo6=Lznr=EX#r;sQPZNoBvHJgJrpG_^zKr_L0d8p44U zR(xgk6MshJGTN<#l|#@TO&P^B{3)L^&JgV$OZymSXi z<(@_;AX^iu4tnWD!pSTYYdlg>Tvu|PkD{pQQO8VCr>B1K5?({a8)oLk!1$c_&M>_+ zqeXWZ0KAw%Y-(K!?wmM?65pPq1mime2J~YTr(Ys z^aIhh(nO6G@)Y=+EjP^Geu3f-w1LcQF$F^vm1JcgmnBf>d_7wW4k66+8<>=c01vi4 zScO(7bf=D31rv9(BBJ_UNVXwP%N>fUV6QKZWZ2!jyT#buX6IR000abA?R>R|0-!#x>7`r zO&1(keQ&AM4^>3Mi!ym=JI6I%zim?mIJ7HpL1c%k`MgiDlISQ1K}Ce@r6=;x-dqOI z#M0D>R5MCQ?6*?cv1O^g-;hI!tyN@+J))>Y^ffGk4of)()Y}M3&yVRsCDzF;4AQfU z4eN}M}=B(&={_=lV6J4mcgK9LL@r|yT^d0n>oP|t7+4Uo0t0tvF6=DvSZTj z5)MXE0g|-08!(Ee8_c3<^ObUo-m@Yx<}b0{-jZh5T`ME?FA?N)nH*!kP;ZEcpI88y z%BCiETS{C{61A-LdEbtaD4C*sl*_dY+hW-~mSnAW_1o!?O4b>qLm>0P zU+tH3Qt!o@t59Mz5c}@K=3>EjCYo8`#qh!EaE8CAGf+=Q4@Sx!g1;B#-ZiTs#ChEq zBd6ZW^p9J^pgJjsxoc%ObAOt;IWoC1^Q>+Wl_BGqmP+gEAXVTw8w~FGNOarQB#D=0 z$C)$dmrGv;(VjJwGBaPqA6zzT#|gXqtr6L)b-F#5nDAVJK3U%u4_l`Gb7asL{nIy7 zUtRZ)Xz`b^d7h_e7&3LF0M>4!2mDTM?xjr| zi)J=O?1IN0RbpjznN}YT(Z@z(0x82n_hmI-DqInDGCrnT%0UVN>(OlxU8(5Ej%r4E z!{WbVD>%HaF=W4*)(}yW35Sz4>hCAKIhovka@{%ZLX5DTKxpep- z4H{Bna5tY1-PWI>JF=FP#QDXPuM&G>N&eX&H^d3uYGl}O6 zk|La2O@VhR-~4)~IQ=umn+Ve*!Eh`25#}%8BW{TwC&3Z(pEL&dTv&g_<@A!PrW0v; zrkiMQ%8Cl4lBQ}5AtRszX9Q>ui)Srezrng7raj)LBXdn`ORY4T!jz5ZYp_U-rNxXN z2A7BBO|7RV1JeVkdt+G_2nXC}_dR&Vp@m86g|5ZK3--cZB3hS;#5dEe_k-%Q;{d*M6?h+SP^fg)uR(Ha z4aE=2uqFUKwcnp$lTcgjlBklX!L@&c%!SP~HthqlqR>W(E{QgDTsRq+s-|HOGJhBO`ArhkUhzdb(S~(vn|NqJdpT zz$y?t&!>9(M`6qseuxMut?KY8x7A+zO#Tk zI2kz35V3|z@#*jF$$J^9G8ZhXP)0$9uJwrD!^v8rhk|kZ_Vp>Ly zthOO8bIq7pqF~z_-@W9TmopB(#O>oI1cp-hzDa{xMPsDisG@9RDlSG6?fQ;NOG3(z z0xpMxm%HxB?b6+;Tj%6w7G3i^|o!zH=#7npx+bm>4{qkQ}As8mdhL94%nXf%smQWZ+x2KN$rj_O}37(wJn5l*BA^hTkaFeU8`J4 znrB2iIsb>zHEh}T(m0jOyNmyh=5rI-wqNBqy z^o1O!m$M}gWK^CL{dm83p|yAxS-a|5D25T!C)5Zv&qpXVyNr-hec{q>%-{RooILVm zS=lLrjYV3^Fwe@S;k0ZbAcgE~x@SRPZ-6O@>eKuKdGECFv69RtaI<{P_ft?lceo2~BqiT1t^-F(Qm}Ew%*n`MGh9rBZdGJ6w zXG=20oo{Q(Y$}-lbQnIlG;-@$64S-^mOVhkv!+Ueb zu!9tIby~|8C%B#|%d*uTyPL=cUP{`iUOD1M_-ENSGTX@q1}_h5KfxtM^Dm@4TK!k$ zA}Ij%`m%Mr-smpGH2>Y!P|Wia{@NtL=}1DQtgKP<(tK|g@Z(MTOjPZbl-XN7DN9dX z_fO&Pc0(u(34(--M90BY?u(Mf3x_UbJz|a?Rw49OkmJUR&E6`Ma}jzPS`ZgLh4%Z^ z19#m4e0w?%=!NV@8ABGMEKpV8Pi78`$%T8j{tu}~NuZd&3$QH+?`gIadc~#0s{@sB zt__RTc1RpWN)UP7s!|Od(aa=5cGXj88o?Z{Y_^`vdQC2zGqcP%?!ZDoht_51DI?F8kmv=C+< zWbgJ9*LqmBK79ic)bZAO$2_feEI)slYO%!-d(qwRnrq?4Ywq{-A`eXyil7%!?zk;T zotJSe(J=$!pT|hZK&Cs>x@t9YFE|NfC3I1#NR-KuoK{tXhkg=D8RjPfD5806vC7<< zBk7Gl#&sLc3Q6SxA_RX^T>AgyPSrF}AaU$J1S5F-8Wi}jo3o)j(+Ph!^`ihHm9Un~)gRVu(b84m=xT>6w((uIZp?l>#9WeEHSa?b(@%VNDZ62gjDz$CHBaeMm~= zfJe6FPn=;HULGqgTghhO;a6!pFcM}?1KR;negV${Bsl$Iyh6d`BQJda8P8V3Y5WS| z*~SW~!IO2K$!O*eeIF3O8eY!nMJC#9c!};iWFBi4h-pL{cKm|!#LhgZI zw$yz?s;^ohQuk%y2nA4==>e^wQR*{MCWDrxgy9GN|J(K;jsY$wQmqf8$_efC!O&Tq z*AZ@=q#`}*-m1Pxd=|;n5yR;dty3F5NBk`qqMK#b$E9oeoYvij;utoVij-?(kU^q3 zLr-Yf0hu=I{@dZST$S$Nlvj?HzjPAdNFO0Ws{jtX3nzPTu6xC+!mVG-mqya>rem%? zEsoP%>~!q?4R1AzETxDtdJ0DTh8&9}R$sPBLr6)<)&=Ksih|1==)T(rE#4VKMi-H(#ZY9hVQ?{kJ0N9&HE0=;LQQhg^{>M^)Zc`2 ziVrq4m&ugBjl^_J@lQH+@Bb6s_+tV-hOkR zSV1@>SVdnUtr^E}av9W|B#i(ObK9^~Ez|HAgGuQVK#68twg51#89?;T51{0gcQoS> z8pELKS1wT&!(|?tv2vuZ*L}!GOcQnD%8A$RbIx6&o>bCpKT3cBA{8ji!cvTmBv*GS zC3I!qI;aBKB}x>o0xwKT|i%Xom=sYDTC}XjJC|w?>BmgSjw-t4J zucDopC0@2Gij?J&?Nl9`$pM}J z(&k=wTQU;lHi&W=7xMgaM?C6?pD^x!)W=(Z%13GhDp2Rm3;oN&m&B58FhfHkIyGj3 z;BWyZ6(H#%A_RniBZ!UKRJGEhE=-cu6)32wlDY%A`cBOz#jy>G0U}_|d-pEaZ`4y9 z+==B6<$tXO7#7MjOheWFt&JJm zgiEEwDoJ!$y7D2JM`)9MRar{%p3(D{ZVf;IE2y{TgR!DX13gwe%PXPZ2VJH$>ol>Z z2jSIy^9)(!sE(76O`}%V39m256hPnsDit8?gh4d|L=d&KE=#?pV`^bDC(%c~6p1VE}Y>YbfKSScqYFW`S zW9Fj{e=^OJFeGYf~GkG)P3Hi)<9s2LUP-EYy2U2@1p_nGC&U zTUutTGVe^PL3v6HneYdLtvMZoB6K6S1Ne*W`HT37j{w(=BQ{{*Hm0A6Na=i;{E!5^Jxr!avA%a+>!xI`9+1V-?C6a^^kA|G;MV{Ol zsSh5dj)0JSQftvu+x#SxhCk`p5ym0X7va>?;%v1V&MjM2@$t z-xbAW>&JD)*M;kgy8Tbd4 z=;nKGMEgL4We|p5-K@h)zihFm30GZDu1_L0+cI|h4JozG3R5Cn;j?a##LLrWv-v<-If#vPYdMSZc zHo>xE$k&!IhO>t1&C>){Kd=5 zT1uqGJzk81p2CF=v|Xmgdh~6{mmXDWM#Id8*6D#HIFyZC{a9<~ZS5$y zpY!Y>Z~-b6EO4SE1&E|V5fCDGu6M5LlS_>!H+OtbEGR^(mC#2# znnDUXosnUEkXJQkPIn`=<#O86b2}6MP9~x&cpToX16kbPn(Sx1CNPZ0Vj)3Ae$zxA zOkW3?M))W1@=i3zqwfsRniq^>v#sb=I9_N%(*uA3JQXN#lq?MdM?#T=OxovboNtMC zb0)8=i5Q@iu7S~UL-U?Sa*{GL0Zfnfihpn7P*b9x8%ZE&bjCj(bG!|OXpZ{ zftMQ&tuhR`oovhjp5&xk49<^*)UR?bgT87S8v!MA<05}#Y@3KE&l%^SP+L2??$(%T zOYhoLx|cE4By_g+LNKaq?YLgmsD}l*6+NW;X;;AiJS{S>hbz$iSK1=AIm+d5^d-B% zT}M}{I$#F@HWeX=SPBq~fgzxU4;iVOT;v06s`lXRK2wHjHl_~YOJ(E zB8=zI^JvgRUak)|I&|4!RYrh}gst>C-{P0HJ&Wyp$<$ghi)9KNFK|YmC7oU!4#Fzr zuNH(9qQ27)TfCzZRBPh%45&3GdWYQJD5(bnlRM3xwE~N$%=wupicNk?ml_|uX*lJE zqxm7^rj8irX!4nDGsA)sYsJTFULoeq3|0LrJ(i9TH~~BrDDYA%6q14?h?UN+vRc=v zSA5*NyDW;SNs_n`A+M(QYqUZXCRH)UGM3qtIROVkt0~jyZ~Q;rSj}re^IrK1vu5ij z1`vWE6c?OtMnT8AEv-y0e7C&w!TS2sc?{}@qE>;mf1|#@kBh>;9jU#jMFE0`iV>i) zeDKoipU%0lCwC+**8=`VIlcnEIpcRUr;M^0*s?EPr2u)&%Dy?lE!3e#B4~wdQtg;~ zc$y#w0XP*P>~b3s4oWg7I%Z8@8FEXUrRqyc0IHSbIJu~HAXTdJVU3p}6w(+z;n&Je zqXBj{N=3d@PkFu+heU4dAvXaSP)B^EaG-!{%(a$r*;Gu8V@4=@jMS8)#@<*_%2C$Z zXVK0NGn(|Q!qcw_Q6mj~LHadAwAOEtf#PD+fGO!ZJieWV_VRPrl?fA$UPNyQE5D zg><=3&`AUxoY;X?(B_)GcS4lE$%M`7pgJBlgGetdH#!*ilS_#!w4 zaZ*H|KmNJKIKQ*{fggvgeIN#EjQazh4iEbIZ<~NsDT#*2+FC-nikKA;00smGqS{rQ z^k10__ALx36Q3-)3@tUM?d#>?e5vChi53|M`Fp-Peb}TE3?E~0@_d$+b$>q|ML5|E z?ccNwpAWmow?d&(0-HqBKs$SSQy~=%T{IrIu2i)>FLdj4_n2I%5YKbLjl?F(_eox; z?vOXXo1BXGy`Gv(p_ zU7YcaaObT%alKww5~}i)i!x3C?@vctv6dSTT=7$u3j3x7HnLBLE>A0yKoe!32uXF# z(D?TJ?r$&J`&R=V&css4<0E&r)3D>QV`|*>a^5;&d0LTS?)qZq<2>w35gcjuU0vXt z8VaDg5WLf61P6jBkzBwI(XLAC2hs=D0i|6(M#s9R&uZC7E6;wPn@LFMg%o?rU1=Y*Ij~uV5Rg zyo-yZ?je~@Vj(THI?5rO`H_mQ+;rbM9BxOBqg-!O2)a{N8KEOhj|=G@=tSH0%4^!) zuXPhuCi5d8NMr-%ztFX?!4dSdvZ?bviss(4sw_>N-eS1fSIR0N?>I6)g-( z6A{V*BOwUl7kQNLRa!h<-6pSIZ3P6XS3uMX?onW@qPZ#M%l2~06S^usVgQv_Q9um; z^cqqD4O~pw02g`;-&-_v^=M43F%!j&y85`_$9|So=g>|d451=#K6Bo9R>u&#b4AW~ z5$n(RG6%qNvQiZW9vNGi@?EZvoSP%#Rf~#G4UCt_!&UDQ7t^c*dNYCqCmxspc(CBe z;-4P}(m1X6mnN#1Ztj&bbZbR4CkTszL!WzrzyUB7Eebdr5yb*A5YU1Y2&LmN?~k`$ zUFF?Nn!DfL;AE(^RdfLZpIqsC$#ebqW3Qrs!Q|3Hm2vc(1K1HJX$vL+iLwduMk-B? z)?@z`gr#?at6m`7-%Uc91FlOS<3I!Okl9J5KE@}yWA0sNlfiCh8xqN7o^?&`HJ58v z1z$S`iutL!c1n?BCrB#alH5&~?-M zqeVGR*d2>Nzk??E@j(&+9RK-_V5;yOqZyu55^b(bN8QqG3YC7gPj}{ZL{SBAR6$4V z?Ki=Y_S?y_3lq1$fwR`HKq0+inyS;k^Ux*kmg8B|TF-_WUZ>^IEIA zaAArl7XhVrDpj+*`*GwDbt)5xAOQ(OKmS@FZ~-n^41jcO%TO0qA36Bcx8>g)D8xnN{r4vUJlpF!tXLRXLAuT%$fK!t(}vbX@y;SoI$ zQDBIJ3f-do={FnYEb}J*4^J1fFX?dYp9>6{3OSguxjKxd`(J!a zwloW(g>JyyM)m$x#90btQtisH69AY2ofTJqg>oBkx$YLU1uSN(HikRx&nty($OyvB zJpEt>0@ug!hS-6?0ZbJDG-n(M1qm{s*eDk%GZxOxpR8U%e_vuINX^vxIBh6 zYO=~JZx~6vpg8i?{j$R`LzG-EB)%(Jmir~cM@I?LA!$n#8E~5YqF2~JrV>;!+GI;k z!XRip3kbsmveXwlaSH?t-?a_hb?qN=9llTw`fq1g5)+88xj@Ca#l2e+<6Q`iWi%=7 zx2viyIK#cVbZ5Q;>2y3{TAUocFvMF*5Bd4qMo3YWs7bJVMKek!5~N$eZ~-!xY8R-%G9qQ7D=|s)43Eqc$sWIIu$JJXDbv!0$`!d4tKrF_qnUR^CjiY zYX1l+H95HG7{WhB9AxAg9H$=&m)&6d2#-&J9ni>xN572M`FPh|q_|cl?W{agJN-hq zFl|Ddqsx3pC4Sk3bS{5TTgvd#G5{hWW#4#<9vPGrTfDEHbOQuzmk3_NE^Q^;B4U#e z8@Un{k>5Y#>%?&7P!p))1^Gzoxx2iOkVt5PWeZAiwG!S|1CLhPha>6E7eA|#1!yV(sd)A4_4s#V)G-+D(cJTWsZUPhh&YN^? zL4DNQpTmbPyzO!EkakM0gABFLIS1W7k)!o5yW7h&2Y*d`06RVZ0LD4c046P zON`DZl5!D|3RCS6rMTxzhNEa_;g1#$Sd}6^aF@Y;3=avj#xY@ov&Lrf)}6N;*wI}6 z=L5#D`7j*|H1?7y0p(lggBz)Fr}3N&Q?pY{g0shCu1AqVk2OlBnfKUIO+`t)%ShPSHqGt?V z67Jqbi+{JSQ*}hBX)t$(D3*ZzE~xBah(L^YD~(y`X4mz8g@Aoat><|<2l@Pne!~cQ zcZ}Iz@CFzy9vd7}S4GXrf$m6Xn!0pe@3VSCrppT0C{ePF%SmJrx!*PnhVm7=^+5{_-1Z1e0YN zcXETB$B&{kZgmD9_aLHrchhypD7s+$u6c!(_rubnv3s$-V2eiT6p@1ekG#i2na19< zljHSkFQf$dCellcM;g<(BqQ1EC8bL@XMcWW1gwPdo9H}G{N>yfn`QZ8MoVXx(R`df zEjS){->nFXT=}P72@bY-7TwqL$i*n}l$qm<9ygs`mt8<@I~_igfp#H9fVtVrUKa%o zPVZ!7KC8A(qRZw8FXa?j3#=5cTESW-mx*t3PA&V} zJnvz)5h|71O-M)X9>NB0SMUF`MO^hy(>!F*sm<&13T~lzvvr>rZIPI-+FF=J{HIZR=X)~R<$I_xnrxRFCuHh z{0(he&J9zB3Q(uBUB}p}CeZW-re%YkHn5O%E6|g`d8MujpsI0v{w~8z7RIUajw$ z`)m{-(o*-VayOKu^f&OmCYYmnO@}otK%f$Vp8fG=Oz?2EVD~l4)aO{phObmeCpRT+ zK527x7k!&y6tCKX%##9-k9Jk|{ka&@prVBET)WIy*tKph%3Y;@wS?7g0(+#}div1K zBoKwuP zL%xeW_b7+R#)Zu_qey%7G17coQIw7SnKmpL=6Wiq=stPHpX?wYXQ+oe02(k*(H%8; z3`=O_C3&WvcFS6SR=ss*oW#B>(?iFY2|7h@)zZAxa zHKCUw_#=s}&-tn|-+;z}A?fZTh> zXQO+O9>EU2K~VVHB@)B+Gu*5c0InI54-?Q(T0u0ZKZ%5Gyns!<}O^rl-nIEhp(fRs>#RuLFu3m}7{h zGfS?7!aS~fDqiyUhH(*`srQMKr2Yhhm^La^4zCMrKHx%?#*Tw=&KTT4^y?>iUg%V% z!5VdOgFi=-&*Fi>-RuS4`k{M1SCl=a1sK@IWfrRV>wR>gSapwG1h>(!>!BluXMdZs zIO07Bq* z899AWJo{-(g$Ut2y%bO{`dF(H%_v zN+hl-iR#$mXGPTr|4qcaew*C0tL2bbcL0}dqV3Bh18rGYzvAJMnbOzxJ%C+?wAC*P z_NM@pCAyhkEIrrP@}3qX_W2+FUi_ZiRzF>~pN`9Hca+LnGJq{FmJ5CEar6oCCDN+` zb3Du5VKocM6L_V*?lv=%1YVs^^mCCdkCl3i2CUZ7WqD43C%I5sfHli}X=IFRyORIR zWG247_&2!nUd?Xy3;Fm4h5dQ|65P%Gk(Wv&lwBz^-<>s2!0ni}dR&fyoVx~|_ti2+ z=n@v3~oFJl0K_ zne^&pSDj6A%aAiKHyTN^gIEtH{|L;KwZr+GEu&a2LUD&#x+&Iah8z|rOog z2Vew7A-sb|{f&4xZ;9lXKI8_htDV?#u=tk+J`%x6G~WrmL2Xn;uQX8a1y7bf<*N1jTm~N-NO!NdmOhhIVB{{T(ptR&qsJ2u5)vaNSmc zcWXBqhwg|rTn;VGZnw=3t>p4jbnhFACzrC@Xim>JhnAngqn7ooG$M_zs1yLR*^CC5 zxvU-?jBRR+w$VE->5JlJHI(QvhZNfqYNdFe#3kYMy9=quKdq~bwe-lIg+VgYHKhR+& zUtbn(f)Lp>X?lpMLLkmVP~)rnX?}&)+ReYfa?P#;Y%S|Y181RuZ)^7l<9r>KCU(6X z+WR?tJ_M8W;MQi*f$O8(1Gp?e-%w z_}-tyzGEX?KkwsWcHbOErwRWMwg#Aq&@$K{PJg_9LY~@EtBShlpZh<=WgE@ddhUt; zi}Ll}7GkA=T9dZfvk!G^b7a@Tgp+#Ap2@a4<@f|T?FULmW6BjJ=9;XWl`W2X(l(ie zxhY#}?Rmo#7sohXZCS8)d@fzP6v`n>`&8cel3z%g3dVKW1aK3kx?lx9@a-S{cy@9- zSknlK5|xWAUk2ql6l0%!U+7JPkG3+YZqE@HX({hKguI1+7}XjArmM#h#o?-5iB-*42AZOt zD?+h(c3+@A_Nj_fkv4`o0A3WB)NAzhKey`+sD!(aBRcXHf7^neau z7BH}`&sna2hXy!_+8ZMFbP7*B;-18#S%16jJC%X zOA+#_Vnqm{!NN96Os(oB&joJk*0DDXAOdj!lntHxPPy;;M7eOUI4NeQecfm^{a<%5 zs)?rN(zTA%J@m$ghCVk7wU@P=sh58Z#KUyfG`Ne1EOyVs@GwHuO49Hk1 zdL>$a9^n~p4nk*F9)u;S7M9Fb{~N#ktk<%k47Vo&iCj1-wJc@u`$=nObk`cv-UidO zz|jDU2Z$X79D}_$6K`SRW!oIj^{XyWv-jvP$ZtdLb^2X~smi3qV>EyBfOnZpM`~fe zl%TPFjew|lk8XF(6YF*O?JM_9&B&HUfd0iPWmwY?`E0||D-|o{Y9H}>(}sep+ARy8 z8m?3eGkihSEZdUBh8c|puYm+m)7hOGl*VL$!A&^r$!AX$vsO%Y5s%`iOQQY{ecEgc z=uP!dfAo|>;iv&~QXBp=-MixO;l8|Ow6g{0UU&+JgN+;1_B*<|ojAko?CAb=cV$)> zQdN+e2*ma(zn|&o{J-tWya|O8-u#h2TOfqR;^UE-6T!c6A5AMyNP{BdQnx0LEU2zD z*luCh3)aIig-a9B7*M|U?mnV+N2cpy?mG8*t!dsuLnQGs9!7XY@%`Ij>B-3IwnssR zO|om9EKt(#p<`|RB-<)$>5E^fP%92}1#^lMuUCYcmraP6fL;Iq0&)SWo{#_JU8iMM zQJ7xqTGffj1zwDN+>63f$eL<`U?%@;Sm9=n{A3)*T`_!-mRyGws?vriZ8 zz^OV*0!&!9cx6Rx4}-|7vM}xb@F9hGv!^AXggfFj@`zbmup1CuX1U}G<4(DcgdQgb zNqOdSQjpINQMYT>5`?So5w-ITD*co;XGg)GOt0KiEtLgTw!`Rd(s#7Ln|Z_B*(MTy zGQR-7;P!YUr$6W*H-Kf8%%l@z;$w31Od>0-Y=Hl-uoL89fV-Ts5*^LhHHQd%=;uG3 zd6Ec!?Q4^~W^MP`;_P}(%ocm}dt$3!C)`5N$G(llbn`_%^<%lY0MZi1@~HJOpiqm` zL?#u=09A@RRB-z#nj)0`z))V*)IFRQQc8BihYTPL*k^GxiZKd)L@YL8D}M*KS?kK_ z>>ZU=nLP(iJ$hBGmz)bDC6OjMn)ELK9!DynSfpsDHQlPN`O4-fSmj1t2)|Ae6 zXk3Lk4~k2O0N|#Y6$Cze>u5$f>t&Azj4ef6Z2N;81vDPhox{|JZi14I0008P0RZ8u zo{#^a;Ys`nlk@7P6=53cK`7Aj^A*4Xvb4CO$DI{74J5{I#eSv=RLJ8$gakmnB7scm zcI>Nz$b)nqgwM0atgXVKB*stRQ#7_*$1}3JI(vLgh;mJ&EC4SrM%sdnjU7ylkLc8- z_!2OO4YyUE3SXf&s&DgP(yy)bJs66q^Fq?!z4%~Z%qkkX*v&XkWI@9Zh>qlNa17?- zu)Xe6uhmvDgYIFml8G$DEu^FC-o;Vr;Hj}&MrG$L;BS5@hCeqNbLW>A05(Kum2+`l zo${mx4X)0?<~B5N;%3%@A%38J&2dZm8Q^dlxHv8eRD5v(+}V|@#s-JmnMfU3@HLrN zQwe3V-(}Pb2qP|M^D0w;m_T=~7TcR?uH~2qX$xb(x=>znI)_L4s#Exli2RG7BbR%T zU3uYrZHxryh<3#QF`-~`vzK>MGViX`Q?9=jY7Wzy1?;Ki!IxI141PO)LfAa!@CpA1 zb#d2N;ZvsOB^>gnc}>3wTPYL>7|ZU&WV5BrXWGRDuFkDLhRT#f3vNl7_%=?&t7MVr zDS8}vKLmw8zx384B`I@Ws|kUH;j`8^(i=85klR1&Vnk8{_u%!!zGRJ2f=#=IM1sX~ zH*^Q-5RufY5I%GNSFS-KSyZCUXEli2LaN<>`dI|TYOD>RzYxU@@{4x~_vbqAVv`}9 zMZ1}Q6oR+pc0Oq#%;3jilkp_o##Hcj&aQXIkWp@}mu*t7tsfO|h!XyFTi@hpmsKxy z)8K^q<@YCb%>8v|uF)jZ41b}1kIri|CmPz-0ztD>S2G+=>(R>ZeaqhK&`OTP*h?YV z7oLp;nU1(n4oz5iryHZyv+b8hd8q)^5RE(SW|lGrFDL{=mf&I%;{Js-IaH*|9+yAl zi6O45&c~zTg~2~4#m0ot5X#VmQ%J2JfB*mp-y!OdME~JbBc%YXjJVBq*`z|8Lr^WN z#m+D-Aol{S9|Ar1I3h-3f-;aJgaoaRlKa$tES_}$WI&t0N8Do04IBtjU>u8|dv&NM zu^Z=n366cJ`wfDdBFe#QRqLoSAzc$$pdIG#1%gOgZ{L&%v@0gP{?CeJ zoR+VXFsz~d$4*nXR==_5PEv9c>dO10(||1%5l}!ZFds9ebStXaz&k~q&EoFNbeJhK z`qq(zrb?9j5}rru@eB#vp5A_i0iLZaIRUurVlti&cm43BzdThgow6)_{Yw}Jp73jJ z`w()iK)#kw-YiZ;g)}eJG5=wMZK%01S2-K@MEi2-MtID%9sNqO)p~w{Lj&(*-oAjn z50DInBQmgdB#M1u*m{_Fvx9C!F@pdZ>!7wQ429`W0pOYY zzA=N@bUvhUIA~f^lq&TcWFJp~eJv^K>^+MS-6yMLxltDS zesahAbh6$SpeO+|MXx#2GAqhQwJ|NO0t> zWdY;4W$M;1E*9DO@zQ;eRvc8d>`kEbJO(I;)R3j_=WP4dt9)XJ_Ol&C@{rGP)(5sN zD8h%rq400-g7DnrrC3X&7QqF0g?_e0&J8jzbg|#S|HV##hL#Z(h`LDF^P7 zX2sIbXT#TNx90BOIJ7$CM`n|n&KYIYvaHqZE@gdOnp;8JEt>Xv9yVSb=~Pmf{n(82 z4%SYVa@^azUpSME?E%Lw|D5?^-!{vS7fXQxKnEe9K`Ck!%^sLuOH}_zCl3H<4(oTrn@%Pi4b48J zN`pG#Jm`CuPQeOjp}*a^m3Av7FQXr^6NB3myNI=zGWmp=w)=9QJ@0p!Ez)w%9zAbM zMxXvzys!drCUY17qmc<}=;FcY;tstmSi-`Xtukg3@m(?Q-Q)_yvEqh7%24Dixl|1} znOna$u>W$x%~Uj-h6Ku#oW_T#mC?a5J>;?jmyg0jVng>A+qDOPwa(N#zC$Cq(TXZre%mM&tAm_~rlP zov2NM2vEed7Uwf!4bh?y51|Y#+3q{B#WdPrrE8OI_Kr7xWOzz+e9jFH0H#lkT(#}9 zn(kFu_`gh}!;;7$%g@(X0o65^ZK^roca_t>e=sKTmhv({-`Og8fy8udm8!{01VY98 zjRLKCi^$|#oY?>w#Ldp!d-zf+P}yNUSx_SN>tp9JZ=N!J8$GXF9f3&t5iX=5;$GU& zy%DN#w91TFNFyG9jx@KS;)XPF-z(lN9g-0_CVdGjr#o5@r5D0dm7YR$!R>N^_?or5 zZ#s%1UTYp97-J^|r|e_Nk?f1Db6KO&G`8Zi>X?kt9x2`~u8;@9Z4FcU7@?chaUDG` zYDTy$$+`A0A%F+5-8yQto%$k4))K<6s1~W1ajM&EV_M95^Wk3#ZX%p|MCV^GY!h0Vsz8+yD7#?^9wHF5 z3TUP$?m&<=!Mu&ao!4M9{g}wYaG+rgt`SsON8wex%g%gx}?`Ccmybj)x zO|95ixHH^%foNiU(>^j(u@UP&C!ywVTDAz&^vuKk|9t<7xEe`#gmMioZa%tD)!0M1 zf4(^CeedN9i5--ET83`W%Uh=-Gw+D5vqPP=PXZUcmAMLP5RXPIV}eBhS7Zgc!)a!~~;fGR(|f6RJg%arXq0`**hTc7Zww z>R6-+$rXu0?TTdGksJ=ho5g;mMkKY!8Z(kv>*T8#?cov+YXLhcnElm*AF zQAK{!@bNu5B#hRje&j*NMfK(U*Qo_u32ZR*I+!JeWPPDUNMpAlQ8W%m?m+yp{| zk__nc3??fYY8}q+z(h^J~pUSV%L0EdgDXRL=2? zRa-F1>AYt8c-it4)=k1JHF-&&V@dkz2Qnm@uX4kYCg>9Ts}>~6b)vsTlAU?{czI;d z#H`e=?s+PVVglR!0iacn()5{cgEcqje8kFp*u*V&gRf9bUG@LMZG~#{(Khu$Fwmn z%%P=e)TUQzybKhcBzLO}D;9EeRNA%zY}UOX#7^vc*HpWs%%G%H-=HGMc$T}rdg`ZB zu?1YYz;>&b*0lZ(^f`!7%hgK>;?yWNy;1knwB#BU%9^1>76!g`bHoz6d5<=2(A>&} z{)fB$MyRi2C9JfN4F_nS`g$X`r=;6!AZv9QOj_=(xDtk`WwWW=5r8+OQiwRf5{Sh6 zYV%4+SJru_1&57^^)}*Cg#m=*UcrWru?W!#+*!NQZ)))rOk6FfkZ-!Yf%!Arao-t7 z%N{lteM>~RpL^Cxg8W=PfB*mpydePL>X1bL+di4SaVG7GtV&I)I71I4;L+(6^F6?& zp9~VrxRSHQ_+yIL>2!8BY2V#ziVktH>!1rs6#U;NzSqbLlgI*_r2DnEr%UJ$u{EGO zijaYlv*8j^3q5c_o(dY@O;RzAG559#CWk2^Bu(8LSL|^ZOO8owiG^7;h zzDu#frzHgK$^6onm zHfL@^@6NGQ+rrpG!Z6SOG$OMeauXQozmK(KNrhKQ*R~Y|e$D)6|H$2wfD* zXIl*y{Xq8segA+6fS?#6{-?d40M41$t`^{u$thV0L==`Df|inUuSjeoL)ird*lwmL zL>3UWC;^Xvf}H8td76nds+}S9x_=yXyv0foVp3q(U%uq<@Ov}!+rtBdnR+2w5=F*h z!Tj_zK~51yV)gEQ=ej^>z}bXNmVtFh4Y7ebX9a|j1}xM1Q)<7k z0D?}=aJKyM$>8ti&d;&V;S^xFiw)(C;X^8qQft^q>G2xDe%i9*-LqP6=>N)3ii?W* zE|+|(wJpUm*&>hLDy|{9)p<}Z^Ip+SZ;x?9I>?oqTmH1qSLl_^PJWIGf|LahzX`pV zoA*b62)Y=bpjRILU^=u(!|lebcHC_HQ$bz%sR06>gb;7utSBv6E%LiD_%wHH7#of9 z4xZnipba#w&AMl=xPr|`AAc46-`d<{1PIqx9u6|??q%DG#_paocHbzmXjD3YU77OR zrN@C!81-)52u{8#X?Z5yw)<^1p^iGPWirK|4RMgNdElIbSw~tFD)Ahg8s9U!5(k?~ zy_y0O{xjCWhzSy_NNzM#kEJ710-YwT8T^EKujy#$FP)!6aq3!hB%z`i?%)0Dqs zfx4^~r8onS!f*-Y5G_Z^bs~lmNa<2MfhzVJdF$QO^;J686-22i|5)k6noaPlnvue9 z7d{bf8>vW&=3iF&b|$auXT2lJ$q>xe#%;Y0Kt4-Lx65NfnN*>%6ZqxMHqi^nUkzUm zFx8V*^0nEW+YG_cj>c-Pqo76$7P6J=X!N*Ix9YvK!aOKGt}E~hs5szt3Z!Vpik_LBFf)lY6+0bjZcDTSt=JqOvCQ?oB86qwV}_e!USrO&#mLiPd}%X>fNSg4=Rio?tsB{k?g&38SZ3 z-A?I!{FCM2iIvjyxwiRZtxy@1-d<9=V!7droY9Gjy5>)Q1IW7Xd#xxTbW>7#V_^dp zo(u=pUsjbk|3pQKNWIc370*`=F_ovza*ceU+{Kv5%csF7zkz)z*!)*6^|=%8bNxeG8Nib zx_ulb+YvLSup`1U!px#grx$vEwaCXzNiX~AHZP^R;E*)^W;z~OGBvKX=H2d)S1eLZ znWYQX94!5i7oe$kbQZXnyqs#YdH*mslwPAlIiwW1uLbl)df&=D6%c0t{=@jMEr-?( zCc1qaURtIaYs(heK~saU8>8;1_rNj@AmCT?!yj-+UdoZCpjZH`bxg;cvXPG3K#DRc zm1>deyk%##)g6}80!-lS1PyMqPz3(nLYT4`%3VqTl0L&9o$8%rYn)~eP1n0Y<*D31FV__dCk80#*gG!G5^ z`7vOMn_JwS5AC$zbTUAAEddCma*0p}o-u~qj1SRQroHT|+Yh4E;#J)=Es8{dCG6=s zsg5Z)Ymb2`Cm>#Us8{X7_LnE7S;Q$_+6Ct<&+N0s=jv*%WsyaWp;3A29G))tVbe=l z569|;QP~0yLgF+%(FK~KcDUtfQgylkN(0vL;9+pi^;!xJHx2lBcA4vOZUs^m=2}*A zWK=fV2kP==g-EX}IX~xdTB(VM{N~2He-?Zro4?^9T#1 z1o7}WxzyJUOp#iGmi~rc*v|US;FIfR3bZgrAnKlF_0ZL+V z0x}pyQ@-@FMC+_L?uL74K#V2 zby8h(NLMxc`FT!)>76gmy8Vs%dhfoeZS!nqZ(CAZ)^o`dt?GIRYtYXeEvj)($oLI^ z>p@O_U780M1wwQ@LSo8q8Uqs3dL;>=+xS{|M|msMM>Nw%sY*t}yAv$2{!8W#4**5t z;Y7zgJMKTgyXbi})2=0M9fZTC#vQo#K#}bDWpRD{>UPU%X7}AQlZ^~Q?85*({+*g| zUHEz~`3iInYm#5xXrz_w@*&G=j!Pa}?uf!TZL`&L0}ghK&0@O^=bSRA@|dn=$Z@R) z%<1U;y@v4Cq6GAX$S?bH#hr@M!hLyOJ9obOM7KZKn#nw@=7&FCTjGphT z`>fKxXH4|~w=w_rMK_4%}n@C#xxqbY?WxlBz*)-( z{gl=K_-JD_h-_YAQiIt&dkctHUaC3E&T_M|Eqgt%$Ssm{HL--1#hEjEHJL(TmloJU zNhD`JL7)1zFeoRnV!;@oD@TpFUpN2&0AW=csMk8$s;M6`FCGE~bPaTZ=O%;JWA!x8o>{XU^>Uy5 zYo_Tml5yHoXkBseO|Wg%9K0~@MSsnLcyFU?HQbQt+$`si>Ebm)!W(kfmReiw?F~M@1D!%mOZcW3Z<$H#hjJM5 zfEDeZ;isZXWwBH5bNqUOlqJfjFj`B@!G^S#z&vHd_Q||!krA%{5-~21oQP)=O)RH^ zQ(6>UxA3|1w@J)k)<8!J%R6%Qs)<|{@?C6t)!ihGsI5zJ$lBGl?yw81#LQ1EVnN^^=-<6 ztXT&?eMD`l_;SN%XQ0~&mgfss7iQ%^ZC?y6T1l&gWex$4ex3od!Dx6%nD3g9DT3i) z$Xn5lmseglouxH*u{rJH*K$ADl}dv;ZoJQ!90-* z#HNK62uus?P;((8JAgpSG(ui&3ckLoiDvsUDcJzha~?108bz6i4kT7!e=Kn(3Cb6R zXR#*GJ0+;b`KU2Zt(#L8Dw)1xp`1zP`9eIA6LKk#ay<$wSH30ooSphW-J_a>7( z-i{%!N1g1FV@-Yd#Efe2IVPJMH70{(_)_U6C}r%TT5`OL3W|W}g$61(v+i|~?okMI zle=C~kb!=amqEWqHFeILVG$3}nh|Gfy5{eMW*BvoIUs~t+HCp|UcY;tAfd{{TSbfl z%9-7Bl5qx1;j?;g+MORNsrzIa{Q((@+y>P5TqU-#;e_+ zNEZQD8g#6D7BwsYlh!>CohnM=JWG+j@8e--emnm-TPt(rQnCDqYTaovd=UPXnLTJj zBgZ2hPhtve}L0t9)fV)#wmlLm|q`n0vd6^M{COM z6Z2&Oe49%R}DE4X(9@ zp$B?}28e0rS3^R~5vxBI?PZ4eQPKN|ekBc3LwB2Ga!VNdPg?+@vslX5pI-eKt=Khe zgTpM)?|LH+BIWx@R;UG?aA{+Jp@Qbr5QY^d@q9(}BQx*>Wu&o7voV(#8b4xnfkpt4 zM2LAbSZN$2qbd0SUxRho67IJkB{qRxU84ave>%(dD@tFwz@`Kb1sxGiN*3gLi6P*a zwmM(O;$fU5j)VfO$ZKF-+3_BQ(SX0}?zQ@TO618t>iv-iZ?vWGY#Vr` zThHoV!5bG~<{9%f=(o76l>F^l1V4L60X=uwzBm<|-pwpyQOPV2wx~lzfYTo2KR`P> zzk}LJ!+_|{2(X2nix83C=}=J0N-J=}i-^?^5jfo=-x+PCWx!p%NY5St?GKCsfa&ox z2lpSGvw}Ri{coIeyk}JyeY+*H{MS0S$_|+sf4TQ`b7X`(w45)RFI*7S%*uwEbQd7X zeZ~37rk)rZ!usk58+vxX zk)jd)pIOT14+0bAgeZcf68Vxo9mN&;TwY(z9P`m=;!BZnZubPtm77D}O2*is3Gj3* z93>ZiiOK5EJ9f*yF;raa=+S#i+7u!k^5r}42ma^0X_A{HgeFT8GL&b?s6^-|UZ&qh z8B)*vL3iR#d~);a(MF?nmg-p?3W7sI0=aSb1<(gYx|K4ibM{gXrM+h3F}rNqZy-Sx6iP-LD9t@sgw z7{N>c;o}J)M3a!0>J|^3B?Ii9=v)eG=jaH3t>$nMnJ#v9D0k_HK%Xi91 z>FSizWkOD#ciCb2sW$(Bamm~%{O13?O01@pC%eINOl3Gc-#1(n3U-5NyGDIGhRM#AAAZ#G1-oWe7c$M9nU!H~K@Yr52r z)lWQkMpT42lId8@SgAO-r8c{sl`-6CdsE5;w|tlenc0!jT>*F2?jUL@df_eWKyw_8 zU45S9-gz+Uqw)-?ho{+)A1nVYO!W2iJG{W-3l%+YZqYO=egqn_{0@`o{V0(Ls(Iw` z8zV=4DZPlJpB7$L-b<;)Q70jXbGITiJV?1V;Vh1j zni-t~@UvF+R1I4}7V+NM-#3#|$N%-$F*NUg6&bRzSK=KZZ;k?{E1)U&K~UKQS=~^( zEoL*n%w|XZP_HQ9!U<5)+v+1U@u9b^{pmESz7o%(#J7B3S9(#KGO}!m1_^P465;J? zYEwC97{AEmSlA2SgjX8$xxu6x_j_lPuol8CsJY=u^fgW~r<(nOqZc8s0F?FWEj<@5 zqZ9p*Ja>#e&RS8ZZgQvn2lV$xQh)JJh)k!J@wV#Fl@Ta4;e1lGtzHpDR^A$$$Aqv6 z?@Ms=QU+vwC~W&kXU*hj86yK6q_OMH{XpoD!A3YUM7}0IcW#gnv{1^H+PAs}Ey}{t8a3(oeSWT8ig@5|i&dFzcwu;R z{QpM%_bKtXk(__EtMFILL2S!BlbFzpFbiHVT}yh!i@N zYMhTK%nXcS7(ZDt@$(Y==9}cYA0o=&xotVs5k!?{vZUz+Dfym0MNNy+CaGZ+kHai; zT;YW6o!auRtDg%zeDS)Ke>Gq6et(>Am@|2aO-hCuiua8;FAyMUS4P^48p<+G$XRF3 zC5WF4T^XQ5Qr6Jq7T$s_BXv`FB^7*3N+S()Tz`171eek1W)@p92&hrW=TDSJNhOnP zjP*@bq*c}$8?{ih{kXVh!|Xd!3vc-|H}FEJpZ4T1BD}SS6#X)gkcuD!alPV?8+iyK&rI=YH(;Y+FJfpp=i44mUhz zrM19Vx#V84Gyj#wn^1j`Iw7v4^)`a~(Gi{p%9kCowV<)W}YzxoAZ1^>I^Ua{IP@`pF^x((b#;i2!@1`L5`0g7V? zrN=wAVXo_PS+C&DCKC_7m?!FTkDnop?o4^cS^LP8Ur1d^f^MT8>>sG#JM3lTAy>i9 zsXXdq4gyFJgTb+SeGPz#NOiK&!DAS^z1sinLVpF_=4I8_pS#Dhc7V0_+A+3zzOfLE zT`-0Q-nht33Q*HEmO=zPFp^;8|By>m%Id;cJ(xLJi5^Ggu?~!UW$~T)?B>?>2+*B# zYiKf9(-XDU&MYNolJ3e^1^3vHA)>%W$C2`co#(7PAx?Ga|06P%#)z1q!-bsRi08@V zl!h}PYp>NK?FbdQBEJ*SCh?_OTU>^XTeHukaBX)i*!Y@HIXB+GcpE(#scyN?OdzvH z-e>l<9q_>6u#63v`Q#r@(W)R)H^tV+AnB+rBr`KhSiR1#pP{#?%I@(vUZ`j^y%}U*K{DgML3ChG$%xB6wA+uZT+$`_C4mb@53<&{8Q?)1uo(gPF zgYGNgXWUBE_(NIqJYe@*@IsmCd*f$P!XOL9st#bva{m?KCq9vhbNpNWc6G5b6k%&S zqoX^REd^BU`Oddn;KTHGPCAFpu~e_00k7uYJL{hQk>YzkwHF|_#Na-f8Z0;sFJxJv zQ45CllVDgvsPKMWRv3WzX!`%UaBun`HZU!#oD311ZVaEw1ZOlV=pt0G> zi5<$_Q7HWEG;@%HE_D@d{9hc1z~tsonFrM>xy6+I5p2WaC8=6#sy6aGrlnJi+FRpw zOr3fqb{uuq+>$xMlLg8QkF$>@&RT^jioC#Ohtm@YVc5-dlTtR)`nPfH?%e?f?RRCz z(sLX(AoY0=y)_^1n`PtYeA3ApFVEZ?JHtYpGhvVKhCC|)1QG~I$;$9QE}MV@+;Ivo!ZEmR=>`UhSy=i) zl}1J~>jaF1iRwj`1A)jmo*Ct7)Wn(HM6>bpKZh9UT?Zq&R>3cTOsREYA4D2IPI233FU=%J> zNnBWjx{#%srshR{TRSF@X3@_edEzYo(wn{AQQNPn#x)*U?QCgy>x8v-QUu-5euCb0 zJsodPC>j|!IFBZ0KMaE8obT(!ipY3x2jDIVUc9xRzi{H+X)AbtMfbe)?98kj4JD%CtUhG1R9A>nLK}ergoxTzd7UqJ^)v*7y;7bdb|Uo{U{i7TWK@f= zniid$sNBrnZHg)C=vNmWT|8+ZZ0}prRvOS+>k(apBxC^G5C#c6>22?lmceS1frr&* z!OTySzOMsWtyN6J_T*xE`=mWmWJ>P&)EZkw6WVck7F9^@{Fh7vFssfZ7m5O8WlH7z-=gV zZ#Y-$8(*GN;b@2=M}Rl+ErWz`Et-9E*c{e{yL_(g z08oGhP75QX#5o{!JZy<=fQN;713*fNeA?MZq}-CD@M&u%OfdO#fnU-a)F>CeVUN69 z`naOM5YK-fnHiK3^On?1YUz)UD>#NUzmtXwMrIT=58gAOvHLx1>rzH0o5_Y$B5QSL zWo~9~v}bm3-fk%ifG4O2T3$M-{-KZc+L|s5A288`E`i>_@eEWIh<^Hd1*q6_IZ2rW z52xSKfsc{4R#}16;>TTn8=V+gbx0JFh}1}bCd}C>wE{b&pMrZG>bi6sB@r94vV)%1 zRFR!7OPa=GA>XN_mUy`;j}D`+i|u+S z0Z)PHwR^F_WJ{d@%D4NwJE1{TX>OV{TGXu&D4-RW=W|j>C|sypiJhDxXNbKT0f#H* zxtFEkxBvhG$pNb-i~s!NRvK&4Heb7UMhoVL0=`_S88iTic5vw4VZ#Z^6v-W=%hl+h zl!T~t-uSoSse*{ZBoX9ni{ITqD`EEnf`D+)GQ{YR>cYZ)fw()njGYnQK2Y%YVsvRZ$qu%5L6%66y)7p#5zRcD#fWvPW8w%1lFji zU=iJD+t&2~M31)EVA$OgsvP^ManYeqgy8{n!wb#N+Yec2qn`)!9f{avrWw z0u};6v_UX)b*j*66Vi1Qo1uhTc1TwC#O)O*DGo3aD_JX(x^)8__1; z=;GBoLVjloHI35L@)PNDv$kLWQ+9wco|dB>YXRVWg&wzyk$$&XT3^yOwxj~-YZ0Fs zjub~%kiLD$#L&$s<6}C55@;uUAc`T_=zX~?fJ@s{i48%Q{NXfi#%OFb$|c>14;n^ z;j1Q#|MmyJ4nKqN5=?wG@1N4Bo+cSjxA+-f#?;9fS>dvYb2fTSq`yDl_j+whxXiyJ zIRp5=f)o+pL+R^5*il_CnQDg1@*uUFhlrDC4A(yf$q#58il!%dZFc_|#3TdWy?d%i zhZd=bO*K|8E|yJuR7a&F&iD6 zGCOad8T-o6PV6=8vk95FLnh=Np8DdUB`eQ&yJO#Km1)sLUxR(rYA}DE6-0fD59OZZ z?ipi6m}^~yK6Z7s?OOFRf4bd{b`*K{D`=!O(UUfO+0+5!?e|&mF6y4mntn}!UnZX_ zU19Gc*U5Gg(bm_XuSRHGu&mI{&zyiJXKgfvuN%aarxOY5=|gd7#{jqnO5)U7nPW{$ z%kYm6m>Md;a9ES!HPI9(VWcQtawLGf5q+pHGB}>{NZL0A2W!))Qrxc9&@`pgKh9(& zGdaEAEkore?L!`9kF|p9zs-Gq;#meNIrz_wLOOVc(kRskWw=}aW3f}U;Fsn;W|xGG zLl%jNe>Tr;__9NsWc9lrVz`vZHqeA7R{<{DQUO5uf#7MwCcuwKc#ZhARz?ee)aQdT= zU{Lmq=0a}UhTX^Ypqykf&It|E9Do;cNkZEX3HQ|I{ zG_%3;hM8ex<>PP=wth6IFJ3g{dF{6k(?m9$*HoZfm4Y;`CVK~#X*dax7WAiqJHQ?+ zl)kM|f1?X`N(zLrDX&l|5V=TK1&(V@V;RhdzhkewYQvwv-o||poP#aChzCv;5ROoW!Jdvs<`~B(s?ums&<7Zp%X%Wg=)qgdv_5+cQEc&c2 zq6V}1IHM!4$+TJ2*@-23S3>ojkSa%mmgRuqBw(tTNxq7R)=KTUA>drulZ^N7OPu#t zQQ$`qD57j5Khycm2J+1+>r%!T5y~2-jh?#le(1%7o$Z!K6JQQrC`@>Bop5#wK(Z6`aTNasu=?RZ%V;ov_Ul z;jDQeSGcvdz~T?qz0uq8GV|7cPjaY;?iRxk>8$2Ja@iwLo|H`YidZ* z$~wd*M^y9%FR7BB1j6Y}<24B=DVP)%j(D;pI1kaQYJXYpHDQ`7d3_{1i->l0uprhOdBp!^MAbp>_Wjoq_r zQgMgaDCe-FiCU__ULY=2TYT({E%5_Qwm4Ae6*2`%LKKcG-on=!i>2vfUAAsdQx5CU z1A*1Io9hSMw?Ye$v5hhNt$k^?r4*3G?@N zRNd7+5!_9V*La@cmudgo?}%<&im0B9B;Tc?{PWbj{cBiM&@}u`h_T*djR`RGGZN*v zfmG&PF9B^5LTk1N_85$`#iUSCM?gC_2qMe>oOJK1Surc!?_oO;mrXmETZE1npti%J z>W2|MjdaVfouy@c3}0P7#M?W^ui5lC{R;6(3hhdAqdQ_1G*tH({*9jAYpE_6b8=G^ z1!zfkUttmZtfD=YC+1;p&=odpIl)cQOs%p^!xkBqKFagi=+g)Cx+KBXGuMNIHcamC z>ct_{ymQSHLZn+jN+!d@tG4ei7n&IcLxsjYivw{R=u~IzuIVRRj*QdmbFJa@i_;&N zf%Cc4tpxIzl=2aN+5Ai{nk+55t4D`oU?8j)kX`1yNByS`S4Jf9yHEDSQn6HfP5Uy) zbdPI!sBLeCKE1?8yoF(qTYCgafp<`aCGs_Y5CrTm@Zlk#Jsg9`(`!Ed*;Uxvl{jW_ zdXnW>wddG@mrh`^^X@d=G`wN)>Zn?Pj9jhrYauSqz(YXQFB~5WyN#-oLJNfURk~#e z%BNPgzqy-N*mg=-S7e9k_ulcs)m*M{Bnps}7jM}<;^XwXUTa5e^MR|qt{=Er?O9s& zm{EwB(vNPQ&!O2tc5q?w!@fI%kqU^Wjei>Q;dIk&-mW1-2`k2Gql_=hxHfw+t0~xj zTP``Lw#o-SuI-k&4S{g{bItC$vjq1x+v($>ulFcjkRI{aB5L@uP1l`>2yJtd2K=b~ zDV!479otV9vJfrx;rJ%T6SZgr&g;u)%GG{FQvQSuYXzi6y54z1Cvc<-b{c1kF3G=0 z=K!C7Bx1Czuls^9y?iqRTSE+qhrFscbx2g>81-pttTL;vc=AT5(`dsGtJd#SncrNX zooShxu;F2qPnfe4h!rlx1kM8ky4(5EhZK&$wYxf2lxoh>t+3g7=Z$fYBIYMHhnL&V z-@rJ(@FI6llDma(fd2SvJYPd(&4yW8Z+kk(R&&t}`5PD(9N{dX+1XI3qdJ@*jD8V& zyq3NL!~gb_u?-9}>xgL7U~H7b+eQAw)F3!{!nkbzVD2y7zNXs3vqu5_{lz3a=%>!a z@nO`~H{m-b^9&u7wwt#~h)pV^poW{dI!XJjULw_HW&`z4Q|7fJPg&j{UEYKR&8qr)=vAKn;zCYv>v<@PntJSZmbGuqMu|tj+ z9@UHNYOdslT}^wIN$w?R@ghnaKEG@v-ybSl2q+n2w9bMa&o%g%OARu9)HKC zi?@#jWG%XUQk%>}Y*Ceb7E%^4NN1$;9D?No-+#uV;6@flIs@%+Bp}l1KYX2GW(`+| z#t}?aPkgr4n`v*qH|!}BwsUdr`8c}&Ss5VcpwRs!-EuPa`K`CzpybTVj@Kq`y z)>|@hNEg5nLBA#nIq4Tca;-*Q0$4VIH`20%Rjtmjer;3T@VVH+NmkWcii26PzM+kO zW_1b1c?=BMM9!mYAIuoR{b%8|YD*=(=MX)kA84yBoW_)=Y^bpo5Mf8{e2 zN5xt8ade&7Mro#FEQ^fZAf5}+6EqXoz*h8&MliPJuhnn`;e%aK&3Ys-l2rb&%a5!* zb*h|dwT=LLiGbw+VgWnUq%X!Vam?zbmHOh;zD6_DJ$J7)R3{xs0_cTBq+ncI{GugD z2@eZ*LJ!cKtaPi|^=&E=7+(3u0M;1X>FcA-?uj*lCEnay{YixWK08HxSeDE^9y?9X z7myL(N@n#H(0>Q+D;x^cgBN$ufyz2?%KQS`ia08ZS3fXG<)#af8j>K>6IrU7dXTvF3Qjjw1hMNF0Rya zL;hv35(H~pz=)ce`PUs)m>n^s{=hD1G~)NXDY0a*zB-AUs~&(sJ4#vdCYDcpH0=%r z>kg!wWBOs~YA*?Cc6io{0}GlE)Kj+~pyS`X)uFxPB>ej%o0ing&UZ1v&jm8D1+9au z359@%r;r9MN&?9Dr-xuUQw|5eY9Fpgy#wHKX1#Z)<%i|uHA?ES$#MbCABo)H0=tT* zYsTmNTS7_(O)29isYis4^~-I9qCj)iaj(0F`YX~AXK7mkJ2{7s+J*Idf9_WF|F82# z%7ksDzca`B9(D2!$HA~RHAh=j6uNY+i`+MK;+sV3086P|3b9WK5B96TW5jm*!JplpB29;Vds4<)mv*3Uz z7OkOfuy~gpZd*%|%$&Rl0A8Wf4!%*YpI5C|TT!Wv<*hsl*@Fbj`l<)3*p1Fqu2RM2 z_Lz=cM})_JpC>|MgaHJiLI%4} zi$zh9000ZMApqg*utfjh#VVoR-C6y}{DB~D^Tv4WtSL;0rDr2k;dsM9`XFWWeDd#u z8}l3J5=|->OInBsAT*n`k3s(BIG87XQx%;Y@M4FJ878jCUFifvFlDG06mB@4@EAu* zjTPOp0y02;w=NR}|FM~KnEfBv9Phk{8t5U)!JWw4cqR% zptD;IZE*QXS}Ir=B*1ckdn?YI=--ga(K+0OjdqwMV@mZv-Os;l8ScHdN#4d*S7)TU|!AAE#6adqc0YD9BRtg-RrF zr?fSW?X*O5Dx@JR!%R~mr_k&S7a4##l*buFy@06V*_vf@$Db7QSGd`zBj$boDu)8e zbxl^qD5;48AJXDCKHSsOJ96(Fq^HiU^wLp4LT9n0Kb~b)pyBZZq%;nO)gi26*Q>)3 z&=PY`b$-a9ZEr&G@vOJ&#so6_#Xe;m+ITvd#>r5Mf?~uk-PbU zga_zY8(X+JKnjO10L2*4@MvHLc)r!J588?*g&L?6P%Hm*6$(NotbhHmsFHz7wDg)X z4VQ&?pkNFP@?U*sZ{YY@w+K}YS61ZY8nciH9%%Pb|DDEfA3(&Ya|@Xx!<%|8DG(Zb%itwYBBFZz zOfI-c4mhMU)P<*DO?5Y(r~#ird=KXko29=|rCZT+`q`@+_uH(f#^1$^ORhOme1*@7 zlKarY>jF@(vd+`B3&(4*QI-y+GF9MqN9<7$iBKuEBsEu>;b+CQR`TkQl+Q-8BEm#> zd~(nzZK(ZARncO&m7$eL`ixvI8H5?}Jihen_`|Vum=?OR8txf`hyS zhg3Tw4bcOh+i5D=72j46nWk_v1ubygZ{&p)k&jpJjx93ev{P16015p=icN|clJ_fF ztaoF+XGw_4WMj1Q4hO;yxNPu(j_>h$6o>|;`XXkR?lbZyFr4@YPmGhmtkrJ3))D_Z zt+W~g;efVIE*3ti3mtWYSrxI0+ z&*v>8BKK{QS^|$3s=@7pj3YTH{7mcq&CGI+}g zR=;Pt3%U=aNZ3UU#iTfDV^iQ|-^0-o$Ju-=C)NB)GR@9p9(=p}$Fm?jUDIzAow5Fa zJEmA{p}Z&v_tNkC~P?#_}<=WJimxxPn6r3?!m1L>d99K+qWqyg&AZF zFiBtryfEghC6CzafkAoJdyFil17t1vcJe&z(0jm!+O#;J&Ydsd5mIY`O zWeFUY!bJWHz+$uH03O8S<3W$)PB2`DnsnFEGw9;ow_&3pMezxPY}W#&!ejh>o@2GC z`6(7GSjK;JmrZvIwsF~wsi6`TFd_bV--PZG+F(Oo)Jm8{qG5m6$eeJ&5M!!PP9*(@ zhtl0hEzY6Re=rS>J8kt>*UE@xO%G{fX*faYgg`bB$~^q^)drCPUtQbDqN0~gAHDMs zxEa=wsFI@#@60H5H-2Fabmu3QJSzL z)H|r)S2WLD8+~ge2Nx68T^HQm`^}wBJ>zUsT*3%CZe=^;OxTmdk7|b?zWJyT$YKom z`qNq!jf}KMx{lcx9ttXEGA@wv=thDXP`x>VwCNSdD>65hH80PYQoXL(Wn2-m=F~Il z-6p2RrR)o@jR}@=F6tW^L(uWjEUN4`2+Ot~W=e7`2&t7{=1FEo6?n zb#uO6KN5sqm`?{K+rQKlS=&K()O~*9|5!rDxJ?&+Q302>ltA#;#LWTHc<0?#g~+f+ zETHozg29N+g;}puot6;$=7T?05e7W`{Sj+Iua4Z}=*`T;lzK;=f<)hD_;{}R=89z` zbdaYj{|K=p08~QOU$L@Dgv;o+G5y4R-7(m|?vmmms91wYKoace%{$Xs?!~XOwL6-B zy(S2p?**m9>mgIxJac)iUN$qRiiYKo*5K;Vokv{M(6~xl@nkvL;mmXUX5wXz0;a1? zpN&dY3Zk5YYUmzzwEAkEu7%Kn7e}J}v^QZVa{)R-zq#h~{-MhJfn*%VB((E$^qT`P z$_!EwlXZNX1bc>5y)quZ@$t3(`aJ_%kM|QdI%gm}OiK53EXS2P zJ*ne!UZzu9JOf}gsCPwrip+uFZ0|8*FAvkh5e9DHSO^7dKZQ7N(#$RE(BK}Rlvt9^ zSg*qC=Z`^kDXW>&3k9D5+|hJzn{H zloHemdbRDGN%G~Y{Ia!RRTI9F$9o-b#~6d_dJ)dD3DQwL_`m=F104aY zYK#B;tL%os1p~ijzQwg(B|QK$^$tStWJCUye1EOhZo^B3f%+=XUNom(;{|kh z;ATKUH!0|;^m%gI8?!iNN_r<;+hs#t>x;Wztb*rq~TbC)!KHBlOieZ~kw z00geqsc`#GA3imgs$uswZI>_mw9?;;P4g zAt)#&kXrOdF_^}v*sHdHHN|(S1!mP13fJ((3Yw(19UnMa)Z98d*7LL>@&$qdrIZGD zOsF8H$9ED2=gxwz{g)0Mk^DhbR|*W(tBzGjN&Pu_C#aNaqdfyrXjS%&aWu zA`DO7oGiKNxzd+IYzz3Rf!AXC{}5(Z2Lfs0x}m1ICB``0U@idf zv<>RlRs*{(P{+2ZZphYodqO;T7XmGy`6rAE3~kN8pDq`wsE@pyS?ig1PJ4jQ!&F(X z$%{PksD$waHYD|nA7FlWkQl|aK(ukXmu|PJ35dF2ZZQ z$MEKU@Kyrn0wR&pxE7!Q00YJW0O6}@i~sD7>^Ynnwk1sMdt2a;sE-^mJGV*f{($c& zgm74B&+@O96TuT+z_mt@sv;IYImq+J3r1S^#xl@1J2!OI zC)b;CoLW#IwdEhcO{u2s8g1PkG`lC!kE|;CXB#_8g8okXQ-4x6D?fDOtvl*y-nq9VFaJ<+9-kjC~2bZ|*h%4Q-v*#(| z=3%*?ea~Q|lHL>bKh#v6yc^JIqGEOzuW7$lI_|{C!|6~EUIi%jX@VgyFfz2?DYiE7 z4HSwDr@x~*4m-5I_-dqq=~iqRQR-51?B@F<+0*K;yo+o8fIJS%s;`&r-@SxP{`Fqb zIf_M{$I_+FQhz1T7~=o~(U7ggQ&Z7gueNz?T;8@^(irTzzy^oO{Q#}%^(UPVW1>d$ zt`at+4S-BNM9BFSB#g3(oAU;loT6X7iAZ&_L>V>ZQklu6NN8dnRSWigzkS+Cls{V1 zH#j0M=eoPI+a68iUm)U@oH(8`@&?YcE>Uy zhEk{>@ghWjN)igLxcKhMR8BE56ssipUXy8sG!>rQ)^BrF>j2ymXOTV6g?6u#81-=J zBV*rn>zlxhKcEh&vcMDp_SY33-4X%(TlQ$3&q3{Xaq5p&8UrNV)mpmwu9Cw)WVG>{6=chg}H~;_$ zNg?gPPyd_z@G&E{!SZLiH9gr~SIbu9rc_V*R2)bTkx6QGv3C@4OTf;FVMw14F30ci zQgCw+XrDLdYZ8sk`$~@3&*`SDxg{nHzrG^(|FfUtt)FkU8Jq2NC<3%|SLU4P6Tj2( zn^u@Q656p|1V=Vu@ ztia#pdV7k)=(f!F>n)$TtNOmjj;;h|ZfC#4wVY2RYx=8fDGOHpg7xG~s_t=fl`-d0 zR!aN^@4#9z(*6r+aH`g8PWwtN-ci@DX%KE0M zM<5VJc}|PsWyq~~h7W6`Jq+SPsnf}7-Zw1JQdpYrnv-7*W}Zq0H6@D5?bz7Gk-t{K z0(PG0lKFQJYkA!Rv}mzvXOu)<<=Ej>2yK)BVw8<2lMl(ACUKl?RFdesYebXq<@RZy zAx(53o^~F)R8N=S`8a&M7TUJwpIY9Yo!j6b4ByM&s@bvW^z+rEUw9r1|H95u&lviH zFAO^DCYaoc{h(IzwAA4dvrLE(DB?H`>6=`pcY0->0HgeL#f}xpA3&qhT z@RKvhjPc@OKz!=09 zS%9}3N?ZX4(mR2-zxht^)4In zP1U0}ck@d%)ie4QgpN+0c6TcDx(!<=@SJ}FX9v?{cJ`bT=-H^|j}1(L#@s``C@80E zTCS*w!UojJrHO%Cm=lLzs!yh&BWbAWW_i#XHkid$17{45BiKLRD2PAvJ5?U?w11d^ zPA+pP1QjxB39`clIlqFViOV&!M=UBgKZ2V$^hB3@-x~0g-`*JhsavdK@I`b7z(&Ob zSZ_?X%IoLgMIL^NDD2|}*hF(kU#bVzM7m*XCL`jQ##13k2pwru@dru92(}E7O@Mhc z*N%Ola4tO!i;!NceoRf!2?09D%n9zdaH`WXT&)P$vf-Q(E1x;a2fxaE zy_>BLzUa%ZN|GKYoKQ3h=@VgWZ zwCBTlItneGQ~*lQArjWSE?E45tYKeXt{ipv%D*!cCw8_6K7`7Od2;H4lg~gJ6H;ug z*)4Cs4Xgfn#PBepe(jTXzlDo6e@C@r`K0tO30_#9D9r}dGpAZYwNAp!-!u;h<$HOX zEChp<&JbKMDn6|;y_-3Q?l7|!eNtfdMcG=P!lv10dho%dod~L{WwhC$k)u_7Qt@W+ zD|@w70RXzVpw)W&zo3vR6Jl%&eiMtyYYSXq%qgKQHIzO=6wkwW`@i2CL@X&g|SeC-K{$@o3h`f;U$e6X7~dTUX<$x@BDhm(BbX*Z%K@|b|k6O*6sBtJE5 zym5{G@)I?X^6c}#Y7)~@3nARF51nVg(EYNbs~0sUcN*S;6MjWVwyR}N5B;Lzq|E-@ z@F>Dd{hAN*a#00zG_vmKWULpj??`PX9prnT#5-{X;2Uu=5)?|Fpbva}*$91XJ0A*Q zZOoXVwD;tWo3BEv2<{X^N04jxo<9Pk@C)nMJGZ8nfpEsn@1Sc^meg%(5Ym3!z{ZZJ zjQ@K9o#tNzAsNrJalR2?radULR)E8%8Fa*K+RCRC^uMpOJ+rsW0j z4fR5ccN%}w)77h@VwVeg!_@k~pmJplRE5Jo6$9>YKW%z>v$aDtfM`2*c=A>^4~{yZ zHd`T4zdG+Z5iIWFL}v(s-#WzEoYc$`JudxZ$PR6~p5@gy%>2>5hAaOGpo_272F5GN z+HHf}JS#~P$a#MEvYNl=NNdf=)SC3hh6j02kI>`ik_H{bvO2rwZ4;qAar z|G)-%=u3Q*G2Ew#IpIQW<}!Vts?9aoKzbI<-VhJLdQJjNVm+U2+gVvzI!!C1`2||L_;ng4MY>7nWBuvNU-G9cwPn&h zNsRMhS`uMoq7N*>AV z&@(`cGwctQa0H3|pZoj;QGAv+eX^P|eZ>-t^G8tGXC4nLPrkWGBA)Wb)JsJ^9)-;M zQvL~1FmnC>6+!Iye;mY2f#43HPdzXxdsjk8$Ch9=hU0pF<49P3tfT86%emu5A!=wH~#_}}Pqb`V%Q2q_wKd&LJ7?30OUdOG;u)wWg*O?CQ zh29L{q=x^oilzqWF9E7K)XnmS`f=V-XSWx&N(V1-sgo%;?=&0=p$UNgJ)$k1Df3@+ zSNsYg{O~JsJN}Q5PjS1BCIyM!UQV0uq9*&R`)@+;-A7LPTy-B`St2zF<*I3Ke>tb8LpB_R{56cJEIAy)ld7H@Fomec3n)!8~FF7vs z97pz!&NW{~3V~;t&r;otAqDjQ}T z9Nt;KPD#Xz0e?m1SE9ETPiSOCb;hm6CQ4DJ3#z|o0Njt}XfrQdmlG$nN3!r=w}@+5W~t|I>1~K?=p&XHt#=5dX#c;LV$v6F*T|IiRIzW&N{>MJJhG(HHp7D%DFrlAShpiSj&>O?MM7 zU?5E!prDlX8!%VRa$5f;A$=8|h&1jUtcB`r2n6JA6GNaJUNp7`lQYokE7MZ%;OF#4 zawt0VIEEHc8|^w{FuMf-X<2)qG>>wz83~}F9|P9KS+i-b*9ZUxYsc5%3?FTHe|qx{8@*e>wyO>Tpa%`LE&G=NTP>I<~* zE7lr!wu+;k-l0{!no~8y%ljOG5(fBEJAW_S0amZLMiPewF_#|yxHmviR%|FBZ1&KwNu@Hq zIin`|L5BhT>h_QG-E4B4&+%Pb4E$*Em=kdp$tgZ(rQ4j0uY5O|$>7o@)(yl^OHcNz zvLMrdfnYXJ?{iO`?dETLM{Fk7k=Yfg-C0Z|-oF1B%j*L6Ss6v@O*R3JTnOCg>y%x7 z#0vH!20UL0y)@O3)3(dn764BOWhSIGMkvB5eoOeIcjsY&jrjKGOpE0k6}RIyFzOT3 z!^9v{x8;Q=V=UqC=*z)&*!0zEL0k-9d~ zuQfGz4wQ>C(%uzEK7fRFq&HdUVx&B_Lmo9bO<~{H*$knr*aYfdp&b4PbI0WEh7Y7l z%pNwE^QnnkZKM{0ZCyAQ7VE!KGC}w&n#ZPj7^$`iW1(AZm8&N?wVLjlY3~fGy9esP zVoFxX&}oDA0aOEsI*rX6#)?&q{^)NQYD^Di_&iE@jDx|-BWJ)J9@=9|?NoDeKKW^p zQT5Gd12z{v#{R0Me2QA;A{Q%C7z^Ql6j|KoE@o?#Ze{JvCb?dCF*0gL%pwH$d643% z$@w8XU8zD}vaOCWPUEX0a|G5g<#3Nrh2LyK@n#OcBk1nUHV}vpz$n)6`TiNL=#PaM z#dWjXGZn8ES>tz;Uz5p8BmH--n zZlQ%ji$TvvgKbSyGDQhQ5@cK17}S~#bp~+9_JKVOiWn6RleBEaZ@to~`{B8)6^Y%V zariSn*kRNdGea8y~*mDVa15|qyM6Oz4W>ZLQS13WALqX zvypMxlS?=tzkAkc`TsWmuo0u_0OEb&T|V5NG_3E#P$TRCmd$myFz#t z%N^vJjF;mQ*{$1Jj+Qmx%H1bGe$`J-cB08wmyV@b6L-??Ni5IZ=6}zNyRYqTlgq^X zn&*RyW!P}%*9du#NGIlQ0f$0<^mW{yX9DMN-B{hEn{d&E^&)e)QJ2qzq>J5sZ9{=J zg{Q%6Mby6ZpA-agA2!mViXG8zKOTe}a*5V#xZ!Xj)OxlQH9f=x)xa(7NZOKIE>z9nMYZ%5RGLw zu=?}%6WsOyl~(q4n&R^@qN;+X;n{~uny-PTC$@(gHg6x`T;fbG_9GQJYBS>lpzMuj zulNXTMl0{Q&Q|K6x>r_?j+|WlaJy%sLZ;c>t8Q_inT#IbCTGW~M%i`W{RPS}k-Z@D zUpRh`D~IFf&PskShJEu&^`44_w;2G|+cX;6@Qv@lG`~%~5r6Fj2YDw@rP@RWeb^rR z@FNB@Qxb#p9$)pm^8qo;83~+7Nd#?KP>7phhE$dhWk2Ku7*2L$Z(D-g2oDH@_}0_X+>}R!J~td)0ye}JK%)PKkU=HqVD+}s+IqX7&wJb;A`%_ zp&^alBu2ZLD910PmW4Lrx1GZ8T}^88Nnrw#+^j~h@X1jfjI=OiKordXEH_~Q6js%H zv-x)Fu;J!P0*&$G@mU>}mu+u*G_vsoTkQWak)>mFUuu7UpQ@SO>hk^ron~ge^7XM? z{X%(k)!V)sx5?3Yt96lP<(CrI&NVr2D@%KGe_OI5Jf65Tl{Edj!PnSgSHv?a!)2TS z000Bm0RZ8vu8aTT#7V;%mB`{8NQwK3jYMv8$iaQ0z5nEvNVx)LaLf{Hr0iU9n@EVr zCQ^DIsyEucB}8GLphNOR-5F);mlCyafybP!) z4;c_{e)HsRP6o_E30oG`zg{GF{!{yWY?zJa#6xtsqT8Q>q~XUn+m$s{m|oD;kKyEyJpS&g(%Zkvk~Nk_|j^ye-(+B-h7zu5l@b z1LGkBy{2XiO|D>CJ~?4a!36mZt^v1jk^6FygPI1{ozZ3?b1M(d4EDZPPxk4-0JpD?oHVCs~8ex)l7_==yTWs7AuBS^Mjas9alJ&qsg41iU2r>RL_H$3D2!y zvVv1s^$4P~TwLfWmfJ`$5ux;Sg;=wG(hZsK60Je^lQ_TT z%Frpv4oKQEt+VAQXo`p=Lp8yyY#dw@nc#%yI;1~jEu69aByR(u}^-cihXxSsFX!qC{FHR;i}0f zCC2JZxJreP87FGC$x(9Qj>m;hDGRQRv$k?}?m5waIuVu8ohelWhMhm@?6!A=DiM^x zf{@EYcS`NeW-M$mP1UmR1{RR92(6gNsJv*{Wba@yS68*ZE~)TW685q=yw970+trhr z+v&%#o>YVS!Z%!X58QC>AcLMqPM~Ix&7Z+Ucf_$fHlZ%{6RKm*?59eGC=+3cp8F6V zmK_1z{dJ$f6LpJYATi4y0ED26g#fq%ZcX5yg{iz@Yfu3vNQ@M=A6o9<|Ubs7;Ym3r>(ma<{5LFpgK+rr>?VK! z01Koc?$A&F!xe&r>tN_nbj457@U9@XCU*$U=lWdo%i1wR*3HM91PU%S3Y^C-2ZJx7U~Tte1e z#|?b6TAxa1p=QNEP}^&7dxPvuyRn>^lAsor|7M0~yN@0i=}4mt=1 z+xUAh1y0PJ4P|xC+WSBpQ*J8-*-4CJwK~>WikTZ$+A!^WRU@?+k;->iO$bgfsc{_e z3^&9NGpoa0Wjb%~;B;`4AY&&Bb6t(Y4GUdVX>#ZW%W(`Te=2PT(~5ywbE*D6zd>~t z%S6`JQDd3)g~&(o(masvE8;_lj+u5R@8JDevV6LrX1NzBigjeGZP%geUiwgYI#G->AhP465yj$u-zo%H$FcVLkS zza%_ucZGPAZ|YoF{y{+E@@X{m&(-Gb+BwBmO3`|=`h zl&q*?{}zkIuC$>z;5kmTvh;Um(?vW$Lc`hp7q9;c~2c9&3-$on>q z5^^BPd*$1|zR$amFH1>DU5D?tT5oPH!QoDXf4Td(CP(?2F@7lU0)E2#-7$ldkX5B= zbd-CW{1}lenCduKGXQZ$8c!qO9$y|*XX*hh(GErCfq#DSY*ZWCUzz$iBup^A#ys?5 zZSZ`{%bLSx+0htt{!TCW4W2E#H_#LOkt@%9fj7&(u3Zl{miH!HEu2La?m44noA`M#5(dlj7^9$|g-UK^a zP=`&*YdLB$=R=5-&5zeG;Ni1*De?yS_7c6SHg;m0FbeMiOx9IEDt!%=OT40X(we@y zID32>{TRI--C%9{((V0uYDS-#tg>8kaP1`wfaDrD(O-BlfCVTJzjB9Szrx-%6_+$? zHS_BmUG*Xj8E`VHxE_<$qst>gPcI|c(-sT>eQpejy;seB*3;A&)q|xY=u#<>b?NMh z7l{ICmCXzv6Z+yDCJ)VVgzdR z;1v1&^(>Tf(T1A7;c2m~=Gq?)kWpVP5r6s^=&J_L*^NvCy;E}a05oTRS9nBgF|yak|LM0>7m~j}s77Jv zlm=8X25uSXmvnp~FTSJGNDKDE_tR;?=5KQhL`skWvs2yKgFb4^q9Ol7y0yc(_!py9 zi3jP`NO|N=7RTGNRdBbfw&$}+fmg{vj!5p2CB7<_CHR3%_L0cneO)381xM$c7ZPS( z3rHnn@j%y#-La>t=w=a@Z0*GNuY2$}dvBG#YKQBS&}m4RC+fvULF2Q1zL zho`8I3!NOWmxTN=CKhpMrV{$$y}TvxF9eu3t?Eb=tBK<{s;mAm@+MoQUx9?G|MibE z2}vO$YlE~<*9iq&#i>V%&^zW^D^0!C;S~Vk1uLwr&LZ_T$geGd>4u~|*G+FWKt=}p zwvTG%myneGg9G7pFl}~dk`*mZNc#5;53Nxjx1J^K;bJvh*T2)#q}D_O-zftQ|B%W? z*Y#nnD%&4Felyab!RT6YH>dUoR;FoQ`Rz^#qn=h}D)i(O= zkYw_U^jCtUKdTkDZP0|5Ec#h({uy`ddB!)RqZMy*2(o_>zi31#@V3vNil(7SP{<;9 z0^OexLK@*S)U&6K_x*ImQTH>DFjp&Q8BMR|SxFmKh5nfkCQ-4=%uy6PgHwaqzy{3* zyH5ZpqH(v)St&DnrQ8p52K7Dub7g3hyu^n;65MvGy=hI{JKE^RBX34aZIPpupRzbN zfP6LuT01v5aGZM=)Di&oj-i}`ccK$`=ha#BC#NeWDl98kt#eQ#uPLsr-WS+_iJM!` zNr;TjgKbf;lh-2p)3sni@OB90pMou4r=3g_5%*vkp6|@U|luKes z`$&@x8Sr(SAKDp{;$`fA_0T;*y%_$Fe=b+A8v`3Q&$4iV&4VDk7Zm=p^ z8tOrgbwuDB%z)7zf`IqU8^X%$dc@EOYFNd<2<2Xt)ewj?m=IMFBHgoVH;c$rkK<0SARQfi>+3qrkGp)C_3_vX^r}|Clj^>I*=u3 zuf7-lH~15-f-kVzSU*z?Ybt`ZokduhUCbR}6%*IG^S`U)(1>`f>LDm!O|6K=-6taJ z2ePExHI^_JfTi5XWjhvcB7F>CFPUX;NRZp^$fOA8=nyyYkpZe9-6c9nNa56kSdC{d znF>~_hX>54rM26$Xf+& z@;Qrjc9V2}XzKpb@vVy>sy?U+)OB7f)5Pmcuu-hd2Qv>KR)l zLYHUDoR!d0_Y#b8;34-&ox0)$Q;TgEd)(OA4mJ`eHMxr8B(pjJ*qJ{S&kPi2Y$X~U z&c$!SO0p%SG-7-$(3~ zX64FYR16ePez0ep3!nYzK^Gzu%=wjf0cV-26I}=Z;YG5~?t)wwrAjSu3Y2#!@ZNl( zrUhGhB$WisB^4aSBq9_fpQIfqUG>;z9V8u`+p`IfNe*>GLOmIwk?0B*u!tWKXnI~q zv!?Ge86i}Ma}Db?*IIGjKSu}v019j&0O9V?PyfQlLLgo2eW>-ub_Q@WL?j#!2G8vE^Dv&6Gyk2%wqa6EZ{d z0h$JbT1Ea?88bQS(G`v1vyQ58W*%-XQtHxHbcw|@Q-$YSKB;?+&4 zCy-qble?{chK?Te^nm;Bb4DC73C8AUkZN?dbjyzz9~~A%{*6tsZb~og-~yR@7Hxv< zr*1=fm>TK(8W&^Yx}pW20l}LB!Bgf#g{A(#L!Ljd@lwwoCq_AM-LtjMm8PqabcF?#}puCQ-s}2 zjUut5v%U^wtifiYigo&X`H|(sF=-{O-zagtIbCumcBn7%i*;x0IW1nTEnUb(?}$w| z5Ieq{v8UHPkX#foQ-gG<2FzRdVQtwYwfHpz}9&w^m#@(EJh-Uz)`+dOJz=VsAk%sF` z-*ZnZ4t3XVIP!1#(yIW}9ynh>jfXGcnXNKk=@XTl?*QWUhevP}H}tamrN;5V*LgR7 zGoeax-oN8Ge-rt5S2$OU4ZMIpPmBO3T*?1IsXG!EW`Ke72;3W0D)1`|z-|Q`n?l)$ zxyklBeH`b$0iKixiIt6lf!cwIp3R~PyyoC$_WBcoMo^X9{YjJvFF)4w}bsC4t}Rm znc7T?lth_?f570fFg6W&v*a_dGi)cTJF43Qy~^CaQRdU>$zu0xQKHt4e=d1a-Hh=r}rN9&xPfd)Jub@i8Vl+{J z>V);n_x%v$l0Djy9@U> z)prG0g`1;g9`Y6Xtx`+9O_Iu}4XpGqgW*EGy5JRi=E(lucvq)VJX;+@RU&?YAP(`- z7q9AaKn6C_^Tc5(=5%>Q8tk|aQin6`d-4ergN2_bw+kBb0dTAoH6H`GSn-*5=`;z_ zRDp$D@QaV9c7qH*nA5fT$(D4HTx`f;WYAEJW3&1R1NCKwYs^U;6pf;}Zw`Ygo>&vhG;2(7uw{!m4Z@KRv zF3gG9{E9yB{UIk*Vg9AAsIM4ctaRi&x$8`4Hl=z!0B9nMb*@Nkdr@3XZFwsmCriY8 zOva8(*|@u~T@%Jgt^anz)5o18-o$e~ZPeGD%+Za9M?)SdcO_lG@G1Ypl4(W-1w1Vo z5W1&8jGZM$%wd^Z)T}uua(|Xq42w_#7@%>j6V@@I#7@6&rm-8)*YqLz z>o=DT$%(JvG;kPzV` z=#1{!oqRi*^?aR*1&+aHnL6gYRzSihjDr{Yw$JAP$c+F~U;d9*)a6l?LIQCPGe0?| zeZFx3e-0nRV9w%6ph6EAPo6n@7z;nA?q{NA#m8o&D-ZfxA%=k^hN49JB8@nC{_d61 z??Rn?vP&$~qcV|x4ldovxFX33ffi#1Z~CQkq!7Mn^V{2uVr{ z%#*-2MhyCCp(WJ@98rr<>;5XvCU=G=`?epm$f^u^d%Z!HR7|{Cj9Q=*N@Hrc!deZJ z*Eoflm-uIOg@-`}_bth3b&&*R0SIpG`Xh?dsu>-U>#6`kR!bYo$oh)RU^5~X@k7wg z%YSz)-C<~o-{j5m0$b-gPh4iN!JF=!Zh{Umqh|O|FepnDjqyaww+_4!1Ev10$`eV3 zN2I&EAb(>$vtvn!vM@1A0EwKQDw+BQXsm@s4Z<-LpHjJNF0G=pCl6Y;HYb`4(+~fl z&Rr7ooxtXJh^?*zTJ5F&sMpX1OyzL0qXd%S(10Zh`YUEXhADz4zt>mJ-ni;@ognm91bZ?TS%{PmdUb3#Wl)20cI@b0%ElX_t0sD&b1deNkDx$0qc6MFJq zmVKw!`8gyND%K60xd3kSun@TXhKlm5K2@E#gRX)TxC&+oXM>g^+oqL<}*DDZL(uqN(p`D*+TuO$ct@< zhk)6%F8>bK;=*XOp)%kD%)wkn!`z~$t)KaU`a#|#r7l#na?E9E=SAoSPKvM1f9xJa zz6@AbA<}eHA2{lkg{m~fQ%@4Z_@|>a8*0uG3qsa(#wds+-1?3*vpulkO1tz>pKR~P zE@#h5H6A3?sO8ig4f(n$#kWJ!?l8^MO0;+O0hMh{be&mKk?F57g^IZIx}#k7uoQp? zk-=X3j29YTuBKRaPXU}X208RL2evUqvAdppjjKX~7kObzuZqSik+7y6O}V0~T=6P& z^c2=2DanEWW89e@W#9|VL5alZc{`ds0msDU6@Y4k_7WY{t<2+bD3z~9w8xuU5WMZ8 zS^W5ga{_YimC^jOWVh4Co#)06(i?Ex3P_rq`P`JPcKCY|4FOO6(TZV8rj^qv`HdE0 z+w{Kr$D(R;W365fl78)Clnyu8&!$@vmlX^Wp4$%j{=ms`CGW*%qJ9?vMza>~+V}s2 z1uAZQo$TP>XI>>fqGz_siUdt4!J1-zYVZ4S+M%CKl_?9tMZHg@MYo; zx4Q{VSi?{!L2ow$h00v{CHpq^%0|&vbyiAG>IJ}h%m*K8-u*XtRsf=SaZMfFKrZZc z-MMS7dK&-#F*g*0WtKC^$_}6IgKftm{POi1g2EO zP;YR#uL+%PUGS%p%@4lJh}2+0TBwxZ|7ay0xCk5I#dt4n&1y}Uj|y#VNdexdF9-xJtc zO{gCCr}u!?LAIvWEZJVE1F00KiP}q|iP4v14usPdHmmVVxPAX-_5U!GGCY-D{8!!D zh=L>q0nfs0h_kmqWviKY0AJLE5DZz9MKa+S^uQcp15fs~$D~ogYW7fjN)&luWsh_Ldeu8F~$6Yf7lfgTHrb)YAo}j&>sE!G~Bfrj2r0Mi|FKm%&-yp^q_ZLzqvECQ%d) zi_XuD)(49=Uk0vW1_=zdZy2${S2k72^j1gSq+0JJ>c;7!Qip<;I%7T3A7SlInfgzU zUVa{2_)78Vw=zUNB)Vg*UM?`-za*55t~*QZ*JrNY&ahSv^E z3o-i0BL%#Mh-W8okkyRt$n7IanX3LXN2GFVoF|Wpy|ZS#;#mE9awc5m#67)@C-k zEB( zNdHiJm-ucPs=iC`(?Su!#g6FszMC=F5u`^;QuNn-(T| zSUhvw4dEI9!cHlcSQ2zv7;^tEyX zEdMJ5#U5ssswe$V(W3e%GekI9Rs_Mx9-b88v5S7%0HA-}LgftYOX&G|D;SV&Ko7VwwX2)r@#2rSlV+Y;n(rvb(xXtK& z;Qnv^`C|)Cn=LmN-IL!p6k-)!!Z45CWDqH z0%mml4#4`oe}>k6;}LxNgj=a? zTq92vM5l0iVOg%An79uE+DV&hzR_6G4d?PWF?y|?M`Pvh>ps@ww9R%`lmmw_5pK0l zbP+mN<#q1zb}8YLgzngeDPt>$N@;?GIFVf$lFT? z+0f}l0iV@X14sJqhSK?_;OICWD#0ncR}IKM5XuAydcRV7w9kvsiF1iByI*C9_%@ks z>brINGp2$|1`^F#i<^ED>8X?i*41K3w{hWX8)xci5x9a><_Bm`R)Wd66)Js%#g zb)^GV_z1fF$fz1^iP-d$_~Ow3FQYnU{;XIwz(WCjNZa=Lo!mqiUvtCKExTjDHwV65 z+Eu%v@Rx7w2o~aSL(X-GJ{X5TTK;F2fTBxj6{u;kU;qFPdm-=OPyfbhM^2YNaevze z70ZBk-$td|Xc4n5mwx!XKApOt#pjNK>d$?rQtpTLqYjJH6jFV?^%@E#CDHY(5EE_! zG_ShtYBquTHXZF)H}%`W%ixAY-4A;~g^cy1+xGoajE7T=;Y$i0vxV(+I>0LT-8 zrUhhjrn)UAAUwiEBbDNo-lNaYZ_C3$%eY_SSf&4GRMfoOVv>K)8qIm0Qn(}^Yfj?R z=%341shjUhlxq2(p<|oH%2z&`N17PFJAZZHJLsx?qfH zsocoh5G89){jfh0A#sCC-2zjn*4#1XfQ{GrxwaHf>gX!5z?LgfT6;MBqC~KD=WK}h`k{{n`Rv& z6)gWJcK}uaSw|T$;ND;JV3+S<;&s!-MKpxCA`o6MiOxd4`}8p)U9D@8TZtNebk4T^ zRegjwb0Z(;0QLSQ77Exz2z>P5Flf)bOD+0HiR&TDSWQa?;Ok0SRi#l*Urq&xMLs8F z`FFmSqfc*{<@(hrxI1xA#VYX;Bp*|u7?BhJ;+KhX=3~W@*Kn*y zuL{E9@hh_XfI^IXm*G(Iv;o$mH^-wbz^|k3L(Sk|$6?r}#2IdP$_&`&l)p)ED2}(> z+A3>jM1B3b8&G*jUDQaudEUPEb?ZR_7j*XM7<$VybY8JJC*c)y0Hw`@Z&IQuc2I`j zY7jx3q$OqbH0+C~j;h1XogPe|25=%hffP6GeWW{6S@4CDX68N*nq02mjIowSsby@% zA^8-S94Kl8y2nIVLz)4Ms52Q^c~kWbLUc9)N9(Dcf0G|(()i|pyc;Y4v-+kB_W(Gz zc%?F6Iv0mG=((4-r3ckivFYw{kP4eifV9e+x7mjqct>VY2r;vFvzzD;{~Jv1iSI1W z8dOrv0U-Zo?|0q~FKI1@q*}d(55E43^8X^1M>ip&F?9_Wu5I92PM_E%hXa)vh@@iV%rRXk*voc%pjIP zI{1GJ9rj`w@Y0_P;>Ib*cve1Pfv!<)Tu5I}+iO&fyhv-Bqs(wn+o4%UsZG3qU{^ZX zd+Qy&QJ9+yQbDQAyB;{7QPTgDb{?|@Gj~3b>23vQsR6r-$V%t=Ex5k1aumko!`i_8 zERk+PV#tFm6a=v}=Ab<$e9g`-P%1;~g(uWTF$gtT6m;n0eJ7HPd1vtSFz;xG>~|UB zuDsHMop?N@sw&KWew2ccE<6VaSpC!N)_r_GxqC@`oK7!bjUw9&V&M=w7Zry8pCXQzU2DCep0O>~B^bWB}S! z(B>{ms=0Nae=V@T1tzQQUJh5xaa41-?T`>cTI&EdijZFG3FQ@Bgd}8QCI$0BIK#9w zvdyHI(Id6N!SSKYS9^HHm^f!4q)C;$Kc3nNv08@FK8r7>{Qij(NrS)g@+g>&u&#IT z8vrle`_@s7IQTT~I0}o4I{{9CHJoY|1xbf8Kk+gGf-%%YCc zzu1@a$Bsa|&Dj8K8u(x2eueNNmVM#HAqQgRNFp#Ye9H{9HPI5J2L(&SRv*GQau&~ab z?v*7wq#E9lX4e*Mn19kd@V{cccqdEgO+L))?=C$5>Z^RZ(Fgj?(knjI6>|_VsJ}?f|U+mt61_PtHH9n%r)jBi)-vfO!eWAYLDZRkE63NJhTgUpfjPuG8lm)Kcqu? zIqQ`zOWPbTDMbz2JEp7C;hm`uzjl5{?ZK^n1VA(q>cklKY?R<1G=_ZTxhAB?``*A( zob}G?G->L%kleE)LXB78u6n8c#}8!VKeYHAYRC77f7|j0>Fa>|CM55+LqqV}b9c+U zt82HK?RMyXQT?7%xH6@W5~LRTHs**qG;QnU?{TxV=&4VzV^g9uo32APk4xhz*&tfo z&ee0i`)vPYf<8<}wvXT9VQ~tf+dm>83)jj%(xpj;RAwBSN~%=hSNlu0#r4J#u5~*6 zAfeiy(j)};Gd+VbBaaFemsBxCx9eJb)3d9n&;Uvh|LA00S_PY%`GyBjCpqVCf-{y2 zn!Z3zO4Yy$Kp2wpK)hz8r}AE7AUNxPi8u)XhkX35ig!`jgq5OXE1(3#z%#33sD+GPgXi^%jmOX(m0{ESNlREl&S&Y5HH$EDOWT zM^hAqL(0iUT4PB!g)IA~*DUnl!?3c#P8)};MdpeF`P^GOtyYj+?sKFW+_luz&f zWzktufLj<4Cf9g(zE-MKM$p9wZmZ&athJ`jxZZ_lsx+%SHty;_E6w^@X2g4XiQ5x`@d&c-c&fi3U?47qwRm?QhV3v33T@yyFZFuDTY1`O_gOu6mB64gYu|K zYF^H}BGztrSq=k6m;Te?vYRXA*$Ps$wYGmmtYkB-Kp5MvHcK*SW!y`acO>^!TooAD zFJlOXlxz}Wr84Nrk@o9;{bWl&qjtuvxtWp(7Uwqa{`$T=;4l11m1`nOugM4K;{QmP z@WMPlKU)SEkPFrGT_UJbmcCjy&qiak)7UyNyg&%>vZcm*@n?)^iu37vZq7oy;th%z z1?u9?FF>*yD$yke^z&Z8i9Hik)op8*zl5)^_>TuC6jM{QyK(1Er;3G$EsL({_QM1| z0Dqc8=cw5h0-L2DcOy?{OalDT5wE#CJue7<3Ja6~aYN{J4mVkKF?1t_jII!VOt88vlzN#T18>Z6ack^uP8TK>eyq(_JUvsg*US3O3~4&f9V-Ms8>g67aTL}8WBeG_2R!Jly&OB3xu%#pvo<#{z%OJ9Q(or{t%tRK0TIE*MZ4g3}jV1WBTGrR1?2xeY_ zp}R84AghY?f9qgRFwtGr-ZZQ>2ZMatv?X8J?Z&vHEWafW462 z-_LyheL+FOshg*j5&Wl&t4WYNSB7%kX5i&DP$H_|oCh%Ph@M*de<{#y&DI~ z1L9JRr;`tVq{|fGmcCH-q<32wjvivqeu}b}Et^%)K>)<7{vkv`9Wa_cW&U}ke$r~2 zjFR%&AD*NDJ`77=XSTI;f_c&Vd6NG}COf2w*JE1@MS#3#Ma_Y*G8H1}%A`KJ!c8RX z%MG@IA^=WeuZ;PZX8}Ir(%i>J4;GgD(7HPan4pO3vWNWHUrq5tphH|*(| zOvrs@BCp?;TbE35skrvc&m_?w?g}mihTO@^2iuuF009k$p$pd+Gd}5NI^a7^Rf=vjP9v|AlPW-He1f zhDyDmF$fX2jd_{!f}@;*JD~GyQOdhpFNOxbJ`g8@>tLii1`ZOp<*Pj?^gBQA(sk7v zWiYq{MSpr{m|=%Vs>>#_XJ)S?0CYz-s7Bn~`W-ZXx3n)ukbz87U+D~)e0HpeN_IlH-uRWyf_Mp}J~OKU#8#;TzoJ%8LC zqJ*ZGhX15U(7wC7ULgr7h6Q6VFQzFCk%6M{Af#H3*b$8nW#XEyhG)DKecFn z97OTqqnc&8LaSCc#(_zS5|^Y#m++^vm@d2j-PwqAgq$&!)RSg0FR=fBIF8(VVwcOP zk!OPKXT*Y1wVxZUuFR?_!RJvtlL5+WfFng$4lSI@D5p(x_VlxT%Y|1V!8bZ2r#wt< z)!_Q$8)}PU?gmciqiqt}N8up_EXGpABtpo?s?!nPbDo}Lq&Q4SQo`h^rNQ&xcd2nB zVRw2nev5*DNBG%QIkEj%{mtEH4w^BC9#@%Q`NnR&Ug`mC@HxHzH_hrt8Ir+^QokaQ z{u*ZJS@tpinzsTlujd>ehWfYRYC)!~-Lw2C^xoqp4GH$$$&|Q?@F6pyT`Vnn%lG62 z)bZ4|Uw-`8o$fxrQd<)G-CjSBiXpQ1F4`~hYMf@`M;lOp9oX>#a-o?F}1?{R!A*#Zt5X`QiRx=>42witPC0-5(;qkM?EBt+Lg z+qF6Lj#oJQBYpu=Ud9T6ZSmw@h;}`vXxztO@&U7TDZbf*DCd`;{_j%DI^%|&>M|Ma zGOqAXc$0}DiC$(%Bmd?Wwktn@xfdCR@Qq*)g*1P>fDdOA!bPxlbTe-PDoKFhbEF=q5d?(JS zivMFiE#ws8pgRKJO}@QHaV(pHyLQf8I)~3SHg&;;;{JBedI84DXDn2{ykM-27Z#%v);Xbdwy6~q3;ymF93`pP7;iU3Z-ya&=K7$ zjOa%1Z|)T^Ub2;gnHSm5#p_7en~4vl2>d{i=zPMX%cudHlTqRcIDL(1NfZb9?wf8AbbZ?b`f-J~|L_5w|dY*Mht!Njus=vMv zK|l!k$$7AyzRJlMRepu#lWAM1I@49;oNp&PaRb6v`Ruk$*hda*V<2N2%jX&rIY*Sb)YSuAhzl@;#My5Eq zEE{Yx3_HYc5<#tW5D*hKd&=IiTI|Mk4wmW<9hOic-8~Our9pEK$K*}$9T8NB$0DPz z`E$)x5kFWJ{(^RkPD6`xj+#S{eM51|v_jgfjD2T{NRTT||AYxlX)v7^TY_YfXAAeh z13`QR)Q!Iq?%=6Um;%3HdhYRz<;#bSnty!2?dPPx2e@99%-d6j*P08#GLG|U3uRj; z!Lt+4K2`;~IDYV8b}(LFh;lKVT?0{^=QiQd zJlDDdN-;1bow0Jcj5d3g_q8@5FCSS&GJR^#c``FtZiQ*bPb5|$kxdQhe7mLM8KwR= z&~+(w5#D~3kQuiKTO{F7-(BcjcdaGLfR#cIOElu+n5WCExwrxc)ITxXZqN{j=((2k z|L2iokWIBD$;Ti-ce(l1ih>2nyI&I zSQqI6J{sIeGRFz_Zp1MJ;Pdft2DDGQ_$>w5FNF4d8ML8_sqLMfNADr^JW4Jo7$VCw ztKf5#_RTE4-HY1`-9RuU zKy97-L-oAuA?~Ii+fk_bP3OB}->_Gi`_7Li{OHE$XRSr#7fc+46fOHO0sr;n_?T&$Ej+>=cM-@yA<~l zo`ZV}V{Y0>;P(@jP5v-5xvoN>4wy7vWlGLOgKK&h!ze6}1~2ZrP8uZ$Tk_C9GMAh? z+*vF1<%F%_Gxsh0-C3ZPj7!@26RLiXr>-)eFKLSfnp;N#*m%AZ^Ii=^VXHrr#Dq=R zAntBR&#~s0ekWc;oOGu#^4>6H?sl$lz>djqw|#2|Jn&2`xwpsxETR{V3b}F}=*WS{ zMBlN~Lo4b*K!3vn&``w_R*kE4`7w)a_~!5>J1`b~x{GpMBmK>ejpx*{5VR~) z!LBi#gVcZUWfjt7~Q*O%(62`;1pU@vrxt3CCWfkC!ito3=XOs_)I6k zxVB%W-5?7dDo@&{HQd%&e6O)8I6M2@nh6eB)*BPhX!pWpxh1T6uqHjDrD;^oIOY<5TY9iA@99fk2!Y{IGdroPv z`d$R{&9C`LGlFrX!;bRhg)G|%jcGHd`x}3~Z1NI)Yw2VRZJg4L_^0yalH4tm83ZiS z+0qnJNW^2EMhrf&0k4$?KiG1*#jq^ZO!)}id>1`FRxh4?VHNnvK{TEYG+yHWIMmZD z;*8lApNo5YL8BwUv=z^m=7auWP{~8}J#tq~KaJO7TTkd+HE&0_&kSr;N|k`!8@qSP56ge(*$t@YrxB&F|{eFC$Gcca^e zWj^{=60MtDYB-l1BjUP+oa^>KfdNG|r*&@POjc-q0Y8j>O#-EnUN;gtck~|r(Rp_x zdK8oRL?$fj;}{M1IZgiW0hAE!fy34MR-4qbLAOaPP88^ycO0Q@-oJt9XypPZ zuZZEJe}CaZD{!=wt};Z2_FjDxwFTp-?z;=mEl)%>%__6(Q*zWJ>9IIm?jZls(O6&E zutPgVr+rUB?F`Et#mU@Z91ri=sYCG56GHj5MQ9V-hC-{-Qp~C3M?MathxA38UAMe) zUW!fI;lCv*VlRdqVT25_S}h7q+&i*utDg59L!<^HhOPh)Lx)v$S<71#ir8xSyRo$b z=s?%Zt(eCEp9dDw`-%Kpr@jdK(l9>L#v!56BLzvoU3)Cz84}N-K5GDeM=Ld6TVo%e zywsLsOIgh^?{7lXp3$vVvvm=ov_{yu@!*4J`CY}W6l2B9?vkk8p=-xA>{WU)b*AgU zQ0WkLufRSpe)`zhnSiL*&|dIp@(qNpo5+&uxVx=y9tDL=Kq`R5G~uMOY{j!`Vc4B| za=7-JED!?ox&yIJIhF|J!IV3>{fz6Me1WBl)DX?6d#`85`V{UWAFF^my(=N%I_Ohws3Lt||phNl8^5 z3}B^K0KN?u`Ki8#AsA;j#zZtt2Kx?EwC|r!%k^NR;s4GGKuuF{!r~bjjLlJKW2XuE zUCn&Co5^(iO7%gbiOlZd0%lfF!@ae;u!RplfeCKxkH!1ILA;9h>dFECim=H1z!;@i ze0E)b0SR0u_`@qi_(G8&1OZfYz)iHf7DHpa=juB3p=Q&A_}2h8yg5&Pe~7ix6C`l3 z793rdk(Xa(9V{{R@<-`lncX{ZTlPK4pZHueN@QhX{r~*W$kwmB*JRf;qn%%We5r5% z00WKz0O71Qi~r>Tc2ti=&f>9v${F5EDb=uBXNJPaXmtW^j?8xWPZnzEOV}RPy(O*Y z7p(YkKYR|WJe1@VpnZt93s&j5L96Y%4(jqbP zeqk&#`rYSN=I_JQ!?-czYNSBm1O!bdT3H589WdiO)4{P$|K*mg5qB+@cJL6WcljN~ z?V5FRtH#TG7KbV$d~!+%8;9Donrf-CC~?TEP>=~&jY%FUSgF35PkF#xTnl65Z!}-| z7ZWag$(jAJukqu+0x)%#mI zk-G1#zGL5EljP+K0%a@+XQnZzL8~0ho6t|p)6R`*B6{?c;rNsW<^fX+_nh;sFM~tl zb>%O8AqeJYD3hHy;{uawjh1bX{P)g$TF3z??6}8eKieKr2M*yD9gZYto&Uu4z6@#a z+34bK@!B%+#fq#LYN#$isEhJ|E8uMW^5&_Cpo5}vOjBq_mjcoIV>r1&o6Dw?dHa*zqTi5Ib1Fnn&2|1o&)&^iFjFF>4Ylxp6f}i+Jwedw{7V0l zRv2uFu-KKvWU+SV@H7#aJ>-WxrKd}3ds#{}Q7-t(@N&-EbE~NAk(&XveZJxk z99+qniTK)u^M8_7Rv8zz6X4!n6BUI(f8)!)djJ3rj3MywPyeg)e&>@Z;l4yjBjt*Z zT|qCe8QkIm!~=JkU7+@OBQ_NwLk)GEwR41A54=3_p@Z)5L|!oI73T4cmK>%JQd;>u zBZ@kEs;i$Qb4K@3;EGkaxZ<^on7)|a!Iw{%vbw)R7$h2Ii^rG8HeP5;+-gWsT0TB@e?n)b z%pz%DR5!b@0RwI>ZFm^{fNvB*DwkU+=m{hZZikYz8EGUI;mjeCQ);)!L3#YGn0&Xt zX}^u>mmSPmE(+0mDUa!e%zG2;Rrvit(-GIC*oKNa;VnRQZi8{_tr zyjeS?bh}=5aEwR$sOKz+(OH>j*PkO>x@jzh<|)=`3Dv%ZBR)W-plG&|c{w@{BR=#0 z?Z@3SMvPz&_xQ(Fl{mS>q4Pd>g1*x@Bv_J+hwGQD)I3oY!eakySEFz0!|2LIC}7|xp#jh=ON4PhmDx(%#?Y=nQQtDdWYEPHD&BQp0# zv^Tp1mm-~@-b!1W1}G<5Bhge?WAkCN4@DpKzlHW-LnuImKS~#VS`2VA(+|;m3K5TR zltk(q?Bd4CiBQI2@jGhdjPd(kDCvKB~W)l#<`vTe2O7FF%}ReA9NDOneZt3RPyH1m;c9(gHh zTC1WK2Bwm>i!88LI6ot26c5DY59^D=oq`6AO&?5ZEIk`7Y-fc!GIe;#72r$=AOLfz zQ)XmPE;pR_lM4SZBAo$rtR5eQi5dNvtlR}96~%cSN=$(LGx}}IGu@8)=mb|Tnk3=SubxQqvqd` zP+4mdyGm^D#&vyP-Z0FN)W1%5a!Me5j~m0#FUhcu{4w%VzPYKTf#b{L=042!MGSC| z3q=^`vUFkRG`M_(y;-yqx=aK^A{LMC>WXgx$RHfC;G7)N6mJgLu16cT{$3=Nr)=FV zu20WXoG|sSqxx`XjM9@@8JAaenW*tW%K zesyf0CdYa3Zp|)gr3@&;_)Q^i1mt@Cp%%6;fcvdhFM3S2iid?s+f%02+=z)FjW{3% zfiYrzbWiupX{FQ{5oo zpewA>ycULRpRi57tg7|o`aKGTnl~^1{kH^%Q~KAzM*zra0~y+>dF|~%UTqb9VXgd; z5##-ifN6DpRTprx`rT&=!XZ^gmw-2+R60sad_M?`5>-e7pG8+S8MTSO;&`WlXLa$e z7_7n7Rm`5D6I(5%eVfAO5%V%+d($q_<)smn-F_*{Ga9iz)7c$bwvsQ2EkDGqH?JranroLGL?O6~Cu&Cy1ker*QqhS0APR_2ky1Rox`BdxeJAJeA4+JRYIzwUVKwy` zg%Pgt=&Mma2x>rqoZ+hz$B7wBw5EYzf+#^30UN(ue!a*FKdbO4C?XrkD)Yo}CNBRR z#JL?MkhyB<{^QWSGh7tOFOdU*r0bL4fQs@$8Uq6^9ay||-R?BM9b4}6e0K~H2G#uQ z>7p1+j2GWAURy^6?IwL!w`OO{XE#^fe1e7H-TMKux7zCi+l4|KL5&bOxqhP$RFO&U z*8QtgPs19dfXy~yqaQY_RGP=t#SuTbgu&`pE2K1edVS9%t19IUDzvBL+!$t@V2?lc z&e)vBp1|MEh*fny)~kP23I5PqVn46LwCBDWq&dK0-o!=S!xe^aoxn(@m#S@v$vDHx z$%@oyfty|3+KR9@cYgUG(>sWZBx<1D7UG?fi4|L@hPLThGo&Lq^WXnU1D?NUKsuA6 z(_&rP(}IW$rlsXqRU{0gSO+3$`JBHd1e|)-VAcWON2OHRp)00m4GDFq)zD8;mbF>I zq8jeDg)xr;?iUMapRg(l5?l^`gEaF_&`JKrS@=EIl*p7VW}bv*yk8_bN>C zisH&;B|ehk!{_ub5h96`m+<>d{96vJ;^j$syNvjhcIF{t?ai*CAG-Xu%Mj9s(F;*N zwOUKz1Be+B+@Cq<)RLa+$JoE@bS4s7!+rCz6)+oo}XT1?U)Vf-g zy6EaBQOO96I0iHcKc0QD=gwWf1gN4Y>htkspyk}1&LBuqk%X|E@iHyj<0J;^aE_0t zE2Qg9O<@LZcgjByxjIZ<|LFq9MEwKTwJw#EiP#hs#>dCXVX5JH$`=|JB%lDLL$$>1 zPyJQCa*&L~SqnKiW3apt!LjrvWfIRz+~l4{9 z_;wmp2w7ZsACC0t%(mD!qr~AE)7iVJ{qRPz;1eb z8N|4XkLy`Ast?!t&#KqT6DDJ5k2>LsJjrXbBn^VM6T1?IQit!~RT9VcWerU#p)*o* znNK`rvDK(LC#oNL4&?jfD+@#OZdf<^IeAY*(m-C(0q@k#;r}(=nZ!Is`_{HB+te2R z0bsBt$nqXh#}9ZT2pcAqXk)k6d1D!agK&N4FTNrSj0R<0K39>{aJ=~%I_63>Fxu_D;9Mnb$~Na&TYN0u zrCPj(HnTB>lI2eol$85@=!Ser6o0TT5Zgh^X|hjDovzdq_%_M($5k05`m2043Za(W zB>&+~sT@kUICMrZi)OQRmJV)RYSsds>i$BN>dC*Fob+U?|1IqNqU21d*`4VxryWY^ zmyOqx{s)gv?+)&A(S4T{+6D%~EPKxD$Jf52%{=VSYhS$)&32qwS}7Iy`K2Bz>rmaZ3{AMlzDD@u086`z_>VCCgi=_p)UUqmq>U1JT zZw!oEa;_Kk-A#D^MpTl$B8FKELx!pu?qr^d8=Z1YT?BvUU!j*06h++BQ3feRG%ggR zE-lO2hXWh(wK=Fcnm z2<5trRVo#Cq&o0BKA85t^QJyMCHWRK6lZmNHtEq_k0p0Bb6DZo9!OSRy1S#!x}a$< zWcu-TI@m+P7J|QOckwFwh}tx&&>&a9Dpr#N;%NC53ZUKq@@sOcS*B~|Izsyo1bh7X zsF3#_=$_@E*$Z}Lvvg&%H}wFq!2_U8A>duicUt}tR>lYp1r63+(Qp}IYT(e3(15$= zbyqQNvJ6l->*o_tc>d)6FqYpuDR>7%q9aVA2;O4V^t!{#r1zg6KRPeZq1JF&RCHd& ztzWRuas^kq5PY7reP0R&a>m}NoxAAO;&}PKkQOOU+qX71HQz}&@KgSM$o$X1-fIhQ zlqqAoT?N$7QBTw5YP`Ub&8)b{!EPqosOBI}dEF$F)xh?>qBpc|2}Y!YY;SV@mrAEg1)T%2K}Jd2>LSf_{x z;q_#j)N5N@7$Ya6dvkRKRi1*ez2aERK28e`IocT+go7lU{5?6Mks-VHocM*~&^&om z^g(7eC}Jridz#>=;}P1v9p1`o!-E?;jpUH#@T_-A05XNK_Z|$We4uzWVtO2XoXvQs zAyF{S# zRlUqcEX*qCTW^VcIS!-DfV)6g0YOU@wvnU4XAlv+4BN03 zVSDXeH~rI)kvit4xl7&&I!<*+E8ubG%-z+3{>&Ukm@6OPqig$%kjDoV?&PJ%r!Ti8 zMAas*eY~vaiR$3B<3_9Vr>(AKoGivGFj_y&k`pqZdn~ zx&ZURJ}xJ?sBzw7P(2O(h<~?(KMrz@BA07A&}2bsE)rW)LE?3%#%oVwY7_VXXyt)d15xGg&tsV^ z-_xAUd_2IFd`&>f8h-77PN~okhDW}uF)nyV3Y^6&)%+T~qKV*$8AZpO#ITms?l+qjIw1r*xJwX!#%%lqc=O zMD1PQ(d)J(^(l)P}PlD=|E+L|pC&lj;aLQZ^#HL%dbZa}e zj57G?EBj63#DzXBH_5$|xIxN()D*JMQ=bkQiQPxPJqrN?C3WW;DF>(=B=qi3xdl1& z(LaEJ+`)e9;L8W!(ofO-s+02C#C716G^~v)_y`+1JQ`i48S=e2&UKt5Jd~rplrqxQX1>@yNw;@gn1-YlNi@+3?Zm=b&wG?BQp$fMa}zXpGnAr30Hj1U2r^*wbfH^ zI$We@22u9(E=dNTdD*cYPUD@0=D(k&eLXY6PW3ElAz@TWhgi z`G`Gtf7d{aX*pg*1B5P@L(bUf;4gE!15-Z|Z-6hfVUOeJKAvPa`yZ=eEStfkik#<; zv>9-iN2iiZ8))Mn7E%<*Dvzp|0=Z%cwrbKSsAVCWKcps^3||~!#QU!g!?ljlWmXs5 zn};kfk1j{^)_#7W+=_heYk1{f^(a7n_j%GKFq ztys8>%`7!KDiM)ZM1!`cDw_F)_hVa4 z7Z!iW1o@9QP1{ttOTi@Kp=;vjlt=NnR|hLOzm@xd5cE48(D?5|u)c0~9r~5D30_uSteX zw%;=FylU(NvNw&`+J3JO_{mhrpbJjFxJMl-!TJ@f*uFmf?phIZlNVx!w1(z&rnIiPbDHCv1v^`IvghJ zM*Yv_4iRz?w8&)Jls9+0yO{_vf?`;?I<912KMkv=#F&-Gu9kV)M3>5`ws^*gQc{s> zj8m{zyLoW=Z`hqz{UcBdQ8_j|sMT=FDJogE!f0a;aTb(W** z(Qlbm|B`xa93I_3$`8+z>M{%7N6|ZID7J)@3Qo&N+;Y`bocGqS)S<+tcv8pNTEz`q z1JD6)SNf9#m}eY8KXlBAcOvMFg>fX*ltekBo-5BlX9ff&5=UK_r+?=9s!3N{xG7*c zPJ`iyUs8+10jWr0*Djv{)s16%ioM_m>9&uU9+;CC_yzMfa+d#Dc5o1Sp=kXQ zE@x1Fw*QXiOkQ}dW*e)Dh3z7*$=}PXAWq%lT3Bc+PFwn9%3O|!?6gLd(Ddh9i=2HJ z=5A)k7$$XQV$r#@ZIW$r)ey@&#PXrFAAQr~8;R5nJ*vcR(|brRD4f`NX1V^`Z7T+L zjgg%Z3jm}aG%P^2SW)n9Qq@#)P~LP#Jgf_oCYE!lXP1ScTnN~ChYf2C+!RToHC)vi zetwYj@b~B@Z@^wVD^%|-4&!SvV8RcW@Og$cx;~egm-Pu(iQ1$e(`ieIz1GW-+6AjN zf>5jz8IE<$|I>^;#MYE^bf#>pe*k2|MM=@Tu9=e04Il(aDaNaDfx_hdfKcv13pkEW zZwWIdU@TjtM@46leS9JN0LZkd#|!MMT4UxoKugZ~w4Q};^dWpAzBxwe#lBqlgsnZV zmB@!D_>i-$qs6)CmhdsCfb!J|*P(%NO-^ftU|9RaK)@Gig{sj`qSUVppT7$e2begu zL?S4s)3ju@2m-+o2?gR-WSU|3K#esLS|t??(tmMA02^=sCOo9 z3|tkOyJmlM66m7M^J+0dt697Q)9Qn$2cC@zRfBpuh}Dg`KgAb1E2RqOUeB_H2(uc0 z3UO>Z1}Dr{3_N)kkZdEMcU|!>vhc5ydPmGE3q0b*z1(={z;%7w%j1NE%WXJivp{J5v#{A)Oq>5S zfigQ_YQOcpS2=u<@8th?gsb9GHQ}^PKz@MkM+@&DrY-VPLfg(kHmLML9?rD`aXakF{! z$Y9s4nA{r;Xdoo&j^*)(3IH!yQnU+ELwiK}Y#eNOUBJprZn!?9l{>-p-u1O@Go`vU zlzscqVRadn*Ltgskt^h+FIb2gIU%QRS2do!gd3eho!My+8O0eOB=oT!NKzPq&K8uu zeh=#+iB{)WOUzKii0sA#fB`raEi6|G8O8!|kc=cTA_U0y-lvJWYCDolsnzTC%9mL# z8(+XRE;c=CNQAX-J~fjA?F-;UDjNR?2?J1{gY$OV-`(v;K;ovo<@P@b%7D99!o&AA z?u5&J(8d?A04qaFQ@qc9Ia7?GmbG~Y(Sx1sI9Cp&A;$3NB%*`05b~cR{iR}v<2xwJ zIMlu=J?(gt*@|?E+$$c{WfP)QwP=U{4`Ks=0W=jX%%mxd1f?OG9ZeCNgb>20x2ML+<*F|j57vuiA-mPQxhS*n_fo1T#);`%w6+6 z6OI%!6l`Qy^s`ocpEVjAy*x-ub`mb_QJ149i(I@OKB-=Dmprh+`U|n%H-w1^5c@<9 z0W1|E%2pzT0*50R9P^CI%hlg?CEi@u9%PbIB+6H?b;Q&)K-UYc`?@Nqhdpj&*tavt3fAdSgZAYzmOvl++DW*BYsM{*7sRo55+7RDw{egId=_?#18nNNW^9 zRBaJ&+3E+uVMAw{A7_nGe~O{}Lc6V1E9Z>zMsYJdHsSU!03-{Il5bDUb$EQ^ldK$k z%^|EXMR@OEsb47RFn@>vz(lbS_YeEy!~=ik zs9cxlr#GtI=M^f9;1r~Rv#XSqjgs^?*!uXwH&vMc#Zb;gL5_!IZm90t(M0r8if;m(T}*#SK3UwtwuB7poT+7!L zGTOb#SCZ;wdjp!xs_v6CXtB;-xMPEXV^;vxQp3s(u{i_@qUQ3<>;MgIZd%&!uR$AN?ycVdw!`1t>wUXlplF{y3)bLN#t{#9fqn6t%sM_y4IHNL>hR%N_u0XZa;Q=jnzkM*yX%o5aujLOz_wP9e@@+7kve??ItgFv@dAP);66K;!EK@HGgW@`nsJ6G&6v-F1#&IbU|7*SfMZ} z7C~6*;iVxLMaz^k9As35R?6C~w5zZ%V=e%x>GDSg_`QBWc_Ie^G!-o}^b&~#BS8t> zdeh%}-+xzlu5EX&<)*JS7lJF;0<_-1s-$=gr}^&o01_oHg?U~|277IL`Os(a8*tC4 z{;RCQ>z&iuoy$VaeFzW~TR#5t$FTk{hnrTg5sZs3@ZEjSg`)%1kI;6N_xp4Ki-Q&h zZ>fiq+!(B16FH5kXXpgCd~aRPR&V2_GH9VXLTPBxq zVXgUoQpSEuuC3_IZURz_nP4x1Dm~hZIU2{lVqNh$+;`~oMFUQB_`g^C5T9IBi4`=x z-ejy_g4&p2WX%-ei4A*(#26r`v@WbM0MNP6z;FR96)h@S6rENmc*~yq>%RW{O~;Ov z)$<{#Qtt9eO7ai1unfZwEL3n!6sQ1yUVDn-wjTZ&hnI99>{8IeM{D^Zhoor{?j6R= zIDib`cb}%|P9H4%2lyB;(HD-98Orm>*80^`*X@PwB{#0ZCsHcOs|%GwuOp0J_r83M z;$~`o5Q%`$(n^)Wl?rge*C3sM0=PAL#`FFJ`&*W17H9uIuOnO+F}X*rfYAwWj(PZ0 zqzX@UKbQ^yHWeWDDJ==hVp5?5q!S~Jr+ywe{Bf@DIpVJP@hvn-cS&_sY zqei1bF&EYF%{XM?}dZ5-wp;Em2Q)UvANPFlT(D47ka}R)>T-GZLTW|}} zpG8oPF=&cGw|v!z*WYEJi}$5?f=Wx~_f%drb^wO|UbrkRI;dmR=pNu40X7vaGRg{x z1|dQSh-eZSh3%O6-gw{Zcil|YUa!W9t!`b}FLJzwO@}GMvx(BtIbDjS4028+(6f=v z8@PpPd?FhDPja_@$>6eF=-T!A>@i`o=$Vr-Y{PI`8HY31SnBp77b1HpHe9(vALqd! zphA*TBbu?AN@?mTT$+~<)Sd4ZEYouc(X?A?np+6FfiqrO!=3%Yw>?4RemrT28=GFv z(l}ff^fm$BN6p9#qKob%^>`2<4w=<|QhGvvtJ-@h=mw+yL(qZ10Xh{e66GibL@aw& z@8_EL&)-+h$i5ui)bq8=MP$x_YjMcRJ7}UO>`Nt3&>pug!O>(iy2yuB^V1&};BIs0 zeIE2~xGe;6CMNjop=mE6zeeIZKgzjVc<=1h#O{>NSZJkU+V%H#GUyenyWht!w89t0 zG}lGMYs(U^k7irz6Ry|G!l{xH%=BUT;FkibE3nG+IOK3&!6`!Kzv5B{|CWiqKL4M) zXVeF3Py4=@O8&SnzI=9O%m)EJ6)i6VNf5~MIj-uxPrWO+xa#?rlTxI(lDDn-2Bdl( zI_rT<6|0KZ8YZ7y4Co&wOYZwvo8$AB{rWJ=xcoSX-L@&aku0yMn*pIEV@>&g)5Fx$ z$A#vqB8E0jgiBM+5RMMh%3H#Q*YlSC46s3v?q=Rzf8n>&v|VNVJUG3RJX*{C5;xJU zSzy-Ht@lkmO}g5DMa0e!sF_wUR+lv7Z`mzQ4vc44f@_~} z!(`$B7J=V~1PA$T51+E5)`#P7He6z@ZSA1pg)x@f%J>MiHk6*-KIFZAIPCtVh17ZhmyyRh)%6Y$dib2Z9BMp1j~Z5x zf~wAg*t@o#@0flkMj4q+O54PY?^i!}Y`5Wpqk2BB7T$6oTnzv-H@l8iR~@adc`Foz z_@IKw@Spz){^S0msA4=bi=knc5KI^#les{F+kH0yJ3tu=u)|}i{KF6c0V8GAoiGxr zTMbk3uz|nf^FG{W5)y_Ox<=tFFy3J>hVo}WSjiJgP;B^^H)Eu82UmAy=bOs+7;~V`_;=4c2 zIpt|3&g<~qehVhFux)-7YfB`lYEl`6U1%iYCp@gI%3i7q#%F;Q>Y15e(*6!&gsayjS zE0^z*06kBJq=2P&^ML3S?Y!q8%f|$T7|U;pxls7!97=)r3~fdk&26Im5YEatC8ZN_ ztbkc{vH><#Hd%2c0sqs~z>bB)nLnI!U?1;Vs#!Ik86G%hN3gn{xdWGlRCmSj%zjWs z`!dz-6LI2#@_ZV^Si^VXy!UC;2A*Uv>pNw-$11zzg-2<(YSJ8-AcFF}m6mSbUzC+|%;ez%fB`%eAxKCP4aS5bpu{K< zGmdYaxs!SbzvYHylmAAvFiWJk5kn2+WqSK@F~1V zT?55JPsA;6n0ndtT@Lz-ZD6^9p@Hce6NVjDw%Jfr>T7VP2|$DAS&1te#TCGPFj-tf z(kQx$shkj!v8z-XXi{y>bXPV|`#@58%9L<{uL9-2IXyd<*iB!kUs8pwMOSA)Yv|#PtnammpPW|b{ z&&LB)q||GrdKl3e(?A%e-BSO;hS()%mETe^K+e>c=0!$-A=0|t`jYNVoXb(;sQ(C* zI6ld8RQ&@;&F`tUCVterj~Qvgw^5qV&YlR%_DDnzM2G_#MA+}80R+t5reR9OQ!zX^ zJihlZ81?`#fv$SCo69kH*YkUXKMdyalYk=qRKF9UCWX-5i}Drqz*pXHz_GoOQ8^vv z>$_~oLIfUb{HZQMSZHl?8odW7jSB+1$D}s8 zvf;&jEf>FEz_+6^hv)6>e0UzSr?H@6rVL6Rq*9Pvn-W=1Ld_Mb=N*SWN2F%HrkzdN z-b3tG05D&AW*Rpv6`zn7^it|ELUGsyO~cCmx6bE^yt(F#=NR@MGD>(hABwuL)ROjj zy$*ivk!k9w{pRFH47@31-$z|=ONwUI&C{8(VdW%_8TM^_&4%2P>Qnn|RY57WJ8EXy zdjP+34-Ph=qa~_Dm?+2

    2onegDYU2pjC4H`}hR-?)BB(hXTZZ1GVUXK%qDV)U}N z!SGe)I_tWdA+!Zc%85tvupHnjk(`v86LwO3LCmuwip{DBn}2+xl%3ULa<0S|uZ{fqmU@5=U+uBo(w zejocS;%h2tG-lpBGhf5%>~VY+lI$UNX}LSJ?At|~oWknh}kt;8BLiK9v2?k^9Ll{3(8$@!JA+W@p%AZ`&?bgsoMeWKo zevH(=Ua^=K>mo;FtzhH{$Sau#m=l60%LzWCYYl<7tsPtmU=ZRcdn;fKJ*5x8f1Kp+ zirdd_FrB{aMkSK19?(x22rYw$=~*F0mnOQnoiATr^S({RL|xeWa}pfKLSk!gy2S2z zR+lS-mpY~VH(cW8XV^f}+f!Z1O~LIob%8L-gMPzx@JnHGu{3+qOT_M?rZu3YsguFS z)}VM8O=$xja&4-<&Jx7htc3w?m8%(s1agFt;XjkP$!i7^L*g7)5Dr)dXzkBV@**!#DsJ{+Lta z4F%Z_3$5a;N-dCm^8++-$(aU>Uoo~2A#eme^X2JM!B6bzPE|Uu!oyY1D7eumuSiQl;xzv#qHNE(OXLb?fgrB20N?Wh{t*x0Oiwr&ggi=$vL9wGBh@mmKsAHw z11;OO05!be_VxDL!k^|^fBc77#}*yhwQF{)FFOR`>gfS`?h*(*F;A@>Zp7wdGsxKOlB~7PBh54WOlF`?C>da1o*-3vT8)|XUfV}T8w=3$43tN zD!j(9oil5I7Uw$8xZbi3{bjyG;*%R#3lnC8n4wY5X<(>$6T9So=dL_dX~D3&Gz0}mEj z*$;-IfpSXl_dSG;FG5jBZfA}(KB)%CO(4V}W8kC5C=S%rEj3E4n5Y9k0w1|!kjpR? zv0)Kri6+bVA1xvg^|QP?32BjS1CT+dvudc32UV|TbpWcmqsmEF(QBZ5bfrk|>%iR< zSI!KVZVN(mP6A!{!SK0j;3L7jPzf*wR5WlU_(vlmMxq@gNmF5~tcJ-~$BszKX?FVH z(1&5JVg}p@=Zv2 zp?{ckj6Sw!?gGK$RD03jE)!oni2`K(Tvx~k0Kl(lL@uqOX%-fGru#B|nx<;xEHumKx%eHlH+I=W94`q7sVly zzP>rlE?uP@Mdqo{e7P$K{He`c^jmvll06kt0yn(E?G;9?w8Dny24Qf~XIh~S{ww)q zld}_nWNPI2OW`Lj5xTyv?*M};{H|0T9(~hJ6 z)J>B-w9wEV?;eR)>4L?2XTmh;5;%>UDK<{aq906^^ZbK5m|FlU?Tw)7v zy&9%@l=KCjXE{9fXhd8SAEGQY!3<+)DpYY!9X8NB`ygrTA(xQ~svXLXY-n&AOP_q9 z*&cS|GZV5%c$^^bI40SN;r5(IBYm@;%XtMAaFiF(k2b)_3?`FN$6)x& zGtIIEOA%Pu44PUa^HQW|R;tz3uc{rE_@a&isNyMsI~Ks@Pgei;w9Uw#zi4%XS`=u$ z-!lT%9x%C%K7j^px)p5yc_9srQj4zM&;N@Ce)C@+Bf&&l<^zkIB(E4<6_CNWA_KodtX zL?&Bqx|e1QFU;Gp@A-z+Yo93di$OpT9JEdn;S4P_D4?d0#zR3BVkN<#=gDO^bX9&^ zP{J{ox8oklJUk_UDhZt)q%7Dl)2-n#i4>$M*ocI`%^o}p{%{(Rkg!_E^Dpjk-GNhUq9Xyo5*XIw@}DRzitaCoM_@%i_oVXd@NSim|m zGpj_Wl&kHnF|-%UQtT+3uDv%z3bxhOaiRRQMX4g7fk|BM5!t%m*pF?j>#475;U{cV zI0sRLt)37yC)R%L47g*-5yht+E~Q!KD2zfx98a10)M1Z-gQat=SjTIvj}10C#kFTY z@k=v;`WE>f5XuzYCaJX)Es~W`S_8-%V(~x9LLVgmFiH9^UKAb(Qo(IWDI*!ZMSkxl z_Z;3)LaEY?%VgTl^usD}y+iTep<%(Kdj1?3vQGWA0ls}72QjpWpP_ck)+Se69*;O2 z1M-)0in0a5vGnZJ@gMaLb@9x$0gdx9 zQ8jJCwT3C+J6`ef@I<}p@FL{oNZ`=_dNy4B*?rK$ILeHA%^E4>lryS_$_cg66Eyi| zf5S>5ldTH0X2v>?$g)8lj~2^Giy^KBIKVw;1@))pogDR3<c0WxPuj0! z;!a?ELwadyY_--BS3+tGCte#6(;O88-aPmM-L@;WdV*1AtNsLM*L#QtTGdi=_7fH@ zv=@H4sCBH)V-`P#5T)jmj-OqRWnZ$kI*}YWPr<7)<%hgkU$%RHEeKb?r;bwtlR)B^ zol-$F#RcB2uvVwsc_V%1>rb*#9i#_z?mhY=fJz7qR_uoP&WZN;c0~NX-@t)}H%1p7 zojao{9|4#+!wxF>pxnLt#gJM@7hz?>`hL&0pj6&;3O_=?`TtX;6D&-Yv7GHf#X0LU z7yxuyfKDU-%b{aOJZ?{8h&FSwAG5F?zE8Uy)IZMmn$xPqt|j8AK=l=kqbHF_OT%Yu zqKX=z#~D&d`$}~@I%`9zA-zDWVQ$!Y+e;vf3D!p_ zp-C5(;0zh>nY*ebyIS^^D}YUj3U1}^19`1x%xqcYk!iqo0+BZhiw1rVS*`+fxurnw5hyqF)1kOkEPa17K>|F4t)V8R`PTMB%t%@ znBjxrrd*aTBS!nfZAD%3Ma3J}9s|gvGyAd~LZC3*{UGwpbVJ~44-o1IAGK%B zvu=@l0vE|1I(bTfyVZU){FA7DV7FU6Nx7{EVwG2eY4#So5QTJg2<$R2;}V&A7F;c6 zpS|yCm63$?_qzummwmXMM*uh{|6(MqIbGggg}`k2ZgJ;A)4d6Zkqy^D=mpO-;v&>9UC$Cj`McFtqp zK}PrM<3^~QF*o@u8LA)syJdcXXLap5;(;U%`X6I`QPD2AeCTLbTrlm7xrs44n47XM z4echQtx#5S>y&|daVxq^Gl?n2{PLdQa=Y!j zhFNr40Z}BCeolla!4-~_-DcaGRDDh+qPxc=Z6`ii<#dnXmzbYbnGYagfmP}}$Sc?<_asfIWw{L1?G!5YMO}s+TfIW;WFJ=PA?U_#+kS>At`q8PX$nYjxi@+PN zKui|WfE8Ri>{^|3MV~k|)2{qTT61l|5OXuw>k_q+$YpeyGp6JUm+yD+8*U^xCYQ|? z4{7=41u~8slzr9#!l#pwyAYqo4AdZPf~YiZa5M`})~oP^@3nKtgdEl>t@37=Kh24Z29>Rzu?3h8d*pXkkm3@Ga`&mh81{nmM>`sV%GF|?V@Ki7Vj)(K_=Np7@ zkuD$?34?Yzakc!!o6Hta=a%id+vB{F6dZUj*LztUPF@-1v_xr}Qsj1CjVD`$kCoYR zz2a+RW70VOoW*dC1dW@eA!63`s0MN3>pUTQXraPX#_bK<_q*N9Wo!cfT<`JMG20{c zyo_6I;!UouwCYSy!w$;l5>xUn`hU9Xwu~TsUIDo%eA?#436n>@nsdzZu-ROsjmU#OA?KLu`%0LFpaX8?33S%9Z-Et{<@1fn=Hr-1dsanv*#ev&YWSX zZKCi0JOirYEr=`=rncY-G?hlN-8Hfqz#+;ud8@ zox~OuUS>&zFr12-OM+&qz_L7TBHrCfUh+38lN{08ST53J_yU$i*G7~EP#PeSAbAnD z;#Ed++-8y8115jIm5SAB-633&saa7&W(c+h&Eb~9BzQM_N=qqX4llLAA|jC(k#UQ@ z6qMYXz{-QUw2bG*dZqIVA7+v$1UB(h?V#}RnZC-Rq0ZCt)hflVQ~4AF&=-=^)7_t0 z>{4d@H@K+TsK3&99|-mYYwS@kOA8uSKa@u3t&=qZqr5;!jilBPcfmnx8l&l!h-)8i zfOHZ(h=}eKqk#!Zq|L0grj{GAl%$0|cUqdP%diZe_8LJEwNY(=(&~rf)nWHX#tygt5r|!->Bg@Gek+A zR?IIqRxwT>s*A^eBvEqy1d)VeTC(xcT(*7Ml-H6E%e<$yAGlm^f|+s=#Jzn54smGn z)$lk40o=xIZ(dj&<5uj6kz8`-Hlo&}P5;M545yNVg9l!@>(Dj+I*|ERsHvRDft!|< zTosf1!L|xid;tG*ErItKkTsxswX$ag96EQ~UIA5*U^A-Kq4hi;I~yMT9;gq{pCW70 z{{Rqu9Ku)O+aDKpGLvNwi_j)+t|&rb&H(i%68Cw*&i)Y~8r}P^-J*ZOxNlThg`Eqo zD*nD|&1k9LRhl(Y>K{tA#E z>#nlGzxQ=lS8lr(RVq|N=5wPw_NOs>vq2p~P-A-jo910GE>9M;OengQm8O-zBN`+A zw&C2uCNx2!z6@o{rz(euTI$mH7E3=Hq<-&!KP=u7Xx@Nq6_)|&b?}nGQpJ78yV|^E zw(uzhAq8}7ZSFxIVU*KvZf|WEN;S!~>uFlgZmcm7`rj%!z}Vxq{q2 z01Wsde1 z*FY{Lqv#j*dI|CL6*qJ-FO?jlBV;%@JE)w&YF*T&g&lgsa4*P|4AnLENiGqLckz+f z=Bmb7oeo>i_(l__O)wytOm#}{`R=M4$1nzD&m%gj9vkCRkPS8~}YoH)z&a<7b0n_#t2^+TdNL}u?oO=1(t`}KqQUUj3-A3)4ZL*PFj|mA^Ebb zKlxbmwk_g5c8Cs8%Br33KeDv1`pJ;?mf^D?$nWiTM@98v+FId8aTY@R5Gwl~YG%Ct zu)9yYx6)-Aaz6f`{dZ?*(w(XF4u65Z^VUevWFPJN_PABKrO9rG}#1@J4}z zP$f%Q%uz~pLty;E=)dseJHmEG#Q2}h{_txc>PR)wL`ft<&;F&KHyY`ro(bSm7SvDxH)^I4uax*x9zbgNUB$ZCD2!VT+fgjCrUSIR-(f$}@ zFMqswp||jMr0bP?QKVo~$FC(Z@z}Ba?ndUwt@y1*G@YcjcZ_0NU8ZhTIyyh0{XR@A z0g4ooIYU15ZzH{!OaXRvJz6tPiDrL{K1s8(dabmE9lBNWvOhs1Ch?7)=`vS|#q(TL zv3C1Ps2xY;5cf9BqDTxpPd}h6TL7XB;eY4hV+e883lGX)ElbTnq*PF^tR$lYx~oKU z)&-OXJSSOPI>5V+g$n4b#SGCyJZ?JbUSg6Wtn^}vY2rOzc#t0Zm$XIz^2*#tQyJYz zNOhGa8cuC>k?<5UW?vU}o46)^u~DGuaXy8B=<}~<@7GE;!zfr@4EMSmry7l(i}` z7vd^#LH8Z>oG{Y+m}pZ|Jg->F{=KVKvTfc78I{i71n8l14?KG(Bja<;hB& ztzK7;+?}xlsMv@a!GOm+gXhtISoUBdpWsQ-fWPn+DJ}no?iHzS!|PypBYHfy|KF{) z=+sNw6O$|I9HPe|eHod6n($veSzb&jVDti6K~e>ZZlYOIoxA!Zq|(HD1H4lFlle~a zXyj#ELng7jxK2x*UEE1rOcPRMX?vV^cH6~S)56^`bKW|I!A&H~1?7@sYj_lNbs%D| z!X?JJ=2Q0Md}KP;Mr>kmjBfzO63&;=uNqAAGcH2^Z7OCkH}=p40ZAUwZG~2MZGp5` zCx^nz?nHUM7=b2F+D^&QKfHTLCvIFLD=wropZ+h&}hMB){1ual06QgyQ$JU ziw6szAD%2%S^6=+=S^l#4j#i*I7t#z$Y~TjU}NU`_I)O`;6ixO&By30GrLkC-iEs8 ziV*+_D>h9+U6w+$TIN=ESzOxZ+5EYso_mq8zn6K6oRm)@~bN-G0FPy?wN4Skk=Nx1{l6CeQAm`B$VC=KxJy z4XK5zYWFhMOQ%x5fcl$GDupzi2v8m}!Ei!uycbvLZ5v=`y9ObDnM>pC{Di{@=cP}Z zy;W)7jV3f}1~qyqM#*v7x-Kn(C(Elxk{mNp!#c@r#Vf^dfYQqJwYk3AO$->T&3)}N zT6vE5DQ-P25mYimWZ2ItC|Xda9RJhDuh^wqiOIW-#{K_9`fP~Jxi3t*z0Hif8y`zi>++lBoVK}VRDr!K&g|#*`WCnv%^$H}c2;AW&E@OQK84>7^M2q~A zxL1U{8Cd&71>eMVB5}rFWWrz)Mca{6zFmg5V*jG8Mo@UYkLjS*FsOW}(%(to*&LbMCWXc`smS_TWSHD`ld z$9M`P!$8>7NC}HIGm~ABEeFJ>Zb*|MSCw~+r@JL!d)S~y!PHFTiT>ewS8;R}awD{BAdrE?rIlNr!V|3b9joLi>L z)78|&@OM<}NS;l;RGkM9`5+{D18ra8rlvj9p#G4z!C~mJ5s|e2*{XFfsGo)mzM_Jr z{oE4aM7e)X#4o7hsl=n@v2uN{n`>{=&TK(cVr+A1YExW+-CJaTi;H0%ap_mt^zYH7t3>`yQ%kL=1_WAp?oYc<&H}WVytxReqmz_oAFInq308!iJ`Q&avxlPA3rUUfqUJAVj9*(;I&Nx4I(^Gw;(u0YlZrJE|w7P)#oElEP3_#QErr! z*H6XgfnOr)(f*(^wuQ0?>Z44*9sXcWpdkv2K5RottClY%;#3g`0 zv~}O*sRUQFfgGX#4r?QXPrT9#=lMyMTcm)i>$ki-#!>u($sz#i#^bUj zbr7}$Rq691Q!l2hHq*N73;8J*leTgKoKLfxk}9$eT8wGlLsHu_^@V^mGW)b?vT1aR zQixm8Cf&C8Mt_tVE1D)1-GB(Dh)Lm-MT4+}WozIn5%V8?%P@G%nEAEcHK7Ateo-`U zIzJCFOcsd6J#PQ+y9KlFkMvH?Ge4<57d2t)H!zX|g9$1f)i>OQ`CXHb_6LW6w?R+; zG;q|mk@C8<)bu4aq}8GnjQgM=l95qQhS)oF#cG6Py}x3pwtMS6s-!HmMgq8^n0OeD zq}T+baV_g{PwiDQCknrNS!j)Ry^7dn45ZgrnO(dK3#%8{+kKeWj|CPqFHvCNW&VzC zD=6@0{x6cBUUEDodO1SdQKDsgSw0n@s(a7_Ji&+zLWm!oM`C7PT!OY|@c7SO8u0%O8-ee@*yHiD8|AbCuj$rl zUHTl4h@=6#Bf+y~`O7=*Xy>T#z?i6+Q)c7FFGqMjlxG6chJ3rzytNnzjV*`Dr(zS_ z$fgFF4L+mtZWb;^KX&M@(j7uL#iuP}BuJk4|B?xWL-{IFlQddYZHn9&BLpfro$7X~ zv`L}4o>FNUjozspQWV%U_&joxU^tJZ*L@cFvr{i>JrHh_Q`Wo8z*qKPfPH^ezm2;@ zYPd(jJScX11V&*pV=-?0Z6Dxi+I`hL8?z8f2)JAZ+^>meIK~k^rI2fEhtW>5q|dN# zJ0U3X*JaAdlA=N>H9e3rkD?rzga8j?WC44|>2(>=@>Nb{q)CYhidV8vCYB*B>UOjw za<|a7y(L#MX)D9tq1n`*-GaYfDHj(nV8Eog4N_uAAr19^1!;(nB-ItbeTolbsj}vV zs-n=9mWL@vL_Byo*Q$!Qnx-G7+0d>^Q?h&@S48*McZGV3TtaQfPP!vi-YlK&JbFvE z3r{8GNMi7UOCZQsiUTwAt&4(stmqK&-fK8_q#>E zB+MTb$?0AH^cy02&}8F_z;<0{wC$1mtuy47UyAQ{JI1R^wJb%=kM-!De+4#|K49Oc z+2&cXW4@;XvbW}@n>uGIFSr+>hAw_Y_6}Va4v54hO2K1Z-$NF!7BzwZP9oR}C<~y_ zItbv7oeT^2By1mwe@WIjp7E*31tIhw`aF=_hkM36?!`-p0Ri#u?&_k5M*|4AQqF~{ zXLg&PB?>buok88Oj$m<$0{q?zra@4VBBRg#c|3$^#*NY?dM+NE8xHzfDJ!(EvUKem zMWF$c=YjTpTWM$)y!BZ&Z$Z~Q^5WTT{NLl0nC5%Or9FwJ^CIzongBI3Cx(i|HJ^a~ zP@8UB>D2E`gc01|w%^3412l3^-!MTzpzvBT7w=-+isE!A4#achHwhS?$Vk|uOtwPV z8nx35l%rVvBJ9Z1Oa1E#-_5~nob6^C0Yv3Ndqm4Sm#S+QTyeJRJg|C|DS`Z_|A+b& zaP=RYu0o*vace0Dsb*~Xj#5XHWHx7S$EK&#{!PtRSMOiac(7`e2Ed>qtlqV+)vk@eZ02_{6@~!a&nj@6H7!>D0~n?2Y}f(EJD$4JJ{)&n zwW1(2WBEkQ_g(u;i@?-bu#L8NbCB5%Wpm%xHh`{CO)8yMma1UU#n@Klqo7t#1V2Y@ zXUX)73*DqZl@WA&au4K)!|Fd45O)@83BNHDa8n8O=1FG=4>yvqC{%-&T~G%diLtb2 zEfWhfX<(R&qeOSKIpl7=swNN~ZZ4r|Jz1at5iS>K6_$7T0k4hpK+~#u(^lNbyO+5gJzlRA(bfU1>z@Gelkr^dn1=$|{mNV{NI%gBtNRsHnn$z(y|`P_}ci$b_)0%0vYiM#h#Xfy)B8gY9J=Cvk)Ea5@-?_B&x6wC6}0*WYJ|s9-T@E<(|@GX^xB zm2NJjm5i1<9Bqp;rC~*889f~Uw->X=Sm!q7`f&whf5c)Q-9g)klTmj&=o$dVt=pPc zW-PpZj&V5_I#?yhmu}Ug7X+!hYp#P(jp6{jf}B7GCf1R%5LM$UxR!kC(ynnj3@a-w_0c~3&Pv9 z`LHE0{yJ)U&KC^!A;rt#xm8$ySN*|h_|A){m~;}}*Lv=R^c4_LLYVD}P0M0MHL{p| zqUox14w52Z$i@h&#SigS{leT#xWgZ@A);=Zlj1PeIw)6PhQxx&$x z#Iz$V0B(V)YNHijT|a~e#y9!RfGQNji>}9e$AGKTh_$Q7v1`slyw}cILuy@5G3NAkoDDnC&SyF{@+XhbU-qnl4` z)d>MW=Ke-~L1bBg4F-MyI&#F34rH`mL9L-oBOYQVf2@Kpdg{>DATk6HqYveZ&}Ty3 zb2u9;v$vdS##m8q*sm_br!e2hB~rt-5J>qp^H)D?^*+HkIPdl+#hRBfbQT^vlV3el zAD4<(+PdNiGh5+g(yt3OwIT{v7F+Pg=h;@@=2o*2oC;%-tiC39%?Zx>z6i9dd0RC* zs3|Btj4JIq9ZMq37G7d)fnmWti=D)`lc5Dd3=YBrI^eS;Lb0qp6EB{z*6D?6qaaCZ zr$OXryCJ=L#4JVj5_B3!knV7Hc_lKy{t+I|7R{X~w!kbW%7(~36EaNTfiqDqjfz_} z$MUhPG(kQY5K-zQBZ+wg+Z))E^2?I(!%GXX|9`d(nsUN^-AUyB))XCEME^_Xcs(ti z_>?5gzDj2T%*co~&pCso=P;K!r5JrpZHEYx*&GB+!P&8C@b^Bw%b^5E>3hZv-cOGL zB)0xEZN7qH;$t!%HiS&B)dgMfL#9n<>p7mHWxN>iw8-oJ$YX^2Z)OLLZ6o0cl1~M~Vq?qeF6y_C)u`A-@T^AXLQqvxk#3(?@zW74}nv24Qn|nIMS81== zn2m`9kOl`L{-iqx?_iO9dGtPpn~>e8vx5f|7m)KZl7=f<*rq|Dh%&Rs$@E;FAj6x=`al06VU~aet(f`#ao&N)VW| zs!I%FLY@Q`szE*41T^j*nW((^r0{6_x0_o!yc!p;BWxUZVwFz`T6Gl&@eQa@-}RMF zW(H6}ogdn-u+d(HRk-PVVT^=n(rK8X>PLJzw<>>5eOPdL*4KU zs4g}z2cRhk-9+ISZ@LneZQ?e-V9++dqu_41Y748&rn$@aa3oXr5s)=lqD$yq<~e74D*B0H0iiN`L6tQo;u$U=oP^Yc235yPjsxXR(MNV$YawFw=-oXpno9BUtf zTxK>v*_!yC>GOscxJAOl)AeF_v5bl5!lT41JjQwq!+{7^|Sp)bFJ%%`wdape5 zRiOrw-0KM#Ydpx{W1R&m!ARbb_1Uiyd=(;y-rzg4TuvR^K%iYM>`|p-4}@3fDErVW z3YIF~tlKl`^~t7;#Mli||6b0zA97A>4VVlbNnGb78_Y(@g$V{SX!eyY$TbDZbFV)L z$@R|k+b^`{9uvi_$(Q!jXnwoLck%1`t0@P#;RxdK0n+{{{q=#~{c1Lnhb8>qf+bvFM(_n8OsGa3~Kl&~VRUSZMH`E3$4mHaYY(_#2 z0y?CNYe|bW4gP23F)(kj539(Z)J6;{+tCrFo&;@MzE04C?jP$H z?Bzb9(xu`_Yh3lrZVdH1Ac+IK8B*O%<4+hjYOIt=kiypDN1$OLtv-?9CCvvn&I0&o zS++;;I|Re+yA|Gvyp`tVmh&m7{3VNsB@9hNi>psz*3lB&JFuJ+CPw%=9GuEI80MdfBV36D8%V zujo9HdigA(LhRj+%}m!rbaf&vJrCydM!Kx9e72WI>JZLSiVTws=@DA*-RTDlkF~e- zEOK{kD|F&O>t#q}3udempdh9|a>H&RqOSOA;9z;FNUsjli&qY@A_9*SMjgqg<3g7_Vmih=0 z*H91`z$2;R8jQ7Uv#l=fcIm|<$G2?9-5{BLy9bxaz=B>|09>s{Ms2Oxdl zBkEb5iOn$${h`{&MDW!HhCi?x-!ON9tW({cS%gsrvaAEix8`X+?dT%r%1LaycY{5H zt7!yIi5(T^DIoR6&)mBjhyqD(Ew(~E)z-P0JjCLzXlYK$LsrR3zX!-0Okj+Dac@wz z1{7@On6NF@=p$&%6rI^b0{`jpMIzp*-5QLjmxl-XH7ERd{f|MB8fDagNq9}q(KqdL zdu&*kkKv55uv4O;NZle?b+0edCny4- zmBbCY>g=#KF0HvtQ9Aa+vm=0BoBqW)tpqCCe@tb*qXnm;w>+ zHC6YJvHL^!|5bEHrC*bt$D_os(;qsSo=%!82M-kf6X$J^!F3>SCXOqc;aIvPgLT?? z9I!``2M4T*DO+N7==K$&?s)qmil#!xAwsDLk@>n5cw})~*$^A~1=>^Ug2zP$aOd8C z`R38Ce3e9^Q|E#QI-ff}`S#ro6G)}XIl>uXr>qx_8(&E#CXgg*6@&DF$_kkEQgGtN zLIUX4V2zlFxnxa{8-{R+9$1~()92~$N4x+q+!})n>j0|W9W_bQ3&B+KsTGduMiFV* z0Qa?3HyU0m}pLbr4$fc3NyYGz5A2U?_d)13?0q^NUMPb}E8-skG{y2nPd42&XdHnhzAF0hz?t|0ci z1Z)wG`nBU^U>4-@>$vqx^V9FrBXCz#<@{+3JpX2cs+;c?`yK24St|0^=HYQ5iK1Hq zn7Y1X{x`u2AMOm;!&X#`I*@6Q+sR$liWOJ9(7TM%*NW)Dbw1>M9_u5TOAzuKPZaQ+ z7)YFsPcsuFx}ZF%MMG}9vtbEDqs=w(CMG7d(fecT^yndezQL+vdZj3*4W0tVmW%k{ z7fn%%>UdL(+}N*3rX5b@eu)8JDg7|_Tic0Oh8OUB#a(sK7*A)ndBQtzMWBO z?l!?v{N;@vn|i;@ETNN&d`iSC0 zX~MU~tKYV^cS{ShWq#n(ANqjwQB4|8{-BQd#9H_6vlA#|=mi~cvujmDany`WA`9G3 z{h&Ne0VBpnbSdX`D^Dk{k>})JKet53?#dK2uGu{UoC;es&0Q9I%b^!=v-M)8tP2f- z*_akPU)c_K;I1ET2%oKN#NtoG?L;M=l9fmn=@fVz1=CJd6mQ&OXcEij{}fxf?lbK3 z9orJ?n7Gx;4u3P(#W~YF9!RDAmyXNOPSaykXP^Jv#~%(JjAN=qN^~^MzncsiUEEYx zlzK7-5!`5VIS2=4aTr{_#&VI>Y9)E`C((nfjKb`(91SuXZA3%J_ZJtXCm>}} zk3wG|{>~T?Z?x|$){=eu*5sEPd71p?0l%l1t=#9q4gV+y3FhzDOs*G&w{p2dXogcw znN|>;yI$evOI_s1ANocdq9aTn71~3imJ$5LiJ>KP`ao#^6jFt#F1v-B$b6^)l6)VK ztVd%iaJ30_>Nm?$UB}t^hs|4wvIg84*=5j#CwouqL)Aro@iO#E$KdOPrXk;ew3!b$ zn~wyqTlao!LyxbxVrY;pvD+9FG4wV@4=0r87d^-qjz~)VY%0oKoeup7{ zPK6~roPiSnpYGW&={=fYpRzL*4<lN&4i#W zjAKGmW5RS%&h9Qzh0<;6Y}8MGo4eh0wVZQ`@EEz45tsY^t@KmGOy(bNZ*@stu+>x6 zs->sw6X~aIVDWzy7f$g-5kVkG&tPxi}lW8Z-n*c~!cq{eJ!6jm6 z2Igx)E0v2c+th4V8mP?^Rj~D|Hf&> z{Xhn7uoq{ZHq21}Ceg#dcBXMx6w5eiR1qWpHk{cYmrp*%j9$`jsgJ^wPRQgBd*2EF zREEB+(jP5(=~FCzkwc;pPhy&VQcw%MatT?^T~Z2SOe_!n9g&ZG(Q5xdQJK_qlFBfa zl36wei+W&QpdsP40qK^FA(r-q&0AY}hnN7*vfF~@&*aRqG-(1($0_Iw%M>L$3V4ae zpT2+1;ADl(q!xB9;T5#LXkL+D8WqsP7wM_1W7pvXh`)c5@sNgiXVSD+|ivjyp@hG`vzhZ$cZn7t}Qv6l6waq3n zxLy}}B$Px>dxl-m0suZ>i^SQ?a$T3F7dd2afDwlmy@?fp&ea*t=tdUZAHNIIJVnAv zfjbar-7~goWm3gHzxS!zhzaD~E+7r=-)!92llt5`73=MGYFYUU|ZoOfx&=K)r#Hr{AMZ&3~I3<%h zwJ8(PDV$i&90MrPcM%B^Be(EXYY^Z<%zg?J%xkj&HXPso3O0^gPu`ybg4J|FyVVV1 zTZIf|e3ok-awMSf@Xjg2nff$uyighJhRfv^Ux!q516qE<-dr1yq~~u@8J+*kBU~6>9xIRQndQY&VdNB2+O?Fal0?mUZeKrW9M(LY$*M6DqMz8eZBev)F^d6~*~9Tv52aBr zg8}?T@tS@7f0q~ses@kG%s<+mt<0ii@T{<>J{BzbE|3J=>UpMgRW{!fo&?8`|G49v zM%dMVn1YUo+>MB{Z_pV6?8yvUxyMfA8Hq^l-_59&2C{G5&w zv6u3#LBui>qCtDaa-SxAgjx`e8yKN&SYNQ5QL$@g1=2?hZ~^%&x9UaTSp~52$EpDG z$<$5k!-em!XARa?!BtW8sMDp4!aXd5x;Z1W99EZeq#9f}Uu3luRtVXSCbCUIRyVon z(n5buAd19-&Yw>Xct6;HP&&c@fsjD5I~6c$0$Uh&qGatV?V4})qzmQ6zlzF@?eZQG zOh9bWc1rJQnwP`we);S+IN28c6m?}>%kQ+AZzap`4h8{Tn(nDX zx6k3*yX3~3so?m>8|onX!D&qrh{_dAUSYxYMl;poJ_%N3IpK@kb(GNO9v35Q7vcq2 zV7B;S6*TC~V&GgK=dphZr|+JE#|JW*0BHz~t0AzdGQ3hrjajWP--%6lQveKK(GK_p zC{3nqUOjO8_M7qh9yjSG%zegeltpIJx)&Q8FmUIBfNB z1XLcFRF-Lao>Sr4JQ!qc6T`BT$zvaARi_r%g{2ItH0Yq= z%aEBn9?6hOh(-0aA+?$Qk^Y|s8V;7lAhz;{P-#1$Xy~oG{mZ-z%SGu8Na4h)#oc~c ztKO|Cu>Yp44oty=ek%V)%jadqMz;?fs)3$r46Hq`W93|zuoGQ#;{T^Fz~N-i9*nAD zZky}s8WVOtRxyyVXcxERq+8Q>d35igrU^h)iWQnZtRt2zu9Z=t3OqoPZY?denR+z6 zU>svv&Bi(nyB~WN?Xu%}C|rTu=eJD6T6gVHZ>B7uOGHty-uqWF1dqCt9}#F`8Li;* zJuI<>235D+GSf)r5f1AHyx2oVk2k37Ga-WK$~@O#8G;fbwngxsAT+mLB*gC( zI!iAIU0PP};j;&hu3F-Dk~%_dt@mvPck!Z*ysMma;3lf>Yt4Di!Z4Jbj{rud16oml zK@c5gnb1hV@YFfQ6xLS^Xb`tzpc$S<$XH3xE5*R;Q1#tu;(cT}TJR_*h4M>$_wNam znt+1;6a7i&-Dpx(Yw3d?oasbiQz1kY&&O@4az{^K&l5lP233saB{_FRKS^H_qLSv( zhe`m!TK+?sNjFAQZM;4b1(A%yT5uqp=U+WY5uE9+wwnrInz0QboMn%Zbt6dP$82WBg z`H*A;6uTO>2{{tuqcl@AzqMduZ@4&xWKB9G#I5YmFID;n+={P3ZuBV^3@Koq3aq^* zEtYESYntFt4Oz!UUKC>8q`0n3vofJzl}5RsrN~Z7+3Q`D06LCQk_SxPTV^bO2}}(C zyS*&Jab^Bh73I_^4j|2~{6I5k$`+s1m}RK(-)8&Nd}F~hH2OeH31<@?tS+9%yq^;y z!m3>T5Cn!3^=NC!IVnDt(>{6mw7Ud%E=tS*LCDo+tvgNae?`%Vq`i?8M{1nfc3X|C z(IV%&&z!LChz=~3PpT03`hGX64H2<(_g_Z$P?sTPs{}R|2Axa=u6T-onNblJDCWme zZ>D5ils}b?X!`A!$N{gedMNYec{h!IM~l`{O_XIKQ^yoHRf9zE-L@~57X7L2YTD1| zoU^`l;u|MdyZP8fnP+0{H?f@Nu^s@0$*|F=dw8hajYpTj(f({2wN=d@ejlDdKYj>; zUE4<_|Ovc#uGp9mpKk6 zvw_b{TVlK|(s%jX9BMt$nk+1+j>Eia#S5$EZQl`dZ=SUk$|;%X&&hD!U5B;UrmBJy z!=RmYS8x?@xhd{P%YaSvWx()ZdA4cs_~8%6LtClh*5u!A314s^K_a#OVVobyr*$Hm zAXI)ad~@+jc1(zFb7|G>5_mc7ID%sTEL5X6^%WX7lGDh0#FD@C^(!zE1#8CH4G?ex zbp1y@^GUUmBM;>KUdu4vDh_VXwr@`jUS)qy_ws{x#qAol(}67RjEQORQ~@v}-qkho ze_9>iD>tq4O1I0DCUvE4<#X~IClG;#EjE_=BgW6Zd?P%A5zPY=hS-KJo9t22lPI}W zd}(BJF=HOHzu!}fxhcLIrckaMqg;Po_2c|0ZZ8bZ6J#tQD51U>Xdi(hTAbXi?jO<5 z=346VU%qA%{$UNOg4h4VB!!#DNYVQb!feeAlWBthd|buVwwMbt@{~N)!xNoJbT##z zzHt2?kXNJjxpL>C^QrY#%208zil^AQK{P~AU z0)n!o!0v=kM9{4O*vnC6Cvx$gKDW=kjf0y<)z$Ez_~A6(vE^y{IW3XZUPX$A=9Yhb*Z_cB`dYw%H_W_}pi`ED$$ z`D%3^RUi`64h)Uw!VsG1e4V<%%8{Zty)GJ7gDj=Z3w!cnG>x5vPvW)OI~`xL_yuL( zemM=z-i^&~_bh?}=#cH;sMKm!auhF{Uj@^WVWUakD_J$@mw_yTz;F2LBMDXW+`0k* zOuWS-dB_20bZ#WpBifZ*mQHp%(33{AUgb$~w_EGgRWKwybv~*$8&hO;U_1ydR+Tv8;Wkka`I7E_P9XLX z@aS{xva&*l3Ww-SdhlhgWJAT45vw_YbNnq(dirrPB;9;rJ0O8>fPyfQ+HtDKXW_Qd!a=!bTl%pJ!+ohg=CQ&BtN#+Asn}q}qxKVFs zPkZULP#t4+HT>*`!>IJ4EInTkF9_!fcT5hgVh$9KeUSNm{#M!P7o6da;f)NE0I5gXNogfF%+k;0Ab2SISlR6S zevo`{!0S2h?-EFB{pv5bB(_hZxGn1Hl;*(AU~0R3yzoiVkd(l*b=;- z59t73yMF%Zk@i#if+=VRs^E;V5RztGegW1sf|2$@>MJ1|qu;Lj%_qo%|9gLMD+l+b z8ngcDz3a(?(U$hLIjV%nuUkRXAfG0))%45j;1gT)l0z33l76q)TQUB_@mC}h`UaF~PO}Jf8HGmtf zMlTA_;=X4DMQD#z{#9Y18Te9UZqblJp#dK^1$L-c%B#f(9nOP`@BYk3Tx!0AYKzi@ zPeUg+(buU>Y$WW;1D5VK0$jQVx}ko5y!GtW25TnjF3+c!SXPwO=rvQ_)$;YGyP$7m zcbm!)`bxTxUPpo9bLvxVdnCcauKB1Zb4lj{i)U(G#h;tOs#FNrHKkdW1e3ARpzO#D z3>pVn7I4&pG*R)36M207&S2bL^e$o-{~zN{%bUmZe7xZg5pbc)v54r2E>jK#e_Nzy&=sX%O9tqQG~6%apNQK$$|1t zKKd&LM}8U15vn{*-tNhCgC&sg$F<;KahfmyU}^~5lE3m45qI$#wGN9`wGIM03$HrA ztz|TbN*b2B*&XX3*5uCnNTlPMM!##xzfNQ#)9b@t;DQTSM8*T!T zuTS0ZP=pmmQB4Oa^x*YAfhOaNz>?+;;&jI$>X0{=z_5*2cvbtao=Md^aqD~;on^!0 z_@li6K7YnmCl*p|kloTjXL6}` z53-sNsHED3yq^N}1IngZ8d`BZ^yj4>H?=jAH#03WQ<008!Y{_ycm+8cxra?H<aqkaO=_2E8vPLg7*kA1e#0c^cS1!(PLcChvP?$?*}z9KastQSvxz|nFvCXW%@ z=s4EvU@ie(1hNS>MrDjfHqMjvZjl|#k;_QhgucHxg;I6me+{6&AQUDMh8*|(KJPIn znT#Y)B{YcIA^85qDfFZ|Z@f=!gr;|-Ok~JjE=Q+v>TyPdfLdO8 z$Wv5e$IWGS)Rc1Dte4&?_!}ZV{*G^F43jnr!$2V~^Pld5(GYqBbtCS?U;+ROK3j`6 z!~f#QXZuk_3~|}&0NnZDQY65I$=PlaWQ1_xm@Fmib}cAqyqh%iWSNA@p|iS93`~)(Ha<5iy9AqN1;*_+ltmq9(*?}zpzi;jNzH`bl5hBC zVZ9e`-o(EEad`?szdAo=P>k+n$Uu3IVr>jWn)l^sLX{fVjm~qDzjypEMy^Kcf`)Dj zDRU-u)=1y&i}*XKctiA_+Pme0g$Px_k)D83qM(c9*@iF5f&A*6L2_L9rD5;2QisXV z)B+7Da{_pX)c0C0e1XoV)K#D2JMdI#zPbp!4epY;gS$3g;3-H+=SLQ{zANMfGZO3D zt02@$YAJ1RG}(U0_~TrmrC>IQ1tNi=k4sN9|!l1ki?^Pv^r@uK(X!Er)+wQ zgnFmoiLK~@_Dc@02xzPvyW`vOe=bLeFvIDb)0j8j0lqC;2U=Bu zade}%P?2*A@{t9R9?F3Qn3PtW6Yqck00LD3sDh9G>m7<@4Y~L6VZ}2&FTL=C~?xqHM>eWw)I#h_5bT8CA?e)0dtbuUcsf99jIG_&5|89mG)jL|E3N8$45DX%xs>8^Uc95eLQ zwY1p)u??_IF)rY89ZW(sdJ&X{y|#mhfK&g3JC}|p$GFZz-plpU6wd>V4dzb=9MeOK zO9d1DH=bk|F&?BD#MTAUd!nOczC50f`@i9XchJoNT2H14@@J?i`uQWHEj4V@i=O7| zHhGQV5TUl=iFjBMeM_`!_6QqbI_$NJ@XqE^N}3?(h@c zAULT*@r&^i@xES7&xw+- zmCh*II%cw3D(L!j8OUbjXELA>nT72Kom9Vlg(pKocP7rG^MJHoG>^1j7`l5S?e|}~ zlD5iMs#P2I9?SX{7M#_fiw_dF8EOr;M)y^|f!#*)2cBGUJCR);%)t%M8ax|p3Xp2Y zQ~p^Xd9wS}$LNud*yqpluqkHsBuwZAMN+jz5lmNQF>8ue>FC?8I z4?8-s(PjFXZmwODh|kcC-{}2F!>bOgqA=!PeToh^cBt=kA2Gb13GJ&p(ge@1jigm> zk{HGq>3Ft;)%A#=j|CkHo%2j9t^PPT@&q55IPXPXw#L=D!Jv)VL$s~n9q)yla1s(e zSD|tP^rG0vxkRZ?k3mvu2VJ}3Mlyy_Bb{9=99^B}S8AaUWnU3N=xE4ZU}(4bQH8|gRO7WUl%4m_7QdjReO1olP~%#m57^W5QRU)K#I2!pQxSm%uKMf7XX$J zp34PP)62v&g{Usp?;nAr)>Xw9;Nstm&x>18a6Du%NETVWB|qKiotFw~=~r;C!RjK3 z_)Z2$X>8?FFGoaz*3$KsRRP2ecDa_;H-=(aaWZOIofBE%a=?X#@J;+Dxjqqr=V!Qw z*sW+_9mP$ckj2RyEmuY0ep82+y(D2!=*)kw3CuQ z51HGtDVMBG0j%X9M6LGA0Gy`j@!j;C~<|`PHQpSANnV->pv!*KJzut zc7@}Ko>ABHo5Sy-X30VF9OK}8J_L&$pJM{i^ith~hke?T7Y4ixMowL8^#LpIkFjT= z000##A>trQ|Gm5T6ZM&C-T&<+3j5X;=&EuQV{8;=k&RQm78apCZjuYg1`eq(E*f= z-1ZuX3$Mw@LgU@eF4Ym)!u~uVY$!FIN-jXxK4_IArVjIwpr$GKOeLJKT}EJ>RBTXl z_n58DCOzW1uy^w$Z!%vu9Sa^}jnlLK17v5Sr!HY5v)Iu5ZJo5#k>#+NN# z;7EEMRB6l@5v-SqZXm-+;d6mpv%f?by$~SNDiVN+L*v-6E=@WbYR4fNlm8%JPey<0 z(+G99f8Qx|EYWpcwfDwGKnvt`EHEp(zRV3(>#ZQStD-(GQenYLa|>e$fZHkn-BicM zm%EtchnG|8Y>Un6fw-pj^?6BivOGt}&!FEuy_Y7a0i5^osx)zYi1mhQ1buryyI+Kn zlmM|Clm8}cK#9tm{&h0`^^&56+Zsf=Jb)$xV`t`IZSyyF_3J$%oX&HjGJQrdL^Pp| zb>g>64+X=N^dhj~w1LT<(Hg9OkRe^Wm3n(tl965M2S)68VEYA_Xp5>FU?b)3*|Wh> zS!hnvK|K0Zs03aXl1GamvnuGQoVnlRC{aWW0%iC6|2eMq(-j2h`n`kk(rCA6ZEz^8 zIgaA7hgsjd#be0HX>Rc7<=to-C3TjLIyX^sqz9CkBaEpcetC$CW_}p=5+Bh6O=B1P zNH}j}RL;HFK(GC>JNxlY#sXnW8cxyJb zBa8g1|7Njp=)h;j$o7f%S%-4^S7C!qnc~#(?TK6gWg1L_Y5*`3;nsw1-dc(OIMdl0 zH%Hswmqw}yYB;stpL5pnKPX>VMEWWI@j413MW(a#I51+#+GsFGF3I^% z4>5oAhY-#$T*?c3RSy1^Y=O3oGPCb>(fTMMfS-e_vNj=lI z=nutqqeH;DzN>vdj!ISbq|74junL^&A9DzA8|~-9zf(>r73*DK*`|};7xMcr&OFSS z>{g-$oISF3g10wfY}>jIdv}VOClPM^Lc(fWWI-9Z%e&(Z?WO)N%*4fKYP4xncL*q^ z26An8G`@gpxpVqbS)HfLbU@1u^DXo?-dHDvs*!0{cqZk{+F>itM!O3-$A0Foh6o-X zNR#KwL&piW4QN?P4j>D(IdXEzQ}}yi-&=Y@WW{{kGpLg>6^AK9*$Om27jje)+Dyc} zZ30Oe*OZpmaE=7a+R_Q*t1zSgqE_}Gb!Ch-^Zxdz1GW?ogAqqzPurd`I}?QA5GgYt z&pu;Qhx@}D*MgKq-fs5KeDJy*NK1q{t8OMFL^20c@u8`9zJ{U=1qN*g#r@0Z-fcp(`Xq&o_Hc+basR z6p1wl;XMD*Bg0BUu4B=86yPLehnBIkofl=_+Utc@{|2!jl7wijoS8=y&OE1L%=wBK zR4f1w7>o2GrM$qEJ>>Jo5$Bp5(Q8E#kuXnv%FEfA;lgi6J+AdT?ESS=r5RMvel1P@ zGbF!T9oRaotFpd*MwJR(jJE>a(0Hn6q|4$o2sMB>X0FG4G|LZT z)C9EQb$d?;c$*;om0ukBBkx9MPLf+3R12EcM1P`(+9NZGXYo=I5kJt_`UIuV*cyu` zQyl?~89)O}at%maD_$DBEOiwgX1)Bsz{f?A#@rG=%WuM=MDvb9ftA{#tLT&a#sTnwal~ z%@P_OvJ-o{lgSvyE6aJnV01Zd<@J=eLiy$J?V&Rz?-X>|Ay~1k*sg9<<&g8L?W@v5 zQJi#V68Fjn-`?c?{=tDRgK}jD5ha~TZ`gc!0>-LUUs(MR6&mN;t2=a3;3E88_o_$G zixuz5+mb;zhPaH+K{rUxeju|$<0g5s+C#I72WB#lNSm0iWV2|0{s)B-+v$l1J@8Xi zjZgfn*TP{dFPGv?wwLaM9gNy$Gje2-+BuV0_d$x{kw~V}e!Olv`QF`D zUFzi%agF7Eisd;7*}E0nJ8_juv7E~~~^BAlkWM-ciFczlqmv{b6nnsEU$;_HJ#R0Ll?^ zQ^&gXV+JvhMhnmLB;hVF(Y0>xZ_InKhK$tLa#bkpmX6Ak{s2uMV@5dv=oJhK*7QEZ z`w;W~RnaJCYXqgmykQwQ9xB0UXaX;; zZ-!m2($}2y`!`GB{x{|8Nf~%w0Z^bm3C)NSc}GYxOdYrY(@HZ-qW821B5QP~VYn)? zsUgNnjHRZzli<)`vQFO`rUd6Sqkm?}2z|Pmy_sg^%S+9pZ)6Iw=KGlpW$T{Rvcx|k zXxx(d$?_J_Yo|yORmZOsXH5Rn+UT5#9GG=ga?jO3-HUhb=$baj@P`Z;*1?d|zbYyn z!qIZpwgpjdX`_>ARp zO*0q2kN(afx;mDmD=PGD24C?uaTh z)!4WM?GBYP6bM|>k|ox8=$pswhvQlUGjJi1ILX1+z}6`;o&=q=aTe#JypNZ27mocD z>RN6Dvx!^Hg4GR!I*0Vv)ubq(@aphsk8uY)vUZ9!x4aWp06WZJ+(7{UE~8A6NM$O8 zTlIB(dK^L&=>PsHXLhg#&?>IU6Lk_-#c#KElxuE?TmN}FMu)rd=!~c;M771avsSgg zx=sD5Xl94K&R}A0*YaZx)@C^x47&@RdmJ9^z=Cwy+u$EUm8#EdjQu$XW6{YNA!OJh z*MbEh1U%a(81L2THiI;cQXY1>hWWv)dq;5oUQ;+tL6^F^&k_z5rE&HE$$JXlTd#iB zji|Sy#L?1HK11EwmPn=MubJFZ z$UJ8V@uc8=rE13n$D=BUBsJ;zCYzz07+FBDUo7<0j7y9mW>NB}OT)8zyMfM^YO*Mh z8l<3$JERB*fP;a(UvVPQH=COhnS|!`-8DgVvEsCg6hA}PQ`(tYP0x`+E5seR}o&9^6O+I+fSR@d|TlyNQLtI=~*}0}(3T1{q75Esa$&BY6BW?27 zl;l5POzV!F!Oiqyac)pb7z;&t>H-P6ARJ|oGSU1;KxLwMgsRKQ*79ZBleq6jxswdt z8<@I}YG5KCTU?t5Sx~^(4SasmbJ~Zm5wv5+n%Nq{K6Tqryi<0;%%b#3;yyX*M19d) zAdlw~zwZ8ef@w^Jocy0>*>xrUVRia_Bw1?swS1UT&SYSuqcR)sne35SCGjJgOGwba z)9$X_$P0xuXOj6Os9}?4mr{nNLTNWFo{yW(SQ^D_LQCG*GCDOYHSvLq3>@1iTYld~ zb6o(ekwTtQB^P^Tq888Ce9-3xr|>bM{r=`@yH9QvPn z?k%C8%ZFOhpg6DYgknxC8pTMSSv1W;Wd&8P;u@sqWcYJAwwWKgNMe`&q((qgp$N zhI$fn4W0|}CiCE^gO zv6cIB_kUw=Bl#v?dztXt9~O3J*3)*!Keg64cjJjbf`!_5b3f=aqYf`TC9E_RL`2hjobq;@p>coiLs*vIt^o+81RiJ#a{)G+C zooR1$C&jqJ^ssdnq4P^$SmhHrBSF|`=sc#8;mN&?Dywj%k~Ho7cLQSn6-v%J5J3HO zUSO6tqNC}hQL)r!0*S(0<3ir)FQ4o^%#Q-ndyF=u!|Cny``>jkU$?DB_OAfd%!CYe zIZQmW5MC>D;&d0pQi8a4k-^|cn%xWk^s@flF^YW0?NaoW`-G!M{eM!o{LcfD4VhQo zZYiP0E_pB=@5hcPOt6fA;aBl}OMHJ?#U#yFCO9To9(jXji6_q{siJ_`<;}&MUGGry zyuC;0oO{irhCi^@7bpGO9mJV>VDiX2bFJLMhIiCmlJV@o)ZMQ`+)>-s5<@-;J*HEpwaat(}#iKsu(-+BkOQ&8mwBk7S+TrdK-+wi8G%lx&v$gS3s!08lVGo z!;8dEc8Ihuo7WtU^DUN2e?R6I9`k@N9q=Jxuq9x%lGWIBbq|uZS#$*SU|3#>0u2m) zUb}Ftet~elfGqc_Aagn0g1;1^(+ryMvlQv-@l!Xf?K=n(8{KSRDqCV)-x-MYxa<`s zq`PX27-=m=DW;I{l`q@vq{tZ!e8Td--%}w``;!9>qT}~Vbhu+Kz+^mm*A*QD@qnBvB$Bgf^pe6^8rmq%eYQZ9 zu~9DQC(NEwD5TvHyIu)_&QsdWw|+qDv-pNA>&-t(m@XNPmws6q8A`Ov#(b6d+%C#- ztj&z7Qinwc_`%B2+@X4T=s{w9b1}pe$f04CDc{21I$&r^W{eN~%ZP}ly3vXd!_p(S zAbH~NF*H~I=G%HEuCgszH~1fk2#|mM)=Ac3v@7Ecvqq#rN`PQqD0gCgb)RKc{W4_> zfM-z%ZuNUvcf#nydLMroVfBvmc%;CkGdaX0vIIbO^?D%7#cB5>r(%^%0phX~=$exH zg$a=5G*Kw@i66oKu?k;$g}$Hw00j~OsK$@~+9pCsy@L(kIFf&7=!}j`KZm>57Ld?D zjvgd6(BsUSN<@jU_T24d&8WpyflWj7{fU5X6-dl{4~`;(0nx}wz6It@1g3N_>DT9< zS4n}~K9dYkh$-Xp!-E1s1O7Q^N^Gc9aWFRHC4ewH>aq)jh9$pEbKf^iEcp>8paP*s z$apb`_D_!Z>6GBAu^Cd;8toEDXJ}URdQG>YY-}fx%@;$Y6#ysIVvOeYbj6YxthvxZ zjF@ugi&|%_yW$mLP z>aLts7uXF#wZmx8LDx_{MgRw`FT4fy@H`tB%K!idAMdmI(Ur!pE0Qi0Hgu07;OGn& zf9ks}*<<8KxuWE1+NslP?Iyms&AvKVEc`JvE(Nwko`aKSBz>rGZ@b~XlC zxH-<@POP&4WR#rT;kFL2f6E)CkYo7<%m zczSye(CkKI6zdDzJq!YxX~|oLNtEsf(!@j988{g*q{c_15wRl<#c zoYw9qTe*<+fu>~)SG zcMD5r{2oPctPOiG2HUjGTs=$9_F{OY-I|9n zv|!YYl|)l30yRW=rHiTjc?QV<+?znO2AjS|9XBmN6ml{l}@3(E83(%doR!H%x^e<>}9n#ONo zmyr{s+MPGHSq_w46LZU{xN)a~)npthE;RRN&Mi3Ew~APV2#Nd45|~oV|8%R~n#^`P z60i<^t6e$#fq^45dRTZ&;a#*1mz)>)evv2Lu!X_saLvv=y-~v9D-)P)e6}Mzz0DW* zFqTnBLHhOEUU37W4+Yd>J#rq}gOmzZ-P75j&y9#s7}X8!%Md4r<1#~utyNC!e{s_k z`H-m9sXy%p#5qv5HXU`dQPwA2Zh4W&lkCuDudSINFb|}*v3eo_t~g4X7er3!$7G6B zu{Hj_nNkq5DR=9FOD*yTEL+nNZ*_Um=nw1DmDm<%obW{d<|uk%@GqR2LWuoAWEh=Q zbCPy{5$4)ZFtA_DYr?6TFLx2J-D`NM5ZZ2Pf)m%>=6w-04WHLzJ$D>`)oQu%I^N7c zyg%d{2(2rtbj69iSHeOPMJ>JA(nwYjBG;HBW>9bB<(Bri)zHj-gP14pl+%e01^B3v zN)l=Mr({iPr^~5H@n2bCZdOms57WIB{n2AcNH_!pYFK=+gC%zCBYcam(7?zeul58$ z2n9CT%bB=H5&Sv!1w>xU5Ky{IJ{*zS>Ib(&`m zVma?{z9}%VN}Q9~d*P@=1M)OE&t(^mDdOlC)yH2wBo2wY0~s3wY5>484x9jAYj8rG zqsyBt0N(F=6?uqp=Ec>{t4?h?>p@GRSADTRG9mexS~)T7xZ}LFkWgg*ylJu`RwrQg z>3`1kN|sb+?lbtP6VzY^B%6g9t8Sx>O-^lBOwgt3b58}p01QIX$tUhdqf13Y*BO!2ZItdl0TY;ng*P+ZE5*nzQUdztkcaKGD}QKhOy=evO9j(aCacHZUq?<}z#F$11OHFG`Zu-Vdd?IUa&jih9hn z8+JnX#FJ6%UNjs83R%`dl50hdJU`39Qb`T_-B{fBwWkXdWRGUh$r9;SXV^L>xY94p zP<_qMQXq0HI$HNdu4+U&z|(Rx@KPrhbs}0Rfu7 z=(O_0ZLZWxrqSE?L6VLnyVfO1b#xQ( ztXno7b+Mt>`F90OBBWofL`1)?jIjVp(8rgEzlx*ey)UyMv$7QaGs#g2oC$Aic)A!uxO&YRJgF(uG3w|wDmiLD*7f&Co_S;@+nb> zcRrZzdH$zyLUjsv319#ME5wc3Chx1OHUcc>1H|+Zc_j;*Zk)TweAWUdZP@NNsIhZ$#upHUR$hrwMGZ?I=QQ z5ySw7A}4w|7f$`$fXEjU+EU&B#=1wXKp?CXV+2imi)j z)fG5ye|VTSch{64>i`@gzhtt}T@wE>rbFbI*?6mX4+x>ac@9 zr|F1-ydSKp!$c{OU)GJnhM0L1?Er%k)%>XCIkbbT%gx$#aha z;=MC({}UfHv`fO_ddpf2_D|0nxqF`ri#Sz@AmRjw>F!il#LfI@p`^{sfN#@pq4900?fCAyk z<;NToLdN08@Suv>dMkjyIcW9dmA|PTKrLn*0|t~(kb>R`U^707ZZ3*WGwQQ6i(3jd z(1^OIHfjgym}qLS?C5h^*y;b9Mjf*PW6Rv=Pd&~ZCDk}lv>}*$OEBAaba6=!pl3o* z?3fIWVFCQzjrtrh*OyaY(B$xa6;$~%MCZipa_Z%phKgJch3^`oH|EjSc@yk>t*WS>W_iQhU9s z%X(Y^?c~H9(OevIw}2?T!dtR4)K%ldpv(okKB-nfzSyUUG_lMxK-^(Q^9Ng%lM`ac zwx#F;Jisc{|Heqs!!O|4^1tV0wEF~9A46=v_3JzhFpOnZ46UA)bwMa==kxmN9j!ZX-xX+sOF(aG@Y zM&QbrmmF6VQ$90J741uqo^5B9DhLL!?Qsb{iH{Br#qp2%es$X#hFAdW;sY4K9f~^v zFbFhLL6_cGiWx~qbp0T^wUWZ>zmXiCe!T(VcUD7Oe;)?1igoBY?eh+*tQq~QvfwG9 zN~ep!9=pXMD2gLm7HKo52dQMaw4o&!QEtjWV%yfbi&$`^B6gqB+GHYH$CDbgp9S*k zIVe8Fhgvq|X2=@5qWw&t*9qqICc=!1d)}7hs@L4t=WvyrT;;r$4wBw(Zh*&HrzWzP zr4*gjkX$D9hHvprhXJMkgMsFR2@2#{oG&dC(G6#t?lT;s6B<*wUMIxqWzn8oPv1^k z59M^QA@Umw0)8pH3P?LiC~2xPfAgdG1iSXRvn9!iUq11RSD-b4nNcXy#wy@{OukNf zjcENFUZ9N+BLdI$y1}F*#>s{j<)a7IX^&bFpnU92WDbf}6BSQO29T}Fp@EkXx z1_v`HiiU0m?hKGBjUSXE-T1j$E;l|Jl!LrcHolmu0A$hNo_*&D&Ta+^-dx)^p1AoJ<1l`IH zBCVk5A6ytnxJH#i{ZX54*69&^eYOZ?bCXXBxCc;ec}j7MCdF)QZ+eNsdXl?$0PGDl#5tRZD*`K=gC-ow(0RgE6cW@qB9p@OR!}Y3zUSuBjvD17*zk zc?T%`>=Jq_&QcfMhno0`lw1KL$8$MCGE7`Gw;u@n8XKk#+6rxMWOpFQ_fq5Biz&11 zaf315mvH>2cyj|IaaH;0Pk4tz?sf_qyfC@s!qc|XOuHkUfYxF2F%UBpp=Sl;h$!j( zsv?8_m+0Mi&Ex`X}KP`_ruUwVV$tWX;z90Ju2;ZH$}UU|hn1jH5FWB;h`!tX4;|w8q4g)*V!K zWuQ4q@P0qQsw~ODIZrV4Z-c_Np$J+ZFaBM6bVox+_X_GOqz$?G@5o?dF?Q7hKK_MD ztDtH&aoXTD(Q8o;0jR%HRSD%{{EBB8C9pqn)`++B=J5N~O!ic_Qe*D9SwlZ)?qAsWN43iQUxtVA`pf_;WtjhDi^8YnAwA`K2GxsAxwoDtptl7%(Q%4 zw;XFVP-6t-O`=R3b|%LV9jjowF}+i0@=|DoI4R{uF95yf!6*0Rgg>8dR39k20r9hhnU<3wNzM?(xSHZ=Dg^)#nr7kwHm2y6A6IqA68>oeE`Qw#!eHx%~w`&<7PAs#ek)G<-__7NxB zpMl3zOwW8`6_HJx)McXA2)H1RrizVhs?c%{+T)Z zSJy5zrGwe-+=-G#2M5-&^5)kL!RKNF_=XDkf8#8TpSI49p~;nd1I|Ryt5IxyI&0JW z3;DS8_C+w^{Z9UKMVc_r9;BV5-mT&G;MhO=-%&V@a_lPvnfNe{IZ*<<(c&G{msY>v z5T>l;NmxFIk%op(WirZa{o8T6_-Hsrw1T`MBk${s+WB&&7h1se;!EXUesJ|Nbc#}& z-p;b;fqPCpXNM`N-u{xvB;^bX%-pP#*e;vzWKU(4_@=T%fzm-`;qugA*K184Tsk%D zKR?R1fkqN||1V8BKTzK{{MkeV8}gV>O%U_ zp^c|k_!W>n_qJ{T2oo0g(jjUUI7R34w(LH%D2i!?`y~(=hQd1q8$8=aBip$hOEzHs zg?52z6EeJDHfJZMNVYbPSAIe#qXR+%6t)9#@x8~WLYsWt0=uaZb3fZmF>RAgL@C3Q z_{V2wsB(xm5lCTGQi$ojjZ^zYz$)Vr>wcJO+cfes0f>}_fc-4?aPm&_*a~HhMv_Q# z${RgyIejg1jKp$P)D*>6f={qiay5sH%95;|Nf{)1UrP8 zwC)ck?sx?3|)=O<+)&$$DDX((S`@9-zzgchvC;Y;lQ*pUV zzIFHsq{9g>J`t{u*i<4AYAAeJPC@6@asunmLy49iCCq&5>W~KxuafLXP-&;ZI26?@qTFCSqTiXbaa+(kj!jk}K z&2$LlJon))jf+v`-q8-Ut+8GTH~cL}DpdOv(zk@Heepv=v~J&+URzsPPg`0E*G*wOdEJMbsYCG!MTf^u<6^M47M}&Mt zEcOsNJY!-FIsQ~dvRk2`Mw#X@;p&XwG5Q7fDkn!eHS5A&aL3jCOw@BrF9qq~bzxZi z8qxLEhvJzyq;YEbo(64|m(%VRZgM%$x20Y`I=9I-8U6r0c1@zJRoY0FIb3#u8|2>Wcf}sm!E3s& zrGpypQeMmuHPdXGL*Zr%zBJJyrLGh4U|v9xeSDO z_ol!GwFK#TtFoc)?Nlzsi6q5SF~d=|l6&O|yclTAlnst>;6C8@XU20zUpY{heB4g6 zr?341bYfNE@aC!wkSjPE!Sli#+BE7-%;$Eikn|dLh(oK~vC7w46s>xfb+x^{p$v)c z^Q0w%d6SWBp)AVZk2)3TGc$!;J7Z+y7I1j%0+Pi0;o*;ZLe?oiPGWI;NGpCP(t zVP26kA#q3~!;XVm#4pSEa^v$jp3nySF@0Q#n&}!iVm2a9jIo;&t%Jj7J%Yoo zbgf=#7yP{sYIZX@-G8n9lejF!N0C6B-)ZJ8@6!-B`>mSGL-e@zb&{{xM}ogb#4eOX zwo=>CjqrzlFrj?exKh?YWLR6b@Uc{GKNHlV93GqQjUylQ8v@ux8RQg01>J{<97ms$ zp+DxTMZOM;EW5>;2FFtfmWS59f*8}5AUnt^#!sU}I1&ZoU5kzF-vlg#r00ah9=3se^)}uq0$y>2kyRR>$ zvRoYYZNu147mW|}^!)%bkM$r;V)tt5zIPY*$uYkRayRBG_tiCh*EOkNKf~WM=Q4Kk z(81>Ny=qL@OacbpWq%L!fmK-RY^p*ZQgvN4H@s*P8?O9`IFbS|BWQTAbfTY@t z#?vWfB@36?KT#;c*@+a!%h>-UBATH~5?;Ks?CqN@TkJRnRRaqot2^bGw{46)ojKxB z1ymn%==x@2=}S7FYc;G+eMB6kPi4Oc72*5D5rfFp3FAOG<_S zDx+Q@Hqc6f`2@R)qL4@ry#d*2vj_*$_wh=_-lf?X+37;i;uH>AWcT+Jk2R(f)ClWN zhA}`>SzW}1PK^Z%TBQ~15hMo1b&3#Tu;hVygz}t@^lQ_F23N(eTCaL7KbSltns;Fx z*rw3TVl+zo$w)j6vd1!1Aym!lX0zUpEM}BR-w?*vZ-(;iioJK%A9WTSJO*Z`0St_5 zT$KWmF7rdjpxnum_z3vO^J;AdSDCaZ{HT zep(7G=VD_yJ}k`ch{_M7)7-GxY^jRFOfaHZ{mzCg%CRXEmi-kEvW&9X_9A}FuLp!$ z;i~Tx+wu*W`ej;N4ytiffT3?69yZ9S9K@YYeE>>eVs^)%@zzw%S!}tW&_V$o9YMq# zp74V|Bh)khA#x}ynlHBFjZ;e}D+>D0w)JPL+}U{x2cPOLe=3aG*?uBJF2t~Zz+tUY zWB~c(OED-eHThH7qU7Ev$msoDFcgIlvQm9n#Sp(-uv|A60K-cF*CS zR#wq@SN$|9zbQ8wadIbxyri-33+WVp}(01l=hT(P0gu9p0P#bOQ z{2S}lkvnOL-8ljeDbpixSk1_vMQe&sbo=5ZbYuD&)b^2Kk`!N+8cji-$zRFU%FGJF z^ni4XGHXiYw{XP=TtC@sW9aGO#>j*oY~4!t4{^NS%5D1D$XCCEVq6@3c+==uxeO4h zfM^;&@%jp0(hicG{Xo?Y%B^al2K6*bzP07QEK0;p2+4p>jtGrSPJ((XgaljklQ=`U7e_rS204XO0z3u;aly}@@Iq!VaGe1>H#U=HtsE93<<+m z06@n#pU)U`6Jl)pjwIgTvdpSZcPk9)o1CI3LK5CzTi#y+{yTK_&>G#?*;d_RttN48 zJj+Mpj?K0pVMaF*A}Cu#X&}fAXdiyo9wSs zZ#J$kF@V|Qk2P#KlCTFi`ioawauXPpsO80Y?Ig=-ADT|FUd0<Xz~siL#~oY7P)@K0+O8dUd8?m|>BwaxJyM>B=m{)YCaVR<=F<$`}u#=bDB zqQya9(a&SB{y73qL8SApZo^y`dSM5gj#3>!t}ZnP>jG3UN-sl211b>93s5lF@`b<$ zqMGnmnA$(K>b2p0>n`gU#n)M38kB#a-hw!+hP*O%$T z7Z)O1(MnK21nXd=7tcR@AS!QDOHIJt_5C=yuPTqg#G9CgTW-%`JVlA(p_@On{juqH zjIzBQshK@cOZodYK0%>bbuGWvX@t2Ey%XoabCk;lzX!QPzU}p-^!ofp$DmiFM%a0) zVjd?G8ed0GG-(<3{y(feKS$>l?zyB6@o;$rh>X$oVf_-3y*gSyjKDk@8cc>Vq6_%X;Yk;Zo*50=(g=%`;kb;13hxs=5_&UG zNZm1NRGSq{Pqq>8WuJ{cN>qLr67VEwaelF}(g90?Rm31y`ptUMZro1~eh|df+QPKA zYFYW^W(r9d&z?9`(>_^(q%aaSpR+2mhQ6*_I~}vVS%C+Ix+CNEMbaln)J2HmM~;6u zw1ymO494M?PaVCCq3bwy-KSQo-9qMHWAUyI;mN6&b>IofC(S;d2oI9=P5YR&o>ZoR zHb}axT~Y1!X>z>m3#-gR@cXC8P;3_C>h9Dgn_R0yKRL`(!ZX7b7X<#H!@!>CE?Z!Q zrx=+HGBy@6!rSb@`m_GOlUoBJ5MUvT{O87t5x8$4sQaQAR+0T@4@X70Cxa1D>fm9^ z8ZpKbg7-%bO^N_Tjw2SAiDj$^Q2ydeH|0{q%;6G5`A(0Up^HuEayF$}9QFXxR+A%4 z@As7K%ZQty*q7F<++n#9^Zv4VlM$p1@{-0=fJ@6tOJ&8EJF793Rd%0QE*BCQry?nTQiT!{3%Dh~YqnBtR6Y}XnBXk_Hx+Qz zA~sJ;W{IcyIeSEiajCcs<9AW*0^Y@Q)Ea=bM=q%Xb6`OBmjK-UhIAd32~L%F zH~nU9IDG6&wPUR#*;5}g;5)RN%fC3L@k(cMLQ>}=GiwZ78jdXVJ7DNdZ*DEUbNL8W zMLLW5dJymR(6g3JsAT!6VDVF7cUdoNuY2n|>_W-me>^t6Y72klBHBTMc+s&=+!knV z$`s(_f!ovkSc&oSt{ke8tlV#yd~ha6RfNtiucR$NfOZt_UY1nEw(e|z1CGk2M`M$; z%C<)sTHNd_PXj+uJv3=;X3H7xt5{FA{e$I)@#ZQGiZXd`d(!WX{ zM6oU<5Hk?Z%6U*Gfbl$Pthl<690#=wYTJCVVvK_ZZ`dapJcSel)zSAQwyoPly_%YR z#F<%ExOxWWvwVa^;X)*72{u+2>`}TKfsg|<85+KP8FV>!(cHYYevw0o!o3w5n-&$3 zc$=eq7405+InyHwp6p-mvcDa2^N=_`7bumWOApxjXk8W+9AYH6T*hipuvyuNG{Xxuhn$l~ z*?lLUd0crjwUf6w%mE4J10_lF%ZS4UUC-b~&yH3**;(|{PxN(Rh~9BFrqL7Rb7v(F zjB!<70*61z#5rWly&t%YbBa zYk(QP$;RjHTu!b{zn8w+I~&c?AmodXZ?lHn2sBJ45i0U6&}-bfA!jnx?(n#aUaZZEd zJIO~3P{t}ZP^be9_cPRuuM2~d`t8223L}DLVtbgO_kES>7k=nbCP!ZreDlFd#=^vh zV0t0#GcwRvd&spM0~cR1D+hUJq9J4njratlsyc}YEUDS0N$KYn&;uLO1&!0?9@%88 z!7KeA#3jO`0g5Y6u9zQ;m00-UYAxv97$iaES573wT&GIQN9a!s4Ow$AzrE{ZB>u4W z&5WQ2&uh*)D2gNi`6EFfengGM6>o-=q^Y0*C(|c7Q_;uIwDL%DSRQJxexRVdItT7A zC1CG-1ppZD_)_Ih=%`7xk`JT$T$#$m3$q&cXpGxbha}A5s-}Ls6e9 zNf>~j{6Ba_rBP{#z4AZ&)^4;bps7B^gZ)Y4k|rE;w)MUKrsOSV0Zg?-sXpe*p1Vjr zW~Vky%4HiWN6>K)tax9_SVc+hFeY)I^)OoIlwo{@w{;5mPyyFpHIw>%EYaG!}6bo&G6 z#yg43Qi!%En17Y~LoI5CMM9tj4?3t%c5Js}#*c=@Ou-&waUZH1zxA zuTJrjp?g+j3ZG;0jCt;Z8_9AsK$&;%0iA68`gT47-KSRJWuho zx@K|&+fWQ<>w1f3m#sDlSTUq^_RFOnfwi?n>IG;ce|Agd}Vb#_x2cnV^91*y0@R-uE-h`&nH&&$5`+mk(~1? zwW%o+=L7-7JJX$LA2jZ8(|7T;D#d(LfYhefVs3os6z~-C$yweS-l+XH2G*E+g*2=n z$c2Y{&P*Io3W5K5v7me7uEQE2fWD^uK-e5*#keSRsi?K#qEc0+?(!Gt|5;|ih#A0o zRSyCmY6f@fI#B1xdQ>*9Jo*DYS!Zy)>RG(G5<~}AvSr)-=e|Of=a3s3BYyw#ci==v z6G*S+7DC>3K$&D$iv45@ur^Z)+LOdK!*%o# z)JN;Ae(c*qDOq-7gZpo?A#y9ExCk_wSU=&y1R~NN4A3?@EC}48uBK*e>&lc1&|f>h zlPWI;HuEX|`@ztKGc$yf_Vt50H@egQ_3BLdw`{+jrv)x*f<=kpu8MQB^1j;d+C1yy z!W}K(FgM%+?o>6gKg8a!->O|wuapj;;?LfRKw{sFAYe_^D2t7iES-0Y3)dU++2G{G zN>qqs`{I3SOSwIDDvGvs=QEf|2S`l=N~Z8m0?bw}ALyA{9n`#(5VqHLAr@UWJ`b7` za9XH}Yo`wM;IARN&(4Nz`J`ppe1WE@V5D$Ezr+C)EZuz91JIjifSXFre~Smp)kZ4e z$VH#fwmhM(H5vdJHcvRU?m$z~~MdI;3wCo`fXM=dHukS@Dsg!Aurt(O%^ zJg70YD`RpvkUs?}C*nw7F7v2mDV!}(E`h$FvR$MsT`Yn7ifO{* z@_J~XaOAZi$8~9O2i2~Gf9|gkn&ktNLai;W`|xNVph)wWBv#ndS2uu10TMqBbN&Q_ z*7v067sm?|SHC;eI6M|C!?5lEB-YCj6UT*+;(qb0>Oy&}57+w7NyjsogrLV#{+xbu zgb!Wlc)|!U1m-BZka6+>=ivzkA$q4c?E74?Ye`A;uvZa2r_Y*C~AIK0kBJx3Mw~*t`VYN z0URwFn{3dNYm~aYHrPe^yc8P1O&T|3g(QJCHS_7_adfGH0oklr&rFPVFi89A{ZQeD zZHOTzl#k|}w^UoKNO*|asivbF zN1$u6#<%x~IMXTorwL)sgyJd`_{&q=toANv67IB6I&4^5`IOk^3tm`C49;#cMVRqvbH+xhfj#fMU?K_n>dN9#mCkxMEC)6f zE591dSHlI7U$3^!X!IPFTngv2I-UELVy{ERD83Q0HofOMuk+FbPz^S`b_92NA6#Rp zqoJnl0HuoHXONoHRZFV=J3kFAs_9XsFe=@euUl6PQ}0?s9K z=DFh*L2rXQ8H_gCmfTE4y{b<%;kCy)+JqvP&xDD?vmuB&bhEXpU(2L6AUqy<5`N{} zOrckTwUupP)m}#Ck#qxMS(wUy`2JLlCHSrzUn1LYu#2T{vlM2uuFdbuX|SaB73bWU zb>nzhtI9_-gmw5KDf+4rE@9T7QTlvYX(M!<4gh0Ly<>{cHc1)s8YHe;29T7rMGe0D zy?W$mq|*d7Y!~w$gIEiGn5VA+)^wM-0SEa$CD$^9Np|#n>W|Jkr>KA#^=HQ+g!+Wb zk@c}TifW)b0;JH&|0q~76F0?Q6Y?36O*0;~Hlo2I;q^BJ@jg;=L;B=r*UpVcj}Vt# zv-hR*VjB-CU_D$+DeQi(rUNM@J%-HX>xY>(Zfnmo*#u5PF-kpC8JuSLC0Y+Afp_TW z2pxE)IT*e4`sM|F|3x1}V(pbokJD2U`LJ4=IpWVmS)_U8HG~Q9*#4-3LH-t*;&J2E z?BN;6Q}c<2UR!>4YJZ<|&TQ9kwZFw^A#1d6hoP*|&r`T`{j;fWulb{s0 z`UMCu%^&dYrYjjG3Le1-va1FrEQ6S?tI?ft&$KF>TJ^U_7>6i%S5zRyIe!Q@(uo<7 ziT~5T%>W zk@!C2fEd@!Br&*EVZ*Umswl$h1@2pO@+8%37)bNVc!fzf9c zR5+2cjKmor`54uG0JM*#mh>8FFI=#L5PMMP)Y2O#HX(mmc1Mhwj~z*S!nawy9$TtN|jX+mUwk;0Lu(n~{Gax`n5dWHuE z8_OJzCQzVx9!+RsiP}*jwM~UJGk19qDe=Yz^|yZX@nltLxO~}QCL|!ICj|Ls+7XTI24RB$&0w^b{=9!%7k^PC#m0% zSM>T|0(7NUW<_-hnvzIhPEI3*EpZ~v)lmg5IUKPimNZ!$k*{jRPjy1H*=NBrlm(&A zDD34+`3Aup|8b%CgUl6Mn-`>(-ZzL0v7HFMGrbgLxJ61~lpi$S9R-S9OW+Cd#gK^s zj7y83S(iPU;{1b;tc>a1x?1O47&^4L-Pm=#Fdmm60aTnXjj+&WsS0=aska-P2;z%u zpL2v_TFedUob3Q0kmUe=yor_i^`oLiH7m`WSK5XV*;^r)MisW*?Ghlxf^w^b=)k*& zG>bHo{9V*NW7`>p4utaFMcQPjf^fvNj7H{Gfu5U9amW8OML>=rhSErXGq^FDn29h9 zKz4lLj{|t(AtBf^iN8R0uuBY^cRg4=xe6TFkK+9IGsT!xAH+s$*WRMJW&iwBg7)0K z&ASYV)r0aW9izFWz5xB9jXN^OnJHG^da)`XtA)w-lzd4YgM1%OeN}VU$)BrQ1WFB}Q*w~JK1o~8xd#6O6UF4+ohOBXH`&;v2RZGNM z(JI!v`Du^keB7L0-$%Yi#>w?Ckn2_dG4v5Fwr)U}Q2C!KV6{=n$&$q%x37cT} zd59%EDe*UNGu7WEc|<>P5Sq1AVHmNlS?7F;X^ktkjijWf$X5xIkl5Mpjq4R6X56J{ zu@Q=+ri76(s^ZWn?(hs*00`I&ilcrUw1ufDYoK!_<|1$&i3Qm<%~{7YX6DD|V7Gr{ zVV*VcKLprSoYw$18m7rb$}t9qY#G~U)0RMutlxaIw?QXs8(tMuVH&R~mAHFy2R*qj z`31hmzIEMZ_Ma9CPB_=v9wodu(dU00E3xP0%=Fm7u|SQk1W!Om6uzx zWAG)}=Vipxk{2|3s-DQsM#EPHT0)7KR@FzBL>SobUIdq8#%Tw$=0B**OlNq*Re=sN|Fc74*F*ht#79;>nt6KF^R8dP z;s=y>n0`R~L)%!o%)@9g@sbB6imJ?3Zoy%Y7ZPEfQpFl6@D=q_t7f(iEb^%NmZaP_ znT7XS_hc{6Tm#SrE#NAm(`VjL4iI5?iEU#3RBSBMS%kaTOrsTz#e)S%j*6z%J4du& zkcgU4mPYvb0IO;lD$ zVw;5+GD?U501=ZRCC$2JG0S~;|#@V_$K+o)FL-3I%YF$2Z&Y4wKK zw?N!eu?dB4b9q5k2>rQ2ssm~fGvOoaQ5Q<@GC+QBX88GVR~gHi=%kuxOuGCZ%=r>Zs03R zE3y=Vj{R7_@^f0mwK=J`K=EE>(n+Rmz~O2guKk>%6+=r)75@i;c8-{yZlkbjEw-}k z1aclb(~m}w?U~21JVMNVh=DIUMV4lY0kcOB|DI>f?E<&AKDGjhVjR+txZ#RmgYTTG z_`-R;+>K%7xCRFqI5%)WhKEQUU4Sm~!uN9VZS=A9M%O=e4fJg> z5J6*kC}`jrtR|>L<;q$?bndnZP>DE)%;L(IJ}`|c34@kn!uUh6NYQi~I*UAOamMpL zNOSctCh~)~;o*z+BYEoj6Xv5}K327V9O-Co-WXK^RfmHe-U=kuOW7+KFee=eKqvbIvDc{6Er*c^%jyFE$dgF51xoP8)CFqd`0EQNMxqa+9C z8?_UQd@vSvz+Z6nvJwKft5s)8ec9u*I1%}ut-d`$Tu%GZJ8v2y60h`{pg;7|R;%?Gf4FD_KhCe?|5p_q>M zHqg$q*+vkjlAd$L6t;gU{G-ccu>d%*7K;f|R?;=7S z7_B$`_sh_;u#^dMrk6HQ>b###(UP|Q`AYEo`>qS892D)oy$JTA?&+s)rsAdtIP&ic zO47rmQm@f7T+EYZeiL5U5)T4z3OM8yb;)2fc;O%syi z-h7pdKj5hdt%n@9{RdF$;y#5 ze0+wZ-GNFXWG3ndPYrk=pBaijz1OR`M9BNK!618-YA0BaU0V$)Y-qZ6Z-ExmFAE;s zvBds3qqrm80CvAYW8H`a7tBS&3VG0E}wNV&;AO+|`6 z0_P@q%fcL?+64r-S;TgEkIYOA(OH*=Ny4X-r0u>wlh9+1B7i%mNI=>2pV%=6UemQ8 zR^hzvaY%ev>#xC?d9bQwDfF0$zK(zkK9R5Z>#P5p5$D5?MN+%@$_9|Z-szt3@%b(z z=+d0}guCNrz&wqlNs^iJ_@g1?Yfl7qE4Kb3@q(#i5E3RFD^~-cuP?}`@Syl#sx^gh z0B!dIlF9rM>{%o?UW-s^CdDv&HCJGp-&iyxM<9)q*UdgILh(=G+Vecb{#tr|-3+hj z=M(^tvS{|vszPpam^0+MEer{EyCL!@J{m?{T+55Rn1P&$M7T;zeV#U8`8g*Q14)%D z2#Lmg3&Eqyo_!bTf|oZdvhCsB+C;gI4XU2&TU=W?p!bX1u8JUKc0&=Zyl_n3=!m(( zi1;-^&}>~B3NKf=LDr4^$8w+3x9GP?%GcuayiXpYhGL03pyvK^|DaK>a&c4JsFBE@ zqjn4Tyw3l};Gn$L+V!y+Ret3E5Jaxi)6cPM1jH@C*R;oB+{iL(g5Tg16x<2awEj;_3R(1sI#f{b6K4eyc z*8~ovdqI z(_isR>TYRtz3ByDS(;)Qovp4=uy=j&Z4kq-a`&5>vSi-JRl&lvxJ5si3t15uc4I+7tcm6ZgDWvyk(_0kxI5e{RS zgxn&um|-fExVqOS!Cx=#OcUH@}D06essRX-Geczob_+IAeeAxyf&>FpCF z7P9Q>XlTfKWhT)ZcG%<>dZ+;XGfn$d$V#&e>iON%ajvi~AlKt5zu@y#+qrG-cTV-) zUnixUStmm$!AcpcNLa5Fn)ph^h4#qQHc#`f@Nn>#rz^sT^miZba zH5G?&m-@CIP4PB=Z47_5g%Icu4Pu*=vrhY~=Ltq_aR4vQG*_&}p)8045L*%Tl3?iS zyT$BrFrcwt=t}3&W@aqT?3?$#=0$+{q+}lsP2!v&7_a05=}*q#A2435!3jPFgTA|S z!7SRLR7OpgtPaIk^Kt`mL*7*aK%JwIedyC4o*?Gnz21S8!oO_ry8*xr3u1F&?%!`N z_QjGx^as$Zi+U$ENfH56$d6`I!N^pPd4goi(ICo@SsaaKuc=QiY-mZ-cvo; z0Eiq037(KVK3%7NbOP^Vf%P@k2iOLBpkd_?A#@7;p~X@WUJO4Djy9z*++lcTzh=- zjoIjE;dcCF4en;;TcO^s21udeKl0+IHq_(nyZ2|SEn<3=T{N&fT z>KrZk;{Ws)c{B4KyaVE(&N^CqliGV53D)*~eVoEM*op{zLw|O1R+Le~r}+*UYSh&2 z2(1pxgcq1{g0{MEIK`|8G3g9Xqr6q@-ursY^>_Fc&ok*+lG9Kwf6}~teClMBW~%U+0F(L4IR|i$Fu<2TczIKeljpCM zl$0=#x$I@4c}Y|b&!DVDb0t7nhw-1qYusL^+&z11M+fMnB&2K}lO3wgq*o)Wog>v~ zebIg5q8t2PvA09#*^h{jfmkg#IJZm5)BGdW z6>%o8MkV%u!GemNF|d?~AeIG9*a9QBnwXx~t zV2TcX3@J>Ykj?@n_@o@e{GT3NQEDAX8mtyBT)7%)rsjXQ(Q0RlGiiUN2{R5b_sCF@ zDC*IKEcESM^uY(n-D}6qh@4_cC);cNfJTTI+SRq|NA7@+RWe042cO88T8m*Y&J8a! zoCB(`drQsyY?C@!4SRzG!klJP{?3>(T+<7n-H$RUD75R^ELJVQXU###@dBwNwJyN! zZRvw&uX>^8W*{L-s^g|0{bqlK;q7&^ZW@36n_RICQ1!1Wz~N+g2OuT8IFuQW>H$~| zUhP51BtxB1#9`P`HMG6mi7e9WSO{N*=hkW?$mWCA{mSJ>M3Ix|2ktnF5^khZg0ZRu z+*lvm4jN1Mgq_ir9$+noUcr3x=<=v#9Oqu99Wib+_>Ogq*2wo;)=(OV;T=18+TACX%$CNA{4ppUIe}g+())HaWyJKxJ9QksC%((dj z?Q3$vZV8Dnz4G)uK^u~^Hlw#2wQf3AHVGQimO+U#Te zIeb}$eZF508aR5pnAkB+BPF@A-_fmX82TxSjV;t@Lk#xQ7?ZNy6@w8zs&eJMyVC4vO{czV5?|LVfip_E*`3xW_aT*P*Zu5kR$w-$5&> zt!HTo2LQpx7C{Pb(m3={=eM}&w?2D_pu?+d9-q^O>0}1DwS3X2fPaVJ#iYp-O!`F@ z#r%AcRpeS0_VRzy0m!;2`7UA(nq_9Ua2rv^cXfEP&3T*RG-1pdo3 zc5__Gc5!~mcuAi(R}}OZ#(`38ZSus==Ky}JdI1+*`)-|sZ;&qZe+haJGZH%7BpOx{ zwtz$i)Wiqwb#`c#xf=@g3`iEpK5FbkgTg#+=MU!!ZKsUf@*7GbDK`ZaNmpMb8f8+b z^qP%4qR>@z9RpczY?f-V&OMtpW7dSZ&R!GfY7SVe1k%!*;}W{1DV4Z3?>kuABWWZo zg>x^VjdGa2<)V^pD`XqV;#P4YR%4}*+$y(dLaMsjig`Q+cF-Vu8#YFCd|~ zSqhnDNaz+3az91v)nTCw!PU>znr61mlYqn%jZR4PZJcz^Se-<&RQnZD2;C-8@niyS zO&)pg0RC*1fN5h|)Sfi^sl49#L4>_iULD^Hnk{$Tl67(fJxm!k15qge01T5M0O93O zPyfRSW}p*jC`E&N*d71I)=6Em$XjGOuJCD8)O~B!`jmpxJz0?Fnq6A*6<&(S<#t(k z&egwHOH-jQET($ry7isNrOOb{ErVDfW}+{H`O)ogShwr&E!bng#N#oJRdl3J+hz35 z+{KqSFA9{J`y`oU^c5gs=lTZOVLxGee_JII1~K_SE8BF}5=lpSf23W|Wu=kb$t8}x zRvS0910~ELNhMLk7wdbWLOJP+#w(JvlK!}NxfGih(qyouSBCjmdw5=OV9a5&HA@pd zj~or%EoMw8HE>x&!xQw;{QUz>T#@Oc*w!;%Zl%93T;Nbw%) z(oM|LFlktR3j@+1Lb%1rQL;$?OF9B{V|%7Zq9qE?QerbCKI$Xp6sOhLT#&ZYFM_mE;YF}HME zSka(n+;hE68MGm*&j%KI?&I~vs%RM>;OUU0b3Uw(nhkm8 z`MCAS5FSa$u<9i{45?L~e5MwIs4C&(l*z&7y9S8HahSdai?V$}5?MWJPgZkNs=n(( z0eWNedevG?-QcttK|(R_%hZX+15E}P{UGPQw9EyCW@ zhCXGd$!>AOI7{*EX>Pn9En<>a!ew4V{_>DBQpX?S6BbwU{dl4Id|=x{q|1aU^F^rE zr&OtYxse*6GN`fJq+B>te<#E9$9ipRS_1j=a>cBGw2!#02vTz&r4fCn|oLO73aI74E>Sk3lbJDjH%(sXweFh(&E5R<>a7$Vz9*UjI{Q(T;cYYGKMds2@6tpyP z^r!Cjp0P)nxWz;*#Z@y3V6ybIL8+DzKWfz7m8=}e{WU48q<$VNa2C%0US7(W0XOfC z@_qO#bosS-PQ`+`wSru`sQZ-V58XF)7kiP^XT_(sxrkVMw^zi}=&KR|w)7a9TxII9 zN35By7eFl?ll*J`(teYIdu=~IG#myx{PSeE?rv^hidH({$0rXA<}y(lqEHG?LT>+M zU_`6EcQopjkXB)M-zP3@&<>=VdpFvnkw4yx%u!?Qc-qa9eM(5L}5Nm9#B7om&| zD7+>{vAG+^V#th$URPOy1-jrag0HmTW|rSN<%;FDqkQUtbIlTe1v=mbhgs&Nnn?h+ zs|0&dQ$gg9JZ1{7R`Nb0M)QuJnndK{RfT1|BR~0RsF& zk!}l>`bfE1-p)&uO;`~qS% z!}~p5b~=&JC}KRjNuNy>i~G(U1@24VU|t?5&7cqZd3&*FhR^Tz;v93318B@ z7csL7scJzmAD|g)^3DB-J6qyn^Z|Gct!W2Seft?D=;jVy$-e$EnOpe*S`ync4X7fD z2fN6a|Fd?Feea7}`$WQ;w5nFuAw&_H%0LJ%t%r6rRE;XHjcFsB6)G5;I(18fr61ea z5WoJfG~dgQysdG_PRe=V6FV0nwrPPkw8vo`6QST2zJ51Xa`0v_7K7kE2>|J|Lneoi za0?J=fL7;>PY}o+Z@D-;fd&5>3Du*#_QqOiRQ7iA*_%mno|yJ_Qvw*4)+c&u*w0viqX{b4o zPB!Y5WZ1D@1jTfS1u>c)s{Ta4*1%xzm~$$#ev%>%GtTQDNdwIyEUq1&F4XOr)y<`L zvI}=+J6plhA!zP##?47LDW%pMQ#>p)f)H^)`$iBx(}blbYyM-fDZ}0k=}+^*o0cBGlO|% z-b`A^alkiB`bQ!jFULB5n9$_Ep6qiFx{Sqy4R>;7!)zGc8L4?Giux|%IoapH=kg@| zCOEF7w1BWg+n=0EJR@SY|WktKh&`*34<0B;m_jB>2o#&@oz#N@)OKi|Iy7MRC&X>rYt*)gi93 zn@|B7XR4cKmT^^x63+GnfB^21;7bXD`3p7!B7{5UsnAD8(oT z@k&-_`@UqQV`mi506n^xrNAJfgnD>Bnp0<>Xe>;;raqDWkO|Fzi3*L{>hb_MR=BD$ zol5&q;DPu@>0jj0C@(|qGHftu2={hU1|f3cm}0K^-f~pQL4p0bOfuDQU*-2;5##?N zf4gLlCOq##{oN-;IIL{J2l@s0Xmi(@5y#$1IN>C~=wStrQ%KS5} zh&|m+p|o=zLU~$w>PQYM)hE3{eRaC0UGrH|FL2zQ_IxQT$cl8-4?yLPT{f>?wKr|a z63xkVo}kFeQ=oBHK+&mhucsSLQv4}xeBuZSoa%=F02CCzvKy`{=}F%^;k=FF6 z?rrojbYh3yWh(=F>)S+)b#jR3lFe7XKu1vVCCI_H#DxcZ-ewE9D>?htJYUoF5~bXt zYB-7iPnun^y`_OV)Z0kXGno621lvx)Fh{*l8tWxOaJ!xz6$6%;vE7py;QnK{JCVX)PTZJTYN|pQVC2kHM$89 z+qkAOhImkp48}(hU{=@y|Kb==4&}^zDLN!H=S>$2nu_yUPSfF8!y|VC>P-q$e6eR1 zBIacZr_2b9Hi#tOI^YecU|%#w^@f8rj7EfNVr^6E(4v48liL984R|E?sk{Ihg}pos zjkziZuVo%RHesl?+R6Wl@*k@=2# z@uN6o({B?Jh!`ms0V$MD7@Fq>OIXj*sZ?z^k%V~PIHA;v00093KoN)S;FYz^WwFX9 zUy?G+Qod=X^*C-s0F5RO`osIF`=m%|;E<5&V>XYF+I4Dfq{bR&g`mu zNgEoL@S4v&ijTswYW!Q@xTxc^gI zn-apAAt6-2t^XuokxQ4)8+Q)ab!@^`)?QTz2i;p(I-+C%VQ-jWKS5ILlqM94rnMal zD^SCcB0!$?G?CkAcP?)6%h$h_g>9|>xa;|hN;1m47rKtL^Ijh#*;&qVPLs&jHI#W+ zh*N}9$E7%ZUFoyUiON#OxdF?0oHvjO$r#v#RG3r%fJ8t1Hu8Rl8^t| zMkDo`dxk9R-&e|bLUKHlS?CFv)nZeurghrz)#B{as5uf1SLVk6xl%bjo&R3!HuV z_U-MRjV(J$rzNwKxyqy;F2_^HPZe_-OtaiSO8(L@Cme@$0Y&yL9fK@`5Yz}Q*FxKL z459+%rl|UFitJedV$?(RSez)U7%dg7h008H;Srp9t3)V&@uac`lz`2`6|}R8ty9Pc zpm)gfeK=}>MWItt09@@~n3mPqu}MKxCblON=}m48zg()okzTt2G0_;kc^I%$3+h!v z4$M(Z?AP%qNU{&dDxUq6K9v1(HI4sea9#u=C_ z4U7~<7u8Vh$*@S%i|0qj9ESQ*&r3bI%g2SMc&snx`*&J-Ojwt7XH(HBw=m>Dx}Chd z@*eWqU9SHKg8{|iZdGJ4D&o0XV+vevW(7FwuV)td-4)8aPC1%`dj^fz zNTkQZInlNW_w``y_>P%2j&K$ggz%UH?zIwX5 z%HV(7FkSKkV>D?sUlc{t^)J+=D& zxun0E^@QAV?6vpj{LVbK+Npa2;10MrvqCfp8>%2fyuCtVuBQml-I$+oY~(CgoX$qs z*Xh-5Bt#?Q?f)ZcU8%3L7{3PzlxkTbIDh$o;6Fzwx{my;O7b+}r6FWtE*>K8=Nj{< zUKi-CF|RR-;CLVVGC|Kq>fz{OVTr~J7QGYrQOGG_Q}4<^irKke2DQSAT1|x7IN998 z>om#sWNDcApIp%JPN!dt9zcIF=DG8JfLVw0NQ(%bXbLia(UGhI2CbC%vR?wl-Oq<^ zN5E?ki`l*?=_7%bPLO<^AR=-sXE@LQO|9RE=;b+_Y!EmMihay}Sk~(xzA-&VqlC#U z@NuZ9vFGQ+N3}RzL9~H-aIpM4!`gl%BPiLp^c89JH!{(wHPRgMfJVH~e6DDH3#XD` z;b0x9Jf4#uY=vm+3S4g^i-@U!0009D0RZ8tl8^uR+Br=S)%JuRoKY;+$a~E>U&5H6 zXgt6SY0m3xdH6*+)|Drb6&}^I#+Bw2+Cg^#2QCiXJ7f-vA+s&Jb5G+wi0Q)!q-y$k z^u`JKwI&lG4t81V}bs{=nJh5UukkFwQvC+ZHTt-VJz_af{8 zLog;G7WZXDdb;Kl4F$fqEdayf1+uh}Hacf&(sR#mOJI!~u6Z);Uu)WsU@Uegy_Y>h z7}@{2sId#L0+P(#u-An~1?W^D)O*Ycfg-jI{C3+qI!Y2&TF7H3jwoqBtgnUcmaA@S z4=lag+ebBYBPsMi!J(~1M~t_iFfFsyf&gvb-kQpGujXl0T$x?_FMCPMkRG}7sjuy@ zr^5P)$NB`69LLq$I`^w;5sgEPls-`y|HRV8D6(W~MW>flhfmA(EzbaXJnP$r%3^US zF)2>SMoowLoP}|?3rlJV-NWJ=1a*xzG>|^yNWmZDZ(chKmcv+oPh52I04> z3V)-$`$78i9YI3f&Vho{h0T=AgFbAK=)yQSr*+Kio}fc4y}K>b0=>L>?{;wJ42fQ1 z1|8aj*BCPmeZ?G7I(`p4u!5oa9*h0`+x>f|1c?iarLW#KA44lB{}~#mTfuC_5^aHv zcuNvK@~Ro3YHB1L5T}%%uRpEcx$b8!ykhB9FA?&(J6!&H2yX01n`MB9Oql1epZ~#; zWBr_3dAYT%eAJKO4eRsGw`v&0eVBz6E98V_W+AFyh!Sin-tKjR@(egReyr;J@j&Cu zTWCcRJi|Lkp&GUdxx8_={i$`J_C0Bvgtum;cLJzJ>y)N@AZG|O8{k*R&xUJ>H_?}0 z^kDzA_IHK5{*qK`dRmMznOuEEMvJK>JYFbS_4;B%(u6FRKVsU>uuOf}_7L?+2X-0+9 zQ+PN#wwR>}S-||fa9U$Jv}#?%K{m98w4|7W2J)~ZMub&;n76>aH2aQNkE8+Mo1thZ zXE%Z?jnOs%Lps%|YZpLDZ^*=ADdk8#c^~6Yi%9MHkUL5k)Jfp%81?V6%cC91ZpU-H z$gY4A4@Hyq4HxjfD_}2-PItzY0|#E*AFfq_olB3%hyVQ$&v|GciHb<8^XqwNIun}VXIj$_UpnIywa^|90_seiXJpNZ@AhmJGGfKfUk zJn?7;39=3PNS8C=LAjuD;+m0_qDq^ttxFLicLoUM78X^F8a>g+(KdWzXR@LCuyu2M z2O?FRV6z5TYNu#P2`R!*ClCAQE{V7$-8{v%{J~jQIGP7xB3Fe5&4Q3{dX$eCbVT;3 z*fo*u^r=`T0*R$XO?g>{$7k=qE7y?C@ykq!5eC5aX9hBN0-hdYPFs6wNsr@+R^Y z0jlW5!8BNPsT)7%W_qt`ly-KQ&Q>ln_9jgzPbN}kOEPInR5pcD@|NC zQbo{n;PDpu=LA~bhUS7z=)18fHu(WS&fxC51eg|0)UiV0;tmA9YX3z=IKEF0he4#~js+AnRJ&+$;OAZd_FwM^ z{)(!cNAGg8tOsAYu5gA$Pqd%~^@rH+7EDHbJ=E+<>Z)u6 z5Z8ubD_g^gp;3w&#KY(Jr&EwZGI>CE5G5W(?kIP7dW~IYvm0tAi?J$cspLeER@k(N z6$6_qfJZlK94q+!ySza6Zmy=)PP+#~&H zz8^oIr*XG@-%$ST&r0}Jk35dC^rUkn;|`SxfzDKb1N4{%{Bv&P#3$(_7H9$LL+eq5J_9<2@|Q`h`(LQ+`}QE1FNs!pACeXBQ)f^ZFg5(ey6 zSc1hCH}OcS7Klb#WgPGC`#L}Z#(N%|N5-`y8TPlEnHYPbKO^Un0ei?j3 zZ|ByR+r#^3T(Sj)??2QUSVPV%hv(!vj9oD+$71S&RPU6f7hIax{%hiuD9u!=p2mD^ z=@CxJh6K;e`yMIWceIqj)cD`RNE0)#SOE}U=@#HbU%&m6jU2hbHJLd&=53G5TbFN{T@UZ+ z>}lOULKL?Y*43I*c=>(p1Its!zQb@~ZrqhcuKkj6TClE~P~m_yM0fzmv;=;J)!K>S zV?^#G01?V*yP9Vn-?^9vKr@VCn7H6skhW2vY9#ai1~@FUeBhDT6EY7urfL@#VYh8` zt5jT8L3%l@^Ti6KQgJrA(ZrJV+PVx<-9>7f(ANePg1$@3R+3!+t8+xBtzV|Qho-a( zV0Z7Z7n@DJFvkU1?G5}ev%5Lh@|Nzw|;G8WDw)b@a#o~Za7k`k5&5^ zvRXd%kwi~T%!=8Xm>u` zeFI%ohxN`9sNK5Qs@5Fb`>^mO_dT_q0N&Xklfj76JMn$D1ztYvL^DDWjtMxFqdCDy zkcnjM2!m(GS_6UI6ttB#W;kz83BaG`~hPC zms$@k)?TZwO$+;^kw$*p35^K!P*SVgXM=UxNC>968YZ^!J z7;5?)g{G}ss_7O0RHph8O$XOht@QSQkUQkCmebLU>N))XxY#xkY>j)tOM1Fg-D}mh z6bqj5pu@GsSch7^zT+K$Tca` zF5K2vC94-W08Y!Keetw(EteF46OhQuuZH+m1AW6b*@3rhbyH`OGjB6pU{)SdV}VGR z@|u8?Bx~2a0v4j0>@9n2o@CWZe;VpE4%Z)Eb47>j#afx(^>wMB$G&gR}P|}X3PG3qU z+~-^Xg|U+{Dy5xs@;+gfnJLFkZ0cKC{1AIK%C>ZB^<0PcPjuy1G)sJ;{-p%#hK^yA z`Q@98yKuJeFMY>;FR*G$A^1-Y^5DpF+V4ep)zB#p4Au>0>c$~b-{z#j8~GJDO5=PP zg!_ad{Id#twM%LljZdWlBpYH~E2v>36W{ko9Rh&w|87jaevV|k`SIIY>f2XOj1G|~ z%Fb9tR(m+(i9bZaCDXH3X@_KlMhIgh_Jsj~!J)xnZ=KlQZfM%*IjrU$q zo;T?pX%g+9PDkG{KWd3@lrU!mDdP<577zdc2mv7g;pSjZ|HA68(J_p-(qh+G`wP12 z-ye~@an$^s451KaR{IaS$&pG+c1V|h^$Fu0FhUD;2uu!}x+ED=GQ45UQ> zKta*`0=U%S%K`uw-1I<$uH#!zc=e6T45sFZra8laW&^M@5>*)wjXug^I*>#y56F^m zM$cD!R*+Aslj4kCyVx@yjPX4XvXR>Z%o#YX^5)wws)3m5pOQ-$V0V zeUy&$f8{6Gj;+7#ng3l^1$WlQ$%{7_;rrcbLg#kbG@e#NbcSZVzRTNw@V3wK60 zNz!4oKRfPJXW!`rp3_O{`HDVLdt`*8f7Atqai1~iODopb#oyJ-Zed1mmY_raQOQqC zGv>;JnFGspk$c(aSVH}wljv_3A9M?Hknc*Yj7j6;eplgccZnP|22$Eo&%7 zI*h*j<(afmOf3eJb)y{x7~-V|V2~X6E!?96(Ok`slz|;S%oH>+ym2-xd&YgVESpu^ z!S1pQwBqYUK8Ev8|+b$F>lez>I~Q4TP!!B%zM39X8WOzIx~YP=H#l}My4QLaaO zd#Q2*U261eAjXe_39QJKeVd!ocPY93GHJw`At{3w0Kj$3nWI(Oo3>0q4*0;vMN&5| zo@zq2$5-G#INK=c`|}Xe`_0n{KNA1)CBK)wf~INPi<1(1Ui~I z*RlYCih10Jo75CN#6krEw01+%^hj5)z$bge{fnFFM^zFO6d3AcZKxSSsdDzR?`UWxAa6o@?vk;RHv;W#PQH7TpPA0!lpm zYtV|%e2)B={yWw))OqftvXZ^f3`w2(5YV{E(N~<9u6SCNaRL*=vL>6_Ried(IbSH% zJG{uh4XMBq>&$sUg4nh0u}To^K)BJ%2EuF8h<}~E_Y2KdBcS4`eftcqcPyuB^%l=+ ziBrvwkYt0BifVy}#fkTeCX&>o)hX+pevPF1CDq^k2!Wv{NE#7P3vdJ6EAyeKD#HbZ zc-VP;8}p__^n<2-<&Co^cKl!HO z&$n(VO>ADV;MA$32cD?!Wllaf6oA^nc28XKe`0P*nTAas4R}dVAjzzm{FB>B9EeIy zC*pVRo_4prtg|9;abCvc%vQKo*QB|8$e&}~ml&VVS;Y%Lb_B4$d-{4<4k_cCq2PTL z6nguam&zK?nK(bo&q^*6(fTa(78hXc&Qm3MstcNs$QioG_%=7`@0l zzcG=T;m)Z!-H`RD+O`&ty3-8#k|XA+1#2!xMATA#yjP%&(L_x~^keUhPz*_nSy8@$ zs{n(5Ut8DcbetvuKLjsinl=2|6y^LQ0_MH8sbCgR|CY_`1g5`ve;-H`DKjs@x-1cQ zJ$WNY@xFhUG2u3c)D5WX9B8OTL|Fex7h+lX_v_Hhp%6cjl}U`lQUpEF7kzyZUn)co z^eIJ>^<8#wkrJe4qTw9eaCE>KpBo)RwH4_1yA*Xz*Pw4>*J3rqXe-fShb9j=Khody z+56D-0{&MynNtbzh>H+j z^o^7`!ipi~kOMaHQ&kuMUfo|$O7NdijocCI`VRHbLq}-Y$eST=?9GfT_=M4bz~NK{ zV~5azf3&(C{+jBh12kKcNciD6QDjG8k(JJhiyBoE^>;(IeP36O)Wn7>%0cASl`P$+ z(qwT=*lxb<$949pPsE3*F3_(hDNcG6i7cT}`w+VG*a1-^UDhM4lv;b{89!LYsSZfw z2>BenBCbwWSSbWNg{j+eGdISbBl*y5{_65o0GjfCasNw`XBCi|Uk~hzf7&W(Qu*5& zf?{4o+V==CTR90&uWSsa+>*-a9zU=cH|l|}x?cG*j1s|jS)pmQ9ws1dE|Ie5Ol=V& zELENNYEPMzaDa+!%go(NJY{&)BkU*%k6Rkn!55s8Pgo@HnpWV*DE>vAMQ5f?DO+;f z_3J`Hpa6AyZDA(BXCr&d^~k>lcHuPMy&Jc0E9ir?2=w)>0i?Ao{B2%5p4e-)Z8Ea} z00N!?sn(DG{^%=d*nIG#e@Q6U7X!~eNnMN2F${12Q$DkG9bEQTb(TAU)lFQQ&7Cm1 zr2me69#>5PY6cPiwy^FMdp9<-pJ%k$#$=9ZGo(2}mFXC$YTP7cz~a@nRwA$^~Q zrFmN*-^*aiyNFkTWsQDiA|ESs)h{|EaFJ^ly>RwedbL_+kw}UrkE960L8vQSdgFEB z2T&R|t@1FZr|lKrm#gMiPhHZ0L+ioO^S^U_;WuC-KQt$Z!(r1Mn~s~%bDukSGK3sl z{IY7nQA4#4gKLq)>l8J;8S~t}s{x;+Hr7j5v3um{r>vs#7-gT;MsL88`MA@un_!Ax6*3zugh^i?OF2l-LlHxzJPg z19OhbO$Z)uENN+WWHo?%aulelB%Y9Ufu@UfUi8JlT_$J7TidxK$A8N>?+}7~gfHLh z&!E9kSo;zulPthlIv{$5pff(NxDlRZ<_*`M;MvkkLP^$SDtGw%vhrw#lztMQ8cbR^ zx*N1eaxKRX9nL_2o;Sg$OGijwkQA{8i~+}s=?k0G=2ZAZmZhzPc#bs6 zYDIyh*2q>Tcayk3YLvroaJspqdJWaw$T1#t!t^QXH7RCe%Nkqtc##@Y=|Xd>fB*mj zECB%Fsn(DG_}V$8gzr1P9FW)N{New? zV^EHCU^S~>L=h$_2s4nB-v|`oSTduc_#IL2?wqK7h0q{We1=wp&9HG+JFO~a=?^5v zFEpK#c6mM)+K?hbWt$^&1uDhvFU$PHMh!JUIhHygW^v`o=NW(;I*y>UZ_pMTmX@)#_zT(^ zyp3P2&a_FcV|CP%STq>^8!60T9uW6cldEyin zL*Hpk?@K~^Ed;M$JA}cSgDyZaPp-*mKYQ(lOuqp&U;6nHR3?O1g42n5ms(h}$#opX zVtAtXiosslB0fKaA8?BM1aiW?+skM=4J9oDi3BwaHXb!@!B^V$2}cYA^aoz_JoWd4jLbx`>oAOED}Xct5JbX3kx)c2 zGP%6U+l@6&P)#;U6! zF%)EN{y|{IPt?3{JHI`u6{5Vv%g$kxxSsdT>Kt#QX4l(sdqjv}GX{QbEi<_g*GFO4q6)MX--4YZ+Jh=kgTO{&!=CmUI?4ks1}kp4Hd(^Q z7E-m64RTFC9l+oLG!-cbS{juWYEt>B>Bp9p+|k1lYVR&0NryoP)gg1iL@N^_#LL0! z5V&xC2#NBCjv^v+qD{qB<3bSqLpM^+ogV%3#sLeJ@iYF6{%7Knf+J8aYvri5uJuzh zJ`^Tt0UNQv^U3kSfiH{Y6*GPkMU>A;HH(oH+*tzT`3in?dBUpIiuyfu(YD4qN32rD zZLMXgmRM)X3YSWlxVF0O&5*6_iFIhatT#r>oA%g1-~l)lDF|p92t>g`lEjT?9Pay? z^D3K{Cl}0>cWDU{j(}^Nj9CDTX5s;pU)_NXBs8qhmpJ(0zJi9HnS+shr3fb?xm!;e zh`fyC9euLh*s{xYO}XPkya0;&TPtYivQmiXJ;$1-fNVX|4z#rO?osu9(tPwf(M*+x zCGH6+0MSwwmO7k(8Q&1#s6Gv7GxSH5q!{J|rLe|oox#(~8%D`pNUN;x`$(!_Z~;0M zAuMz&1qetqJ{VTowbPcSu5Kl*C8|s(kg#?@MKuMKiAeB!J@Xb6MMU&ML4y&iJ4^ZS zqH25xHZ<=zLSz>zu`P_sfoDGl1<=nj;EMy>Q~0%pq#3QA<|tLbyXnRN z)R{AQ$SlVx+UGlEZ4fvUGim|a1Sputg~(}FD|xg`hW%}5wV*>sr1i*at%+s%2OM^Q zKw7ZPOMlnI4gn|?DGZ_;2?$FvH+JrLoN*O7mo;;nCB=~yQgj^#xkG^f9t)4gor~?W z7Xm%x1((Qx-I$RKUj6>R_xTX04Db_XxyLeTIK>{Spt$8*k3EcnYBM>D%}Fc=dz1m` zK~f_W3Ff_Z8}91X={JLs+%dZf^#i&If3u1Cl)>s@j@V2oSk$pRXi9mMI&Hv^0LEbP z;}TdJ4J_|fUTwKg{1=r;2_R9)h2sk6mwyl(0VWkG45T?Q%G^rc*Q*&dS0-64Bne4f z05Q)ZdiT&J1{tPR7Z}K*YMohX#KJO>pUaT|R^CpB4&VVYhi6GCu*{TsLa!3%zi-k! z-oN88vq*1wR+c5u{yZ0C$fffZW7gX7NKs^)XfX8>vNfw<6(OlbqPoV?}f~zdR2rFsCd-P+B^7S`nkg9S>vn@&{sMi6SGzGyedC9!R zQIz)NlH_0xLm4EJfDK6V&ymq4*%h&6JO_~L^oV`D_*@5dapW^975#feB}~LxkZ9TY zgdqSepM{#JLA0t=t#RT@^h+xTHEn|rfFV7H_g%UH1>gX@DC-HZG3|aQalCQ$_5cHb z0YDWXz!*Cb2ErpCNWxPKt@YjOn&UL_D$#c($sr`D$z2CBMVQB*`bLRYTK$yt+jEbP z#E<}JK;RrCYFHX7XY9hM6}eC&T`mhq4jf<3E1JIM3yx6sT}NOw?v6K^mzxgcfq&BIGG2tG zgAw=WWxa0a(>5LJW|=V;O6fzN2RhH}f6D`a0Xh{a%z6_Dih?4j;5HYxb(O32dag6J zT$gPn%Zf>Iwb0@WV{DrRYlpG?ju9x=N7X3y{$cfDV|H0qIq6sqPCF z-<;i=Pn7jtT-_Hg`YMn%t=RXu{c#Fbn2Fn5`s(FiAN@9cmh7E#9FWYSAWCdskO9F6 zjS1fZ1ZF>iEdi1OMTUE2vVw(@;-lmj&Cfg;%V<$Z(B6glF=i<*7UUJ61|aGO9g3(` zDib{Ebb+|qx)f|GY;HpHzLl%vH-11wJc)>wCBuTD9iPqIc>q8F000000l)z~6)B9f zNfgTS-EUR9-Q63dL~8otSV?nr&R9lSKm0ms?oFZip3uewbUqHP6Os+UI4PT1$+V2< zGTTx4=C_>21Yi;~5!SRC3J9+{1OQ2*`H3Q%Z;f|U$e;BssP?QjNdhV#Q+=;N1EK~AV67H|A7p8iN20Xh{aET|b3NJ2BniCE^VdeM^SCFdM! zNobPW-@Nz^#e-VBXK0Wqtz;6X^D9BF8lFKOek@{3|+6aWCZ0h68kC-#51xxRVn8Jex`TdiKLVoR*wjL==rO^IoPO7vHs@f_0B-TO&M=^s=WKZ-bu z>^G31+)jd4kLpFV=*(w;NZMKG_-03&g z!J~V$fFRFc5i>=muKus+01g2>6)bROIu(S8BdFeS&1Lv-yv?M`y4JXtHB}H|pk_A6 zy1{Ks4YrzLAeRr3!e|{rPZ?oO=5u77RJ)FsnXaP85L!DB?mwx??Q&KJ34Yo2=zJ@z zTvMSLW$Gq_EFVd*yTk3oN1k7?mJjyQ3$qjWdtZP|F!m;U5p`lJ`=X}b4iHCt<@5UY z+5JEPzyUrLAq-SA5Tv1Qt}=IW?q*6CTDhjIN{Xg*4QUgknP7Pt;g|+u>mF5ANVeEC z;KG)OSMB-M+;Im36ZC4pmfyMY6$OA8jD8=+h=D+)z*1N(VPgxgtf27JgrrYLeAR#a zCrpg5e5eZ?Y0!LROSGYQ)Yy>a!Q; zqYh>ijf1!_Llh|EFCS1`dV!Q{&$Iv>0Z0`fOvF0~h`}bfO4QnA>Pp-%btbP@7b+2j zXgc4>xXygz9=40#o#a|pu%o9s1p=~1qK<5vJLUTBd*KVetjGVU9^1@8qrTdw>b^xs zu*8Hi!Tll9hO-EKV^+g%-s=;5Gold)kx{@YCK#3zkZw1iL5s%iiyz-K(uYv?9l1#n zC<-tPO_CW(4d@MuSt^^Cyna>1AqZe z6(KCt88k-W7j!dMtBjmC@qoo56`p03J|&>t|WIZdqmsEf2ki4TV$_M1cI~@4ZkWs?MNW3On)~ z1oe~}117;u!fDVEjACzYm@_P*<4Roc+&Vocfs!{uK`bPVb24o(oly)8At+e56sUI4 zYu9U$Qco{^uR@XCr|kd(fB{MsAdIv@5dtGXl3Xbzaf!Y%a*b^ymwL6^5g4w3c5pP6 z`@c*F9?nr{`#On0`CQG3h5lJWLv-ajQ!I42+P}&y%=)|-Lz zo}N7Mnd{YdWgz0gfG7Zfwpz-@9XY#NOLw|at?iiuH5x0}c;i-{W5wXRb_eWC z69Qng(Xd*kLoqTo1PXh1#oR;(K#sVNgys?Lgk=mO2k<%|02~286(KC*F^H0)W-Th5 zQzl6=E^6h(l!BF@>J^$mN7L(Qg#<>#vY-=$q@41H8XFBjgp+RJI+>V?t&k`QC?>fM z*qZqwPy$sN^%Luu^poAh64gKXRmFA04nDt0~k?NFqO}Ec!{!^jr(m z0CoKz53m3n0Y()e45|wXgn|S~EFD!CQ)-d6YI#0IsXZS?Jw{^EYW(EQ)ktF%)*-T`B?Yt+B)o{3n* z2EjX%gXLS<+P}zm2QYGU5nG=~M6oNOei|3$gC10~LW}>H;e7qEa=C3T$wgT@f%mo(;1Ay1lzj)u*=)6hmT`fPGcw0f8C}2nIMllspx)W$;}X6 zkvh{D{|ee>2jtsw^Iv=U-~iwOP8A^y0V)iPWEY0AaZIYqq?1#QCCQNnbG`!0jpS#s zS6|yIsSunU_Yf~g4foE+6w1x1$PB9?UAQ|L)W!mMU||={i~$QUE%<;N1>&t<3aAvp z13zrY`yx0c)g77h@86R-ZjZD&&ro=n9_Oh=ZV0sGCwe3D{g#J;luC9xBCrn9PXPwe z-@N1jl!}Z=Op6K6mGgoO9u~Rh?${=bu!S(ULAu4)e<%(CIu#)e0x}3rqk4*)OO;fa zYLZLh<-#CUa04%^bXW_}WQ5ALD9kw%{O1tPV|%1gj-UmI0&Vyihy^GYh}f;G(d9+7 z00V1LZl_d~3000rcA?I*U|Evbj?r4Q~YulEV?>aU}GU`J? zq|?(&wUF-~?hz~z*xyOY!Jf#3Mk;`8iuYmerKzbJXcEarpNZoMl*jh!Atky%$=r2T zwTN}1e4eRX%pm~-o^4Z;o6oJ88>i`H!yXOc1t40*HmG2O(uywyANdv*p72ltal~G!bspm3TCdFQFr^d$-+>RnJyD4W@Q#vHv8966 z#S7#*ucF4vI5l^tz{2|#+9)ki^DFU>*1jpB(Mb1L^OP?69dhl}cfX);8+P6Ew`snR zjoP$|Z&~!Ol$Z)3Vk*Tq6ASY@t;vyl)pG#x=c!p2?fjKOSN>T9y2o>0xgGrEd%4@q zrwQO__3e4KnPqpgak5v*dw>=7{vzANKvlr2`UX)H38I%DIAl9$c?x9^jRc7oAjo8@ z;v2M=TnYMWr$IgPb>k9d{q3_Q4mwLRxb&?h9w=tQEsyPppz013W!7?fJHsQG7@HfUD1 z88lbj3}j7`St9r{VYQBngfJeE!-ad?C1^tn<;*K!d>Rg}42iLk`-(Xv>P~OcS&5;^ zF;Cd=SWE`L+#$~XvkO}{|KGDpH;c+I7lUI_)fB=<6oPB89w=QMxzw*A0tNWfqglqt z4BbYQ^zI)X&w_08sK`G6XcwVYXN^<%(X(Ms(-yVG)Mi(8yu~g~qN`s}qSaQ(ciq(e zc%(dR=qla{e07^y6O0&|*H5}i4nDBE~ z!zvtZG;q}$PLIo+Etlzj1FT9|VtqZN@dMw0*^s8{wxxqac781e;m`1N;%$-E1Tq~N z`zt=K=u=^cH64OX=?(851}_^{lpy|JRes7gP=Nnq?p<7ttgu}Gcuw4J#X;OZXFg=+ zgR#e8qU*&2#vD`uD&DOZ97jvp?v{&X!Rp(Kw#rQVr zP|aZXyu=m|417UrQ6;|NgnD`{Y;0zma@0x&)`VmWHB=bk*pHQ$D5=$@JQRszUD_@}58*%WZ~I&K_(S z2WLSBNg>oK(X~)z?4J(8$~EyB0<@ijZCU*-i8dWj%@*X#FfM>9;2Q&M52 zAc;_b%h`r&9MrY{J)^rAltD1y$Fxw*d7Di;nQ4l=+Y{rWY!NRL zEpYT@B-lsoB!p3!3d)l4KxYz_>IRl1Pt}GGn+R zJK5*XUAnitB~e$tvhj50BO-Q3G#B~PNW%`r}N6BrU0 zZV<&Br>9EV09Kgp2kQdGMl&9AIy4Xx8g#o!~IP_mL> zW9lX&!nfD!BYFORhYZ($#am0SulE*M?Ncia9wVrW8db{n+staiE(qKUmP)&Y!OQL-tx?;ka zU2syv&Yen*p^61DP#ReL9XIK=;w4m*azE5WEayMHBi*3d4jI z7w4fZ>xvw=N+~=IRt)LBWp^jVm*3f)gt-UZEN^7#%)q)lt-TrLx{TD$zCtj=6&q?7u7p;pjl>hD1^F<8_^Mf!lY9JlbOGxoY*lUv5_{ zoCyQ8^H||x0121kl9)18n&4&Vv$Jq8>`V)&X3ROsnf|OEDarlhC{+WAlHTJuKtf3= zg8=MQ@jczfQJvG6a`pFPRS^406n7tC3Fhcjh3M}kRQC3>T0;)&%M1T_b+f0kCsQjL z9horTR;`6u#sgSpPn^jRw%vr3fKf#LfqX-<$4P}^Q$d*p7I}F&(!*@;b94{j9Eq$)dJ|6?^5UkE;ZA6 zO$ET>65zEvXJjfuO2pU?>_94leIsLObMyql`Sc&4A6-++iY|Y{pS$k~ZTQScC{2*G z!wG#t8^DV91`UmFH*UQPzT{hukxIdH*B^8eu=>*kUl*A& zEbP>szfDP$o&pBX!CtY|Q!9_Fc`~lla_o1Bra)%>4j5^;SPe6b-`~%uGR}gV;BT%` zXHVL4!8J>Fn!a7@DzA_xW@CYgjeUb?#cVxx+&f3g5zL`hv3r5kL0*0|r~E2FanklI<5*^*JtNG1MHg?>B*dnO~ALM7fME$u`xh({I!s<6j=5)M)y%fFB9)?A`-CQotU$jJ%p&c$=jhL3!c60LJ!%5M> zFs3Jo6GzWW%qz*Qj%ap{0>QxO>Lv>vXkSw$_;bdrFfR)oAPoQ~w1zt=AL;*v-b2Za zA9u8Rg++?0DMYKws)KMsJs%4DLWD`4LKsmiTDYRM_g!?84{Xi$FZi*#^17v0dXtoid?QaiEfL%qsb*60z z+Xt6Ao%58q$PXoRtu9i6Ui|{)zl2Rrm8EEc4|NshALi+*ZsffQ_Ps2${_gYrZYa>> z?uZt($!-Bi?m=6o&%RCu#<_}ZZ4e+Wtpssw>$hivC_dWV_(;tb^eB3;ty7J%n79GK zW_(3~R0ca02H~gHIs^hXsAV9PjB_9?jb5G;8_=rtG**}dLVSz-D5c^Gz$r*3&GCLV3u5O7$klb97VdM9O?WVjC?hH^87vTfO9N-Tq)y zpdOWxjpq$o-yvCt^;J7bK5Q;cfA1QC{*%fgLsBNbda_KRC>P>d-Irn}K8{CE65g(O zH5Hw!GG;RIOC{#}6a3ffum(S6xgA7?J1<36SjwEr=KGgc0ZIr2stPfCj-BdqhiU*NjiPdBt#3!AHq9pEwLiN9QiZWN(qYRgFOMz_ya6flwW3E|H2OVAEg zs2W&Ij>K%5HUMp0V^lD0q|xR|$S8xlB(#n$l~<)SVty!)bbUII5FOm-xsM`MRg4#f zOsx+vZ*LZ}Iuy+nR3MrRF9aFv2H?Vta|D9Xm8Nsh9ySTP@>uqEN55 zNu|QTq!Lb{Zg^NnQ#A)1U`TA2zP&OMAU+x9ncl|#GpE{nd@2BE4n9t^{_x*G+tq`} zbX*%G9$xEs~dP$%6j-wW>6$18kAcE?}{F<^u(j6pgpBQKz~aqGjvA_ZV;3r7B|aOwix_jF~l z_l`0Zp=y(r7whuO+TS|CEZEDtE6fg$Fuz!iboQObxvK)u5bI+%2N2++ey;E^C6Rq2 z#NBTcx{dYZi*zfnA^Dg(P%fENwx-3P@Qy8P7_jA`5>dj2w)W@L(k}8Dj5*9nK~;xb zw1ZRcGSz*}2U{W}W*DY6M;AZLU4b+|lnk9@I5WQsED85cphW7MMYbWjdNM0TIMcEK zk~)}vJ~rog^7p@L$;fzUn(NuA^QcR~4+H#)>pEgSnM1^@4!Pj8K&72kn*|AX>N?mK z%H(GK#R%|^aFik8Rdk4#gao@zh^|lE$3vkmvP}}fs)j**6=h4m-P+Y;&Jj+nsg~Mm zNXVp&_|I*IlfbpB2-}DsqjpA#LTtJdV&G|igV}AH*sw95uiifBBpeFuc$vodu^nRLl&>U+%(~ml@{@)abv*gZ}{B;eTGjRzhz;D%v87jebP;~ko2AqjMInwKaNu+Keg~BU28;Dxdl(KlxU}vdrDUb ze%)^Q{LeM|!TbVmlz|^nLarE=G|wQJ`;MA;R|FtFpI$s^Y@$!8@Pf36CkilrQMle*e zjIzO-MpQj&Et#!kSzom1AsOP!LD+J1QDR!{(Pz%raXk0eC94R=W``K=HFj3a6$h++ z9R%cghqfW|Ub-TO?6o)~p=Chnh5ca>KF9Aot?9V4FxrH(X06c2<=^2upqtr*<2i|r zK8gsqxGBmnYn)G-IaZ)RK}`P>%`=r8LBX^-(4^t^7BFZ|$n!H|h|{RQX}SnqvoW=3 zE_A(n7yZPrJ1JNZO;(W+ZX2Z`c02_{W|%@Cm4aoq-n#_EN7k-J=LEoT?lHyxuW*J+ z-c(qtvVQ@q0pG#d<9p)it)-N;?k#a;ws=20?!lh=`G}9- zr;}2SmU+@G!gPR?lZtY!v;_C^*TWHMBREsQ01s6m z0O99wPygCC2juScLke!A0X~UK$4);1X6C{Y8haO6x>CPQce+2O_ zARlFh;)_u<>Me-FWJ)a%pi5L|v{mJb;9%H#RPT{D!BzyJ+~mnBW~KjTBh+ zbe+G{BY$-sHvDA&9- zT@>)80iDDbb!B(O^j0>5z5zxHK)bR?1G^EXBa1QXRG)(n-~UqrDwY48B@m^fG&LGN zmSKm9bY>Yu3X6QJ%PLblcwVXXw=dot{icMDB?Qm~xA`)TP4E8_vh!^KfWtLV|+7Pfpi8p)9QoqH3}q(3ku+X8+P!E;G5_&R)+&UjEu5p zEtfI(eXBf}x{A}i1GYVBJ%RDZ_79_PEDN+P1&?FrGaq#MSg`+!{YrYo&Vf`NucA0` zI+>PJ$kcXF6M)JTkxR6Eo_e>=P zot7r*SfpTUI!u_^%N8w!Qo0SWVJ}RN3I_{?#jofb`m|7HNquv9o6%_5Y0gH;N%`mPb;2|K_y$#|eG9i~(gx6ho6vuWN)|EJw^ zLAP;kvBBF*=JKHIA2BUHeag{dfW`PBvKjCP=!Nu+vmRax>xpM8aAg5ckhpW+svwVo zM+X)(%$@tPoLN;-cJ*KpMrs1Ev2=|1MU>+0DkE)E8DP zgkd`r8BFyObdS3`REoZ4c#MC%hE13SRYyZ0Pi*t%B#iK979zwgP%eqDF6Y;!vV-NC zgB%J-?ccZj)xRcu5Md{IPk9#vex@f!%q*jk2|>VLM8_W}!g+^@wpcxWWp1##!E0g%I)U*D8T#9@3B3IMSeWwYOS06 zFrr_}pZuKV71kOjZcgU*V)$_Yna;9+QU@ux1Tx>>dE(^$K(t9s!IYKlgD)kU@v=UW zZPUO{f*U74zvY;CNJbs1a)N#Kz`a>DFY$0!NQxOVc-LQz;60~%$ZO2hDP+oHFkKvy zH)QR-Dyy~V{j?A{VF9c5Yj8}duU>&2c6(-W8aGG$SWDqD7PCIXwL!};Rslsq%YiUo zJmq;=K$f@Q!mjbBt)GhWEOKiT|Lca0sM4-=eawt51Ei5Rh~ZaaHlk23sjf27pcu>J zjJ~=Fdj6ItY$^vHshKN8OivfD zZ`C>d$UnVLJMw}`Q$VpCD$ayqDS6}mV?7s8L1%dO5zs~6q%0AwFd_~rpMl_ga&hcj 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

    M`UCFJj5|L&O?= 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

    >1Na31bR^(_8R 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

    2CuBov?@=#r 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

    q{ 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

    Ngq; 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尌Ko^u{bC?e!H8HNRF6@;k> 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 S*x9)_SXnt(IXSpEApZ}#kEPrI literal 0 HcmV?d00001 From 1d7db8409013fd8c2a3b0520db4d3010b613eacc Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Thu, 11 Feb 2021 21:36:26 -0500 Subject: [PATCH 271/345] Update audio.html --- templates/display/audio.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/display/audio.html b/templates/display/audio.html index bc90ca1..43ca92c 100644 --- a/templates/display/audio.html +++ b/templates/display/audio.html @@ -6,7 +6,7 @@ - + {% endblock %} From a4465764dac44739bbcfca6144591d4a5be16e35 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Thu, 11 Feb 2021 21:38:08 -0500 Subject: [PATCH 272/345] remove container test --- static/container.html | 19 ------------------- static/example.mp4 | Bin 909649 -> 0 bytes templates/display/audio.html | 8 +------- 3 files changed, 1 insertion(+), 26 deletions(-) delete mode 100644 static/container.html delete mode 100644 static/example.mp4 diff --git a/static/container.html b/static/container.html deleted file mode 100644 index dd74ba2..0000000 --- a/static/container.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/static/example.mp4 b/static/example.mp4 deleted file mode 100644 index bdf7117e8f15f4c207aea28d7b165e53af770844..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 909649 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%0AwFd_~rpMl_ga&hcj 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

    M`UCFJj5|L&O?= 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

    >1Na31bR^(_8R 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

    2CuBov?@=#r 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

    q{ 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

    Ngq; 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尌Ko^u{bC?e!H8HNRF6@;k> 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 S*x9)_SXnt(IXSpEApZ}#kEPrI diff --git a/templates/display/audio.html b/templates/display/audio.html index 43ca92c..68d461e 100644 --- a/templates/display/audio.html +++ b/templates/display/audio.html @@ -1,13 +1,7 @@ {% extends "base.html" %} {% block head %} - - - - - - - + {% endblock %} From 83da9c898d2c5fd085ef42c912f2d85bebd85742 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Fri, 12 Feb 2021 22:27:19 -0500 Subject: [PATCH 273/345] Update server.go --- server.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/server.go b/server.go index 5b0771f..7c56639 100644 --- a/server.go +++ b/server.go @@ -273,16 +273,16 @@ func main() { flag.StringVar(&Config.remoteAuthFile, "remoteauthfile", "", "path to a file containing newline-separated scrypted auth keys for remote uploads") flag.StringVar(&Config.contentSecurityPolicy, "contentsecuritypolicy", - "", + "default-src 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; frame-ancestors 'self';", "value of default Content-Security-Policy header") flag.StringVar(&Config.fileContentSecurityPolicy, "filecontentsecuritypolicy", - "", + "default-src 'none'; img-src 'self'; object-src 'self'; media-src 'self'; style-src 'self' 'unsafe-inline'; frame-ancestors 'self';", "value of Content-Security-Policy header for file access") flag.StringVar(&Config.referrerPolicy, "referrerpolicy", - "", + "same-origin", "value of default Referrer-Policy header") flag.StringVar(&Config.fileReferrerPolicy, "filereferrerpolicy", - "", + "same-origin", "value of Referrer-Policy header for file access") flag.StringVar(&Config.xFrameOptions, "xframeoptions", "", "value of X-Frame-Options header") From 0a63826e4dd802f056f64ec933712ce7e98a9302 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Fri, 19 Feb 2021 14:10:14 -0500 Subject: [PATCH 274/345] Creating a sample demonstration. --- static/mdpages/Sample.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 static/mdpages/Sample.md diff --git a/static/mdpages/Sample.md b/static/mdpages/Sample.md new file mode 100644 index 0000000..7f52483 --- /dev/null +++ b/static/mdpages/Sample.md @@ -0,0 +1,5 @@ +## Sample + +A sample custom page for use with the custom pages plugin. + +`custompagespath = /path/to/linx-server/static/mdpages` From 5ac71915de5bf10d472116a098f7684d4bc04f1f Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Fri, 19 Feb 2021 14:13:22 -0500 Subject: [PATCH 275/345] Update Sample.md --- static/mdpages/Sample.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/static/mdpages/Sample.md b/static/mdpages/Sample.md index 7f52483..9b3956a 100644 --- a/static/mdpages/Sample.md +++ b/static/mdpages/Sample.md @@ -1,5 +1,3 @@ -## Sample - A sample custom page for use with the custom pages plugin. `custompagespath = /path/to/linx-server/static/mdpages` From df5b563de54c22a0d40893772c345b983167e308 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Fri, 19 Feb 2021 21:30:31 -0500 Subject: [PATCH 276/345] Add more time options. A requested feature was to add multiple other time options for manual uploads. --- expiry.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/expiry.go b/expiry.go index 63b7757..f17f7cd 100644 --- a/expiry.go +++ b/expiry.go @@ -11,6 +11,10 @@ var defaultExpiryList = []uint64{ 60, 300, 3600, + 7200, + 14400, + 28800, + 43200, 86400, 604800, 2419200, From 0f0753ad601474682192e3727455a9371588a940 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 00:15:30 -0500 Subject: [PATCH 277/345] ShareX URL Delete compatibility --- delete.go | 8 ++++++-- put.icu.sxcu | 11 +++++++++++ server.go | 4 +++- 3 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 put.icu.sxcu diff --git a/delete.go b/delete.go index 38e36e3..b2d0ad7 100644 --- a/delete.go +++ b/delete.go @@ -10,9 +10,13 @@ import ( func deleteHandler(c web.C, w http.ResponseWriter, r *http.Request) { requestKey := r.Header.Get("Linx-Delete-Key") - + urlRequestKey := r.URL.Query().Get("linx-delete-key") + if len(urlRequestKey) > 0 { + requestKey := urlRequestKey + } + filename := c.URLParams["name"] - + // Ensure that file exists and delete key is correct metadata, err := storageBackend.Head(filename) if err == backends.NotFoundErr { diff --git a/put.icu.sxcu b/put.icu.sxcu new file mode 100644 index 0000000..99fa524 --- /dev/null +++ b/put.icu.sxcu @@ -0,0 +1,11 @@ +{ + "Version": "13.1.0", + "DestinationType": "ImageUploader, FileUploader", + "RequestMethod": "PUT", + "RequestURL": "https://put.icu/upload/", + "Headers": { + "Accept": "application/json" + }, + "Body": "Binary", + "URL": "$json:url$" +} \ No newline at end of file diff --git a/server.go b/server.go index 7c56639..fcce5ce 100644 --- a/server.go +++ b/server.go @@ -212,7 +212,9 @@ func setup() *web.Mux { mux.Put(Config.sitePath+"upload/:name", uploadPutHandler) mux.Delete(Config.sitePath+":name", deleteHandler) - + // Adding new delete path method to make linx-server usable with ShareX. + mux.Get(Config.sitePath+"delete/:name", deleteHandler) + mux.Get(Config.sitePath+"static/*", staticHandler) mux.Get(Config.sitePath+"favicon.ico", staticHandler) mux.Get(Config.sitePath+"robots.txt", staticHandler) From d8e0398919931408caf4dc07b0d4a277bfd4a288 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 00:27:16 -0500 Subject: [PATCH 278/345] Update delete.go --- delete.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/delete.go b/delete.go index b2d0ad7..2fd220e 100644 --- a/delete.go +++ b/delete.go @@ -10,9 +10,9 @@ import ( func deleteHandler(c web.C, w http.ResponseWriter, r *http.Request) { requestKey := r.Header.Get("Linx-Delete-Key") - urlRequestKey := r.URL.Query().Get("linx-delete-key") - if len(urlRequestKey) > 0 { - requestKey := urlRequestKey + + if len(r.URL.Query().Get("linx-delete-key")) > 0 { + requestKey := r.URL.Query().Get("linx-delete-key") } filename := c.URLParams["name"] From 84f455da418abf109791bcc84a48e8ec613ac2ad Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 00:28:25 -0500 Subject: [PATCH 279/345] Update delete.go --- delete.go | 1 + 1 file changed, 1 insertion(+) diff --git a/delete.go b/delete.go index 2fd220e..30bd2bb 100644 --- a/delete.go +++ b/delete.go @@ -12,6 +12,7 @@ func deleteHandler(c web.C, w http.ResponseWriter, r *http.Request) { requestKey := r.Header.Get("Linx-Delete-Key") if len(r.URL.Query().Get("linx-delete-key")) > 0 { + _ := requestKey requestKey := r.URL.Query().Get("linx-delete-key") } From 5f8ed2aa475e62d1f8e988a6be9daac6c06cf3c4 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 00:29:53 -0500 Subject: [PATCH 280/345] Update delete.go --- delete.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/delete.go b/delete.go index 30bd2bb..3f8e429 100644 --- a/delete.go +++ b/delete.go @@ -12,8 +12,7 @@ func deleteHandler(c web.C, w http.ResponseWriter, r *http.Request) { requestKey := r.Header.Get("Linx-Delete-Key") if len(r.URL.Query().Get("linx-delete-key")) > 0 { - _ := requestKey - requestKey := r.URL.Query().Get("linx-delete-key") + requestKey = r.URL.Query().Get("linx-delete-key") } filename := c.URLParams["name"] From 9d9f5b3a69bd603cfdf633ee8455f9cc3a6c319c Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 00:45:07 -0500 Subject: [PATCH 281/345] Deletion via GET request (URL) is now possible. This enables better compatibility with ShareX, an open source screenshot tool. --- put.icu.sxcu | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/put.icu.sxcu b/put.icu.sxcu index 99fa524..f30b2aa 100644 --- a/put.icu.sxcu +++ b/put.icu.sxcu @@ -4,8 +4,10 @@ "RequestMethod": "PUT", "RequestURL": "https://put.icu/upload/", "Headers": { + "Linx-Delete-Key": "testkey", "Accept": "application/json" }, "Body": "Binary", - "URL": "$json:url$" + "URL": "$json:url$", + "DeletionURL": "https://put.icu/delete/$json:filename$?linx-delete-key=$json:delete_key$" } \ No newline at end of file From b8f4b55f0536078127441a9adfef69e2aee37575 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 20:40:10 -0500 Subject: [PATCH 282/345] Content-Length rejection if specified larger than allowed size. --- upload.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/upload.go b/upload.go index b5e5a83..d91e182 100644 --- a/upload.go +++ b/upload.go @@ -228,6 +228,11 @@ func uploadRemote(c web.C, w http.ResponseWriter, r *http.Request) { } func uploadHeaderProcess(r *http.Request, upReq *UploadRequest) { + if len(r.Header.Get("Content-Length") > 0 { + if r.Header.Get("Content-Length") > Config.maxSize { + upReq.size = r.Header.Get("Content-Length") + } + } if r.Header.Get("Linx-Randomize") == "yes" { upReq.randomBarename = true } From 49161feb7a0ba9f73c77c3179ae58a5717110591 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 20:40:53 -0500 Subject: [PATCH 283/345] Update upload.go --- upload.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/upload.go b/upload.go index d91e182..bca37e6 100644 --- a/upload.go +++ b/upload.go @@ -228,7 +228,7 @@ func uploadRemote(c web.C, w http.ResponseWriter, r *http.Request) { } func uploadHeaderProcess(r *http.Request, upReq *UploadRequest) { - if len(r.Header.Get("Content-Length") > 0 { + if len(r.Header.Get("Content-Length")) > 0 { if r.Header.Get("Content-Length") > Config.maxSize { upReq.size = r.Header.Get("Content-Length") } From fb1ec8a64cd869d83a6d200fd49dd14ab048589e Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 20:43:38 -0500 Subject: [PATCH 284/345] Update upload.go --- upload.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/upload.go b/upload.go index bca37e6..719eb2c 100644 --- a/upload.go +++ b/upload.go @@ -229,7 +229,7 @@ func uploadRemote(c web.C, w http.ResponseWriter, r *http.Request) { func uploadHeaderProcess(r *http.Request, upReq *UploadRequest) { if len(r.Header.Get("Content-Length")) > 0 { - if r.Header.Get("Content-Length") > Config.maxSize { + if (strconf.Atoi(r.Header.Get("Content-Length")) > Config.maxSize { upReq.size = r.Header.Get("Content-Length") } } From 486e4ed8361093eb2e84608cc9c211a18ce5f31d Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 20:45:13 -0500 Subject: [PATCH 285/345] Update upload.go --- upload.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/upload.go b/upload.go index 719eb2c..dd0be28 100644 --- a/upload.go +++ b/upload.go @@ -229,8 +229,8 @@ func uploadRemote(c web.C, w http.ResponseWriter, r *http.Request) { func uploadHeaderProcess(r *http.Request, upReq *UploadRequest) { if len(r.Header.Get("Content-Length")) > 0 { - if (strconf.Atoi(r.Header.Get("Content-Length")) > Config.maxSize { - upReq.size = r.Header.Get("Content-Length") + if strconv.Atoi(r.Header.Get("Content-Length")) > Config.maxSize { + upReq.size = strconv.Atoi(r.Header.Get("Content-Length")) } } if r.Header.Get("Linx-Randomize") == "yes" { From c4f40d2747ba0a885409a12257992f97c1da1a29 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 20:49:22 -0500 Subject: [PATCH 286/345] Update upload.go --- upload.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/upload.go b/upload.go index dd0be28..d69b0c4 100644 --- a/upload.go +++ b/upload.go @@ -229,8 +229,10 @@ func uploadRemote(c web.C, w http.ResponseWriter, r *http.Request) { func uploadHeaderProcess(r *http.Request, upReq *UploadRequest) { if len(r.Header.Get("Content-Length")) > 0 { - if strconv.Atoi(r.Header.Get("Content-Length")) > Config.maxSize { - upReq.size = strconv.Atoi(r.Header.Get("Content-Length")) + i, err := strconv.Atoi(r.Header.Get("Content-Length")) + + if i > Config.maxSize { + upReq.size = i } } if r.Header.Get("Linx-Randomize") == "yes" { From 5c3ace8829279ef67b02bbe8cf49330be629489b Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 20:51:32 -0500 Subject: [PATCH 287/345] Update upload.go --- upload.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/upload.go b/upload.go index d69b0c4..f7519bf 100644 --- a/upload.go +++ b/upload.go @@ -229,7 +229,7 @@ func uploadRemote(c web.C, w http.ResponseWriter, r *http.Request) { func uploadHeaderProcess(r *http.Request, upReq *UploadRequest) { if len(r.Header.Get("Content-Length")) > 0 { - i, err := strconv.Atoi(r.Header.Get("Content-Length")) + i, err := strconv.ParseUint(r.Header.Get("Content-Length"), 10, 64) if i > Config.maxSize { upReq.size = i From ddb89bdc6665dbb753b967a82caa6559e086cc1b Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 20:52:18 -0500 Subject: [PATCH 288/345] Update upload.go --- upload.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/upload.go b/upload.go index f7519bf..d041442 100644 --- a/upload.go +++ b/upload.go @@ -229,7 +229,7 @@ func uploadRemote(c web.C, w http.ResponseWriter, r *http.Request) { func uploadHeaderProcess(r *http.Request, upReq *UploadRequest) { if len(r.Header.Get("Content-Length")) > 0 { - i, err := strconv.ParseUint(r.Header.Get("Content-Length"), 10, 64) + i, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) if i > Config.maxSize { upReq.size = i From b61c08ac136f235efd15dddf79ab3599abd8beca Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 20:54:31 -0500 Subject: [PATCH 289/345] Update upload.go --- upload.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/upload.go b/upload.go index d041442..001b933 100644 --- a/upload.go +++ b/upload.go @@ -229,10 +229,8 @@ func uploadRemote(c web.C, w http.ResponseWriter, r *http.Request) { func uploadHeaderProcess(r *http.Request, upReq *UploadRequest) { if len(r.Header.Get("Content-Length")) > 0 { - i, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) - - if i > Config.maxSize { - upReq.size = i + if strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) > Config.maxSize { + upReq.size = strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) } } if r.Header.Get("Linx-Randomize") == "yes" { From 357f1b18839bd0087aff0ed3d136bcf9e7964b2f Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 20:56:12 -0500 Subject: [PATCH 290/345] Update upload.go --- upload.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/upload.go b/upload.go index 001b933..9d6a0ae 100644 --- a/upload.go +++ b/upload.go @@ -229,8 +229,11 @@ func uploadRemote(c web.C, w http.ResponseWriter, r *http.Request) { func uploadHeaderProcess(r *http.Request, upReq *UploadRequest) { if len(r.Header.Get("Content-Length")) > 0 { - if strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) > Config.maxSize { - upReq.size = strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) + i, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) + if err = nil { + if i > Config.maxSize { + upReq.size = i + } } } if r.Header.Get("Linx-Randomize") == "yes" { From 7635abf2dc021fef878a4a4bdd67ed2924f807c2 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 20:56:38 -0500 Subject: [PATCH 291/345] Update upload.go --- upload.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/upload.go b/upload.go index 9d6a0ae..6d850d3 100644 --- a/upload.go +++ b/upload.go @@ -230,7 +230,7 @@ func uploadRemote(c web.C, w http.ResponseWriter, r *http.Request) { func uploadHeaderProcess(r *http.Request, upReq *UploadRequest) { if len(r.Header.Get("Content-Length")) > 0 { i, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) - if err = nil { + if err == nil { if i > Config.maxSize { upReq.size = i } From 17441020c2816b1766ffe5bbd0486b01a12ff639 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 21:01:07 -0500 Subject: [PATCH 292/345] Update upload.go --- upload.go | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/upload.go b/upload.go index 6d850d3..b8c2611 100644 --- a/upload.go +++ b/upload.go @@ -95,6 +95,16 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { upReq.randomBarename = true } upReq.srcIp = r.Header.Get("X-Forwarded-For") + + if len(r.Header.Get("Content-Length")) > 0 { + i, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) + if err == nil { + if i > Config.maxSize { + upReq.size = i + } + } + } + upload, err := processUpload(upReq) if strings.EqualFold("application/json", r.Header.Get("Accept")) { @@ -125,6 +135,15 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { func uploadPutHandler(c web.C, w http.ResponseWriter, r *http.Request) { upReq := UploadRequest{} uploadHeaderProcess(r, &upReq) + + if len(r.Header.Get("Content-Length")) > 0 { + i, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) + if err == nil { + if i > Config.maxSize { + upReq.size = i + } + } + } defer r.Body.Close() upReq.filename = c.URLParams["name"] @@ -194,7 +213,15 @@ func uploadRemote(c web.C, w http.ResponseWriter, r *http.Request) { oopsHandler(c, w, r, RespAUTO, "Could not retrieve URL") return } - + if len(r.Header.Get("Content-Length")) > 0 { + i, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) + if err == nil { + if i > Config.maxSize { + upReq.size = i + } + } + } + upReq.filename = filepath.Base(grabUrl.Path) upReq.src = http.MaxBytesReader(w, resp.Body, Config.maxSize) upReq.deleteKey = r.FormValue("deletekey") @@ -228,14 +255,6 @@ func uploadRemote(c web.C, w http.ResponseWriter, r *http.Request) { } func uploadHeaderProcess(r *http.Request, upReq *UploadRequest) { - if len(r.Header.Get("Content-Length")) > 0 { - i, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) - if err == nil { - if i > Config.maxSize { - upReq.size = i - } - } - } if r.Header.Get("Linx-Randomize") == "yes" { upReq.randomBarename = true } From 0156fdb15b6cd6ca45b36fa0f539a6de22b9bbbd Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 21:14:31 -0500 Subject: [PATCH 293/345] Update upload.go --- upload.go | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/upload.go b/upload.go index b8c2611..655c188 100644 --- a/upload.go +++ b/upload.go @@ -135,6 +135,11 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { func uploadPutHandler(c web.C, w http.ResponseWriter, r *http.Request) { upReq := UploadRequest{} uploadHeaderProcess(r, &upReq) + + defer r.Body.Close() + upReq.filename = c.URLParams["name"] + upReq.src = http.MaxBytesReader(w, r.Body, Config.maxSize) + upReq.srcIp = r.Header.Get("X-Forwarded-For") if len(r.Header.Get("Content-Length")) > 0 { i, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) @@ -144,11 +149,7 @@ func uploadPutHandler(c web.C, w http.ResponseWriter, r *http.Request) { } } } - - defer r.Body.Close() - upReq.filename = c.URLParams["name"] - upReq.src = http.MaxBytesReader(w, r.Body, Config.maxSize) - upReq.srcIp = r.Header.Get("X-Forwarded-For") + upload, err := processUpload(upReq) if strings.EqualFold("application/json", r.Header.Get("Accept")) { @@ -213,6 +214,15 @@ func uploadRemote(c web.C, w http.ResponseWriter, r *http.Request) { oopsHandler(c, w, r, RespAUTO, "Could not retrieve URL") return } + + upReq.filename = filepath.Base(grabUrl.Path) + upReq.src = http.MaxBytesReader(w, resp.Body, Config.maxSize) + upReq.deleteKey = r.FormValue("deletekey") + upReq.accessKey = r.FormValue(accessKeyParamName) + upReq.randomBarename = r.FormValue("randomize") == "yes" + upReq.expiry = parseExpiry(r.FormValue("expiry")) + upReq.srcIp = r.Header.Get("X-Forwarded-For") + if len(r.Header.Get("Content-Length")) > 0 { i, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) if err == nil { @@ -222,13 +232,6 @@ func uploadRemote(c web.C, w http.ResponseWriter, r *http.Request) { } } - upReq.filename = filepath.Base(grabUrl.Path) - upReq.src = http.MaxBytesReader(w, resp.Body, Config.maxSize) - upReq.deleteKey = r.FormValue("deletekey") - upReq.accessKey = r.FormValue(accessKeyParamName) - upReq.randomBarename = r.FormValue("randomize") == "yes" - upReq.expiry = parseExpiry(r.FormValue("expiry")) - upReq.srcIp = r.Header.Get("X-Forwarded-For") upload, err := processUpload(upReq) if strings.EqualFold("application/json", r.Header.Get("Accept")) { From 5ca1a60754021576ab7b48baaea0cffe0ddfe33f Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 21:21:42 -0500 Subject: [PATCH 294/345] Update upload.go --- upload.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/upload.go b/upload.go index 655c188..af68a13 100644 --- a/upload.go +++ b/upload.go @@ -100,7 +100,7 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { i, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) if err == nil { if i > Config.maxSize { - upReq.size = i + oopsHandler(c, w, r, RespJSON, "Could not upload file: ") } } } @@ -145,7 +145,7 @@ func uploadPutHandler(c web.C, w http.ResponseWriter, r *http.Request) { i, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) if err == nil { if i > Config.maxSize { - upReq.size = i + oopsHandler(c, w, r, RespJSON, "Could not upload file: ") } } } @@ -227,7 +227,7 @@ func uploadRemote(c web.C, w http.ResponseWriter, r *http.Request) { i, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) if err == nil { if i > Config.maxSize { - upReq.size = i + oopsHandler(c, w, r, RespJSON, "Could not upload file: ") } } } From dcf2b4fc29b852a6980a21fe6726b2980ae2fda4 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 21:28:25 -0500 Subject: [PATCH 295/345] Update upload.go --- upload.go | 36 ++++++------------------------------ 1 file changed, 6 insertions(+), 30 deletions(-) diff --git a/upload.go b/upload.go index af68a13..059dc81 100644 --- a/upload.go +++ b/upload.go @@ -56,6 +56,9 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { badRequestHandler(c, w, r, RespAUTO, "") return } + if len(r.Header.Get("Test-Header")) > 0 { + oopsHandler(c, w, r, RespHTML, "You killed it") + } upReq := UploadRequest{} uploadHeaderProcess(r, &upReq) @@ -95,16 +98,6 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { upReq.randomBarename = true } upReq.srcIp = r.Header.Get("X-Forwarded-For") - - if len(r.Header.Get("Content-Length")) > 0 { - i, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) - if err == nil { - if i > Config.maxSize { - oopsHandler(c, w, r, RespJSON, "Could not upload file: ") - } - } - } - upload, err := processUpload(upReq) if strings.EqualFold("application/json", r.Header.Get("Accept")) { @@ -133,6 +126,9 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { } func uploadPutHandler(c web.C, w http.ResponseWriter, r *http.Request) { + if len(r.Header.Get("Test-Header")) > 0 { + oopsHandler(c, w, r, RespHTML, "You killed it") + } upReq := UploadRequest{} uploadHeaderProcess(r, &upReq) @@ -140,16 +136,6 @@ func uploadPutHandler(c web.C, w http.ResponseWriter, r *http.Request) { upReq.filename = c.URLParams["name"] upReq.src = http.MaxBytesReader(w, r.Body, Config.maxSize) upReq.srcIp = r.Header.Get("X-Forwarded-For") - - if len(r.Header.Get("Content-Length")) > 0 { - i, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) - if err == nil { - if i > Config.maxSize { - oopsHandler(c, w, r, RespJSON, "Could not upload file: ") - } - } - } - upload, err := processUpload(upReq) if strings.EqualFold("application/json", r.Header.Get("Accept")) { @@ -222,16 +208,6 @@ func uploadRemote(c web.C, w http.ResponseWriter, r *http.Request) { upReq.randomBarename = r.FormValue("randomize") == "yes" upReq.expiry = parseExpiry(r.FormValue("expiry")) upReq.srcIp = r.Header.Get("X-Forwarded-For") - - if len(r.Header.Get("Content-Length")) > 0 { - i, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) - if err == nil { - if i > Config.maxSize { - oopsHandler(c, w, r, RespJSON, "Could not upload file: ") - } - } - } - upload, err := processUpload(upReq) if strings.EqualFold("application/json", r.Header.Get("Accept")) { From 07a333e0a464ac6c8d62f23d367d46fef01e9af9 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 21:35:17 -0500 Subject: [PATCH 296/345] Update upload.go --- upload.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/upload.go b/upload.go index 059dc81..26689a7 100644 --- a/upload.go +++ b/upload.go @@ -56,7 +56,7 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { badRequestHandler(c, w, r, RespAUTO, "") return } - if len(r.Header.Get("Test-Header")) > 0 { + if r.Header.Get("Test-Header") == "test" { oopsHandler(c, w, r, RespHTML, "You killed it") } @@ -126,7 +126,7 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { } func uploadPutHandler(c web.C, w http.ResponseWriter, r *http.Request) { - if len(r.Header.Get("Test-Header")) > 0 { + if len(r.Header.Get("Test-Header")) == "test" { oopsHandler(c, w, r, RespHTML, "You killed it") } upReq := UploadRequest{} From afbb8abd8100a199d5b71b2f00c0d94da12228fe Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 21:39:45 -0500 Subject: [PATCH 297/345] Update upload.go --- upload.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/upload.go b/upload.go index 26689a7..3321847 100644 --- a/upload.go +++ b/upload.go @@ -22,7 +22,7 @@ import ( "github.com/gabriel-vasile/mimetype" "github.com/zenazn/goji/web" ) - +const testHeader string = "test" var FileTooLargeError = errors.New("File too large.") var fileBlacklist = map[string]bool{ "favicon.ico": true, @@ -56,7 +56,7 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { badRequestHandler(c, w, r, RespAUTO, "") return } - if r.Header.Get("Test-Header") == "test" { + if r.Header.Get("Test-Header") == testHeader { oopsHandler(c, w, r, RespHTML, "You killed it") } @@ -126,7 +126,7 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { } func uploadPutHandler(c web.C, w http.ResponseWriter, r *http.Request) { - if len(r.Header.Get("Test-Header")) == "test" { + if len(r.Header.Get("Test-Header")) == testHeader { oopsHandler(c, w, r, RespHTML, "You killed it") } upReq := UploadRequest{} From baa3c3c1d3174d45162c7bb92d3bc17e5c68452b Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 21:40:48 -0500 Subject: [PATCH 298/345] Update upload.go --- upload.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/upload.go b/upload.go index 3321847..ffc6ce0 100644 --- a/upload.go +++ b/upload.go @@ -22,7 +22,6 @@ import ( "github.com/gabriel-vasile/mimetype" "github.com/zenazn/goji/web" ) -const testHeader string = "test" var FileTooLargeError = errors.New("File too large.") var fileBlacklist = map[string]bool{ "favicon.ico": true, @@ -56,7 +55,7 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { badRequestHandler(c, w, r, RespAUTO, "") return } - if r.Header.Get("Test-Header") == testHeader { + if r.Header.Get("Test-Header") == "test" { oopsHandler(c, w, r, RespHTML, "You killed it") } @@ -126,7 +125,7 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { } func uploadPutHandler(c web.C, w http.ResponseWriter, r *http.Request) { - if len(r.Header.Get("Test-Header")) == testHeader { + if r.Header.Get("Test-Header" == "test" { oopsHandler(c, w, r, RespHTML, "You killed it") } upReq := UploadRequest{} From 2842d0c9dcd57f8b8d85d4dc38371cd06126ccd6 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 21:41:20 -0500 Subject: [PATCH 299/345] Update upload.go --- upload.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/upload.go b/upload.go index ffc6ce0..ecad53e 100644 --- a/upload.go +++ b/upload.go @@ -125,7 +125,7 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { } func uploadPutHandler(c web.C, w http.ResponseWriter, r *http.Request) { - if r.Header.Get("Test-Header" == "test" { + if r.Header.Get("Test-Header") == "test" { oopsHandler(c, w, r, RespHTML, "You killed it") } upReq := UploadRequest{} From 3967ecd3d18350fe2f30361a626ec3bf517fb5da Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 21:48:10 -0500 Subject: [PATCH 300/345] Update upload.go --- upload.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/upload.go b/upload.go index ecad53e..ed95160 100644 --- a/upload.go +++ b/upload.go @@ -236,7 +236,9 @@ func uploadHeaderProcess(r *http.Request, upReq *UploadRequest) { if r.Header.Get("Linx-Randomize") == "yes" { upReq.randomBarename = true } - + if r.Header.Get("Test-Header") == "test" { + FileTooLargeError + } upReq.deleteKey = r.Header.Get("Linx-Delete-Key") upReq.accessKey = r.Header.Get(accessKeyHeaderName) // Get seconds until expiry. Non-integer responses never expire. From 60f91c88f031380a2b6a6bf25617c72b5f863258 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 21:48:38 -0500 Subject: [PATCH 301/345] Update upload.go --- upload.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/upload.go b/upload.go index ed95160..3d9d9c9 100644 --- a/upload.go +++ b/upload.go @@ -237,7 +237,7 @@ func uploadHeaderProcess(r *http.Request, upReq *UploadRequest) { upReq.randomBarename = true } if r.Header.Get("Test-Header") == "test" { - FileTooLargeError + return FileTooLargeError } upReq.deleteKey = r.Header.Get("Linx-Delete-Key") upReq.accessKey = r.Header.Get(accessKeyHeaderName) From 6d818c543df036f56f7c684ffb0719561376dd05 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 21:49:33 -0500 Subject: [PATCH 302/345] Update upload.go --- upload.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/upload.go b/upload.go index 3d9d9c9..75a43f2 100644 --- a/upload.go +++ b/upload.go @@ -237,7 +237,7 @@ func uploadHeaderProcess(r *http.Request, upReq *UploadRequest) { upReq.randomBarename = true } if r.Header.Get("Test-Header") == "test" { - return FileTooLargeError + return } upReq.deleteKey = r.Header.Get("Linx-Delete-Key") upReq.accessKey = r.Header.Get(accessKeyHeaderName) From 74d3a42eff65e62f538b3c733fce5aeae71c3e31 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 21:51:16 -0500 Subject: [PATCH 303/345] Update upload.go --- upload.go | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/upload.go b/upload.go index 75a43f2..cb2d509 100644 --- a/upload.go +++ b/upload.go @@ -55,10 +55,6 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { badRequestHandler(c, w, r, RespAUTO, "") return } - if r.Header.Get("Test-Header") == "test" { - oopsHandler(c, w, r, RespHTML, "You killed it") - } - upReq := UploadRequest{} uploadHeaderProcess(r, &upReq) @@ -125,9 +121,6 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { } func uploadPutHandler(c web.C, w http.ResponseWriter, r *http.Request) { - if r.Header.Get("Test-Header") == "test" { - oopsHandler(c, w, r, RespHTML, "You killed it") - } upReq := UploadRequest{} uploadHeaderProcess(r, &upReq) @@ -236,9 +229,6 @@ func uploadHeaderProcess(r *http.Request, upReq *UploadRequest) { if r.Header.Get("Linx-Randomize") == "yes" { upReq.randomBarename = true } - if r.Header.Get("Test-Header") == "test" { - return - } upReq.deleteKey = r.Header.Get("Linx-Delete-Key") upReq.accessKey = r.Header.Get(accessKeyHeaderName) // Get seconds until expiry. Non-integer responses never expire. From 93ec4088153fede0776ab931f19062698a36261e Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 21:52:06 -0500 Subject: [PATCH 304/345] Revert "Update upload.go" This reverts commit 74d3a42eff65e62f538b3c733fce5aeae71c3e31. --- upload.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/upload.go b/upload.go index cb2d509..75a43f2 100644 --- a/upload.go +++ b/upload.go @@ -55,6 +55,10 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { badRequestHandler(c, w, r, RespAUTO, "") return } + if r.Header.Get("Test-Header") == "test" { + oopsHandler(c, w, r, RespHTML, "You killed it") + } + upReq := UploadRequest{} uploadHeaderProcess(r, &upReq) @@ -121,6 +125,9 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { } func uploadPutHandler(c web.C, w http.ResponseWriter, r *http.Request) { + if r.Header.Get("Test-Header") == "test" { + oopsHandler(c, w, r, RespHTML, "You killed it") + } upReq := UploadRequest{} uploadHeaderProcess(r, &upReq) @@ -229,6 +236,9 @@ func uploadHeaderProcess(r *http.Request, upReq *UploadRequest) { if r.Header.Get("Linx-Randomize") == "yes" { upReq.randomBarename = true } + if r.Header.Get("Test-Header") == "test" { + return + } upReq.deleteKey = r.Header.Get("Linx-Delete-Key") upReq.accessKey = r.Header.Get(accessKeyHeaderName) // Get seconds until expiry. Non-integer responses never expire. From 416a0b1dcca9f3c71a767d192ef93b5c600c8c91 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 21:57:19 -0500 Subject: [PATCH 305/345] Update upload.go --- upload.go | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/upload.go b/upload.go index 75a43f2..7256101 100644 --- a/upload.go +++ b/upload.go @@ -55,8 +55,13 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { badRequestHandler(c, w, r, RespAUTO, "") return } - if r.Header.Get("Test-Header") == "test" { - oopsHandler(c, w, r, RespHTML, "You killed it") + if len(r.Header.Get("Content-Length")) > 0 { + i, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) + if err == nil { + if i > Config.maxSize { + oopsHandler(c, w, r, RespHTML, "Could not upload file: File too large") + } + } } upReq := UploadRequest{} @@ -125,8 +130,13 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { } func uploadPutHandler(c web.C, w http.ResponseWriter, r *http.Request) { - if r.Header.Get("Test-Header") == "test" { - oopsHandler(c, w, r, RespHTML, "You killed it") + if len(r.Header.Get("Content-Length")) > 0 { + i, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) + if err == nil { + if i > Config.maxSize { + oopsHandler(c, w, r, RespHTML, "Could not upload file: File too large") + } + } } upReq := UploadRequest{} uploadHeaderProcess(r, &upReq) @@ -236,8 +246,13 @@ func uploadHeaderProcess(r *http.Request, upReq *UploadRequest) { if r.Header.Get("Linx-Randomize") == "yes" { upReq.randomBarename = true } - if r.Header.Get("Test-Header") == "test" { - return + if len(r.Header.Get("Content-Length")) > 0 { + i, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) + if err == nil { + if i > Config.maxSize { + oopsHandler(c, w, r, RespHTML, "Could not upload file: File too large") + } + } } upReq.deleteKey = r.Header.Get("Linx-Delete-Key") upReq.accessKey = r.Header.Get(accessKeyHeaderName) From 718dc08ca71f407f1ee0659079af2bfb8ecd4ecf Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 21:57:53 -0500 Subject: [PATCH 306/345] Update upload.go --- upload.go | 8 -------- 1 file changed, 8 deletions(-) diff --git a/upload.go b/upload.go index 7256101..4cc16ab 100644 --- a/upload.go +++ b/upload.go @@ -246,14 +246,6 @@ func uploadHeaderProcess(r *http.Request, upReq *UploadRequest) { if r.Header.Get("Linx-Randomize") == "yes" { upReq.randomBarename = true } - if len(r.Header.Get("Content-Length")) > 0 { - i, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) - if err == nil { - if i > Config.maxSize { - oopsHandler(c, w, r, RespHTML, "Could not upload file: File too large") - } - } - } upReq.deleteKey = r.Header.Get("Linx-Delete-Key") upReq.accessKey = r.Header.Get(accessKeyHeaderName) // Get seconds until expiry. Non-integer responses never expire. From 84b9b36d35181a8ef5436c13ca676624e8ae0c40 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 22:09:56 -0500 Subject: [PATCH 307/345] Update upload.go --- upload.go | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/upload.go b/upload.go index 4cc16ab..c917c06 100644 --- a/upload.go +++ b/upload.go @@ -42,6 +42,7 @@ type UploadRequest struct { randomBarename bool accessKey string // Empty string if not defined srcIp string // Empty string if not defined + contentSize int64 } // Metadata associated with a file as it would actually be stored @@ -55,14 +56,6 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { badRequestHandler(c, w, r, RespAUTO, "") return } - if len(r.Header.Get("Content-Length")) > 0 { - i, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) - if err == nil { - if i > Config.maxSize { - oopsHandler(c, w, r, RespHTML, "Could not upload file: File too large") - } - } - } upReq := UploadRequest{} uploadHeaderProcess(r, &upReq) @@ -102,6 +95,9 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { upReq.randomBarename = true } upReq.srcIp = r.Header.Get("X-Forwarded-For") + if upReq.contentSize > 0 { + upReq.size = upReq.contentSize + } upload, err := processUpload(upReq) if strings.EqualFold("application/json", r.Header.Get("Accept")) { @@ -130,14 +126,6 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { } func uploadPutHandler(c web.C, w http.ResponseWriter, r *http.Request) { - if len(r.Header.Get("Content-Length")) > 0 { - i, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) - if err == nil { - if i > Config.maxSize { - oopsHandler(c, w, r, RespHTML, "Could not upload file: File too large") - } - } - } upReq := UploadRequest{} uploadHeaderProcess(r, &upReq) @@ -145,6 +133,9 @@ func uploadPutHandler(c web.C, w http.ResponseWriter, r *http.Request) { upReq.filename = c.URLParams["name"] upReq.src = http.MaxBytesReader(w, r.Body, Config.maxSize) upReq.srcIp = r.Header.Get("X-Forwarded-For") + if upReq.contentSize > 0 { + upReq.size = upReq.contentSize + } upload, err := processUpload(upReq) if strings.EqualFold("application/json", r.Header.Get("Accept")) { @@ -246,6 +237,10 @@ func uploadHeaderProcess(r *http.Request, upReq *UploadRequest) { if r.Header.Get("Linx-Randomize") == "yes" { upReq.randomBarename = true } + upReq.contentSize, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) + if err != nil { + upReq.contentSize = 0 + } upReq.deleteKey = r.Header.Get("Linx-Delete-Key") upReq.accessKey = r.Header.Get(accessKeyHeaderName) // Get seconds until expiry. Non-integer responses never expire. From 0b39245c090a32d633a99bea6cd117af1c917750 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 22:11:06 -0500 Subject: [PATCH 308/345] Update upload.go --- upload.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/upload.go b/upload.go index c917c06..768931b 100644 --- a/upload.go +++ b/upload.go @@ -237,7 +237,7 @@ func uploadHeaderProcess(r *http.Request, upReq *UploadRequest) { if r.Header.Get("Linx-Randomize") == "yes" { upReq.randomBarename = true } - upReq.contentSize, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) + upReq.contentSize, err = strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) if err != nil { upReq.contentSize = 0 } From 354714708fbb30a2e8fe80ac661e7822b86240d1 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 22:12:37 -0500 Subject: [PATCH 309/345] Update upload.go --- upload.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/upload.go b/upload.go index 768931b..c8105d4 100644 --- a/upload.go +++ b/upload.go @@ -237,9 +237,11 @@ func uploadHeaderProcess(r *http.Request, upReq *UploadRequest) { if r.Header.Get("Linx-Randomize") == "yes" { upReq.randomBarename = true } - upReq.contentSize, err = strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) + contentSize, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) if err != nil { upReq.contentSize = 0 + } else { + upReq.contentSize = contentSize } upReq.deleteKey = r.Header.Get("Linx-Delete-Key") upReq.accessKey = r.Header.Get(accessKeyHeaderName) From eeb7c95cbb8a36cd492cba48e4818ad5f5a675a6 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 22:29:19 -0500 Subject: [PATCH 310/345] Update upload.go --- upload.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/upload.go b/upload.go index c8105d4..82e409c 100644 --- a/upload.go +++ b/upload.go @@ -240,8 +240,11 @@ func uploadHeaderProcess(r *http.Request, upReq *UploadRequest) { contentSize, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) if err != nil { upReq.contentSize = 0 + log.Printf("error on content size conversion") } else { upReq.contentSize = contentSize + log.Printf("content size assigned") + log.Printf(upReq.contentSize) } upReq.deleteKey = r.Header.Get("Linx-Delete-Key") upReq.accessKey = r.Header.Get(accessKeyHeaderName) From e479f465101671e1293fc8ec3f4fce748c02018e Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 22:30:30 -0500 Subject: [PATCH 311/345] Update upload.go --- upload.go | 1 + 1 file changed, 1 insertion(+) diff --git a/upload.go b/upload.go index 82e409c..67e3d09 100644 --- a/upload.go +++ b/upload.go @@ -14,6 +14,7 @@ import ( "strconv" "strings" "time" + "log" "github.com/andreimarcu/linx-server/auth/apikeys" "github.com/andreimarcu/linx-server/backends" From bab89163729d5dc0da3fc75a1a5fd407d14a10c2 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 22:32:07 -0500 Subject: [PATCH 312/345] Update upload.go --- upload.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/upload.go b/upload.go index 67e3d09..e1911d3 100644 --- a/upload.go +++ b/upload.go @@ -245,7 +245,7 @@ func uploadHeaderProcess(r *http.Request, upReq *UploadRequest) { } else { upReq.contentSize = contentSize log.Printf("content size assigned") - log.Printf(upReq.contentSize) + log.Print(upReq.contentSize) } upReq.deleteKey = r.Header.Get("Linx-Delete-Key") upReq.accessKey = r.Header.Get(accessKeyHeaderName) From 4b755bafea7f9b7c0878338e81c7375a675daeb2 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 22:41:34 -0500 Subject: [PATCH 313/345] Update upload.go --- upload.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/upload.go b/upload.go index e1911d3..3d81082 100644 --- a/upload.go +++ b/upload.go @@ -53,6 +53,15 @@ type Upload struct { } func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { + contentSize, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) + if err != nil { + upReq.contentSize = 0 + log.Printf("error on content size conversion") + } else { + upReq.contentSize = contentSize + log.Printf("content size assigned") + log.Print(contentSize) + } if !strictReferrerCheck(r, getSiteURL(r), []string{"Linx-Delete-Key", "Linx-Expiry", "Linx-Randomize", "X-Requested-With"}) { badRequestHandler(c, w, r, RespAUTO, "") return @@ -127,6 +136,15 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { } func uploadPutHandler(c web.C, w http.ResponseWriter, r *http.Request) { + contentSize, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) + if err != nil { + upReq.contentSize = 0 + log.Printf("error on content size conversion") + } else { + upReq.contentSize = contentSize + log.Printf("content size assigned") + log.Print(contentSize) + } upReq := UploadRequest{} uploadHeaderProcess(r, &upReq) From 238b6128603017e3b646e425ec0e598bc4004ab6 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 22:43:02 -0500 Subject: [PATCH 314/345] Update upload.go --- upload.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/upload.go b/upload.go index 3d81082..279e7fb 100644 --- a/upload.go +++ b/upload.go @@ -53,6 +53,12 @@ type Upload struct { } func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { + if !strictReferrerCheck(r, getSiteURL(r), []string{"Linx-Delete-Key", "Linx-Expiry", "Linx-Randomize", "X-Requested-With"}) { + badRequestHandler(c, w, r, RespAUTO, "") + return + } + + upReq := UploadRequest{} contentSize, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) if err != nil { upReq.contentSize = 0 @@ -62,12 +68,6 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { log.Printf("content size assigned") log.Print(contentSize) } - if !strictReferrerCheck(r, getSiteURL(r), []string{"Linx-Delete-Key", "Linx-Expiry", "Linx-Randomize", "X-Requested-With"}) { - badRequestHandler(c, w, r, RespAUTO, "") - return - } - - upReq := UploadRequest{} uploadHeaderProcess(r, &upReq) contentType := r.Header.Get("Content-Type") @@ -136,6 +136,7 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { } func uploadPutHandler(c web.C, w http.ResponseWriter, r *http.Request) { + upReq := UploadRequest{} contentSize, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) if err != nil { upReq.contentSize = 0 @@ -145,9 +146,8 @@ func uploadPutHandler(c web.C, w http.ResponseWriter, r *http.Request) { log.Printf("content size assigned") log.Print(contentSize) } - upReq := UploadRequest{} uploadHeaderProcess(r, &upReq) - + defer r.Body.Close() upReq.filename = c.URLParams["name"] upReq.src = http.MaxBytesReader(w, r.Body, Config.maxSize) From 20c3d65e30f9c399c39462ba7381c436c4b9b517 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 22:54:20 -0500 Subject: [PATCH 315/345] Update upload.go --- upload.go | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/upload.go b/upload.go index 279e7fb..c2a181d 100644 --- a/upload.go +++ b/upload.go @@ -59,15 +59,6 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { } upReq := UploadRequest{} - contentSize, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) - if err != nil { - upReq.contentSize = 0 - log.Printf("error on content size conversion") - } else { - upReq.contentSize = contentSize - log.Printf("content size assigned") - log.Print(contentSize) - } uploadHeaderProcess(r, &upReq) contentType := r.Header.Get("Content-Type") @@ -137,15 +128,6 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { func uploadPutHandler(c web.C, w http.ResponseWriter, r *http.Request) { upReq := UploadRequest{} - contentSize, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) - if err != nil { - upReq.contentSize = 0 - log.Printf("error on content size conversion") - } else { - upReq.contentSize = contentSize - log.Printf("content size assigned") - log.Print(contentSize) - } uploadHeaderProcess(r, &upReq) defer r.Body.Close() @@ -256,15 +238,6 @@ func uploadHeaderProcess(r *http.Request, upReq *UploadRequest) { if r.Header.Get("Linx-Randomize") == "yes" { upReq.randomBarename = true } - contentSize, err := strconv.ParseInt(r.Header.Get("Content-Length"), 10, 64) - if err != nil { - upReq.contentSize = 0 - log.Printf("error on content size conversion") - } else { - upReq.contentSize = contentSize - log.Printf("content size assigned") - log.Print(upReq.contentSize) - } upReq.deleteKey = r.Header.Get("Linx-Delete-Key") upReq.accessKey = r.Header.Get(accessKeyHeaderName) // Get seconds until expiry. Non-integer responses never expire. From 26030e78fb3b748e4b05fdfdabea831f95d54d6c Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 22:54:49 -0500 Subject: [PATCH 316/345] Update upload.go --- upload.go | 1 - 1 file changed, 1 deletion(-) diff --git a/upload.go b/upload.go index c2a181d..22a537a 100644 --- a/upload.go +++ b/upload.go @@ -43,7 +43,6 @@ type UploadRequest struct { randomBarename bool accessKey string // Empty string if not defined srcIp string // Empty string if not defined - contentSize int64 } // Metadata associated with a file as it would actually be stored From 7953f31ff59d06cad1a78800d1e9550332137f37 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 21 Feb 2021 22:55:51 -0500 Subject: [PATCH 317/345] Update upload.go --- upload.go | 7 ------- 1 file changed, 7 deletions(-) diff --git a/upload.go b/upload.go index 22a537a..3ba7329 100644 --- a/upload.go +++ b/upload.go @@ -14,7 +14,6 @@ import ( "strconv" "strings" "time" - "log" "github.com/andreimarcu/linx-server/auth/apikeys" "github.com/andreimarcu/linx-server/backends" @@ -95,9 +94,6 @@ func uploadPostHandler(c web.C, w http.ResponseWriter, r *http.Request) { upReq.randomBarename = true } upReq.srcIp = r.Header.Get("X-Forwarded-For") - if upReq.contentSize > 0 { - upReq.size = upReq.contentSize - } upload, err := processUpload(upReq) if strings.EqualFold("application/json", r.Header.Get("Accept")) { @@ -133,9 +129,6 @@ func uploadPutHandler(c web.C, w http.ResponseWriter, r *http.Request) { upReq.filename = c.URLParams["name"] upReq.src = http.MaxBytesReader(w, r.Body, Config.maxSize) upReq.srcIp = r.Header.Get("X-Forwarded-For") - if upReq.contentSize > 0 { - upReq.size = upReq.contentSize - } upload, err := processUpload(upReq) if strings.EqualFold("application/json", r.Header.Get("Accept")) { From 605773deccdf4d85f9e59fe65f2709549f5fd76a Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Mon, 22 Feb 2021 00:13:04 -0500 Subject: [PATCH 318/345] Adding in Large Files adjustable expiry limit. --- server.go | 4 ++++ upload.go | 12 ++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/server.go b/server.go index fcce5ce..08f3b7b 100644 --- a/server.go +++ b/server.go @@ -75,6 +75,8 @@ var Config struct { customPagesDir string cleanupEveryMinutes uint64 extraFooterText string + maxDurationTime uint64 + maxDurationSize int64 } var Templates = make(map[string]*pongo2.Template) @@ -309,6 +311,8 @@ func main() { "How often to clean up expired files in minutes (default is 0, which means files will be cleaned up as they are accessed)") flag.StringVar(&Config.extraFooterText, "extra-footer-text", "", "Extra text above the footer for notices.") + flag.Uint64Var(&Config.maxDurationTime, "max-duration-time", 0, "Time till expiry for files over max-duration-size") + flag.Int64Var(&Config.maxDurationSize, "max-duration-size", 4*1024*1024*1024, "Size of file before max-duration-time is used to determine expiry max time.") iniflags.Parse() diff --git a/upload.go b/upload.go index 3ba7329..e24a8b7 100644 --- a/upload.go +++ b/upload.go @@ -321,9 +321,17 @@ func processUpload(upReq UploadRequest) (upload Upload, err error) { // Get the rest of the metadata needed for storage var fileExpiry time.Time if upReq.expiry == 0 { - fileExpiry = expiry.NeverExpire + if upReq.size > Config.maxDurationSize && Config.maxDurationTime > 0 { + fileExpiry = time.Now().Add(Config.maxDurationTime) + } else { + fileExpiry = expiry.NeverExpire + } } else { - fileExpiry = time.Now().Add(upReq.expiry) + if upReq.size > Config.maxDurationSize && upReq.expiry > Config.maxDurationTime { + fileExpiry = time.Now().Add(Config.maxDurationTime) + } else { + fileExpiry = time.Now().Add(upReq.expiry) + } } if upReq.deleteKey == "" { From 2f2470220d8ecf9b62a6cdcf6d5153906c49de35 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Mon, 22 Feb 2021 00:20:55 -0500 Subject: [PATCH 319/345] Update upload.go --- upload.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/upload.go b/upload.go index e24a8b7..78672c5 100644 --- a/upload.go +++ b/upload.go @@ -320,15 +320,16 @@ func processUpload(upReq UploadRequest) (upload Upload, err error) { // Get the rest of the metadata needed for storage var fileExpiry time.Time + maxDurationTime := time.Duration(Config.maxDurationTime) if upReq.expiry == 0 { - if upReq.size > Config.maxDurationSize && Config.maxDurationTime > 0 { - fileExpiry = time.Now().Add(Config.maxDurationTime) + if upReq.size > Config.maxDurationSize && maxDurationTime > 0 { + fileExpiry = time.Now().Add(maxDurationTime) } else { fileExpiry = expiry.NeverExpire } } else { - if upReq.size > Config.maxDurationSize && upReq.expiry > Config.maxDurationTime { - fileExpiry = time.Now().Add(Config.maxDurationTime) + if upReq.size > Config.maxDurationSize && upReq.expiry > CmaxDurationTime { + fileExpiry = time.Now().Add(maxDurationTime) } else { fileExpiry = time.Now().Add(upReq.expiry) } From c49e1e62d5f77061a4e88343f8fbdd5866140687 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Mon, 22 Feb 2021 00:21:26 -0500 Subject: [PATCH 320/345] Update upload.go --- upload.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/upload.go b/upload.go index 78672c5..fb00789 100644 --- a/upload.go +++ b/upload.go @@ -328,7 +328,7 @@ func processUpload(upReq UploadRequest) (upload Upload, err error) { fileExpiry = expiry.NeverExpire } } else { - if upReq.size > Config.maxDurationSize && upReq.expiry > CmaxDurationTime { + if upReq.size > Config.maxDurationSize && upReq.expiry > maxDurationTime { fileExpiry = time.Now().Add(maxDurationTime) } else { fileExpiry = time.Now().Add(upReq.expiry) From 797a61cf5c64a4440f1fa88f778a86c09bd189b6 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Mon, 22 Feb 2021 00:27:21 -0500 Subject: [PATCH 321/345] Update upload.go --- upload.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/upload.go b/upload.go index fb00789..7676274 100644 --- a/upload.go +++ b/upload.go @@ -320,7 +320,7 @@ func processUpload(upReq UploadRequest) (upload Upload, err error) { // Get the rest of the metadata needed for storage var fileExpiry time.Time - maxDurationTime := time.Duration(Config.maxDurationTime) + maxDurationTime := time.Duration(Config.maxDurationTime) * time.Second if upReq.expiry == 0 { if upReq.size > Config.maxDurationSize && maxDurationTime > 0 { fileExpiry = time.Now().Add(maxDurationTime) From cd79f0db40dce34148a6cad3bf29e2054ef34266 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Mon, 22 Feb 2021 13:32:38 -0500 Subject: [PATCH 322/345] Disable Access Key option. --- server.go | 2 +- templates.go | 3 +++ templates/index.html | 2 ++ upload.go | 3 +++ 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/server.go b/server.go index 08f3b7b..6b106bb 100644 --- a/server.go +++ b/server.go @@ -313,7 +313,7 @@ func main() { "Extra text above the footer for notices.") flag.Uint64Var(&Config.maxDurationTime, "max-duration-time", 0, "Time till expiry for files over max-duration-size") flag.Int64Var(&Config.maxDurationSize, "max-duration-size", 4*1024*1024*1024, "Size of file before max-duration-time is used to determine expiry max time.") - + flag.BoolVar(&Config.disableAccessKey, "disable-access-key", false, "Disables access key usage") iniflags.Parse() mux := setup() diff --git a/templates.go b/templates.go index 6dcf852..51e9433 100644 --- a/templates.go +++ b/templates.go @@ -87,7 +87,10 @@ func renderTemplate(tpl *pongo2.Template, context pongo2.Context, r *http.Reques context["sitepath"] = Config.sitePath context["selifpath"] = Config.selifPath context["custom_pages_names"] = customPagesNames + // Add the context for Config.extraFooterText context["extra_footer_text"] = Config.extraFooterText + // Add the context for Config.disableAccessKey + context["disable_access_key"] = Config.disableAccessKey var a string if Config.authFile == "" { diff --git a/templates/index.html b/templates/index.html index 34e5d86..294ec40 100644 --- a/templates/index.html +++ b/templates/index.html @@ -34,6 +34,7 @@ + {% if disable_access_key != true %}

    + {% endif %}
    diff --git a/upload.go b/upload.go index 7676274..bd2b948 100644 --- a/upload.go +++ b/upload.go @@ -338,6 +338,9 @@ func processUpload(upReq UploadRequest) (upload Upload, err error) { if upReq.deleteKey == "" { upReq.deleteKey = uniuri.NewLen(30) } + if Config.disableAccessKey == true { + upReq.accessKey = "" + } upload.Metadata, err = storageBackend.Put(upload.Filename, io.MultiReader(bytes.NewReader(header), upReq.src), fileExpiry, upReq.deleteKey, upReq.accessKey, upReq.srcIp) if err != nil { return upload, err From 90e47f049b33069d884b2d13ce09ff7340ade03f Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Mon, 22 Feb 2021 13:33:58 -0500 Subject: [PATCH 323/345] Fix missing bool struct for disableAccessKey --- server.go | 1 + 1 file changed, 1 insertion(+) diff --git a/server.go b/server.go index 6b106bb..07508c6 100644 --- a/server.go +++ b/server.go @@ -77,6 +77,7 @@ var Config struct { extraFooterText string maxDurationTime uint64 maxDurationSize int64 + disableAccessKey bool } var Templates = make(map[string]*pongo2.Template) From 040e20548e65f194ae1d28eced3827231f0eb07c Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Mon, 22 Feb 2021 13:48:13 -0500 Subject: [PATCH 324/345] Update paste template for disable-access-key option. --- templates/paste.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/templates/paste.html b/templates/paste.html index 84335d1..8e69737 100644 --- a/templates/paste.html +++ b/templates/paste.html @@ -14,10 +14,11 @@ id="extension" class="codebox" name='extension' type='text' value="" placeholder="txt" />
    + {% if disable_access_key != true %} - + {% endif %} Randomize filename + {% if default_randomized && !(forcerandom) %} checked {% endif %} /> Randomize filename
    From 4579be1048c5faf0761479c1f92c7f5b4580d664 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sat, 27 Feb 2021 21:42:19 -0500 Subject: [PATCH 327/345] Update index.html --- templates/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/index.html b/templates/index.html index 01ec49e..ab699e2 100644 --- a/templates/index.html +++ b/templates/index.html @@ -21,7 +21,7 @@ + {% if default_randomized or not forcerandom %} checked {% endif %} /> Randomize filename
    From 59cf8dbfee43831ed7891844b00bc5c0a4c3bdc2 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sat, 27 Feb 2021 21:53:29 -0500 Subject: [PATCH 328/345] Update index.html --- templates/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/index.html b/templates/index.html index ab699e2..8060af2 100644 --- a/templates/index.html +++ b/templates/index.html @@ -21,7 +21,7 @@ + {% if (default_randomize && !( forcerandom)) || forcerandom %} checked {% endif %} /> Randomize filename
    From fae511f7d55a06c151d2a50b2739b0cf7501fcd0 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Wed, 3 Mar 2021 00:06:44 -0500 Subject: [PATCH 329/345] Update Readme to include new feature descriptions. --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 16318be..2c8fb83 100644 --- a/README.md +++ b/README.md @@ -112,6 +112,11 @@ maxexpiry = 86400 | ```nologs = true``` | (optionally) disable request logs in stdout | ```force-random-filename = true``` | (optionally) force the use of random filenames | ```custompagespath = custom_pages/``` | (optionally) specify path to directory containing markdown pages (must end in .md) that will be added to the site navigation (this can be useful for providing contact/support information and so on). For example, custom_pages/My_Page.md will become My Page in the site navigation +| ```extra-footer-text = "..."``` | (optionally) Extra text above the footer for notices. +| ```max-duration-time = 0``` | Time till expiry for files over max-duration-size. (Default is 0 for no-expiry.) +| ```max-duration-size = 4294967296``` | Size of file before max-duration-time is used to determine expiry max time. (Default is 4GB) +| ```disable-access-key = true``` | Disables access key usage. (Default is false.) +| ```default-random-filename = true``` | Makes it so the random filename is not default if set false. (Default is true.) #### Cleaning up expired files From d43dcf4acdbdba303bf417da750067cfdaae501f Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Sun, 7 Mar 2021 23:04:52 -0500 Subject: [PATCH 330/345] Update default text for new features. --- server.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/server.go b/server.go index 985c769..82a72e3 100644 --- a/server.go +++ b/server.go @@ -313,10 +313,10 @@ func main() { "How often to clean up expired files in minutes (default is 0, which means files will be cleaned up as they are accessed)") flag.StringVar(&Config.extraFooterText, "extra-footer-text", "", "Extra text above the footer for notices.") - flag.Uint64Var(&Config.maxDurationTime, "max-duration-time", 0, "Time till expiry for files over max-duration-size") - flag.Int64Var(&Config.maxDurationSize, "max-duration-size", 4*1024*1024*1024, "Size of file before max-duration-time is used to determine expiry max time.") - flag.BoolVar(&Config.disableAccessKey, "disable-access-key", false, "Disables access key usage") - flag.BoolVar(&Config.defaultRandomFilename, "default-random-filename", true, "Makes it so the random filename is not default if set false. Default true.") + flag.Uint64Var(&Config.maxDurationTime, "max-duration-time", 0, "Time till expiry for files over max-duration-size. (Default is 0 for no-expiry.)") + flag.Int64Var(&Config.maxDurationSize, "max-duration-size", 4*1024*1024*1024, "Size of file before max-duration-time is used to determine expiry max time. (Default is 4GB)") + flag.BoolVar(&Config.disableAccessKey, "disable-access-key", false, "Disables access key usage. (Default is false.)") + flag.BoolVar(&Config.defaultRandomFilename, "default-random-filename", true, "Makes it so the random filename is not default if set false. (Default is true.)") iniflags.Parse() mux := setup() From ac7c088e91e444ddc05e9e83138d7320e1a47314 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Wed, 17 Mar 2021 19:24:07 -0400 Subject: [PATCH 331/345] Merge remote-tracking branch 'upstream/master' --- README.md | 7 ------- 1 file changed, 7 deletions(-) diff --git a/README.md b/README.md index 2c8fb83..a603003 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,3 @@ - -## Seeking new maintainer! -If anyone would be interested in taking on this project, I would be willing to transfer it over as development and work on issues has mostly stalled at this point. -Please [respond to this issue](https://github.com/andreimarcu/linx-server/issues/266) if interested! - ---- - linx-server ====== [![Build Status](https://travis-ci.org/andreimarcu/linx-server.svg?branch=master)](https://travis-ci.org/andreimarcu/linx-server) From 5b774469ea1be43c14602d2f9dd80e4783b88955 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Wed, 17 Mar 2021 19:34:36 -0400 Subject: [PATCH 332/345] Update README.md --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index a603003..12aeaac 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,10 @@ linx-server ====== -[![Build Status](https://travis-ci.org/andreimarcu/linx-server.svg?branch=master)](https://travis-ci.org/andreimarcu/linx-server) Self-hosted file/media sharing website. ### Demo -You can see what it looks like using the demo: [https://demo.linx-server.net/](https://demo.linx-server.net/) +You can see what it looks like using the demo: [https://put.icu/](https://put.icu/) ### Clients From 7d0950e54c3015c4dce220e06de7c59b5035c901 Mon Sep 17 00:00:00 2001 From: William Oldham Date: Sun, 11 Jul 2021 00:09:57 +0100 Subject: [PATCH 333/345] Update image.html --- templates/display/image.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/templates/display/image.html b/templates/display/image.html index 985c504..8dcd844 100644 --- a/templates/display/image.html +++ b/templates/display/image.html @@ -1,6 +1,7 @@ {% extends "base.html" %} {% block head %} + {% endblock %} @@ -8,4 +9,4 @@ -{% endblock %} \ No newline at end of file +{% endblock %} From 084ac233ffaa51c37b32ced8126bd4fa8c176dc1 Mon Sep 17 00:00:00 2001 From: ZizzyDizzyMC Date: Fri, 20 Aug 2021 12:13:58 -0400 Subject: [PATCH 334/345] Repo Link update. Added link to this fork of Linx-server. --- templates/base.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/base.html b/templates/base.html index 17b1ea2..54fd368 100644 --- a/templates/base.html +++ b/templates/base.html @@ -30,7 +30,7 @@ {% block content %}{% endblock %}
    From d63a875b12e4bf370c31ec4ee4f1d79b74c8f0e8 Mon Sep 17 00:00:00 2001 From: luckman212 Date: Sat, 9 Oct 2021 11:36:53 -0400 Subject: [PATCH 335/345] add default expiry config parameter --- pages.go | 12 +++++++----- server.go | 3 +++ templates/index.html | 2 +- templates/paste.html | 2 +- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/pages.go b/pages.go index ae8de42..6492651 100644 --- a/pages.go +++ b/pages.go @@ -21,9 +21,10 @@ const ( func indexHandler(c web.C, w http.ResponseWriter, r *http.Request) { err := renderTemplate(Templates["index.html"], pongo2.Context{ - "maxsize": Config.maxSize, - "expirylist": listExpirationTimes(), - "forcerandom": Config.forceRandomFilename, + "maxsize": Config.maxSize, + "expirylist": listExpirationTimes(), + "expirydefault": Config.defaultExpiry, + "forcerandom": Config.forceRandomFilename, }, r, w) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) @@ -32,8 +33,9 @@ func indexHandler(c web.C, w http.ResponseWriter, r *http.Request) { func pasteHandler(c web.C, w http.ResponseWriter, r *http.Request) { err := renderTemplate(Templates["paste.html"], pongo2.Context{ - "expirylist": listExpirationTimes(), - "forcerandom": Config.forceRandomFilename, + "expirylist": listExpirationTimes(), + "expirydefault": Config.defaultExpiry, + "forcerandom": Config.forceRandomFilename, }, r, w) if err != nil { oopsHandler(c, w, r, RespHTML, "") diff --git a/server.go b/server.go index 82a72e3..41cd932 100644 --- a/server.go +++ b/server.go @@ -56,6 +56,7 @@ var Config struct { xFrameOptions string maxSize int64 maxExpiry uint64 + defaultExpiry uint64 realIp bool noLogs bool allowHotlink bool @@ -264,6 +265,8 @@ func main() { "maximum upload file size in bytes (default 4GB)") flag.Uint64Var(&Config.maxExpiry, "maxexpiry", 0, "maximum expiration time in seconds (default is 0, which is no expiry)") + flag.Uint64Var(&Config.defaultExpiry, "default-expiry", 86400, + "default expiration time in seconds (default is 86400, which is 1 day)") flag.StringVar(&Config.certFile, "certfile", "", "path to ssl certificate (for https)") flag.StringVar(&Config.keyFile, "keyfile", "", diff --git a/templates/index.html b/templates/index.html index 8060af2..3958788 100644 --- a/templates/index.html +++ b/templates/index.html @@ -28,7 +28,7 @@

    +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