summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDennis <dennis@kobert.dev>2022-09-08 22:33:32 +0200
committerDennis <dennis@kobert.dev>2022-09-08 22:33:32 +0200
commita16a846e7f073f94d6bc506bdd616136fbe7f541 (patch)
treeb0aa9d665607684db528a17c2c6b1b423a67a087
parent91e3eccfe5ca2bcfe60c0d7b5971fe83bd87d547 (diff)
Remove public folderHEADdev
-rw-r--r--content/bridging_the_gap.md4
-rw-r--r--public/.gitkeep0
-rw-r--r--public/elasticlunr.min.js10
-rw-r--r--public/search_index.en.js1
-rw-r--r--public/site.css1
5 files changed, 3 insertions, 13 deletions
diff --git a/content/bridging_the_gap.md b/content/bridging_the_gap.md
index f6c98b7..735b1fd 100644
--- a/content/bridging_the_gap.md
+++ b/content/bridging_the_gap.md
@@ -83,7 +83,9 @@ However one fundamental constraint for the design of the node system is that it
Spinning up rustc every time the user adds a brush stroke is just not viable.
But if we take a look at programming languages, this is already a solved problem: Wasm also consists of a "high level" level language that has to be executed with as little of a delay as possible and also as fast as possible.
This is achieved by leveraging tiered compilation and initially just "interpreting" the binary and starting the compiler in the background to compute a more optimized binary that can be swapped out on the fly.
-We want to build something similar for graphite by using a mix of interpretation (executing instruction after instruction using a runtime to pass data from node to node)
+We want to build something similar for graphite by using a mix of interpretation (executing instruction after instruction using a runtime to pass data from node to node) and just in time compilation.
+But this also means that we have to build our own type checking.
+## Building a type system for a node based programming language
diff --git a/public/.gitkeep b/public/.gitkeep
deleted file mode 100644
index e69de29..0000000
--- a/public/.gitkeep
+++ /dev/null
diff --git a/public/elasticlunr.min.js b/public/elasticlunr.min.js
deleted file mode 100644
index 79dad65..0000000
--- a/public/elasticlunr.min.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/**
- * elasticlunr - http://weixsong.github.io
- * Lightweight full-text search engine in Javascript for browser search and offline search. - 0.9.6
- *
- * Copyright (C) 2017 Oliver Nightingale
- * Copyright (C) 2017 Wei Song
- * MIT Licensed
- * @license
- */
-!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u<s.length;u++){var a=s[u];r[a]=this.pipeline.run(t.tokenizer(e[a]))}var l={};for(var c in o){var d=r[c]||r.any;if(d){var f=this.fieldSearch(d,c,o),h=o[c].boost;for(var p in f)f[p]=f[p]*h;for(var p in f)p in l?l[p]+=f[p]:l[p]=f[p]}}var v,g=[];for(var p in l)v={ref:p,score:l[p]},this.documentStore.hasDoc(p)&&(v.doc=this.documentStore.getDoc(p)),g.push(v);return g.sort(function(e,t){return t.score-e.score}),g},t.Index.prototype.fieldSearch=function(e,t,n){var i=n[t].bool,o=n[t].expand,r=n[t].boost,s=null,u={};return 0!==r?(e.forEach(function(e){var n=[e];1==o&&(n=this.index[t].expandToken(e));var r={};n.forEach(function(n){var o=this.index[t].getDocs(n),a=this.idf(n,t);if(s&&"AND"==i){var l={};for(var c in s)c in o&&(l[c]=o[c]);o=l}n==e&&this.fieldSearchStats(u,n,o);for(var c in o){var d=this.index[t].getTermFrequency(n,c),f=this.documentStore.getFieldLength(c,t),h=1;0!=f&&(h=1/Math.sqrt(f));var p=1;n!=e&&(p=.15*(1-(n.length-e.length)/n.length));var v=d*a*h*p;c in r?r[c]+=v:r[c]=v}},this),s=this.mergeScores(s,r,i)},this),s=this.coordNorm(s,u,e.length)):void 0},t.Index.prototype.mergeScores=function(e,t,n){if(!e)return t;if("AND"==n){var i={};for(var o in t)o in e&&(i[o]=e[o]+t[o]);return i}for(var o in t)o in e?e[o]+=t[o]:e[o]=t[o];return e},t.Index.prototype.fieldSearchStats=function(e,t,n){for(var i in n)i in e?e[i].push(t):e[i]=[t]},t.Index.prototype.coordNorm=function(e,t,n){for(var i in e)if(i in t){var o=t[i].length;e[i]=e[i]*o/n}return e},t.Index.prototype.toJSON=function(){var e={};return this._fields.forEach(function(t){e[t]=this.index[t].toJSON()},this),{version:t.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),index:e,pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},t.DocumentStore=function(e){this._save=null===e||void 0===e?!0:e,this.docs={},this.docInfo={},this.length=0},t.DocumentStore.load=function(e){var t=new this;return t.length=e.length,t.docs=e.docs,t.docInfo=e.docInfo,t._save=e.save,t},t.DocumentStore.prototype.isDocStored=function(){return this._save},t.DocumentStore.prototype.addDoc=function(t,n){this.hasDoc(t)||this.length++,this.docs[t]=this._save===!0?e(n):null},t.DocumentStore.prototype.getDoc=function(e){return this.hasDoc(e)===!1?null:this.docs[e]},t.DocumentStore.prototype.hasDoc=function(e){return e in this.docs},t.DocumentStore.prototype.removeDoc=function(e){this.hasDoc(e)&&(delete this.docs[e],delete this.docInfo[e],this.length--)},t.DocumentStore.prototype.addFieldLength=function(e,t,n){null!==e&&void 0!==e&&0!=this.hasDoc(e)&&(this.docInfo[e]||(this.docInfo[e]={}),this.docInfo[e][t]=n)},t.DocumentStore.prototype.updateFieldLength=function(e,t,n){null!==e&&void 0!==e&&0!=this.hasDoc(e)&&this.addFieldLength(e,t,n)},t.DocumentStore.prototype.getFieldLength=function(e,t){return null===e||void 0===e?0:e in this.docs&&t in this.docInfo[e]?this.docInfo[e][t]:0},t.DocumentStore.prototype.toJSON=function(){return{docs:this.docs,docInfo:this.docInfo,length:this.length,save:this._save}},t.stemmer=function(){var e={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},t={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",o=n+"[^aeiouy]*",r=i+"[aeiou]*",s="^("+o+")?"+r+o,u="^("+o+")?"+r+o+"("+r+")?$",a="^("+o+")?"+r+o+r+o,l="^("+o+")?"+i,c=new RegExp(s),d=new RegExp(a),f=new RegExp(u),h=new RegExp(l),p=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,g=/^(.+?)eed$/,m=/^(.+?)(ed|ing)$/,y=/.$/,S=/(at|bl|iz)$/,x=new RegExp("([^aeiouylsz])\\1$"),w=new RegExp("^"+o+i+"[^aeiouwxy]$"),I=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,D=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,F=/^(.+?)(s|t)(ion)$/,_=/^(.+?)e$/,P=/ll$/,k=new RegExp("^"+o+i+"[^aeiouwxy]$"),z=function(n){var i,o,r,s,u,a,l;if(n.length<3)return n;if(r=n.substr(0,1),"y"==r&&(n=r.toUpperCase()+n.substr(1)),s=p,u=v,s.test(n)?n=n.replace(s,"$1$2"):u.test(n)&&(n=n.replace(u,"$1$2")),s=g,u=m,s.test(n)){var z=s.exec(n);s=c,s.test(z[1])&&(s=y,n=n.replace(s,""))}else if(u.test(n)){var z=u.exec(n);i=z[1],u=h,u.test(i)&&(n=i,u=S,a=x,l=w,u.test(n)?n+="e":a.test(n)?(s=y,n=n.replace(s,"")):l.test(n)&&(n+="e"))}if(s=I,s.test(n)){var z=s.exec(n);i=z[1],n=i+"i"}if(s=b,s.test(n)){var z=s.exec(n);i=z[1],o=z[2],s=c,s.test(i)&&(n=i+e[o])}if(s=E,s.test(n)){var z=s.exec(n);i=z[1],o=z[2],s=c,s.test(i)&&(n=i+t[o])}if(s=D,u=F,s.test(n)){var z=s.exec(n);i=z[1],s=d,s.test(i)&&(n=i)}else if(u.test(n)){var z=u.exec(n);i=z[1]+z[2],u=d,u.test(i)&&(n=i)}if(s=_,s.test(n)){var z=s.exec(n);i=z[1],s=d,u=f,a=k,(s.test(i)||u.test(i)&&!a.test(i))&&(n=i)}return s=P,u=d,s.test(n)&&u.test(n)&&(s=y,n=n.replace(s,"")),"y"==r&&(n=r.toLowerCase()+n.substr(1)),n};return z}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.stopWordFilter=function(e){return e&&t.stopWordFilter.stopWords[e]!==!0?e:void 0},t.clearStopWords=function(){t.stopWordFilter.stopWords={}},t.addStopWords=function(e){null!=e&&Array.isArray(e)!==!1&&e.forEach(function(e){t.stopWordFilter.stopWords[e]=!0},this)},t.resetStopWords=function(){t.stopWordFilter.stopWords=t.defaultStopWords},t.defaultStopWords={"":!0,a:!0,able:!0,about:!0,across:!0,after:!0,all:!0,almost:!0,also:!0,am:!0,among:!0,an:!0,and:!0,any:!0,are:!0,as:!0,at:!0,be:!0,because:!0,been:!0,but:!0,by:!0,can:!0,cannot:!0,could:!0,dear:!0,did:!0,"do":!0,does:!0,either:!0,"else":!0,ever:!0,every:!0,"for":!0,from:!0,get:!0,got:!0,had:!0,has:!0,have:!0,he:!0,her:!0,hers:!0,him:!0,his:!0,how:!0,however:!0,i:!0,"if":!0,"in":!0,into:!0,is:!0,it:!0,its:!0,just:!0,least:!0,let:!0,like:!0,likely:!0,may:!0,me:!0,might:!0,most:!0,must:!0,my:!0,neither:!0,no:!0,nor:!0,not:!0,of:!0,off:!0,often:!0,on:!0,only:!0,or:!0,other:!0,our:!0,own:!0,rather:!0,said:!0,say:!0,says:!0,she:!0,should:!0,since:!0,so:!0,some:!0,than:!0,that:!0,the:!0,their:!0,them:!0,then:!0,there:!0,these:!0,they:!0,"this":!0,tis:!0,to:!0,too:!0,twas:!0,us:!0,wants:!0,was:!0,we:!0,were:!0,what:!0,when:!0,where:!0,which:!0,"while":!0,who:!0,whom:!0,why:!0,will:!0,"with":!0,would:!0,yet:!0,you:!0,your:!0},t.stopWordFilter.stopWords=t.defaultStopWords,t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(e){if(null===e||void 0===e)throw new Error("token should not be undefined");return e.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.InvertedIndex=function(){this.root={docs:{},df:0}},t.InvertedIndex.load=function(e){var t=new this;return t.root=e.root,t},t.InvertedIndex.prototype.addToken=function(e,t,n){for(var n=n||this.root,i=0;i<=e.length-1;){var o=e[i];o in n||(n[o]={docs:{},df:0}),i+=1,n=n[o]}var r=t.ref;n.docs[r]?n.docs[r]={tf:t.tf}:(n.docs[r]={tf:t.tf},n.df+=1)},t.InvertedIndex.prototype.hasToken=function(e){if(!e)return!1;for(var t=this.root,n=0;n<e.length;n++){if(!t[e[n]])return!1;t=t[e[n]]}return!0},t.InvertedIndex.prototype.getNode=function(e){if(!e)return null;for(var t=this.root,n=0;n<e.length;n++){if(!t[e[n]])return null;t=t[e[n]]}return t},t.InvertedIndex.prototype.getDocs=function(e){var t=this.getNode(e);return null==t?{}:t.docs},t.InvertedIndex.prototype.getTermFrequency=function(e,t){var n=this.getNode(e);return null==n?0:t in n.docs?n.docs[t].tf:0},t.InvertedIndex.prototype.getDocFreq=function(e){var t=this.getNode(e);return null==t?0:t.df},t.InvertedIndex.prototype.removeToken=function(e,t){if(e){var n=this.getNode(e);null!=n&&t in n.docs&&(delete n.docs[t],n.df-=1)}},t.InvertedIndex.prototype.expandToken=function(e,t,n){if(null==e||""==e)return[];var t=t||[];if(void 0==n&&(n=this.getNode(e),null==n))return t;n.df>0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e<arguments.length;e++)t=arguments[e],~this.indexOf(t)||this.elements.splice(this.locationFor(t),0,t);this.length=this.elements.length},lunr.SortedSet.prototype.toArray=function(){return this.elements.slice()},lunr.SortedSet.prototype.map=function(e,t){return this.elements.map(e,t)},lunr.SortedSet.prototype.forEach=function(e,t){return this.elements.forEach(e,t)},lunr.SortedSet.prototype.indexOf=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]<u[i]?n++:s[n]>u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();o<r.length;o++)i.add(r[o]);return i},lunr.SortedSet.prototype.toJSON=function(){return this.toArray()},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.elasticlunr=t()}(this,function(){return t})}();
diff --git a/public/search_index.en.js b/public/search_index.en.js
deleted file mode 100644
index 5958385..0000000
--- a/public/search_index.en.js
+++ /dev/null
@@ -1 +0,0 @@
-window.searchIndex = {"fields":["title","body"],"pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5","index":{"body":{"root":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"2":{"docs":{},"df":0,"d":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"3":{"docs":{},"df":0,"d":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":3.605551275463989}},"df":1}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}}}},"d":{"docs":{},"df":0,"d":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.6457513110645907}},"df":1}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.0}},"df":1}}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}}},"i":{"docs":{},"df":0,"m":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}}}},"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}}}},"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"z":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.6457513110645907}},"df":1},"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}}},"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.0}},"df":1}},"g":{"docs":{"http://127.0.0.1:1111/":{"tf":1.0},"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"h":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"d":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"g":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":3.4641016151377544}},"df":1}}},"l":{"docs":{},"df":0,"d":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.23606797749979}},"df":1}},"m":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"s":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.0}},"df":1}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}},"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.8284271247461903}},"df":1}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1},"x":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"s":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1,"i":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.0}},"df":1}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.6457513110645907}},"df":1}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"s":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.449489742783178}},"df":1}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}},"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1,"i":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.449489742783178}},"df":1}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.23606797749979}},"df":1}}}}}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}},"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.449489742783178}},"df":1,"o":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.449489742783178}},"df":1}}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"y":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}}}},"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"c":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1},"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}}}}},"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.6457513110645907}},"df":1}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.449489742783178}},"df":1}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1},"s":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"w":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}},"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}},"l":{"docs":{},"df":0,"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.449489742783178}},"df":1}}}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":3.3166247903554}},"df":1}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"d":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"h":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":3.4641016151377544}},"df":1,"e":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.0}},"df":1}},"i":{"docs":{},"df":0,"c":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1},"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}},"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}}}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"c":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"k":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"s":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}},"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":3.4641016151377544}},"df":1,"i":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"'":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"d":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1},"u":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":3.4641016151377544}},"df":1}}}}},"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}},"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}}},"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}},"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1,"'":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.8284271247461903}},"df":1},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.23606797749979}},"df":1}}},"n":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"k":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}},"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1},"v":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"d":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"k":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}},"n":{"docs":{},"df":0,"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}}},"t":{"docs":{},"df":0,"h":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"m":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"x":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"f":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.23606797749979}},"df":1}},"v":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}}}},"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.0}},"df":1}},"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"x":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":6.6332495807108}},"df":1}}},"u":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.23606797749979}},"df":1},"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1},"o":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.23606797749979}},"df":1,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.6457513110645907}},"df":1}},"s":{"docs":{},"df":0,"s":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}},"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}}}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}}}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}}},"p":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"y":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.23606797749979}},"df":1}}}}}}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.449489742783178}},"df":1}}}},"t":{"docs":{"http://127.0.0.1:1111/":{"tf":1.0},"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.449489742783178}},"df":1}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":3.4641016151377544}},"df":1,"m":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.23606797749979}},"df":1}}}}},"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.6457513110645907}},"df":1}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}},"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}}},"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1},"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.449489742783178}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.23606797749979}},"df":1,"c":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}}}},"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.0}},"df":1}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}}},"p":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}},"v":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"h":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.0}},"df":1}}}},"o":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"z":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}},"t":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1,"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.23606797749979}},"df":1}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}},"l":{"docs":{},"df":0,"k":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"'":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}},"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}}}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}},"o":{"docs":{},"df":0,"p":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1},"y":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}}}}},"e":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"o":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}},"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.0}},"df":1}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.23606797749979}},"df":1}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"p":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.0}},"df":1,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}}},"s":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":3.605551275463989}},"df":1,"a":{"docs":{},"df":0,"g":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}},"e":{"docs":{},"df":0,"r":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.8284271247461903}},"df":1}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.0}},"df":1}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"m":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"y":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}},"e":{"docs":{},"df":0,"'":{"docs":{},"df":0,"d":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"l":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":2.0}},"df":1},"l":{"docs":{},"df":0,"d":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{},"df":0,"i":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.7320508075688772}},"df":1}}}}},"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.4142135623730951}},"df":1}}}}}},"title":{"root":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"http://127.0.0.1:1111/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"http://127.0.0.1:1111/bridging-the-gap/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"http://127.0.0.1:1111/":{"tf":1.0}},"df":1}}}}}}},"documentStore":{"save":true,"docs":{"http://127.0.0.1:1111/":{"body":"","id":"http://127.0.0.1:1111/","title":"List of blog posts"},"http://127.0.0.1:1111/bridging-the-gap/":{"body":"In our current node graph design there exist a sort of disconnect between our pure mathematical concept and, to be frank, reality.\nLet me start by introducing you to Graphene the node based \"programming language\" which constitutes the heart of the Graphite Editor.\nNode based editing\nIf you already have experience with node based editing, feel free to jump to the next section\nTradiditional graphic editors always limit themselves by the chosen layer of abstraction.\nPhotoshop for example uses layers (images) which are composited on top of each other.\nFor most usages, this is a good abstraction that fits the use case of image editing well, until it doesn't.\nLet's say you want to create a blur that is dependent on the average brightness of an input image, that is something that you can't easily represent using the layer abstraction.\nBut someone already came up with a solution to that exact problem: node based editing.\nIn node based editors, the smallest functional unit is called a node, in the context of image editing, you can for example think of and image node that outputs an image, a greyscale node that takes an image as input and outputs a greyscale version of the same image, etc.\n// insert example picture to illustrate this concept\nNode based editing is employed by lots of popular software such as blender, houdini, davinci resolve and many others, but not so much 2D image editors.\n// add Nuke and Natron as examples\nNodes in Graphene\nBut even when designing a node based editor, you still have to choose a set of fundamental building blocks from which you build your application.\nOne example would be the set of fundamental data types to build your application out of.\nAnd even the nodes themselves are limited in some way, often these node systems allow you to write custom code to extend the application with your own nodes, but you are still limited by the choice of data types and the node-runtime.\nThe runtime describes the process through which data is passed from node to node and when nodes are scheduled for execution.\nIdeally, we'd like to: \n\n\nChoose a sensible level of abstraction.\nThis is mainly a question of granularity, let's illustrate this using childrens toys.\nAs a Kid I loved playing with LEGO bricks, they provide a fundamental building block from which you can construct pretty much everything you can imagine by combining small atomic units to build more complex structures.\nPlaymobil for example chooses a bigger level of abstraction, instead of a set of composable fundamental bulding blocks it uses people, trees, animals, houses, cars, etc.\nThis allows \"user\" to quickly get going and build a world, but it limits them as soon as they wan to build something that the playmobil company didn't forsee.\nBuilding your own house would likely not be possible using playmobil but possible although labor intensive using LEGO.\nIt is of course always an option to 3D print your own parts (this would be akin to writing a custom node) but this process is labor intensive and the final part always kinda looks out of place if you don't use the same philosophy as the playmobil developers to design that part.\nSo the goal of a good system is to both provide sufficiently small composable building blocks to allow you to build everything as well as providing sensible abstractions (groups/modules) to quickly get work done.\nProgramming languages had a very similar problem to solve, first there was machine code which made it possible to theoretically write every program imaginable, but for larger projects this was immensly labour intensive.\nHence so called higher level programming languages were created to combat this problem of scalability.\nThis brings us to a prime example for such a language: Rust provides so called zero cost abstractions, which brings us to the next point.\n\n\nMinimize overhead:\nFor reasons that warrent their own blog post, Graphite will need to squeeze out the last bit of performance, because every performance improvement directly impacts the user experiance.\nTo continue the analogy from before, lets talk about python, it provides great abstractions which allows fast prototyping and it is (for the most part) an interpreted language. This means that we need a runtime that keeps track of the current state and then reads the program line by line executing it along the way. This is very similar to how a human would read through a program while debugging.\nManually piping the data to each functional unit comes with a runtime overhead which is one of the reasons why interpreted languages usually tend to be slower that compiled ones.\nSo ideally we could \"compile\" our network of useful abstract nodes to more fundamental execution units which no longer need a runtime to work.\nLets say you want to reenact a scene from a james bond movie in which 007 holds on to a rocket which accends into space. With Playmobil you would need to coulple the movement of your character to the movement of the rocket with two hands, whenever the rocket moves, you have to move the figure as well. If they were made out of lego, you could stick both parts to gether in order to couple their movement. To translate this terrible analogy into the real world this is the difference between manually passing the output of the image node to the input for the greyscale node or fusing image node and greyscale node into a single functional unit.\n\n\nThis brings us to the current design envisioned for Graphene.\nWe wanted ultimately build something that limits the user as little as possible while still providing sensible defaults to make it easier to get started.\nThe solution to the first problem the solution was pretty simple, we just allow the usage of the entire rust type system as data and rust code to define nodes.\nOnly a few core nodes should suffice to solve any computational problem by just combining these fundamental nodes, this can be achieved by implementing the lamda calculus using nodes an hence achieving Turing-completeness.\n(If you have no idea what those last two concepts where don't worry it's not required for understanding this article.)\nFundamentally we split the concept of a node graph in two parts, on the one hand, there is the so called document graph this provides the high level abstractions that user interacts with on a day to day basis, this is also where your image nodes, brush nodes, blur node etc. live.\nEach of the nodes in the document graph is then compiled to a set of fundamental nodes, that's what we call the protograph.\n// picture illustrating the transition from document graph to node graph\nThis is analogous to how programming languages work, the document graph, which is bijective to what the user sees and interacts with in the editor, is equivalent to the syntax of a programming language.\nThe protograph would then be the compiled result of our document graph syntax and represents the actual execution performed by the processing hardware.\nProtograph\nLet's take a short detour and talk in more detail about this ominous protograph.\nWhile working on the fundamental design for the node graph, I studied some category theory with a friend of mine using the excellent course Category Theory for Programmers by Bartosz Milewski and got hooked on functional programming concepts.\nThere is is certain beauty in rigorously defining programming concepts from the ground up through math and abstract it to absurd levels.\nIt definitely elevates computer science from being an engineering discipline to a more theoretical plane and at the same time grounds it in user chosen fundamental axioms.\nInstead of trying to form our programming languages and mental models to fit reality, we create our own system to describe computation from the ground up, which generally allows us much higher levels of abstraction.\nThis mindset has been hugely influential in the conception of the graphene language.\nEvery node in our protograph is just a quasi side effect free (=pure) function which allows us to employ extensive caching schemes and never recompute parts of a graph that we have already evaluated.\nThese nodes are themselves just implemented as rust functions which means that we can actually translate a visual representation of a node graph into rust source code which can then be compiled into a single optimized binary.\nThis has quite a few advantages, we don't have to implement our own type checking and the compiler can strip away all of our fancy abstractions and make them actually zero cost.\nHowever one fundamental constraint for the design of the node system is that it has to support real time updates, any delay between modification of the node graph and visual updates in the user interface should be imperceptible.\nSpinning up rustc every time the user adds a brush stroke is just not viable.\nBut if we take a look at programming languages, this is already a solved problem: Wasm also consists of a \"high level\" level language that has to be executed with as little of a delay as possible and also as fast as possible.\nThis is achieved by leveraging tiered compilation and initially just \"interpreting\" the binary and starting the compiler in the background to compute a more optimized binary that can be swapped out on the fly.\nWe want to build something similar for graphite by using a mix of interpretation (executing instruction after instruction using a runtime to pass data from node to node)\n","id":"http://127.0.0.1:1111/bridging-the-gap/","title":"On Briding the Gap"}},"docInfo":{"http://127.0.0.1:1111/":{"body":0,"title":3},"http://127.0.0.1:1111/bridging-the-gap/":{"body":890,"title":2}},"length":2},"lang":"English"}; \ No newline at end of file
diff --git a/public/site.css b/public/site.css
deleted file mode 100644
index 23ca4be..0000000
--- a/public/site.css
+++ /dev/null
@@ -1 +0,0 @@
-html{font-size:12px}*{box-sizing:border-box;text-rendering:geometricPrecision}body{font-size:1rem;line-height:1.5rem;margin:0;font-family:Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;word-wrap:break-word}h1,h2,h3,h4,h5,h6{line-height:1.3em}fieldset{border:none;padding:0;margin:0}pre{padding:2rem;margin:1.75rem 0;background-color:#fff;border:1px solid #ccc;overflow:auto}code[class*=language-],pre[class*=language-],pre code{font-weight:100;text-shadow:none;margin:1.75rem 0}a{cursor:pointer;color:#ff2e88;text-decoration:none;border-bottom:1px solid #ff2e88}a:hover{background-color:#ff2e88;color:#fff}.grid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.grid.\-top{-ms-flex-align:start;-ms-grid-row-align:flex-start;align-items:flex-start}.grid.\-middle{-ms-flex-align:center;-ms-grid-row-align:center;align-items:center}.grid.\-bottom{-ms-flex-align:end;-ms-grid-row-align:flex-end;align-items:flex-end}.grid.\-stretch{-ms-flex-align:stretch;-ms-grid-row-align:stretch;align-items:stretch}.grid.\-baseline{-ms-flex-align:baseline;-ms-grid-row-align:baseline;align-items:baseline}.grid.\-left{-ms-flex-pack:start;justify-content:flex-start}.grid.\-center{-ms-flex-pack:center;justify-content:center}.grid.\-right{-ms-flex-pack:end;justify-content:flex-end}.grid.\-between{-ms-flex-pack:justify;justify-content:space-between}.grid.\-around{-ms-flex-pack:distribute;justify-content:space-around}.cell{-ms-flex:1;flex:1;box-sizing:border-box}@media screen and (min-width: 768px){.cell.\-1of12{-ms-flex:0 0 8.33333%;flex:0 0 8.33333%}.cell.\-2of12{-ms-flex:0 0 16.66667%;flex:0 0 16.66667%}.cell.\-3of12{-ms-flex:0 0 25%;flex:0 0 25%}.cell.\-4of12{-ms-flex:0 0 33.33333%;flex:0 0 33.33333%}.cell.\-5of12{-ms-flex:0 0 41.66667%;flex:0 0 41.66667%}.cell.\-6of12{-ms-flex:0 0 50%;flex:0 0 50%}.cell.\-7of12{-ms-flex:0 0 58.33333%;flex:0 0 58.33333%}.cell.\-8of12{-ms-flex:0 0 66.66667%;flex:0 0 66.66667%}.cell.\-9of12{-ms-flex:0 0 75%;flex:0 0 75%}.cell.\-10of12{-ms-flex:0 0 83.33333%;flex:0 0 83.33333%}.cell.\-11of12{-ms-flex:0 0 91.66667%;flex:0 0 91.66667%}}@media screen and (max-width: 768px){.grid{-ms-flex-direction:column;flex-direction:column}.cell{-ms-flex:0 0 auto;flex:0 0 auto}}.hack,.hack blockquote,.hack code,.hack em,.hack h1,.hack h2,.hack h3,.hack h4,.hack h5,.hack h6,.hack strong{font-size:1rem;font-style:normal;font-family:Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif}.hack blockquote,.hack code,.hack em,.hack strong{line-height:20px}.hack em{color:#888;font-style:italic}.hack blockquote,.hack code,.hack footer,.hack h1,.hack h2,.hack h3,.hack h4,.hack h5,.hack h6,.hack header,.hack li,.hack ol,.hack p,.hack section,.hack ul{float:none;margin:0;padding:0}.hack header+article{margin-top:20px}.hack blockquote,.hack h1,.hack ol,.hack p,.hack ul{margin-top:20px;margin-bottom:20px}.hack h1{position:relative;display:inline-block;display:table-cell;padding:20px 0 30px;margin:0;overflow:hidden}.hack h1:after{content:"====================================================================================================";position:absolute;bottom:10px;left:0}.hack h1+*{margin-top:0}.hack h2,.hack h3,.hack h4,.hack h5,.hack h6{position:relative;margin-bottom:1.75rem}.hack h2:before,.hack h3:before,.hack h4:before,.hack h5:before,.hack h6:before{display:inline}.hack h2:before{content:"## "}.hack h3:before{content:"### "}.hack h4:before{content:"#### "}.hack h5:before{content:"##### "}.hack h6:before{content:"###### "}.hack li{position:relative;display:block;padding-left:20px}.hack li:after{position:absolute;top:0;left:0}.hack ul>li:after{content:"-"}.hack ol{counter-reset:a}.hack ol>li:after{content:counter(a) ".";counter-increment:a}.hack blockquote{position:relative;padding-left:17px;padding-left:2ch;overflow:hidden}.hack blockquote:after{content:">\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>";white-space:pre;position:absolute;top:0;left:0;line-height:20px}.hack em:after,.hack em:before{content:"*";display:inline}.hack pre code:after,.hack pre code:before{content:none}.hack code{font-weight:700}.hack code:after,.hack code:before{content:"`";display:inline}.hack hr{position:relative;height:20px;overflow:hidden;border:0;margin:20px 0}.hack hr:after{content:"----------------------------------------------------------------------------------------------------";position:absolute;top:0;left:0;line-height:20px;width:100%;word-wrap:break-word}@-moz-document url-prefix(){.hack h1{display:block}}.hack-ones ol>li:after{content:"1."}p{margin:0 0 1.75rem}.container{max-width:70rem}.container,.container-fluid{margin:0 auto;padding:0 1rem}.inner{padding:1rem}.inner2x{padding:2rem}.pull-left{float:left}.pull-right{float:right}.progress-bar{height:8px;opacity:.8;background-color:#ccc;margin-top:12px}.progress-bar.progress-bar-show-percent{margin-top:38px}.progress-bar-filled{background-color:gray;height:100%;transition:width .3s ease;position:relative;width:0}.progress-bar-filled:before{content:'';border:6px solid transparent;border-top-color:gray;position:absolute;top:-12px;right:-6px}.progress-bar-filled:after{color:gray;content:attr(data-filled);display:block;font-size:12px;white-space:nowrap;position:absolute;border:6px solid transparent;top:-38px;right:0;-ms-transform:translateX(50%);transform:translateX(50%)}table{width:100%;border-collapse:collapse;margin:1.75rem 0;color:#778087}table td,table th{vertical-align:top;border:1px solid #ccc;line-height:15px;padding:10px}table thead th{font-size:10px}table tbody td:first-child{font-weight:700;color:#333}.form{width:30rem}.form-group{margin-bottom:1.75rem;overflow:auto}.form-group label{border-bottom:2px solid #ccc;color:#333;width:10rem;display:inline-block;height:38px;line-height:38px;padding:0;float:left;position:relative}.form-group.form-success label{color:#4caf50 !important;border-color:#4caf50 !important}.form-group.form-warning label{color:#ff9800 !important;border-color:#ff9800 !important}.form-group.form-error label{color:#f44336 !important;border-color:#f44336 !important}.form-control{outline:none;border:none;border-bottom:2px solid #ccc;padding:.5rem 0;width:20rem;height:38px;background-color:transparent}.form-control:focus{border-color:#555}.form-group.form-textarea label:after{position:absolute;content:'';width:2px;background-color:#fff;right:-2px;top:0;bottom:0}textarea.form-control{height:auto;resize:none;padding:1rem 0;border-bottom:2px solid #ccc;border-left:2px solid #ccc;padding:.5rem}select.form-control{border-radius:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none}.help-block{color:#999;margin-top:.5rem}.form-actions{margin-bottom:1.75rem}.btn{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;cursor:pointer;outline:none;padding:.65rem 2rem;font-size:1rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;z-index:1}.btn:active{box-shadow:inset 0 1px 3px rgba(0,0,0,0.12)}.btn.btn-ghost{border-color:#757575;color:#757575;background-color:transparent}.btn.btn-ghost:focus,.btn.btn-ghost:hover{border-color:#424242;color:#424242;z-index:2}.btn.btn-ghost:hover{background-color:transparent}.btn-block{width:100%;display:-ms-flexbox;display:flex}.btn-default{color:#fff;background-color:#e0e0e0;border:1px solid #e0e0e0;color:#333}.btn-default:focus:not(.btn-ghost),.btn-default:hover{background-color:#dcdcdc;border-color:#dcdcdc}.btn-success{color:#fff;background-color:#4caf50;border:1px solid #4caf50}.btn-success:focus:not(.btn-ghost),.btn-success:hover{background-color:#43a047;border-color:#43a047}.btn-success.btn-ghost{border-color:#4caf50;color:#4caf50}.btn-success.btn-ghost:focus,.btn-success.btn-ghost:hover{border-color:#388e3c;color:#388e3c;z-index:2}.btn-error{color:#fff;background-color:#f44336;border:1px solid #f44336}.btn-error:focus:not(.btn-ghost),.btn-error:hover{background-color:#e53935;border-color:#e53935}.btn-error.btn-ghost{border-color:#f44336;color:#f44336}.btn-error.btn-ghost:focus,.btn-error.btn-ghost:hover{border-color:#d32f2f;color:#d32f2f;z-index:2}.btn-warning{color:#fff;background-color:#ff9800;border:1px solid #ff9800}.btn-warning:focus:not(.btn-ghost),.btn-warning:hover{background-color:#fb8c00;border-color:#fb8c00}.btn-warning.btn-ghost{border-color:#ff9800;color:#ff9800}.btn-warning.btn-ghost:focus,.btn-warning.btn-ghost:hover{border-color:#f57c00;color:#f57c00;z-index:2}.btn-info{color:#fff;background-color:#00bcd4;border:1px solid #00bcd4}.btn-info:focus:not(.btn-ghost),.btn-info:hover{background-color:#00acc1;border-color:#00acc1}.btn-info.btn-ghost{border-color:#00bcd4;color:#00bcd4}.btn-info.btn-ghost:focus,.btn-info.btn-ghost:hover{border-color:#0097a7;color:#0097a7;z-index:2}.btn-primary{color:#fff;background-color:#2196f3;border:1px solid #2196f3}.btn-primary:focus:not(.btn-ghost),.btn-primary:hover{background-color:#1e88e5;border-color:#1e88e5}.btn-primary.btn-ghost{border-color:#2196f3;color:#2196f3}.btn-primary.btn-ghost:focus,.btn-primary.btn-ghost:hover{border-color:#1976d2;color:#1976d2;z-index:2}.btn-group{overflow:auto}.btn-group .btn{float:left}.btn-group .btn-ghost:not(:first-child){margin-left:-1px}.card{border:1px solid #ccc}.card .card-header{color:#333;text-align:center;background-color:#ddd;padding:.5rem 0}.alert{color:#ccc;padding:1rem;border:1px solid #ccc;margin-bottom:1.75rem}.alert-success{color:#4caf50;border-color:#4caf50}.alert-error{color:#f44336;border-color:#f44336}.alert-info{color:#00bcd4;border-color:#00bcd4}.alert-warning{color:#ff9800;border-color:#ff9800}.media:not(:last-child){margin-bottom:1.25rem}.media-left{padding-right:1rem}.media-left,.media-right{display:table-cell;vertical-align:top}.media-right{padding-left:1rem}.media-body{display:table-cell;vertical-align:top}.media-heading{font-size:1.16667rem;font-weight:700}.media-content{margin-top:.3rem}.avatarholder,.placeholder{background-color:#f0f0f0;text-align:center;color:#b9b9b9;font-size:1rem;border:1px solid #f0f0f0}.avatarholder{width:48px;height:48px;line-height:46px;font-size:2rem;background-size:cover;background-position:50%;background-repeat:no-repeat}.avatarholder.rounded{border-radius:33px}.loading{display:inline-block;content:'&nbsp;';height:20px;width:20px;margin:0 .5rem;animation:a .6s infinite linear;border:2px solid #e91e63;border-right-color:transparent;border-radius:50%}.btn .loading{margin-bottom:0;width:14px;height:14px}.btn div.loading{float:left}.alert .loading{margin-bottom:-5px}@keyframes a{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.menu{width:100%}.menu .menu-item{display:block;color:#616161;border-color:#616161}.menu .menu-item.active,.menu .menu-item:hover{color:#000;border-color:#000;background-color:transparent}@media screen and (max-width: 768px){.form-group label{display:block;border-bottom:none;width:100%}.form-group.form-textarea label:after{display:none}.form-control{width:100%}textarea.form-control{border-left:none;padding:.5rem 0}pre::-webkit-scrollbar{height:3px}}@media screen and (max-width: 480px){.form{width:100%}}.dark{color:#ccc}.dark,.dark pre{background-color:#000}.dark pre{padding:10px;border:none}.dark pre code{color:#00bcd4}.dark h1 a,.dark h2 a,.dark h3 a,.dark h4 a,.dark h5 a{color:#ccc}.dark code,.dark strong{color:#fff}.dark code{font-weight:100}.dark table{color:#ccc}.dark table td,.dark table th{border-color:#444}.dark table tbody td:first-child{color:#fff}.dark .form-group label{color:#ccc;border-color:rgba(95,95,95,0.78)}.dark .form-group.form-textarea label:after{background-color:#000}.dark .form-control{color:#ccc;border-color:rgba(95,95,95,0.78)}.dark .form-control:focus{border-color:#ccc;color:#ccc}.dark textarea.form-control{color:#ccc}.dark .card{border-color:rgba(95,95,95,0.78)}.dark .card .card-header{background-color:transparent;color:#ccc;border-bottom:1px solid rgba(95,95,95,0.78)}.dark .btn.btn-ghost.btn-default{border-color:#ababab;color:#ababab}.dark .btn.btn-ghost.btn-default:focus,.dark .btn.btn-ghost.btn-default:hover{border-color:#9c9c9c;color:#9c9c9c;z-index:1}.dark .btn.btn-ghost.btn-default:focus,.dark .btn.btn-ghost.btn-default:hover{border-color:#e0e0e0;color:#e0e0e0}.dark .btn.btn-ghost.btn-primary:focus,.dark .btn.btn-ghost.btn-primary:hover{border-color:#64b5f6;color:#64b5f6}.dark .btn.btn-ghost.btn-success:focus,.dark .btn.btn-ghost.btn-success:hover{border-color:#81c784;color:#81c784}.dark .btn.btn-ghost.btn-info:focus,.dark .btn.btn-ghost.btn-info:hover{border-color:#4dd0e1;color:#4dd0e1}.dark .btn.btn-ghost.btn-error:focus,.dark .btn.btn-ghost.btn-error:hover{border-color:#e57373;color:#e57373}.dark .btn.btn-ghost.btn-warning:focus,.dark .btn.btn-ghost.btn-warning:hover{border-color:#ffb74d;color:#ffb74d}.dark .avatarholder,.dark .placeholder{background-color:transparent;border-color:#333}.dark .menu .menu-item{color:#ccc;border-color:rgba(95,95,95,0.78)}.dark .menu .menu-item.active,.dark .menu .menu-item:hover{color:#fff;border-color:#ccc}:root{--screen-size-small: 30em}@keyframes intro{0%{opacity:0}100%{opacity:1}}.muted{color:rgba(255,255,255,0.5)}.responsive-iframe{position:relative;padding-bottom:56.25%;padding-top:25px;height:0}.responsive-iframe iframe{position:absolute;top:0;left:0;width:100%;height:100%}iframe{border:0}main,footer{animation:intro 0.3s both;animation-delay:0.15s}footer time[datetime$="M"]:before{content:"\2013\0020"}@media only screen and (max-width: 30em){footer time[datetime$="M"]{display:none}}blockquote cite{display:block}blockquote cite::before{content:"\2014"}:target{color:#fff}.hack li ul{margin:0}.main{padding:20px 10px}nav a.active{background-color:#ff2e88;color:#fff}a[itemprop="url"]{color:#ff9800}a[itemprop="url"]:hover{color:#fff}a[href*="://"]::after,a[rel*="external"]{content:" " url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20class='i-external'%20viewBox='0%200%2032%2032'%20width='14'%20height='14'%20fill='none'%20stroke='%23ff9800'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='9.38%'%3E%3Cpath%20d='M14%209%20L3%209%203%2029%2023%2029%2023%2018%20M18%204%20L28%204%2028%2014%20M28%204%20L14%2018'/%3E%3C/svg%3E")}figure a[href*="://"]::after,figure a[rel*="external"]{content:""}html{font-size:13px}.hack pre{font-size:17px}article [itemprop="description"],article [itemprop="summary"]{margin-bottom:20px;margin-top:20px}article [itemprop="summary"] p{margin:0}@media screen and (min-width: 768px){html{font-size:1em}.container{max-width:50rem}}