1!function e(n,t,s){function a(o,i){if(!t[o]){if(!n[o]){var l="function"==typeof require&&require 2if(!i&&l)return l(o,!0) 3if(r)return r(o,!0) 4var c=new Error("Cannot find module '"+o+"'") 5throw c.code="MODULE_NOT_FOUND",c}var d=t[o]={exports:{}} 6n[o][0].call(d.exports,function(e){var t=n[o][1][e] 7return a(t?t:e)},d,d.exports,e,n,t,s)}return t[o].exports}for(var r="function"==typeof require&&require,o=0;o<s.length;o++)a(s[o]) 8return a}({1:[function(e,n,t){(function(){"use strict" 9function e(){}function t(e,n){for(var t=e.length;t--;)if(e[t].listener===n)return t 10return-1}function s(e){return function(){return this[e].apply(this,arguments)}}var a=e.prototype,r=this,o=r.EventEmitter 11a.getListeners=function(e){var n,t,s=this._getEvents() 12if(e instanceof RegExp){n={} 13for(t in s)s.hasOwnProperty(t)&&e.test(t)&&(n[t]=s[t])}else n=s[e]||(s[e]=[]) 14return n},a.flattenListeners=function(e){var n,t=[] 15for(n=0;n<e.length;n+=1)t.push(e[n].listener) 16return t},a.getListenersAsObject=function(e){var n,t=this.getListeners(e) 17return t instanceof Array&&(n={},n[e]=t),n||t},a.addListener=function(e,n){var s,a=this.getListenersAsObject(e),r="object"==typeof n 18for(s in a)a.hasOwnProperty(s)&&-1===t(a[s],n)&&a[s].push(r?n:{listener:n,once:!1}) 19return this},a.on=s("addListener"),a.addOnceListener=function(e,n){return this.addListener(e,{listener:n,once:!0})},a.once=s("addOnceListener"),a.defineEvent=function(e){return this.getListeners(e),this},a.defineEvents=function(e){for(var n=0;n<e.length;n+=1)this.defineEvent(e[n]) 20return this},a.removeListener=function(e,n){var s,a,r=this.getListenersAsObject(e) 21for(a in r)r.hasOwnProperty(a)&&(s=t(r[a],n),-1!==s&&r[a].splice(s,1)) 22return this},a.off=s("removeListener"),a.addListeners=function(e,n){return this.manipulateListeners(!1,e,n)},a.removeListeners=function(e,n){return this.manipulateListeners(!0,e,n)},a.manipulateListeners=function(e,n,t){var s,a,r=e?this.removeListener:this.addListener,o=e?this.removeListeners:this.addListeners 23if("object"!=typeof n||n instanceof RegExp)for(s=t.length;s--;)r.call(this,n,t[s]) 24else for(s in n)n.hasOwnProperty(s)&&(a=n[s])&&("function"==typeof a?r.call(this,s,a):o.call(this,s,a)) 25return this},a.removeEvent=function(e){var n,t=typeof e,s=this._getEvents() 26if("string"===t)delete s[e] 27else if(e instanceof RegExp)for(n in s)s.hasOwnProperty(n)&&e.test(n)&&delete s[n] 28else delete this._events 29return this},a.removeAllListeners=s("removeEvent"),a.emitEvent=function(e,n){var t,s,a,r,o,i=this.getListenersAsObject(e) 30for(r in i)if(i.hasOwnProperty(r))for(t=i[r].slice(0),a=t.length;a--;)s=t[a],s.once===!0&&this.removeListener(e,s.listener),o=s.listener.apply(this,n||[]),o===this._getOnceReturnValue()&&this.removeListener(e,s.listener) 31return this},a.trigger=s("emitEvent"),a.emit=function(e){var n=Array.prototype.slice.call(arguments,1) 32return this.emitEvent(e,n)},a.setOnceReturnValue=function(e){return this._onceReturnValue=e,this},a._getOnceReturnValue=function(){return this.hasOwnProperty("_onceReturnValue")?this._onceReturnValue:!0},a._getEvents=function(){return this._events||(this._events={})},e.noConflict=function(){return r.EventEmitter=o,e},"function"==typeof define&&define.amd?define(function(){return e}):"object"==typeof n&&n.exports?n.exports=e:r.EventEmitter=e}).call(this)},{}],2:[function(e,n,t){!function(e){"use strict" 33function s(n){var t=e.event 34return t.target=t.target||t.srcElement||n,t}var a=document.documentElement,r=function(){} 35a.addEventListener?r=function(e,n,t){e.addEventListener(n,t,!1)}:a.attachEvent&&(r=function(e,n,t){e[n+t]=t.handleEvent?function(){var n=s(e) 36t.handleEvent.call(t,n)}:function(){var n=s(e) 37t.call(e,n)},e.attachEvent("on"+n,e[n+t])}) 38var o=function(){} 39a.removeEventListener?o=function(e,n,t){e.removeEventListener(n,t,!1)}:a.detachEvent&&(o=function(e,n,t){e.detachEvent("on"+n,e[n+t]) 40try{delete e[n+t]}catch(s){e[n+t]=void 0}}) 41var i={bind:r,unbind:o} 42"function"==typeof define&&define.amd?define(i):"object"==typeof t?n.exports=i:e.eventie=i}(window)},{}],3:[function(e,n,t){!function(s,a){"use strict" 43"function"==typeof define&&define.amd?define(["eventEmitter/EventEmitter","eventie/eventie"],function(e,n){return a(s,e,n)}):"object"==typeof t?n.exports=a(s,e("./..\\eventEmitter\\EventEmitter.js"),e("./..\\eventie\\eventie.js")):s.imagesLoaded=a(s,s.EventEmitter,s.eventie)}(this,function(e,n,t){"use strict" 44function s(e,n){for(var t in n)e[t]=n[t] 45return e}function a(e){return"[object Array]"===p.call(e)}function r(e){var n=[] 46if(a(e))n=e 47else if("number"==typeof e.length)for(var t=0,s=e.length;s>t;t++)n.push(e[t]) 48else n.push(e) 49return n}function o(e,n,t){if(!(this instanceof o))return new o(e,n)
50"string"==typeof e&&(e=document.querySelectorAll(e)),this.elements=r(e),this.options=s({},this.options),"function"==typeof n?t=n:s(this.options,n),t&&this.on("always",t),this.getImages(),c&&(this.jqDeferred=new c.Deferred) 51var a=this 52setTimeout(function(){a.check()})}function i(e){this.img=e}function l(e){this.src=e,h[e]=this}var c=e.jQuery,d=e.console,u="undefined"!=typeof d,p=Object.prototype.toString 53o.prototype=new n,o.prototype.options={},o.prototype.getImages=function(){this.images=[] 54for(var e=0,n=this.elements.length;n>e;e++){var t=this.elements[e] 55"IMG"===t.nodeName&&this.addImage(t) 56for(var s=t.querySelectorAll("img"),a=0,r=s.length;r>a;a++){var o=s[a] 57this.addImage(o)}}},o.prototype.addImage=function(e){var n=new i(e) 58this.images.push(n)},o.prototype.check=function(){function e(e,a){return n.options.debug&&u&&d.log("confirm",e,a),n.progress(e),t++,t===s&&n.complete(),!0}var n=this,t=0,s=this.images.length 59if(this.hasAnyBroken=!1,!s)return void this.complete() 60for(var a=0;s>a;a++){var r=this.images[a] 61r.on("confirm",e),r.check()}},o.prototype.progress=function(e){this.hasAnyBroken=this.hasAnyBroken||!e.isLoaded 62var n=this 63setTimeout(function(){n.emit("progress",n,e),n.jqDeferred&&n.jqDeferred.notify&&n.jqDeferred.notify(n,e)})},o.prototype.complete=function(){var e=this.hasAnyBroken?"fail":"done" 64this.isComplete=!0 65var n=this 66setTimeout(function(){if(n.emit(e,n),n.emit("always",n),n.jqDeferred){var t=n.hasAnyBroken?"reject":"resolve" 67n.jqDeferred[t](n)}})},c&&(c.fn.imagesLoaded=function(e,n){var t=new o(this,e,n) 68return t.jqDeferred.promise(c(this))}),i.prototype=new n,i.prototype.check=function(){var e=h[this.img.src]||new l(this.img.src) 69if(e.isConfirmed)return void this.confirm(e.isLoaded,"cached was confirmed") 70if(this.img.complete&&void 0!==this.img.naturalWidth)return void this.confirm(0!==this.img.naturalWidth,"naturalWidth") 71var n=this 72e.on("confirm",function(e,t){return n.confirm(e.isLoaded,t),!0}),e.check()},i.prototype.confirm=function(e,n){this.isLoaded=e,this.emit("confirm",this,n)} 73var h={} 74return l.prototype=new n,l.prototype.check=function(){if(!this.isChecked){var e=new Image 75t.bind(e,"load",this),t.bind(e,"error",this),e.src=this.src,this.isChecked=!0}},l.prototype.handleEvent=function(e){var n="on"+e.type 76this[n]&&this[n](e)},l.prototype.onload=function(e){this.confirm(!0,"onload"),this.unbindProxyEvents(e)},l.prototype.onerror=function(e){this.confirm(!1,"onerror"),this.unbindProxyEvents(e)},l.prototype.confirm=function(e,n){this.isConfirmed=!0,this.isLoaded=e,this.emit("confirm",this,n)},l.prototype.unbindProxyEvents=function(e){t.unbind(e.target,"load",this),t.unbind(e.target,"error",this)},o})},{"./..\\eventEmitter\\EventEmitter.js":1,"./..\\eventie\\eventie.js":2}],4:[function(e,n,t){(function(t){function s(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1}}function a(e,n){return function(t){return p(e.call(this,t),n)}}function r(e,n){return function(t){return this.lang().ordinal(e.call(this,t),n)}}function o(){}function i(e){E(e),c(this,e)}function l(e){var n=v(e),t=n.year||0,s=n.month||0,a=n.week||0,r=n.day||0,o=n.hour||0,i=n.minute||0,l=n.second||0,c=n.millisecond||0 77this._milliseconds=+c+1e3*l+6e4*i+36e5*o,this._days=+r+7*a,this._months=+s+12*t,this._data={},this._bubble()}function c(e,n){for(var t in n)n.hasOwnProperty(t)&&(e[t]=n[t]) 78return n.hasOwnProperty("toString")&&(e.toString=n.toString),n.hasOwnProperty("valueOf")&&(e.valueOf=n.valueOf),e}function d(e){var n,t={} 79for(n in e)e.hasOwnProperty(n)&&ve.hasOwnProperty(n)&&(t[n]=e[n]) 80return t}function u(e){return 0>e?Math.ceil(e):Math.floor(e)}function p(e,n,t){for(var s=""+Math.abs(e),a=e>=0;s.length<n;)s="0"+s 81return(a?t?"+":"":"-")+s}function h(e,n,t,s){var a,r,o=n._milliseconds,i=n._days,l=n._months 82o&&e._d.setTime(+e._d+o*t),(i||l)&&(a=e.minute(),r=e.hour()),i&&e.date(e.date()+i*t),l&&e.month(e.month()+l*t),o&&!s&&re.updateOffset(e),(i||l)&&(e.minute(a),e.hour(r))}function g(e){return"[object Array]"===Object.prototype.toString.call(e)}function m(e){return"[object Date]"===Object.prototype.toString.call(e)||e instanceof Date}
82function f(e,n,t){var s,a=Math.min(e.length,n.length),r=Math.abs(e.length-n.length),o=0 83for(s=0;a>s;s++)(t&&e[s]!==n[s]||!t&&w(e[s])!==w(n[s]))&&o++ 84return o+r}function b(e){if(e){var n=e.toLowerCase().replace(/(.)s$/,"$1") 85e=We[e]||Ke[n]||n}return e}function v(e){var n,t,s={} 86for(t in e)e.hasOwnProperty(t)&&(n=b(t),n&&(s[n]=e[t])) 87return s}function y(e){var n,s 88if(0===e.indexOf("week"))n=7,s="day" 89else{if(0!==e.indexOf("month"))return 90n=12,s="month"}re[e]=function(a,r){var o,i,l=re.fn._lang[e],c=[] 91if("number"==typeof a&&(r=a,a=t),i=function(e){var n=re().utc().set(s,e) 92return l.call(re.fn._lang,n,a||"")},null!=r)return i(r) 93for(o=0;n>o;o++)c.push(i(o)) 94return c}}function w(e){var n=+e,t=0 95return 0!==n&&isFinite(n)&&(t=n>=0?Math.floor(n):Math.ceil(n)),t}function _(e,n){return new Date(Date.UTC(e,n+1,0)).getUTCDate()}function S(e){return k(e)?366:365}function k(e){return e%4===0&&e%100!==0||e%400===0}function E(e){var n 96e._a&&-2===e._pf.overflow&&(n=e._a[ue]<0||e._a[ue]>11?ue:e._a[pe]<1||e._a[pe]>_(e._a[de],e._a[ue])?pe:e._a[he]<0||e._a[he]>23?he:e._a[ge]<0||e._a[ge]>59?ge:e._a[me]<0||e._a[me]>59?me:e._a[fe]<0||e._a[fe]>999?fe:-1,e._pf._overflowDayOfYear&&(de>n||n>pe)&&(n=pe),e._pf.overflow=n)}function x(e){return null==e._isValid&&(e._isValid=!isNaN(e._d.getTime())&&e._pf.overflow<0&&!e._pf.empty&&!e._pf.invalidMonth&&!e._pf.nullInput&&!e._pf.invalidFormat&&!e._pf.userInvalidated,e._strict&&(e._isValid=e._isValid&&0===e._pf.charsLeftOver&&0===e._pf.unusedTokens.length)),e._isValid}function C(e){return e?e.toLowerCase().replace("_","-"):e}function N(e,n){return n._isUTC?re(e).zone(n._offset||0):re(e).local()}function D(e,n){return n.abbr=e,be[e]||(be[e]=new o),be[e].set(n),be[e]}function M(e){delete be[e]}function T(n){var t,s,a,r,o=0,i=function(n){if(!be[n]&&ye)try{e("./lang/"+n)}catch(t){}return be[n]} 97if(!n)return re.fn._lang 98if(!g(n)){if(s=i(n))return s 99n=[n]}for(;o<n.length;){for(r=C(n[o]).split("-"),t=r.length,a=C(n[o+1]),a=a?a.split("-"):null;t>0;){if(s=i(r.slice(0,t).join("-")))return s 100if(a&&a.length>=t&&f(r,a,!0)>=t-1)break 101t--}o++}return re.fn._lang}function O(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function P(e){var n,t,s=e.match(ke) 102for(n=0,t=s.length;t>n;n++)Je[s[n]]?s[n]=Je[s[n]]:s[n]=O(s[n]) 103return function(a){var r="" 104for(n=0;t>n;n++)r+=s[n]instanceof Function?s[n].call(a,e):s[n] 105return r}}function A(e,n){return e.isValid()?(n=U(n,e.lang()),Ve[n]||(Ve[n]=P(n)),Ve[n](e)):e.lang().invalidDate()}function U(e,n){function t(e){return n.longDateFormat(e)||e}var s=5 106for(Ee.lastIndex=0;s>=0&&Ee.test(e);)e=e.replace(Ee,t),Ee.lastIndex=0,s-=1 107return e}function R(e,n){var t,s=n._strict 108switch(e){case"DDDD":return je 109case"YYYY":case"GGGG":case"gggg":return s?Le:Ne 110case"Y":case"G":case"g":return $e 111case"YYYYYY":case"YYYYY":case"GGGGG":case"ggggg":return s?Ie:De 112case"S":if(s)return Ue 113case"SS":if(s)return Re 114case"SSS":if(s)return je 115case"DDD":return Ce 116case"MMM":case"MMMM":case"dd":case"ddd":case"dddd":return Te 117case"a":case"A":return T(n._l)._meridiemParse 118case"X":return Ae 119case"Z":case"ZZ":return Oe 120case"T":return Pe 121case"SSSS":return Me 122case"MM":case"DD":case"YY":case"GG":case"gg":case"HH":case"hh":case"mm":case"ss":case"ww":case"WW":return s?Re:xe 123case"M":case"D":case"d":case"H":case"h":case"m":case"s":case"w":case"W":case"e":case"E":return xe 124default:return t=new RegExp(B(Y(e.replace("\\","")),"i"))}}function j(e){e=e||"" 125var n=e.match(Oe)||[],t=n[n.length-1]||[],s=(t+"").match(ze)||["-",0,0],a=+(60*s[1])+w(s[2]) 126return"+"===s[0]?-a:a}function L(e,n,t){var s,a=t._a 127switch(e){case"M":case"MM":null!=n&&(a[ue]=w(n)-1) 128break 129case"MMM":case"MMMM":s=T(t._l).monthsParse(n),null!=s?a[ue]=s:t._pf.invalidMonth=n 130break 131case"D":case"DD":null!=n&&(a[pe]=w(n)) 132break 133case"DDD":case"DDDD":null!=n&&(t._dayOfYear=w(n)) 134break 135case"YY":a[de]=w(n)+(w(n)>68?1900:2e3) 136break 137case"YYYY":case"YYYYY":case"YYYYYY":a[de]=w(n) 138break 139case"a":case"A":t._isPm=T(t._l).isPM(n) 140break 141case"H":case"HH":case"h":case"hh":a[he]=w(n) 142break 143case"m":case"mm":a[ge]=w(n) 144break 145case"s":case"ss":a[me]=w(n) 146break 147case"S":case"SS":case"SSS":case"SSSS":a[fe]=w(1e3*("0."+n)) 148break 149case"X":t._d=new Date(1e3*parseFloat(n)) 150break 151case"Z":case"ZZ":t._useUTC=!0,t._tzm=j(n) 152break 153case"w":case"ww":case"W":case"WW":case"d":case"dd":case"ddd":case"dddd":case"e":case"E":e=e.substr(0,1) 154case"gg":case"gggg":case"GG":case"GGGG":case"GGGGG":e=e.substr(0,2),n&&(t._w=t._w||{},t._w[e]=n)}}function I(e){var n,t,s,a,r,o,i,l,c,d,u=[] 155if(!e._d){for(s=q(e),e._w&&null==e._a[pe]&&null==e._a[ue]&&(r=function(n){var t=parseInt(n,10) 156return n?n.length<3?t>68?1900+t:2e3+t:t:null==e._a[de]?re().weekYear():e._a[de]},o=e._w,null!=o.GG||null!=o.W||null!=o.E?i=X(r(o.GG),o.W||1,o.E,4,1):(l=T(e._l),c=null!=o.d?V(o.d,l):null!=o.e?parseInt(o.e,10)+l._week.dow:0,d=parseInt(o.w,10)||1,null!=o.d&&c<l._week.dow&&d++,i=X(r(o.gg),d,c,l._week.doy,l._week.dow)),e._a[de]=i.year,e._dayOfYear=i.dayOfYear),e._dayOfYear&&(a=null==e._a[de]?s[de]:e._a[de],e._dayOfYear>S(a)&&(e._pf._overflowDayOfYear=!0),t=K(a,0,e._dayOfYear),e._a[ue]=t.getUTCMonth(),e._a[pe]=t.getUTCDate()),n=0;3>n&&null==e._a[n];++n)e._a[n]=u[n]=s[n] 157for(;7>n;n++)e._a[n]=u[n]=null==e._a[n]?2===n?1:0:e._a[n] 158u[he]+=w((e._tzm||0)/60),u[ge]+=w((e._tzm||0)%60),e._d=(e._useUTC?K:W).apply(null,u)}}function $(e){var n 159e._d||(n=v(e._i),e._a=[n.year,n.month,n.day,n.hour,n.minute,n.second,n.millisecond],I(e))}function q(e){var n=new Date 160return e._useUTC?[n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate()]:[n.getFullYear(),n.getMonth(),n.getDate()]}function F(e){e._a=[],e._pf.empty=!0 161var n,t,s,a,r,o=T(e._l),i=""+e._i,l=i.length,c=0 162for(s=U(e._f,o).match(ke)||[],n=0;n<s.length;n++)a=s[n],t=(i.match(R(a,e))||[])[0],t&&(r=i.substr(0,i.indexOf(t)),r.length>0&&e._pf.unusedInput.push(r),i=i.slice(i.indexOf(t)+t.length),c+=t.length),Je[a]?(t?e._pf.empty=!1:e._pf.unusedTokens.push(a),L(a,t,e)):e._strict&&!t&&e._pf.unusedTokens.push(a) 163e._pf.charsLeftOver=l-c,i.length>0&&e._pf.unusedInput.push(i),e._isPm&&e._a[he]<12&&(e._a[he]+=12),e._isPm===!1&&12===e._a[he]&&(e._a[he]=0),I(e),E(e)}function Y(e){return e.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(e,n,t,s,a){return n||t||s||a})}function B(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function z(e){var n,t,a,r,o
164if(0===e._f.length)return e._pf.invalidFormat=!0,void(e._d=new Date(NaN)) 165for(r=0;r<e._f.length;r++)o=0,n=c({},e),n._pf=s(),n._f=e._f[r],F(n),x(n)&&(o+=n._pf.charsLeftOver,o+=10*n._pf.unusedTokens.length,n._pf.score=o,(null==a||a>o)&&(a=o,t=n)) 166c(e,t||n)}function H(e){var n,t,s=e._i,a=qe.exec(s) 167if(a){for(e._pf.iso=!0,n=0,t=Ye.length;t>n;n++)if(Ye[n][1].exec(s)){e._f=Ye[n][0]+(a[6]||" ") 168break}for(n=0,t=Be.length;t>n;n++)if(Be[n][1].exec(s)){e._f+=Be[n][0] 169break}s.match(Oe)&&(e._f+="Z"),F(e)}else e._d=new Date(s)}function G(e){var n=e._i,s=we.exec(n) 170n===t?e._d=new Date:s?e._d=new Date(+s[1]):"string"==typeof n?H(e):g(n)?(e._a=n.slice(0),I(e)):m(n)?e._d=new Date(+n):"object"==typeof n?$(e):e._d=new Date(n)}function W(e,n,t,s,a,r,o){var i=new Date(e,n,t,s,a,r,o) 171return 1970>e&&i.setFullYear(e),i}function K(e){var n=new Date(Date.UTC.apply(null,arguments)) 172return 1970>e&&n.setUTCFullYear(e),n}function V(e,n){if("string"==typeof e)if(isNaN(e)){if(e=n.weekdaysParse(e),"number"!=typeof e)return null}else e=parseInt(e,10) 173return e}function Z(e,n,t,s,a){return a.relativeTime(n||1,!!t,e,s)}function Q(e,n,t){var s=ce(Math.abs(e)/1e3),a=ce(s/60),r=ce(a/60),o=ce(r/24),i=ce(o/365),l=45>s&&["s",s]||1===a&&["m"]||45>a&&["mm",a]||1===r&&["h"]||22>r&&["hh",r]||1===o&&["d"]||25>=o&&["dd",o]||45>=o&&["M"]||345>o&&["MM",ce(o/30)]||1===i&&["y"]||["yy",i] 174return l[2]=n,l[3]=e>0,l[4]=t,Z.apply({},l)}function J(e,n,t){var s,a=t-n,r=t-e.day() 175return r>a&&(r-=7),a-7>r&&(r+=7),s=re(e).add("d",r),{week:Math.ceil(s.dayOfYear()/7),year:s.year()}}function X(e,n,t,s,a){var r,o,i=K(e,0,1).getUTCDay() 176return t=null!=t?t:a,r=a-i+(i>s?7:0)-(a>i?7:0),o=7*(n-1)+(t-a)+r+1,{year:o>0?e:e-1,dayOfYear:o>0?o:S(e-1)+o}}function ee(e){var n=e._i,t=e._f 177return null===n?re.invalid({nullInput:!0}):("string"==typeof n&&(e._i=n=T().preparse(n)),re.isMoment(n)?(e=d(n),e._d=new Date(+n._d)):t?g(t)?z(e):F(e):G(e),new i(e))}function ne(e,n){re.fn[e]=re.fn[e+"s"]=function(e){var t=this._isUTC?"UTC":"" 178return null!=e?(this._d["set"+t+n](e),re.updateOffset(this),this):this._d["get"+t+n]()}}function te(e){re.duration.fn[e]=function(){return this._data[e]}}function se(e,n){re.duration.fn["as"+e]=function(){return+this/n}}function ae(e){var n=!1,t=re 179"undefined"==typeof ender&&(e?(le.moment=function(){return!n&&console&&console.warn&&(n=!0,console.warn("Accessing Moment through the global scope is deprecated, and will be removed in an upcoming release.")),t.apply(null,arguments)},c(le.moment,t)):le.moment=re)}for(var re,oe,ie="2.5.1",le=this,ce=Math.round,de=0,ue=1,pe=2,he=3,ge=4,me=5,fe=6,be={},ve={_isAMomentObject:null,_i:null,_f:null,_l:null,_strict:null,_isUTC:null,_offset:null,_pf:null,_lang:null},ye="undefined"!=typeof n&&n.exports&&"undefined"!=typeof e,we=/^\/?Date\((\-?\d+)/i,_e=/(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,Se=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/,ke=/(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|X|zz?|ZZ?|.)/g,Ee=/(\[[^\[]*\])|(\\)?(LT|LL?L?L?|l{1,4})/g,xe=/\d\d?/,Ce=/\d{1,3}/,Ne=/\d{1,4}/,De=/[+\-]?\d{1,6}/,Me=/\d+/,Te=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,Oe=/Z|[\+\-]\d\d:?\d\d/gi,Pe=/T/i,Ae=/[\+\-]?\d+(\.\d{1,3})?/,Ue=/\d/,Re=/\d\d/,je=/\d{3}/,Le=/\d{4}/,Ie=/[+-]?\d{6}/,$e=/[+-]?\d+/,qe=/^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Fe="YYYY-MM-DDTHH:mm:ssZ",Ye=[["YYYYYY-MM-DD",/[+-]\d{6}-\d{2}-\d{2}/],["YYYY-MM-DD",/\d{4}-\d{2}-\d{2}/],["GGGG-[W]WW-E",/\d{4}-W\d{2}-\d/],["GGGG-[W]WW",/\d{4}-W\d{2}/],["YYYY-DDD",/\d{4}-\d{3}/]],Be=[["HH:mm:ss.SSSS",/(T| )\d\d:\d\d:\d\d\.\d{1,3}/],["HH:mm:ss",/(T| )\d\d:\d\d:\d\d/],["HH:mm",/(T| )\d\d:\d\d/],["HH",/(T| )\d\d/]],ze=/([\+\-]|\d\d)/gi,He="Date|Hours|Minutes|Seconds|Milliseconds".split("|"),Ge={Milliseconds:1,Seconds:1e3,Minutes:6e4,Hours:36e5,Days:864e5,Months:2592e6,Years:31536e6},We={ms:"millisecond",s:"second",m:"minute",h:"hour",d:"day",D:"date",w:"week",W:"isoWeek",M:"month",y:"year",DDD:"dayOfYear",e:"weekday",E:"isoWeekday",gg:"weekYear",GG:"isoWeekYear"},Ke={dayofyear:"dayOfYear",isoweekday:"isoWeekday",isoweek:"isoWeek",weekyear:"weekYear",isoweekyear:"isoWeekYear"},Ve={},Ze="DDD w W M D d".split(" "),Qe="M D H h m s w W".split(" "),Je={M:function(){return this.month()+1},MMM:function(e){return this.lang().monthsShort(this,e)},MMMM:function(e){return this.lang().months(this,e)},D:function(){return this.date()},DDD:function(){return this.dayOfYear()},d:function(){return this.day()},dd:function(e){return this.lang().weekdaysMin(this,e)},ddd:function(e){return this.lang().weekdaysShort(this,e)},dddd:function(e){return this.lang().weekdays(this,e)},w:function(){return this.week()},W:function(){return this.isoWeek()},YY:function(){return p(this.year()%100,2)},YYYY:function(){return p(this.year(),4)},YYYYY:function(){return p(this.year(),5)},YYYYYY:function(){var e=this.year(),n=e>=0?"+":"-" 180return n+p(Math.abs(e),6)},gg:function(){return p(this.weekYear()%100,2)},gggg:function(){return p(this.weekYear(),4)},ggggg:function(){return p(this.weekYear(),5)},GG:function(){return p(this.isoWeekYear()%100,2)},GGGG:function(){return p(this.isoWeekYear(),4)},GGGGG:function(){return p(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.lang().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.lang().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return w(this.milliseconds()/100)},SS:function(){return p(w(this.milliseconds()/10),2)},SSS:function(){return p(this.milliseconds(),3)},SSSS:function(){return p(this.milliseconds(),3)},Z:function(){var e=-this.zone(),n="+" 181return 0>e&&(e=-e,n="-"),n+p(w(e/60),2)+":"+p(w(e)%60,2)},ZZ:function(){var e=-this.zone(),n="+" 182return 0>e&&(e=-e,n="-"),n+p(w(e/60),2)+p(w(e)%60,2)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},X:function(){return this.unix()},Q:function(){return this.quarter()}},Xe=["months","monthsShort","weekdays","weekdaysShort","weekdaysMin"];Ze.length;)oe=Ze.pop(),Je[oe+"o"]=r(Je[oe],oe) 183for(;Qe.length;)oe=Qe.pop(),Je[oe+oe]=a(Je[oe],2) 184for(Je.DDDD=a(Je.DDD,3),c(o.prototype,{set:function(e){var n,t 185for(t in e)n=e[t],"function"==typeof n?this[t]=n:this["_"+t]=n},_months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),months:function(e){return this._months[e.month()]},_monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),monthsShort:function(e){return this._monthsShort[e.month()]},monthsParse:function(e){var n,t,s 186for(this._monthsParse||(this._monthsParse=[]),n=0;12>n;n++)if(this._monthsParse[n]||(t=re.utc([2e3,n]),s="^"+this.months(t,"")+"|^"+this.monthsShort(t,""),this._monthsParse[n]=new RegExp(s.replace(".",""),"i")),this._monthsParse[n].test(e))return n},_weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdays:function(e){return this._weekdays[e.day()]},_weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysShort:function(e){return this._weekdaysShort[e.day()]},_weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),weekdaysMin:function(e){return this._weekdaysMin[e.day()]},weekdaysParse:function(e){var n,t,s 187for(this._weekdaysParse||(this._weekdaysParse=[]),n=0;7>n;n++)if(this._weekdaysParse[n]||(t=re([2e3,1]).day(n),s="^"+this.weekdays(t,"")+"|^"+this.weekdaysShort(t,"")+"|^"+this.weekdaysMin(t,""),this._weekdaysParse[n]=new RegExp(s.replace(".",""),"i")),this._weekdaysParse[n].test(e))return n},_longDateFormat:{LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D YYYY",LLL:"MMMM D YYYY LT",LLLL:"dddd, MMMM D YYYY LT"},longDateFormat:function(e){var n=this._longDateFormat[e] 188return!n&&this._longDateFormat[e.toUpperCase()]&&(n=this._longDateFormat[e.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(e){return e.slice(1)}),this._longDateFormat[e]=n),n},isPM:function(e){return"p"===(e+"").toLowerCase().charAt(0)},_meridiemParse:/[ap]\.?m?\.?/i,meridiem:function(e,n,t){return e>11?t?"pm":"PM":t?"am":"AM"},_calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},calendar:function(e,n){var t=this._calendar[e] 189return"function"==typeof t?t.apply(n):t},_relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},relativeTime:function(e,n,t,s){var a=this._relativeTime[t] 190return"function"==typeof a?a(e,n,t,s):a.replace(/%d/i,e)},pastFuture:function(e,n){var t=this._relativeTime[e>0?"future":"past"] 191return"function"==typeof t?t(n):t.replace(/%s/i,n)},ordinal:function(e){return this._ordinal.replace("%d",e)},_ordinal:"%d",preparse:function(e){return e},postformat:function(e){return e},week:function(e){return J(e,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6},_invalidDate:"Invalid date",invalidDate:function(){return this._invalidDate}}),re=function(e,n,a,r){var o 192return"boolean"==typeof a&&(r=a,a=t),o={},o._isAMomentObject=!0,o._i=e,o._f=n,o._l=a,o._strict=r,o._isUTC=!1,o._pf=s(),ee(o)},re.utc=function(e,n,a,r){var o 193return"boolean"==typeof a&&(r=a,a=t),o={},o._isAMomentObject=!0,o._useUTC=!0,o._isUTC=!0,o._l=a,o._i=e,o._f=n,o._strict=r,o._pf=s(),ee(o).utc()},re.unix=function(e){return re(1e3*e)},re.duration=function(e,n){var t,s,a,r=e,o=null 194return re.isDuration(e)?r={ms:e._milliseconds,d:e._days,M:e._months}:"number"==typeof e?(r={},n?r[n]=e:r.milliseconds=e):(o=_e.exec(e))?(t="-"===o[1]?-1:1,r={y:0,d:w(o[pe])*t,h:w(o[he])*t,m:w(o[ge])*t,s:w(o[me])*t,ms:w(o[fe])*t}):(o=Se.exec(e))&&(t="-"===o[1]?-1:1,a=function(e){var n=e&&parseFloat(e.replace(",",".")) 195return(isNaN(n)?0:n)*t},r={y:a(o[2]),M:a(o[3]),d:a(o[4]),h:a(o[5]),m:a(o[6]),s:a(o[7]),w:a(o[8])}),s=new l(r),re.isDuration(e)&&e.hasOwnProperty("_lang")&&(s._lang=e._lang),s},re.version=ie,re.defaultFormat=Fe,re.updateOffset=function(){},re.lang=function(e,n){var t 196return e?(n?D(C(e),n):null===n?(M(e),e="en"):be[e]||T(e),t=re.duration.fn._lang=re.fn._lang=T(e),t._abbr):re.fn._lang._abbr},re.langData=function(e){return e&&e._lang&&e._lang._abbr&&(e=e._lang._abbr),T(e)},re.isMoment=function(e){return e instanceof i||null!=e&&e.hasOwnProperty("_isAMomentObject")},re.isDuration=function(e){return e instanceof l},oe=Xe.length-1;oe>=0;--oe)y(Xe[oe]) 197for(re.normalizeUnits=function(e){return b(e)}
197,re.invalid=function(e){var n=re.utc(NaN) 198return null!=e?c(n._pf,e):n._pf.userInvalidated=!0,n},re.parseZone=function(e){return re(e).parseZone()},c(re.fn=i.prototype,{clone:function(){return re(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.clone().lang("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){var e=re(this).utc() 199return 0<e.year()&&e.year()<=9999?A(e,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):A(e,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]")},toArray:function(){var e=this 200return[e.year(),e.month(),e.date(),e.hours(),e.minutes(),e.seconds(),e.milliseconds()]},isValid:function(){return x(this)},isDSTShifted:function(){return this._a?this.isValid()&&f(this._a,(this._isUTC?re.utc(this._a):re(this._a)).toArray())>0:!1},parsingFlags:function(){return c({},this._pf)},invalidAt:function(){return this._pf.overflow},utc:function(){return this.zone(0)},local:function(){return this.zone(0),this._isUTC=!1,this},format:function(e){var n=A(this,e||re.defaultFormat) 201return this.lang().postformat(n)},add:function(e,n){var t 202return t="string"==typeof e?re.duration(+n,e):re.duration(e,n),h(this,t,1),this},subtract:function(e,n){var t 203return t="string"==typeof e?re.duration(+n,e):re.duration(e,n),h(this,t,-1),this},diff:function(e,n,t){var s,a,r=N(e,this),o=6e4*(this.zone()-r.zone()) 204return n=b(n),"year"===n||"month"===n?(s=432e5*(this.daysInMonth()+r.daysInMonth()),a=12*(this.year()-r.year())+(this.month()-r.month()),a+=(this-re(this).startOf("month")-(r-re(r).startOf("month")))/s,a-=6e4*(this.zone()-re(this).startOf("month").zone()-(r.zone()-re(r).startOf("month").zone()))/s,"year"===n&&(a/=12)):(s=this-r,a="second"===n?s/1e3:"minute"===n?s/6e4:"hour"===n?s/36e5:"day"===n?(s-o)/864e5:"week"===n?(s-o)/6048e5:s),t?a:u(a)},from:function(e,n){return re.duration(this.diff(e)).lang(this.lang()._abbr).humanize(!n)},fromNow:function(e){return this.from(re(),e)},calendar:function(){var e=N(re(),this).startOf("day"),n=this.diff(e,"days",!0),t=-6>n?"sameElse":-1>n?"lastWeek":0>n?"lastDay":1>n?"sameDay":2>n?"nextDay":7>n?"nextWeek":"sameElse" 205return this.format(this.lang().calendar(t,this))},isLeapYear:function(){return k(this.year())},isDST:function(){return this.zone()<this.clone().month(0).zone()||this.zone()<this.clone().month(5).zone()},day:function(e){var n=this._isUTC?this._d.getUTCDay():this._d.getDay() 206return null!=e?(e=V(e,this.lang()),this.add({d:e-n})):n},month:function(e){var n,t=this._isUTC?"UTC":"" 207return null!=e?"string"==typeof e&&(e=this.lang().monthsParse(e),"number"!=typeof e)?this:(n=this.date(),this.date(1),this._d["set"+t+"Month"](e),this.date(Math.min(n,this.daysInMonth())),re.updateOffset(this),this):this._d["get"+t+"Month"]()},startOf:function(e){switch(e=b(e)){case"year":this.month(0) 208case"month":this.date(1) 209case"week":case"isoWeek":case"day":this.hours(0) 210case"hour":this.minutes(0) 211case"minute":this.seconds(0) 212case"second":this.milliseconds(0)}return"week"===e?this.weekday(0):"isoWeek"===e&&this.isoWeekday(1),this},endOf:function(e){return e=b(e),this.startOf(e).add("isoWeek"===e?"week":e,1).subtract("ms",1)},isAfter:function(e,n){return n="undefined"!=typeof n?n:"millisecond",+this.clone().startOf(n)>+re(e).startOf(n)},isBefore:function(e,n){return n="undefined"!=typeof n?n:"millisecond",+this.clone().startOf(n)<+re(e).startOf(n)},isSame:function(e,n){return n=n||"ms",+this.clone().startOf(n)===+N(e,this).startOf(n)},min:function(e){return e=re.apply(null,arguments),this>e?this:e},max:function(e){return e=re.apply(null,arguments),e>this?this:e},zone:function(e){var n=this._offset||0 213return null==e?this._isUTC?n:this._d.getTimezoneOffset():("string"==typeof e&&(e=j(e)),Math.abs(e)<16&&(e=60*e),this._offset=e,this._isUTC=!0,n!==e&&h(this,re.duration(n-e,"m"),1,!0),this)},zoneAbbr:function(){return this._isUTC?"UTC":""},zoneName:function(){return this._isUTC?"Coordinated Universal Time":""},parseZone:function(){return this._tzm?this.zone(this._tzm):"string"==typeof this._i&&this.zone(this._i),this},hasAlignedHourOffset:function(e){return e=e?re(e).zone():0,(this.zone()-e)%60===0},daysInMonth:function(){return _(this.year(),this.month())},dayOfYear:function(e){var n=ce((re(this).startOf("day")-re(this).startOf("year"))/864e5)+1 214return null==e?n:this.add("d",e-n)},quarter:function(){return Math.ceil((this.month()+1)/3)},weekYear:function(e){var n=J(this,this.lang()._week.dow,this.lang()._week.doy).year 215return null==e?n:this.add("y",e-n)},isoWeekYear:function(e){var n=J(this,1,4).year 216return null==e?n:this.add("y",e-n)},week:function(e){var n=this.lang().week(this) 217return null==e?n:this.add("d",7*(e-n))},isoWeek:function(e){var n=J(this,1,4).week 218return null==e?n:this.add("d",7*(e-n))},weekday:function(e){var n=(this.day()+7-this.lang()._week.dow)%7 219return null==e?n:this.add("d",e-n)},isoWeekday:function(e){return null==e?this.day()||7:this.day(this.day()%7?e:e-7)},get:function(e){return e=b(e),this[e]()},set:function(e,n){return e=b(e),"function"==typeof this[e]&&this[e](n),this},lang:function(e){return e===t?this._lang:(this._lang=T(e),this)}}),oe=0;oe<He.length;oe++)ne(He[oe].toLowerCase().replace(/s$/,""),He[oe])
220ne("year","FullYear"),re.fn.days=re.fn.day,re.fn.months=re.fn.month,re.fn.weeks=re.fn.week,re.fn.isoWeeks=re.fn.isoWeek,re.fn.toJSON=re.fn.toISOString,c(re.duration.fn=l.prototype,{_bubble:function(){var e,n,t,s,a=this._milliseconds,r=this._days,o=this._months,i=this._data 221i.milliseconds=a%1e3,e=u(a/1e3),i.seconds=e%60,n=u(e/60),i.minutes=n%60,t=u(n/60),i.hours=t%24,r+=u(t/24),i.days=r%30,o+=u(r/30),i.months=o%12,s=u(o/12),i.years=s},weeks:function(){return u(this.days()/7)},valueOf:function(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*w(this._months/12)},humanize:function(e){var n=+this,t=Q(n,!e,this.lang()) 222return e&&(t=this.lang().pastFuture(n,t)),this.lang().postformat(t)},add:function(e,n){var t=re.duration(e,n) 223return this._milliseconds+=t._milliseconds,this._days+=t._days,this._months+=t._months,this._bubble(),this},subtract:function(e,n){var t=re.duration(e,n) 224return this._milliseconds-=t._milliseconds,this._days-=t._days,this._months-=t._months,this._bubble(),this},get:function(e){return e=b(e),this[e.toLowerCase()+"s"]()},as:function(e){return e=b(e),this["as"+e.charAt(0).toUpperCase()+e.slice(1)+"s"]()},lang:re.fn.lang,toIsoString:function(){var e=Math.abs(this.years()),n=Math.abs(this.months()),t=Math.abs(this.days()),s=Math.abs(this.hours()),a=Math.abs(this.minutes()),r=Math.abs(this.seconds()+this.milliseconds()/1e3) 225return this.asSeconds()?(this.asSeconds()<0?"-":"")+"P"+(e?e+"Y":"")+(n?n+"M":"")+(t?t+"D":"")+(s||a||r?"T":"")+(s?s+"H":"")+(a?a+"M":"")+(r?r+"S":""):"P0D"}}) 226for(oe in Ge)Ge.hasOwnProperty(oe)&&(se(oe,Ge[oe]),te(oe.toLowerCase())) 227se("Weeks",6048e5),re.duration.fn.asMonths=function(){return(+this-31536e6*this.years())/2592e6+12*this.years()},re.lang("en",{ordinal:function(e){var n=e%10,t=1===w(e%100/10)?"th":1===n?"st":2===n?"nd":3===n?"rd":"th" 228return e+t}}),ye?(n.exports=re,ae(!0)):"function"==typeof define&&define.amd?define("moment",function(e,n,s){return s.config&&s.config()&&s.config().noGlobal!==!0&&ae(s.config().noGlobal===t),re}):ae()}).call(this)},{}],5:[function(e,n,t){"use strict" 229var s=angular.module("App",["ngCookies","ngResource","ngSanitize","ngAnimate","restangular","ui.router","ui.bootstrap","ui.utils","angulartics","angulartics.google.analytics","nvd3ChartDirectives",e("./modules/Modules").name,e("./services/Services").name,e("./filters/Filters").name,e("./directives/Directives").name,e("./elements/Elements").name,e("./controllers/Controllers").name]) 230s.config(e("./Router")),s.run(e("./Run")),angular.element(document).ready(function(){angular.bootstrap(document,["App"])})},{"./Router":6,"./Run":7,"./controllers/Controllers":9,"./directives/Directives":31,"./elements/Elements":41,"./filters/Filters":79,"./modules/Modules":81,"./services/Services":92}],6:[function(e,n,t){"use strict" 231e("fs") 232n.exports=["$locationProvider","$stateProvider","$urlRouterProvider",function(e,n,t){e.html5Mode(!0).hashPrefix("!"),t.when("/control_panel","/control_panel/crawling").otherwise("/"),n.state("home",{url:"/",template:'<div class="introduction panel panel_lego panel_transition_white_dark">\n <div class="container">\n <div class="panel-body">\n <div class="row">\n <div class="col-md-6">\n <div class="page-header">\n <h1>SnapSearch is Search Engine Optimisation for Javascript, HTML 5 and Single Page Applications</h1>\n <h3>Make your sites crawlable with SnapSearch!</h3>\n <button class="call-to-action btn btn-primary" type="button" ng-click="modal.signUp()">\n <h4 class="call-to-action-text">Get Started for Free<br /><small>No Credit Card Required</small></h4>\n </button>\n </div>\n </div>\n <div class="col-md-6">\n <div class="code-group clearfix" ng-controller="CodeGroupCtrl">\n <ul class="nav nav-tabs">\n <li class="tab" ng-class="{\'active\': activeCode == \'php\'}">\n <button class="btn" ng-click="changeCode(\'php\')">PHP</button>\n </li>\n <li class="tab" ng-class="{\'active\': activeCode == \'ruby\'}">\n <button class="btn" ng-click="changeCode(\'ruby\')">Ruby</button>\n </li>\n <li class="tab" ng-class="{\'active\': activeCode == \'node.js\'}">\n <button class="btn" ng-click="changeCode(\'node.js\')">Node.js</button>\n </li>\n <li class="tab" ng-class="{\'active\': activeCode == \'python\'}">\n <button class="btn" ng-click="changeCode(\'python\')">Python</button>\n </li>\n </ul>\n <div class="tab-content clearfix" ng-switch="activeCode">\n <div class="tab-panel" ng-switch-when="php">\n <p>Installation:</p>\n <syntax syntax-language="bash">composer require snapsearch/snapsearch-client-php</syntax>\n <p>Usage:</p>\n <syntax class="code-usage" syntax-language="php">// Inside your Front Controller\n// For StackPHP or HTTPKernel frameworks, check the source repository examples\n\n$client = new SnapSearchClientPHPClient(\'email\', \'key\');\n$detector = new SnapSearchClientPHPDetector;\n$interceptor = new SnapSearchClientPHPInterceptor(\n $client, \n $detector\n);\n\n$response = $interceptor->intercept();\n\nif($response){\n\n header(\' \', true, $response[\'status\']);\n\n foreach($response[\'headers\'] as $header){\n if($header[\'name\'] == \'Location\'){\n header($header[\'name\'] . \': \' . $header[\'value\']);\n }\n }\n\n echo $response[\'html\'];\n\n}else{\n\n //continue with normal operations...\n\n}</syntax>\n <a class="btn btn-primary btn-fork pull-right" href="https://github.com/SnapSearch/SnapSearch-Client-PHP" target="_blank">\n <img src="assets/img/github_mark.png" />\n Examples and Source on Github\n </a> </div>\n <div class="tab-panel" ng-switch-when="ruby">\n <p>Installation:</p>\n <syntax syntax-language="bash">gem install snapsearch-client-ruby</syntax>\n <p>Usage:</p>\n <syntax class="code-usage" syntax-language="ruby"># Inside your Rack config.ru\n\nrequire \'bundler/setup\'\nrequire \'rack/snap_search\'\n\nuse Rack::SnapSearch do |config|\n \n # Required: The email to authenticate with.\n config.email = \'[email protected]\'\n \n # Required: The key to authenticate with.\n config.key = \'API_KEY_HERE\'\n \nend\n\n# ...continue with Rack configuration</syntax>\n <a class="btn btn-primary btn-fork pull-right" href="https://github.com/SnapSearch/SnapSearch-Client-Ruby" target="_blank">\n <img src="assets/img/github_mark.png" />\n Examples and Source on Github\n </a>\n </div>\n <div class="tab-panel" ng-switch-when="node.js">\n <p>Installation:</p>\n <syntax syntax-language="bash">npm install snapsearch-client-node</syntax>\n <p>Usage:</p>\n <syntax class="code-usage" syntax-language="javascript">// Express integration\nvar express = require(\'express\');\nvar snapsearch = require(\'snapsearch-client-nodejs\');\n\nvar app = express();\n\napp.use(snapsearch.connect(\n new snapsearch.Interceptor(\n new snapsearch.Client(\'EMAIL\', \'KEY\'),\n new snapsearch.Detector()\n )\n);\n\napp.listen(1337);</syntax>\n <a class="btn btn-primary btn-fork pull-right" href="https://github.com/SnapSearch/SnapSearch-Client-Node" target="_blank">\n <img src="assets/img/github_mark.png" />\n Examples and Source on Github\n </a>\n </div>\n <div class="tab-panel" ng-switch-when="python">\n <p>Installation:</p>\n <syntax syntax-language="bash">pip install snapsearch-client-python</syntax>\n <p>Usage:</p>\n <syntax class="code-usage" syntax-language="python"># Inside your Front Controller or Entry Point\n\n# Django\n\nimport os\nos.environ.setdefault("DJANGO_SETTINGS_MODULE", "hello_world.settings")\n\nfrom django.core.wsgi import get_wsgi_application\napplication = get_wsgi_application()\n\n# API credentials\napi_email = "<email>"\napi_key = "<key>"\n\n# initialize the interceptor\nfrom SnapSearch import Client, Detector, Interceptor\ninterceptor = Interceptor(\n Client(api_email, api_key), \n Detector()\n)\n\n# deploy the interceptor\nfrom SnapSearch.wsgi import InterceptorMiddleware\napplication = InterceptorMiddleware(\n application, \n interceptor\n)\n\n# Flask\n\nfrom flask import Flask\napp = Flask(__name__)\n\[email protected](\'/\')\ndef hello_world():\n return "Hello World!\\r\\n"\n\nif __name__ == \'__main__\':\n # API credentials\n api_email = "<email>" # change this to the registered email\n api_key = "<key>" # change this to the real api credential\n\n # initialize the interceptor\n from SnapSearch import Client, Detector, Interceptor\n interceptor = Interceptor(\n Client(api_email, api_key), \n Detector()\n )\n\n # deploy the interceptor\n from SnapSearch.wsgi import InterceptorMiddleware\n app.wsgi_app = InterceptorMiddleware(\n app.wsgi_app, \n interceptor\n )\n\n # start servicing\n app.run(host="0.0.0.0", port=5000)\n\n# CGI\n\n#!/usr/bin/env python\n\nimport cgi\nimport sys\n\ndef hello_world():\n msg = b"Hello World!"\n sys.stdout.write(b"Status: 200 OK\\r\\n")\n sys.stdout.write(b"Content-Type: text/html; charset=utf-8\\r\\n")\n sys.stdout.write(b"Content-Length: ")\n sys.stdout.write(bytes(len(msg)))\n sys.stdout.write(b"\\r\\n\\r\\n")\n sys.stdout.write(msg)\n sys.stdout.write(b"\\r\\n")\n return 0\n\nif __name__ == \'__main__\':\n # API credentials\n api_email = "<email>" # change this to the registered email\n api_key = "<key>" # change this to the real api credential\n\n # initialize the interceptor\n from SnapSearch import Client, Detector, Interceptor\n interceptor = Interceptor(\n Client(api_email, api_key), \n Detector()\n )\n\n # deploy the interceptor\n from SnapSearch.cgi import InterceptorController\n InterceptorController(interceptor).start()\n\n # start servicing\n sys.exit(hello_world())\n</syntax>\n <a class="btn btn-primary btn-fork pull-right" href="https://github.com/SnapSearch/SnapSearch-Client-Python" target="_blank">\n <img src="assets/img/github_mark.png" />\n Examples and Source on Github\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<div class="demo panel panel_white panel_transition_white_dark">\n <div class="container">\n <div class="panel-heading">\n <h2 class="panel-title">Try our Demo</h2>\n </div>\n <div class="panel-body">\n <form class="demo-form" ng-controller="DemoCtrl" name="demoForm">\n <div \n class="form-group" \n ng-class="{\n \'has-error\': demoForm.url.$invali
232d && demoForm.url.$dirty\n }"\n >\n <div class="input-group input-group-lg">\n <input \n class="form-control" \n type="url" \n name="url" \n ng-model="demo.url" \n required \n placeholder-switch="demoUrls" \n placeholder-delay="2000" \n />\n <span class="input-group-btn">\n <button \n class="btn btn-primary" \n type="submit" \n ng-disabled="demoForm.$invalid" \n ng-click="submit(demo)" \n >\n Scrape\n </button>\n </span>\n </div>\n </div>\n <div class="form-errors" ng-show="formErrors">\n <em class="text-warning">Oops! Please fix up these errors:</em>\n <ul class="form-errors-list">\n <li class="form-errors-list-item alert alert-warning" ng-repeat="error in formErrors">{{error}}</li>\n </ul>\n </div>\n <div class="demo-output" ng-switch="requestingDemoService">\n <p class="demo-explanation" ng-switch-when="never">Try this on a single page application like https://snapsearch.io/. You\'ll see the difference between how "javascriptless" search engine robots view your application without SnapSearch, and how they view your application with SnapSearch. Although our robots are able to follow redirects, this demo does not. Please make sure the URL is the direct URL to your site. Otherwise you may get a redirect message, or nothing at all.</p>\n <img class="demo-loading" ng-switch-when="started" src="assets/img/loading.gif" />\n <div class="demo-response row" ng-switch-when="finished" ng-show="formSuccess">\n <div class="col-sm-6">\n <h4 class="demo-response-title">Source Code without SnapSearch</h4>\n <pre class="demo-response-code"><code>{{demoServiceResponse.withoutSnapSearch}}</code></pre>\n <span class="demo-response-length">Content Length: {{demoServiceResponse.withoutSnapSearch.length}} <span class="text-muted">(this one should be lower!)</span></span>\n </div>\n <div class="col-sm-6">\n <h4 class="demo-response-title">Source Code with SnapSearch</h4>\n <pre class="demo-response-code"><code>{{demoServiceResponse.withSnapSearch}}</code></pre>\n <span class="demo-response-length">Content Length: {{demoServiceResponse.withSnapSearch.length}} <span class="text-muted">(this one should be higher!)</span></span>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n</div>\n<div class="problem-solution panel panel_lego panel_transition_yellow_dark">\n <div class="container">\n <div class="panel-heading">\n <h2 class="panel-title">Why use SnapSearch?</h2>\n </div>\n <div class="panel-body">\n <h3 class="problem-title">The Problem</h3>\n <div class="problem row">\n <div class="col-md-6">\n <img src="assets/img/user_coding.png" />\n <div class="problem-explanation">\n <p>Youâve coded up a javascript enhanced or single page application using the latest HTML5 technologies. Using a modern browser, you can see all the asynchronous or animated content appear.</p>\n </div>\n </div>\n <div class="col-md-6">\n <img src="assets/img/spider_reading.png" />\n <div class="problem-explanation">\n <p>Search engines however see nothing. This is because search engine robots are simple HTTP clients that cannot execute advanced javascript. They do not execute AJAX, and thus cannot load asynchronous resources, nor can they activate javascript events that make your application dynamic and user friendly.</p>\n </div>\n </div>\n </div>\n <h3 class="solution-title">Our Solution</h3>\n <div class="solution row">\n <div class="col-md-3">\n <img src="assets/img/globe.png" />\n <div class="solution-explanation">\n <p class="request-pipe">Client initiates an HTTP Request. This client can be search engine robot or a social network crawler such as Facebook or Twitter.</p>\n <p class="response-pipe">The client will now receive the true full representation of your siteâs content even though it cannot execute javascript.</p>\n </div>\n </div>\n <div class="col-md-3">\n <img src="assets/img/application.png" />\n <div class="solution-explanation">\n <p class="request-pipe">Your application using our supplied middleware detects whether the client cannot execute javascript. The middleware then initiates a snapshot request to SnapSearch. The request contains the client request URL, authentication credentials and custom API parameters.</p>\n <p class="response-pipe">Once the response is received, it outputs your pageâs status code, HTML content and any HTTP response headers.</p>\n </div>\n </div>\n <div class="col-md-3">\n <img src="assets/img/cloud_service.png" />\n <div class="solution-explanation">\n <p class="request-pipe">SnapSearch receives the request and commands our load balanced browser workers to scrape your site based on the client request URL while executing your javascript. Your content will be cached for future requests.</p>\n <p class="response-pipe">A response is constructed containing the resulting status code, HTML content, headers and optionally a screenshot of your resource. This is returned to your applicationâs middleware.</p>\n </div>\n </div>\n <div class="col-md-3">\n <img src="assets/img/cache.png" />\n <div class="solution-explanation">\n <p class="request-pipe">A cache of the content is securely and safely stored. All cached content are distinguished by a parameter checksum, so the same URL with different API parameters will be stored independently.</p>\n <p class="response-pipe">If a resource has been cached before, SnapSearch will return the cached content. All cached content have adjustable cache lifetime.</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<div class="features panel panel_yellow panel_transition_white_yellow">\n <div class="container">\n <div class="panel-heading">\n <h2 class="panel-title">Features</h2>\n </div>\n <div class="panel-body">\n <div class="row" equalise-heights=".features .feature-object">\n <div class="feature-object col-sm-6 col-md-4 col-lg-3">\n <h3 class="feature-title">On Demand</h3>\n <img class="feature-image" src="assets/img/snapsearch_bolt.png" />\n <p class="feature-explanation">Snapshots are created on the fly as you request it from the API. Resources are cached for a default time of 24 hrs.</p>\n </div>\n <div class="feature-object col-sm-6 col-md-4 col-lg-3">\n <h3 class="feature-title">Real Browser Workers</h3>\n <img class="feature-image" src="assets/img/firefox.png" />\n <p class="feature-explanation">Our scrapers are powered by nightly versions of Mozilla Firefox. Weâre able to run cutting edge HTML5 techniques. Our scrapers evolve as the web evolves.</p>\n </div>\n <div class="feature-object col-sm-6 col-md-4 col-lg-3">\n <h3 class="feature-title">Google Approved</h3>\n <img class="feature-image" src="assets/img/google.png" />\n <p class="feature-explanation">SnapSearch complies with the AJAX Crawling Specification by Google. SnapSearch responds with the same content as a normal user would see, so youâre not in violation of cloaking rules.</p>\n </div>\n <div class="feature-object col-sm-6 col-md-4 col-lg-3">\n <h3 class="feature-title">Powerful Middleware</h3>\n <img class="feature-image" src="assets/img/middleware.png" />\n <p class="feature-explanation">Our middleware supports a variety of server setups and detection algorithms in order to determine search engine clients. Currently they can detect more than 200 robots. They can be configured to support custom clients.</p>\n </div>\n <div class="feature-object col-sm-6 col-md-4 col-lg-3">\n <h3 class="feature-title">Flexibility</h3>\n <img class="feature-image" src="assets/img/flexibility.png" />\n <p class="feature-explanation">The API supports image snapshots, soft 404s, following redirects, custom headers and status code, cache time settings, width and height of the scraper (useful for infinite scrolling), and custom javascript callbacks that are evaled on the page.</p>\n </div>\n <div class="feature-object col-sm-6 col-md-4 col-lg-3">\n <h3 class="feature-title">Pay for What You Use</h3>\n <img class="feature-image" src="assets/img/tiger_face.png" />\n <p class="feature-explanation">You only pay for each usage of the API that initiates a fresh snapshot. There is no minimum monthly fee. Requests hitting the cache is free, and storage of the cache is free.</p>\n </div>\n <div class="feature-object col-sm-6 col-md-4 col-lg-3">\n <h3 class="feature-title">Load Balanced</h3>\n <img class="feature-image" src="assets/img/load_balanced.png" />\n <p class="feature-explanation">SnapSearch was built as a fault-tolerant load balanced service. We can handle small and big sites. Scrapers are horizontally scaled according to the number of users.</p>\n </div>\n <div class="feature-object col-sm-6 col-md-4 col-lg-3">\n <h3 class="feature-title">Analytics</h3>\n <img class="feature-image" src="assets/img/analytics.png" />\n <p class="feature-explanation">Analytics shows how many requests come from your API key, and what their request parameters are. You can quickly understand your monthly usage, and proximity to the monthly limit. All cached content can be manually refreshed or deleted.</p>\n </div>\n </div>\n </div>\n </div>\n</div>\n<div class="framework-support panel panel_white panel_transition_white_yellow">\n <div class="container">\n <div class="panel-heading">\n <h2 class="panel-title">Weâre 100% framework agnostic!</h2>\n </div>\n <div class="panel-body">\n <div class="framework-logos row">\n <div class="framework-box col-xs-6 col-sm-4 col-md-3">\n <img class="framework-logo" src="assets/img/sails_logo.png" />\n <a href="http://sailsjs.org/">Sails.js</a>\n </div>\n <div class="framework-box col-xs-6 col-sm-4 col-md-3">\n <img class="framework-logo" src="assets/img/angular_logo.png" />\n <a href="http://angularjs.org/">AngularJS</a>\n </div>\n <div class="framework-box col-xs-6 col-sm-4 col-md-3">\n <img class="framework-logo" src="assets/img/js_logo.png" />\n <a href="http://http://www.html5rocks.com/">HTML5 Javascript</a>\n </div>\n <div class="framework-box col-xs-6 col-sm-4 col-md-3">\n <img class="framework-logo" src="assets/img/jquery_logo.png" />\n <a href="http://jquery.com/">jQuery</a>\n </div>\n <div class="framework-box col-xs-6 col-sm-4 col-md-3">\n <img class="framework-logo" src="assets/img/backbone_logo.png" />\n <a href="http://backbonejs.org/">Backbone</a>\n </div>\n <div class="framework-box col-xs-6 col-sm-4 col-md-3">\n <img class="framework-logo" src="assets/img/ember_logo.png" />\n <a href="http://emberjs.com/">ember</a>\n </div>\n <div class="framework-box col-xs-6 col-sm-4 col-md-3">\n <img class="framework-logo" src="assets/img/knockout_logo.png" />\n <a href="http://knockoutjs.com/">Knockout</a>\n </div>\n <div class="framework-box col-xs-6 col-sm-4 col-md-3">\n <img class="framework-logo" src="assets/img/meteor_logo.png" />\n <a href="https://www.meteor.com/">Meteor</a>\n </div>\n </div>\n </div>\n </div>\n</div>',controller:"HomeCtrl"}).state("documentation",{url:"/documentation",template:'<div class="documentation panel panel_lego panel_transition_yellow_dark">\n <div class="container">\n <div class="panel-body row">\n <div class="col-md-2">\n <nav class="btn-group-vertical documentation-nav" affix affix-top="214" affix-bottom="9
23210">\n <a class="btn" scroll="introduction">Introduction</a>\n <a class="btn" scroll="apiUsage">API Usage</a>\n <a class="btn" scroll="middleware">Middleware</a>\n <a class="btn" scroll="notes">Notes</a>\n </nav>\n </div>\n <div class="col-md-10">\n <div class="documentation-box">\n <div class="documentation-information">\n <h3 class="documentation-title" anchor="introduction">Introduction</h3>\n <p>Snapsearch is a search engine optimisation (SEO) and robot proxy for complex front-end javascript & AJAX enabled (potentially realtime) HTML5 web applications.</p>\n <p>Search engines like <a href="https://developers.google.com/webmasters/ajax-crawling/" target="_blank" title="Google\'s AJAX Crawling Specification">Google\'s crawler and HTTP scrapers such as Facebook\'s image extraction robot cannot execute complex javascript applications</a>. This include websites using javascript frameworks such as AngularJS, EmberJS, KnockoutJS, Backbone.js, jQuery, Meteor and much more.</p>\n <p>Snapsearch\'s middleware detects and intercepts requests made by search engines, then sends its own javascript enabled scrapers to cache a snapshot of your web page. The snapshot is seamlessly and transparently passed back to the search engine through your web application. This <a href="https://developers.google.com/webmasters/ajax-crawling/docs/html-snapshot" target="_blank" title="Google\'s Suggested Snapshot Method for AJAX Sites">method is supported by Google</a> so you\'re not in violation of any rules.</p>\n <p>Snapsearch powered by Mozilla Firefox instances. Theses browsers are kept up to date with the <strong>rapid 6 week release cycles from Mozilla</strong>. We\'ll always be able to serve the latest in HTML5 technology. This is an advantage over using something like PhantomJS which is affected by the slower and spurious QtWebKit engine development cycle.</p>\n <div class="alert alert-info">\n <p><strong>Attention:</strong> Sites using hashbang URLs such as <code>http://domain/#/path...</code>, need to add a special meta tag. Please see our <a scroll="notes-hashbangUrls">notes on hashbang urls</a>.</p>\n </div>\n </div>\n <div class="documentation-information">\n <h3 class="documentation-title" anchor="apiUsage">API Usage</h3>\n <p>SnapSearch\'s API is designed to be very simple and can be used by itself or with our provided <a scroll="middleware">middleware</a>. All API endpoints are SSL encrypted and require HTTP Basic Authorization using your registered Email as the username, and the API Key as the password.</p>\n <p>API endpoints extend from <code>https://snapsearch.io/</code></p>\n <div class="api-endpoint">\n <h4 class="api-title">Robot</h3>\n <div class="row api-explanation">\n <div class="col-md-6">\n <div class="api-url">\n <p><strong>Path</strong></p>\n <pre><code><strong>GET/POST:</strong> api/v1/robot</code></pre>\n </div>\n <div class="api-parameters">\n <p><strong>Parameters</strong></p>\n <ul class="api-parameters-metadata">\n <li>\n <span>Format:</span>\n <ul>\n <li>GET Query Parameters</li>\n <li>POST JSON Body</li>\n </ul>\n </li>\n </ul>\n <div accordion class="api-parameter-accordion" close-others="false">\n <accordion-group>\n <accordion-heading><i class="glyphicon glyphicon-chevron-right"></i> url</accordion-heading>\n <dl class="dl-horizontal api-parameter-properties">\n <dt>Default:</dt><dd>null</dd>\n <dt>Possible Values:</dt><dd>Any valid URL</dd>\n <dt>Required:</dt><dd>True</dd>\n <dt>Description:</dt><dd>URL to scrape. This is the only required parameter.</dd>\n </dl>\n </accordion-group>\n <accordion-group>\n <accordion-heading><i class="glyphicon glyphicon-chevron-right"></i> useragent</accordion-heading>\n <dl class="dl-horizontal api-parameter-properties">\n <dt>Default:</dt><dd>Mozilla/5.0 ({OPERATINGSYSTEM}) Gecko/{VERSION} Firefox/{VERSION} SnapSearch</dd>\n <dt>Possible Values:</dt><dd>Any textual string containing \'SnapSearch\'</dd>\n <dt>Description:</dt><dd>Customise the user agent. If this user agent did not include \'SnapSearch\', an infinite interception loop may occur.</dd>\n </dl>\n </accordion-group>\n <accordion-group>\n <accordion-heading><i class="glyphicon glyphicon-chevron-right"></i> width</accordion-heading>\n <dl class="dl-horizontal api-parameter-properties">\n <dt>Default:</dt><dd>1280</dd>\n <dt>Possible Values:</dt><dd>200 <= X <= 4000</dd>\n <dt>Description:</dt><dd>Change the window width of the Robot. Can be used if you have specific requirements regarding the dimensions of the browser.</dd>\n </dl>\n </accordion-group>\n <accordion-group>\n <accordion-heading><i class="glyphicon glyphicon-chevron-right"></i> height</accordion-heading>\n <dl class="dl-horizontal api-parameter-properties">\n <dt>Default:</dt><dd>1024</dd>\n <dt>Possible Values:</dt><dd>200 <= X <= 4000</dd>\n <dt>Description:</dt><dd>Change the window height of the Robot. Can be used if you have specific requirements regarding the dimensions of the browser. This can be useful for sites implementing infinite scrolling, so more content can be loaded on the page.</dd>\n </dl>\n </accordion-group>\n <accordion-group>\n <accordion-heading><i class="glyphicon glyphicon-chevron-right"></i> imgformat</accordion-heading>\n <dl class="dl-horizontal api-parameter-properties">\n <dt>Default:</dt><dd>png</dd>\n <dt>Possible Values:</dt><dd>png</dd>\n <dt>Description:</dt><dd>Is used in conjunction with <code>screenshot</code> parameter. Currently only supports png format. </dd>\n </dl>\n </accordion-group>\n <accordion-group>\n <accordion-heading><i class="glyphicon glyphicon-chevron-right"></i> screenshot</accordion-heading>\n <dl class="dl-horizontal api-parameter-properties">\n <dt>Default:</dt><dd>false</dd>\n <dt>Possible Values:</dt><dd>true|false</dd>\n <dt>Description:</dt><dd>Scrape a screenshot, this screenshot is rendered from the browser\'s dimensions. The screenshot is returned as a base 64 encoded string. It\'s format is determined by the <code>imgformat</code> parameter.</dd>\n </dl>\n </accordion-group>\n <accordion-group>\n <accordion-heading><i class="glyphicon glyphicon-chevron-right"></i> navigate</accordion-heading>\n <dl class="dl-horizontal api-parameter-properties">\n <dt>Default:</dt><dd>false</dd>\n <dt>Possible Values:</dt><dd>true|false</dd>\n <dt>Description:</dt><dd>Follow redirections. In most cases you do not want to follow redirects. If you leave this false, it will return the status, headers and body of the page asking for a redirect. If you switch this to true, it will follow header, client side, javascript, and meta tag redirects.</dd>\n </dl>\n </accordion-group>\n <accordion-group>\n <accordion-heading><i class="glyphicon glyphicon-chevron-right"></i> loadimages</accordion-heading>\n <dl class="dl-horizontal api-parameter-properties">\n <dt>Default:</dt><dd>false</dd>\n <dt>Possible Values:</dt><dd>true|false</dd>\n <dt>Description:</dt><dd>Loading images. Loading images is not required when doing content scraping, leaving this off results in faster scrapes. However if you are taking screenshots, then you should switch this to true.</dd>\n </dl>\n </accordion-group>\n <accordion-group>\n <accordion-heading><i class="glyphicon glyphicon-chevron-right"></i> javascriptenabled</accordion-heading>\n <dl class="dl-horizontal api-parameter-properties">\n <dt>Default:</dt><dd>true</dd>\n <dt>Possible Values:</dt><dd>true|false</dd>\n <dt>Description:</dt><dd>Process javascript or not. Can be used in circumstances where you don\'t want to process javascript.</dd>\n </dl>\n </accordion-group>\n <accordion-group>\n <accordion-heading><i class="glyphicon glyphicon-chevron-right"></i> totaltimeout</accordion-heading>\n <dl class="dl-horizontal api-parameter-properties">\n <dt>Default:</dt><dd>30000</dd>\n <dt>Possible Values:</dt><dd>10000 <= X <= 30000</dd>\n <dt>Description:</dt><dd>Maximum millisecond timeout for the entire request task. This determines how long before the entire request task is considered a failure. At which point the robot will cancel the task and return everything it has managed to scrape.</dd>\n </dl>\n </accordion-group>\n <accordion-group>\n <accordion-heading><i class="glyphicon glyphicon-chevron-right"></i> maxtimeout</accordion-heading>\n <dl class="dl-horizontal api-parameter-properties">\n <dt>Default:</dt><dd>5000</dd>\n <dt>Possible Values:</dt><dd>1000 <= X <= 15000</dd>\n <dt>Description:</dt><dd>Maximum millisecond timeout for asynchronous requests. This determines how long the browser will wait for asynchronous requests to finish. This means the browser will initiate the capture of the page contents either when all asynchronous requests finish, or at the maximum timeout. Longer times will result in potentially slower scrapes, but may capture more content if your site produces many slow asynchronous requests. If you set it too long, the client search engine robot may timeout. Play with this setting to the most optimal scraping speed.</dd>\n </dl>\n </accordion-group>\n <accordion-group>\n <accordion-heading><i class="glyphicon glyphicon-chevron-right"></i> initialwait</accordion-heading>\n <dl class="dl-horizontal api-parameter-properties">\n <dt>Default:</dt><dd>1000</dd>\n <dt>Possible Values:</dt><dd>1000 <= X <= 15000</dd>\n <dt>Description:</dt><dd>Initial millisecond wait before checking asynchronous requests. This determines how long the browser will wait before it starts to check for when the asynchronous requests finish. The <code>maxtimeout</code> only begins onces the <code>initialwait</code> finishes. This is intended to allow delayed asynchronous requests or for pages which don\'t have asynchronous requests but have DOM mutations. The number has to be lower than <code>maxtimeout</code></dd>\n </dl>\n </accordion-group>\n <accordion-group>\n <accordion-heading><i class="glyphicon glyphicon-chevron-right"></i> callback</accordion-heading>\n <dl class="dl-horizontal api-parameter-properties">\n <dt>Default:</dt><dd>null</dd>\n <dt>Possible Values:</dt><dd>
232Any javascript executable string</dd>\n <dt>Description:</dt><dd>This javascript string is evaled on the page after all asynchronous requests have finished but prior to the capture of the page contents. This allows you to execute DOM mutations or capture specific content. <strong>You can assume this string is executed in the context of an anonymous function.</strong> Therefore this code is valid: <code>return \'hello world\';</code>. You must return a string. Objects should be serialized into JSON. DOM node objects cannot be serialized and returned, you must first convert them to textual strings. These returned values will be stored in the <code>callbackResult</code> property in the response.</dd>\n </dl>\n </accordion-group>\n <accordion-group>\n <accordion-heading><i class="glyphicon glyphicon-chevron-right"></i> meta</accordion-heading>\n <dl class="dl-horizontal api-parameter-properties">\n <dt>Default:</dt><dd>true</dd>\n <dt>Possible Values:</dt><dd>true|false</dd>\n <dt>Description:</dt><dd>Scrape for custom meta tags or not. You can use custom meta tags to change the status code or add custom headers to the scraped snapshot. This is intended for soft 404 techniques. It will look for meta tags such as <code><meta name="snapsearch-status" content="404" /></code> and <code><meta name="snapsearch-header" content="Content-Type:text/html" /></code></dd>\n </dl>\n </accordion-group>\n <accordion-group>\n <accordion-heading><i class="glyphicon glyphicon-chevron-right"></i> cache</accordion-heading>\n <dl class="dl-horizontal api-parameter-properties">\n <dt>Default:</dt><dd>true</dd>\n <dt>Possible Values:</dt><dd>true|false</dd>\n <dt>Description:</dt><dd>Allow caching of the snapshot or not. This determines two things. The first is
232whether the snapshot can be acquired from the cache. The second is whether the snapshot should be cached. If this is left as true, snapshots can be returned from the cache if it exists in the cache and they will be cached if it is a fresh snapshot. If this is switched to false, snapshots will always be fresh and the result will not be cached.</dd>\n </dl>\n </accordion-group>\n <accordion-group>\n <accordion-heading><i class="glyphicon glyphicon-chevron-right"></i> cachetime</accordion-heading>\n <dl class="dl-horizontal api-parameter-properties">\n <dt>Default:</dt><dd>24</dd>\n <dt>Possible Values:</dt><dd>1 <= X <= 720</dd>\n <dt>Description:</dt><dd>Cache time in hours. This determines how long until the snapshots expire. A shorter cache time will result in more up to date snapshots, but it will use up more of your usage cap. Longer cache time will result in less up to date snapshots, but it will conserve your usage cap. This figure will depend on how often your pages change, and what proportion of those pages are changing compared to the rest of the website.</dd>\n </dl>\n </accordion-group>\n <accordion-group>\n <accordion-heading><i class="glyphicon glyphicon-chevron-right"></i> refresh</accordion-heading>\n <dl class="dl-horizontal api-parameter-properties">\n <dt>Default:</dt><dd>false</dd>\n <dt>Possible Values:</dt><dd>true|false</dd>\n <dt>Description:</dt><dd>Refresh forces a new snapshot. Unlike the cache parameter, this will allow the new snapshot to be stored in the cache. (If cache is set to false, there is no need to set refresh to true.) Using this parameter allows you to set a long cachetime and manually refresh the snapshots depending on changes in your website.</dd>\n </dl>\n </accordion-group>\n <accordion-group>\n <accordion-heading><i class="glyphicon glyphicon-chevron-right"></i> test</accordion-heading>\n <dl class="dl-horizontal api-parameter-properties">\n <dt>Default:</dt><dd>false</dd>\n <dt>Possible Values:</dt><dd>true|false</dd>\n <dt>Description:</dt><dd>If you\'re in development mode or on localhost, set this to true, and it will only validate your request parameters, but not attempt to actually scrape anything.</dd>\n </dl>\n </accordion-group>\n </div>\n </div>\n </div>\n <div class="col-md-6">\n <div class="api-description">\n <p><strong>Description</strong></p>\n <p>This Robot endpoint allows you command our robots to scrape anything on the web. Requests must come with HTTP Basic authorization. Responses can be raw uncompressed text or gzip compressed output depending on your <code>Accept</code> headers. Cached snapshots are indexed by a checksum of your request parameters. Therefore different request parameters using the same url will have different cached snapshots.</p>\n </div>\n <div class="api-request">\n <p><strong>Example Request</strong></p>\n <syntax class="api-code" syntax-language="http">POST /api/v1/robot HTTP/1.1\nAccept: application/json\nAccept-Encoding: gzip, deflate, compress\nAuthorization: Basic RGVtbzpEZW1vUGFzc3dvcmRLZXk=\nContent-Type: application/json; charset=utf-8\nHost: snapsearch.io\n\n{\n "url": "http://google.com"\n}</syntax>\n </div>\n </div>\n </div>\n <div class="api-responses">\n <div class="api-response">\n <p><strong>Successful Response</strong></p>\n <syntax class="api-code" syntax-language="http">HTTP/1.1 200 OK\nAccess-Control-Allow-Origin: *\nCache-Control: no-cache\nConnection: keep-alive\nContent-Encoding: gzip\nContent-Type: application/json\nTransfer-Encoding: chunked\nVary: Accept-Encoding\n\n{\n "code": "success",\n "content": {\n "cache" => true/false,\n "callbackResult" => "",\n "date" => 1390382314,\n "headers" => [\n {\n "name" => "Content-Type",\n "value" => "text/html"\n }\n ],\n "html" => "<html></html>",\n "message" => "Success/Failed/Validation Errors",\n "pageErrors" => [\n {\n "error" => "Error: document.querySelector(...) is null",\n "trace" => [\n {\n "file" => "filename",\n "function" => "anonymous",\n "line" => "41",\n "sourceURL" => "urltofile"\n }\n ]\n }\n ],\n "screenshot" => "BASE64 ENCODED IMAGE CONTENT",\n "status" => 200\n }\n}</syntax>\n </div>\n <div class="api-response">\n <p><strong>Failed Validation Error Response</strong></p>\n <syntax class="api-code" syntax-language="http">HTTP/1.1 400 Bad Request\nCache-Control: no-cache\nConnection: keep-alive\nContent-Type: application/json\nTransfer-Encoding: chunked\n\n{\n "code": "validation_error",\n "content": [\n "<request parameter name>": "<request parameter error message>"\n ]\n}</syntax>\n </div>\n </div>\n </div>\n </div>\n <div class="documentation-information">\n <h3 class="documentation-title" anchor="middleware">Middleware</h3>\n <p>SnapSearch officially supports and provides PHP, Ruby, Node.js and Python middleware. All middleware are framework agnostic, and should be able to work within a middleware framework or without.</p>\n <ul>\n <li><a href="https://github.com/SnapSearch/SnapSearch-Client-PHP">PHP</a></li>\n <li><a href="https://github.com/SnapSearch/SnapSearch-Client-Ruby">Ruby</a></li>\n <li><a href="https://github.com/SnapSearch/SnapSearch-Client-Node">Node.js</a></li>\n <li><a href="https://github.com/SnapSearch/SnapSearch-Client-Python">Python</a></li>\n </ul>\n <p>These libraries first automatically detect if an HTTP request comes from a search engine or robot. If it is indeed a search engine, it sends an HTTP POST request to <code>https://snapsearch.io/api/v1/robot</code> passing in parameters configuring how SnapSearch\'s robot should extract your content. SnapSearch will then send a HTTP GET request to the same URL and return the HTTP response
232(status code, headers and content) as a JSON response to the library. The client library then returns that data back to your application. You will have to select which data to present to the search engine. It is recommended to return the status code and content but not all of the headers, due to potential header mismatch with content encoding. However if you have specific headers that are important, then first test if it works with a simple HTTP client before deploying it.</p>\n <p>All of the middleware are open source, and we welcome pull requests for patches or new middleware implementations. Check out our <a href="https://github.com/SnapSearch/">Github organisation</a> for more.</p>\n </div>\n <div class="documentation-information">\n <h3 class="documentation-title" anchor="notes">Notes</h3>\n <h4 class="documentation-sub-title" anchor="notes-hashbangUrls">Hashbang Urls</h4>\n <p>Make sure you are using hash bang urls and not just hash urls. This fits with <a href="https://developers.google.com/webmasters/ajax-crawling/docs/specification" target="_blank">Google\'s AJAX Crawling Scheme</a>. It makes it easier to identify what is a hash, and what is meant to be path. Remember hash fragments are never passed to the server. The middleware needs to know the full HTTP url or else it won\'t know where to scrape. This means you will need to rely on the search engine robots to convert hash bang urls to query fragment urls. <strong>This meta tag will need to be on every page: <code><meta name="fragment" content="!" /></code></strong>. If you are using HTML 5 push state urls, the meta tag is still a good practice as it allows search engines following the AJAX specification to know that your site is a single page application.</p>\n <h4 class="documentation-sub-title">Dealing with non-HTML resources</h4>\n <p>You need to make sure that non-HTML resources are not intercepted by SnapSearch. Non-HTML resources refer to:</p>\n <ul>\n <li>Static files that are served through your application and not through an HTTP server such as NGINX or Apache.</li>\n <li>Downloads that served through an application level controller.</li>\n <li>Text data interchange formats that are not meant to be used for the end user\'s browser. For example: JSON, XML, RSS... etc.</li>\n <li>API resources that don\'t display the front end site, but are there for interaction between machines.</li>\n <li>Any connections that do not go through the HTTP protocol.</li>\n </ul>\n <p>You can prevent SnapSearch from intercepting these non-HTML resources by:</p>\n <ul>\n <li>Setup an array of whitelisted or blacklisted regular expression routes which will be matched against the request URL. SnapSearch will not intercept any routes that are not on the whitelist or any routes that are on the blacklist. This is done programmatically via the supplied middleware.</li>\n <li>SnapSearch middleware can optionally check if the URL path has an invalid file extension. Some extensions are valid for HTML resources such as <code>.html</code>, but others such as <code>.js</code> are not. Our middleware has an option to switch on this detection and it will ignore requests that go to invalid extensions. It is left as false by default.</li>\n <li>In MVC style applications that do not serve binary files, you may have a single controller which is responsible for displaying the front end code. If you execute our middleware inside these particular controllers, then you will not have any problems with non-HTML resources, since it can only intercept requests that go to the front end.</li>\n </ul>\n <h4 class="documentation-sub-title">SSL issues</h4>\n <p>SnapSearch is not currently able to scrape sites that have invalid SSL certificates. We are currently working on this problem.</p>\n <h4 class="documentation-sub-title">Flash Support</h4>\n <p>Our robots can support flash. At this moment the flash plugin is not installed. However we are going to be adding this feature soon. Note that flash movies will not appear on any screenshots.</p>\n <h4 class="documentation-sub-title">Supporting JS disabled Browsers</h4>\n <p>It\'s not possible to detect if the HTTP client supports Javascript on the first page load. Therefore you have to know the user agents beforehand. A workaround involves the HTML Meta Refresh tag. You set an HTML meta refresh tag which will refresh the browser and point it to the same url but with query parameter indicating to the server that the client doesn\'t run javascript. This meta refresh tag can be then be cancelled using javascript. Another approach would be to use the Noscript tag and place the meta refresh tag there. None of these methods are guaranteed to work. but if you\'re interested check out: <a href="http://stackoverflow.com/q/3252743/582917" target="_blank">http://stackoverflow.com/q/3252743/582917</a></p>\n <h4 class="documentation-sub-title">Ensuring Analytics Works with Snapsearch</h4>\n <p>When Snapsearch visits your site, it will come with a UserAgent containing "SnapSearch". You can however configure this to your own liking. Use this user agent in order to filter out our requests when using web analytics.</p>\n <h4 class="documentation-sub-title">Soft 404s</h4>\n <p>Soft 404s should be avoided. The final representation to the search engine should be exactly the same as normal user with a normal browser would see. However you can achieve this by using the special meta tags and switching <code>meta</code> request parameter to true. Here are some example custom meta tags: <code><meta name="snapsearch-status" content="404" /></code> and <code><meta name="snapsearch-header" content="Content-Type:text/html" /></code></p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>', 233controller:"DocumentationCtrl"}).state("pricing",{url:"/pricing",template:'<div class="pricing panel panel_lego panel_transition_yellow_dark">\n <div class="container">\n <div class="panel-heading">\n <h2 class="panel-title">Pricing</h2>\n </div>\n <div class="panel-body">\n <div class="pricing-box">\n <h3 class="pricing-heading">Pay for What You Use</h3>\n <h4 class="pricing-subheading">never exceed your budget with a flexible cap</h4>\n <p class="price-per-month">${{pricePerUsage}} AUD per Usage*<br /><small>(free {{freeUsageCap}} Usages Per Month)</small></p>\n <dl class="feature-set">\n <dt>Pages</dt>\n <dd>Unlimited</dd>\n <dt>Free Usage Cap</dt>\n <dd>{{freeUsageCap}} Usages per Month<br /><small>(good for small applications)</small></dd>\n <dt>Cache Requests</dt>\n <dd>Unlimited</dd>\n <dt>Cache Storage</dt>\n <dd>Unlimited</dd>\n <dt>Cache Lifetime</dt>\n <dd>Configurable from 1 - 720 hrs (default: 24 hrs)</dd>\n <dt>Feature Set</dt>\n <dd>Complete</dd>\n </dl>\n <div class="usage-price-explanation">\n <p class="lead">* What is a Usage?</p>\n <p>Each request to the SnapSearch API either results in content being dynamically scraped using the SnapSearch scrapers, or content being fetched from the cache. A usage refers to a request that does not hit the cache, and initiates a fresh snapshot.</p>\n <p>The number of usages per month is used for the calculation of the cost per month. The number of requests per month is not capped, but the number of usages per month can be capped in your control panel.</p>\n <p>If youâve exceeded your usage cap, our middleware simply returns your content normally. So itâs best to keep your cap above average in case of search engine traffic spikes.</p>\n </div>\n </div>\n <div class="cost-estimator">\n <h3 class="cost-heading">Cost Estimator</h3>\n <div class="cost-explanation">\n <p>Use this tool to estimate your monthly payment. If youâre using a 24 hr cache lifetime, <strong>requests per month are roughly cut in half when converted to usages per month</strong>. The cost per month is calculated from total usages minus free usage cap, multiplied by the price per usage, rounded to the nearest cent.</p>\n <p>This is an estimation, to get proper usage figures, we recommend that you try our service with the free usage cap, and use our analytics to determine how many usages per month your web application needs.
233</p>\n <p>Our research shows that most small websites generate between 1000 to 2000 requests per month and hence 500 to 1000 usages per month.</p>\n <p>Checkout our <a href="documentation">strategies</a> for reducing usages per month.</p>\n </div>\n <form class="cost-calculator" ng-controller="CostCalculatorCtrl" name="costCalculatorForm">\n <h4>Usages per Month</h4>\n <div class="form-group">\n <input \n class="form-control input-lg" \n type="number" \n name="quantity" \n ng-model="cost.quantity" \n placeholder="1000" \n maxlength="5" \n />\n <span class="help-block">Try a number above the free usage cap.</span>\n </div>\n <h4>Cost per Month <small>(discounting Free Usage Cap)</small></h4>\n <p class="calculated-price-per-month">${{price}} AUD per Month</p>\n </form>\n <em class="custom-plan">Need an absurd number of Usages Per Month?<br /><a href="http://www.google.com/recaptcha/mailhide/d?k=01KxkEAwiT1nfx-BhMp7WKWg==&c=iaojzr8kgOuD5gSlcb7Tdexe9yVtnztvwDbDcomRY24=" onclick="window.open(\'http://www.google.com/recaptcha/mailhide/d?k\\07501KxkEAwiT1nfx-BhMp7WKWg\\75\\75\\46c\\75iaojzr8kgOuD5gSlcb7Tdexe9yVtnztvwDbDcomRY24\\075\', \'\', \'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300\'); return false;" title="Reveal this e-mail address">Contact us!</a> We can figure out an economical plan for your business.</em>\n </div>\n </div>\n </div>\n</div>',controller:"PricingCtrl"}).state("controlPanel",{url:"/control_panel",template:'<div class="control-panel panel panel_lego panel_transition_yellow_dark">\n <div class="container">\n <div class="panel-body row" ng-show="loggedIn">\n <div class="col-md-2">\n <nav class="btn-group-vertical control-panel-nav" affix affix-top="214" affix-bottom="910">\n <a class="btn" ui-sref-active="active" ui-sref=".crawling">Crawling</a>\n <a class="btn" ui-sref-active="active" ui-sref=".cache">Cache</a>\n <a class="btn" ui-sref-active="active" ui-sref=".payments">Payments</a>\n <a class="btn" ui-sref-active="active" ui-sref=".billing">Billing</a>\n <a class="btn" ui-sref-active="active" ui-sref=".account">Account</a>\n </nav>\n </div>\n <div class="col-md-10">\n <div class="control-box" ui-view autoscroll="true"></div>\n </div>\n </div>\n <div class="panel-body" ng-show="loggedOut">\n <p>You must be logged in to view this page!</p>\n </div>\n </div>\n</div>',controller:"ControlPanelCtrl"}).state("controlPanel.crawling",{url:"/crawling",template:'<div class="crawling">\n <h2 class="control-title">Crawling Statistics</h2>\n <em class="api-key">API Key: {{userAccount.sharedKey}}</em>\n <div class="telemetry-block">\n <h3 class="telemetry-title">Overview</h3>\n <em class="telemetry-emphasis">This Cycle - from <strong>{{chargeCycle.beginning.format(\'YYYY/MM/DD\')}}</strong> to <strong>{{chargeCycle.ending.format(\'YYYY/MM/DD\')}}</strong></em>\n <div class="row overview-requests-usages-tally no-gutter">\n <div class="col-sm-4 tally-col">\n <div class="tally-block tally_block_request">\n <span class="tally-bg">R</span>\n <p class="tally-number">{{userAccount.apiRequests}}</p>\n </div>\n <p class="tally-description">Requests Received</p>\n </div>\n <div class="col-sm-4 tally-col">\n <div class="tally-block tally_block_usage">
233\n <span class="tally-bg">U</span>\n <p class="tally-number">{{userAccount.apiUsage}}</p>\n </div>\n <p class="tally-description">Usages Used</p>\n </div>\n <div class="col-sm-4 tally-col">\n <div class="tally-block tally_block_available">\n <span class="tally-bg">A</span>\n <p class="tally-number">{{userAccount.apiLimit - userAccount.apiUsage}}</p>\n </div>\n <p class="tally-description">Usages Available</p>\n </div>\n </div>\n <div class="progress progress-striped active usage-bar">\n <div class="progress-bar" ng-style="{ width: userAccount.apiUsagePercentage + \'%\' }"></div>\n </div>\n <p class="telemetry-emphasis">Used up {{userAccount.apiUsagePercentage}}% of API Usage Cap this cycle.</p>\n </div>\n <div class="telemetry-block">\n <h3 class="telemetry-title">Monthly Usage Cap</h3>\n <form class="api-limit-modifier form-horizontal" name="apiLimitModifierForm">\n <div class="form-errors" ng-show="formErrors">\n <em class="text-warning">Oops! Please fix up these errors:</em>\n <ul class="form-errors-list">\n <li class="form-errors-list-item alert alert-warning" ng-repeat="error in formErrors">{{error}}</li>\n </ul>\n </div>\n <div class="form-success alert alert-success" ng-show="formSuccess">\n {{formSuccess}}\n </div>\n <dl>\n <dt>\n <label class="control-label" for="apiLimitModifierFormQuantity">Enter Usage Cap:</label>\n </dt>\n <dd \n class="input-group" \n ng-class="{\n \'has-error\': apiLimitModifierForm.quantity.$invalid && apiLimitModifierForm.quantity.$dirty\n }" \n >\n <input \n id="apiLimitModifierFormQuantity"\n class="form-control" \n type="number" \n name="quantity" \n ng-model="apiLimitModifier.quantity" \n ng-disabled = "!hasBillingDetails" \n min-valid="{{userAccount.apiFreeLimit}}" \n maxlength="10" \n required \n />\n <span class="input-group-btn">\n <button \n class="btn btn-primary" \n type="submit" \n ng-disabled="apiLimitModifierForm.$invalid || !hasBillingDetails" \n ng-click="changeLimit(apiLimitModifier)" \n >\n Change Cap\n </button>\n </span>\n </dd>\n <dt>Free Usage Cap:</dt>\n <dd>{{userAccount.apiFreeLimit}}</dd>\n <dt>Max Cost Per Month:<br /><small>(discounting free usage cap)</small></dt>\n <dd>${{price}} AUD</dd>\n </dl>\n </form>\n </div>\n <div class="telemetry-block">\n <h3 class="telemetry-title">API Requests & Usage History</h3>\n <em class="telemetry-emphasis">This Cycle - from <strong>{{logGraphDate.beginning.format(\'YYYY/MM/DD\')}}</strong> to <strong>{{logGraphDate.ending.format(\'YYYY/MM/DD\')}}</strong></em>\n <div class="telemetry-buttons button-group">\n <button class="btn btn-primary" type="button" ng-click="backwardGraph()">Backward</button>\n <button class="btn btn-primary" type="button" ng-click="forwardGraph()">Forward</button>\n </div>\n <div \n id="usageHistoryChart" \n class="history-chart" \n nvd3-line-chart \n data="usageHistoryData" \n showXAxis="true" \n showYAxis="true" \n tooltips="true" \n interactive="true" \n showLegend="true" \n showControls="true" \n xAxisTickFormat="xAxisDateFormatFunction()" \
233n noData="No API history yet!" \n ></div>\n </div>\n <div class="telemetry-block">\n <h3 class="telemetry-title">Domain Distinction</h3>\n <em class="telemetry-emphasis">This Cycle - from <strong>{{domainDistinctionDate.beginning.format(\'YYYY/MM/DD\')}}</strong> to <strong>{{domainDistinctionDate.ending.format(\'YYYY/MM/DD\')}}</strong></em>\n <div class="domain-buttons telemetry-buttons button-group">\n <button class="btn btn-primary" type="button" ng-click="backwardDomains()">Backward</button>\n <button class="btn btn-primary" type="button" ng-click="forwardDomains()">Forward</button>\n </div>\n <div class="row">\n <div class="col-md-6">\n <p class="text-center">\n <strong>Requests - Total: {{totalDomainDistinctionRequestsQuantity}}</strong>\n </p>\n <div \n id="domainDistinctionChartRequests" \n class="domain-chart" \n nvd3-pie-chart \n data="domainDistinctionDataRequests" \n x="xPieFunction()" \n y="yPieFunction()" \n showLabels="true" \n labelType="key" \n tooltips="true" \n tooltipcontent="domainDistinctionRequestsToolTip()" \n noData="No domain data yet!" \n ></div>\n </div>\n <div class="col-md-6">\n <p class="text-center">\n <strong>Usages - Total: {{totalDomainDistinctionUsagesQuantity}}</strong>\n </p>\n <div \n id="domainDistinctionChartUsages" \n class="domain-chart" \n nvd3-pie-chart \n data="domainDistinctionDataUsages" \n x="xPieFunction()" \n y="yPieFunction()" \n showLabels="true" \n labelType="key" \n tooltips="true" \n tooltipcontent="domainDistinctionUsagesToolTip()" \n noData="No domain data yet!" \n ></div>\n </div>\n </div>\n </div>\n <div class="telemetry-block">\n <h3 class="telemetry-title">Request & Usage Log</h3>\n <div class="telemetry-buttons button-group">\n <button class="btn btn-primary" type="button" ng-click="backwardLogs()">Backward</button>\n <button class="btn btn-primary" type="button" ng-click="forwardLogs()">Forward</button>\n </div>\n <div class="table-responsive" ng-show="logs">\n <table class="table table-striped table-hover">\n <thead>\n <tr>\n <th class="text-center">#</th>\n <th class="text-center">Date</th>\n <th class="text-center">Type</th>\n <th class="text-center">URL</th>\n <th class="text-center">Response Time (s)</th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat="log in logs">\n <td class="text-center">{{log.id}}</td>\n <td class="text-center">{{log.date}}</td>\n <td class="text-center">{{log.type}}</td>\n <td class="text-center">{{log.url}}</td>\n <td class="text-center">{{log.responseTime}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n <p class="text-center" ng-show="!logs"><strong>No log data!</strong></p>\n </div>\n</div>',controller:"ControlCrawlingCtrl"}).state("controlPanel.cache",{url:"/cache",template:'<div class="cache">\n <h2 class="control-title">Cache Statistics</h2>\n <em class="api-key">API Key: {{userAccount.sharedKey}}</em>\n <div class="telemetry-block">\n <h3>Overview</h3>\n <div class="tally-block tally_block_cache tally_block_single">
233\n <span class="tally-bg">S</span>\n <p class="tally-number">{{snapshotCount}}</p>\n </div>\n <p class="tally-description">Snapshots Cached</p>\n </div>\n <div class="telemetry-block">\n <h3>Cache Priming</h3>\n <form class="cache-form form-horizontal" name="cacheForm">\n <div \n class="form-group" \n ng-class="{\n \'has-error\': cacheForm.url.$invalid && cacheForm.url.$dirty\n }"\n >\n <div class="input-group input-group-lg">\n <input \n class="form-control" \n type="url" \n name="url" \n ng-model="cache.url" \n required \n placeholder="http://your-site.com/" \n />\n <span class="input-group-btn">\n <button \n class="btn btn-primary" \n type="submit" \n ng-disabled="cacheForm.$invalid" \n ng-click="primeCache(cache)" \n >\n Prime\n </button>\n </span>\n </div>\n <span class="help-block text-center">Priming a snapshot is counted as a usage.</span>\n <span class="help-block text-center" ng-show="cacheForm.url.$error.url">Invalid URL</span>\n </div>\n <div \n class="form-group"\n ng-class="{\n \'has-error\': cacheForm.parameters.$invalid && c
233acheForm.parameters.$dirty\n }"\n >\n <label for="cacheFormParameters">Request Parameters</label>\n <textarea \n id="cacheFormParameters" \n class="form-control" \n name="parameters"\n ng-model="cache.parameters" \n placeholder=\'{ "parameterKey": "parameterValue" }\' \n json-checker \n ></textarea>\n <span class="help-block text-center">Setup custom <a href="documentation#parameters" target="_blank">request parameters</a>, it should be in JSON.</span>\n <span class="help-block text-center" ng-show="cacheForm.parameters.$error.jsonChecker">Invalid JSON</span>\n </div>\n <div class="form-errors" ng-show="formErrors">\n <em class="text-warning">Oops! Please fix up these errors:</em>\n <ul class="form-errors-list">\n <li class="form-errors-list-item alert alert-warning" ng-repeat="error in formErrors">{{error}}</li>\n </ul>\n </div>\n <div class="form-success alert alert-success" ng-show="formSuccess">\n {{formSuccess}}\n </div>\n </form>\n </div>\n <div class="telemetry-block">\n <h3>Cached Snapshots</h3>\n <div class="telemetry-buttons button-group">\n <button class="btn btn-primary" type="button" ng-click="backwardCache()">Backward</button>\n <button class="btn btn-primary" type="button" ng-click="forwardCache()">Forward</button>\n </div>\n <div class="table-responsive" ng-show="snapshots">\n <table class="table table-striped table-hover">\n <thead>\n <th class="text-center">#</th>\n <th class="text-center">URL</th>\n <th class="text-center">Date</th>\n <th class="text-center">Snapshot</th>\n <th class="text-center">Delete</th>\n </thead>\n <tbody>\n <tr ng-repeat="snapshot in snapshots">\n <td class="text-center">{{snapshot.id}}</td>\n <td class="text-center">{{snapshot.url}}</td>\n <td class="text-center">{{snapshot.date}}</td>\n <td class="text-center"><button class="btn btn-info" ng-click="viewSnapshot(snapshot.id)">snapshot</button></td>\n <td class="text-center"><button class="btn btn-warning" ng-click="deleteSnapshot(snapshot.id, $index)">delete</button></td>\n </tr>\n </tbody>\n </table>\n </div>\n <p class="text-center" ng-show="!snapshots"><strong>No snapshots!</strong></p>\n </div>\n</div>',controller:"ControlCacheCtrl"}).state("controlPanel.payments",{url:"/payments",template:'<div class="payments">\n <h2 class="control-title">Payment History</h2>\n <em class="api-key">API Key: {{userAccount.sharedKey}}</em>\n <div class="telemetry-block">\n <h3>Overview</h3>\n <em class="telemetry-emphasis">This Cycle - from <strong>{{chargeCycle.beginning.format(\'YYYY/MM/DD\')}}</strong> to <strong>{{chargeCycle.ending.format(\'YYYY/MM/DD\')}}</strong></em>\n <div class="tally-block tally_block_cache tally_block_single">\n <span class="tally-bg">B</span>\n <p class="tally-number">${{billThisMonth}} AUD</p>\n </div>\n <p class="tally-description">Bill this Month</p>\n <p class="telemetry-emphasis">Usage charges may include left over charges from the previous cycle.<br />Charges under 500 AUD cents are delayed and added to the next cycle.</p>\n </div>\n <div class="telemetry-block">\n <h3>Invoices</h3>\n <div class="telemetry-buttons button-group">\n <button class="btn btn-primary" type="button" ng-click="backwardPayments()">Backward</button>\n <button class="btn btn-primary" type="button" ng-click="forwardPayments()">Forward</button>\n </div>\n <div class="table-responsive" ng-show="paymentRecords">\n <table class="table table-striped table-hover">\n <thead>\n <th class="text-center">#</th>\n <th class="text-center">Date</th>\n <th class="text-center">Charged Usage Rate</th>\n <th class="text-center">Amount</th>\n <th class="text-center">Currency</th>\n <th class="text-center">Invoice</th>\n </thead>\n <tbody>\n <tr ng-repeat="payment in paymentRecords">\n <td class="text-center">{{payment.id}}</td>\n <td class="text-center">{{payment.date}}</td>\n <td class="text-center">{{payment.usageRate}}</td>\n <td class="text-center">${{payment.amount / 100}}</td>\n <td class="text-center">{{payment.currency}}</td>\n <td class="text-center"><a class="btn btn-info" ng-href="api/invoices/{{payment.invoiceNumber}}" target="_blank">invoice</a></td>\n </tr>\n </tbody>\n </table>\n </div>\n <p class="text-center" ng-show="!paymentRecords"><strong>No payments!</strong></p>\n </div>\n</div>',controller:"ControlPaymentsCtrl"}).state("controlPanel.billing",{url:"/billing",template:'<div class="billing">\n <h2 class="control-title">Billing Information</h2>\n <em class="api-key">API Key: {{userAccount.sharedKey}}</em>\n <div class="telemetry-block">\n <h3>Billing Cards</h3>\n\n <div class="form-success alert alert-success" ng-show="stripeBillingBackendSuccess">\n {{stripeBillingBackendSuccess}}\n </div>\n\n <div class="form-errors" ng-show="stripeBillingBackendErrors">\n <em class="text-warning">Oops! Please fix up these errors:</em>\n <ul class="form-errors-list">\n <li class="form-errors-list-item alert alert-warning" ng-repeat="error in stripeBillingBackendErrors">{{error}}</li>\n </ul>\n </div>\n\n <p>Card data and Payments are processed by <a href="https://stripe.com/" target="_blank">Stripe</a></p>\n\n <button class="btn btn-primary telemetry-button" ng-click="cardCreate()" ng-hide="billingRecords">Add Card</button>\n \n <button class="btn btn-info telemetry-button" ng-click="cardUpdate(billingRecords[0].id)" ng-show="billingRecords">Update Card</button>\n\n <button class="btn btn-danger telemetry-button" ng-click="cardDelete(billingRecords[0].id)" ng-show="billingRecords">Delete Card</button>\n\n <!-- Assuming only 1 card -->\n <div ng-show="billingRecords">\n <ul>\n <li>Card Number Hint: {{billingRecords[0].cardHint}}</li>\n <li>Active: {{billingRecords[0].active | booleanStyle:\'Active\':\'Inactive\'}}</li>\n <li>Status: {{billingRecords[0].validation}}</li>\n </ul>\n </div>\n\n <p class="text-center" ng-hide="billingRecords"><strong>No cards!</strong></p>\n\n </div>\n</div>',controller:"ControlBillingCtrl"}).state("controlPanel.account",{url:"/account",template:'<div class="account">\n <h2 class="control-title">Account Details</h2>\n <em class="api-key">API Key: {{userAccount.sharedKey}}</em>\n <div class="telemetry-block">\n <form class="form-horizontal" name="accountForm">\n <div \n class="form-group" \n ng-class="{\n \'has-error\': accountForm.username.$invali
233d && accountForm.username.$dirty\n }"\n >\n <label class="control-label col-sm-3" for="accountFormUsername">Username:</label>\n <div class="col-sm-8">\n <input id="accountFormUsername" class="form-control" type="text" name="username" ng-model="account.username" required ng-minlength="2" ng-maxlength="100" />\n <span class="help-block" ng-show="accountForm.username.$error.required">Required</span>\n <span class="help-block" ng-show="accountForm.username.$error.minlength">Username is too short</span>\n <span class="help-block" ng-show="accountForm.username.$error.maxlength">Username is too long</span>\n </div>\n </div>\n <div \n class="form-group" \n ng-class="{\n \'has-error\': accountForm.email.$invalid && accountForm.email.$dirty\n }"\n >\n <label class="control-label col-sm-3" for="accountFormEmail">Email:</label>\n <div class="col-sm-8">\n <input id="accountFormEmail" class="form-control" type="email" name="email" ng-model="account.email" required ng-minlength="2" ng-maxlength="100" />\n <span class="help-block">Remember to change your middleware credentials if updating email address</span>\n <span class="help-block" ng-show="accountForm.email.$error.required">Required</span>\n <span class="help-block" ng-show="accountForm.email.$error.maxlength">Email is too long</span>\n <span class="help-block" ng-show="accountForm.email.$error.email">Email is invalid</span>\n </div>\n </div>\n <div \n class="form-group" \n ng-class="{\n \'has-error\': accountForm.password.$invalid && accountForm.password.$dirty\n }"\n >\n <label class="control-label col-sm-3" for="accountFormPassword">Password:</label>\n <div class="col-sm-8">\n <input id="accountFormPassword" class="form-control" type="password" name="password" ng-model="account.password" ng-minlength="6" ng-maxlength="100" />\n <span class="help-block" ng-show="accountForm.password.$error.minlength">Password is too short</span>\n <span class="help-block" ng-show="accountForm.password.$error.maxlength">Password is too long</span>\n </div>\n </div>\n <div \n class="form-group" \n ng-class="{\n \'has-error\': accountForm.passwordConfirm.$invalid && accountForm.passwordConfirm.$dirty\n }"\n >\n <label class="control-label col-sm-3" for="accountFormPasswordConfirm">Password Confirm:</label>\n <div class="col-sm-8">\n <input id="accountFormPasswordConfirm" class="form-control" type="password" name="passwordConfirm" ng-model="account.passwordConfirm" ng-minlength="2" ng-maxlength="100" password-match="account.password" />\n <span class="help-block" ng-show="accountForm.passwordConfirm.$error.minlength">Password Confirm is too short</span>\n <span class="help-block" ng-show="accountForm.passwordConfirm.$error.maxlength">Password Confirm is too long</span>\n <span class="help-block" ng-show="accountForm.passwordConfirm.$error.passwordMatch">Password Confirm doesn\'t match Password</span>\n </div>\n </div>\n <div class="form-errors" ng-show="formErrors">\n <em class="text-warning">Oops! Please fix up these errors:</em>\n <ul class="form-errors-list">\n <li class="form-errors-list-item alert alert-warning" ng-repeat="error in formErrors">{{error}}</li>\n </ul>\n </div>\n <div class="form-success alert alert-success" ng-show="formSuccess">\n {{formSuccess}}\n </div>\n <div class="form-group">\n <div class="col-sm-offset-3 col-sm-8">\n <button class="btn btn-primary" ng-click="updateAccount(account)" ng-disabled="accountForm.$invali
233d || !accountForm.$dirty">Update Account</button>\n <button class="btn btn-danger" ng-click="regenerateApiKey()">Regenerate API Key</button>\n </div>\n </div>\n </form>\n </form>\n</div>',controller:"ControlAccountCtrl"}).state("terms",{url:"/terms",template:'<div class="terms panel panel_lego panel_transition_yellow_dark">\n <div class="container">\n <div class="panel-heading">\n <h2 class="panel-title">SnapSearch Terms of Service ("Agreement")</h2>\n </div>\n <div class="panel-body">\n <p>This Agreement was last modified on March 05, 2014.</p>\n\n <p>Please read these Terms of Service ("Agreement", "Terms of Service") carefully before using https://snapsearch.io ("the Site") operated by Golden World (au) pty ltd ("us", "we", or "our"). This Agreement sets forth the legally binding terms and conditions for your use of the Site at https://snapsearch.io.</p>\n\n <p>By accessing or using the Site in any manner, including, but not limited to, visiting or browsing the Site or contributing content or other materials to the Site, you agree to be bound by these Terms of Service. Capitalized terms are defined in this Agreement.</p>\n\n <p><strong>Intellectual Property</strong><br />The Site and its original content, features and functionality are owned by Golden World (au) pty ltd and are protected by international copyright, trademark, patent, trade secret and other intellectual property or proprietary rights laws.</p>\n\n <p><strong>Termination</strong><br />We may terminate your access to the Site, without cause or notice, which may result in the forfeiture and destruction of all information associated with you. All provisions of this Agreement that by their nature should survive termination shall survive termination, including, without limitation, ownership provisions, warranty disclaimers, indemnity, and limitations of liability.</p>\n\n <p><strong>Links To Other Sites</strong><br />Our Site may contain links to third-party sites that are not owned or c
233ontrolled by Golden World (au) pty ltd.</p>\n\n <p>Golden World (au) pty ltd has no control over, and assumes no responsibility for, the content, privacy policies, or practices of any third party sites or services. We strongly advise you to read the terms and conditions and privacy policy of any third-party site that you visit.</p>\n\n <p><strong>Governing Law</strong><br />This Agreement (and any further rules, polices, or guidelines incorporated by reference) shall be governed and construed in accordance with the laws of NSW, Australia, without giving effect to any principles of conflicts of law.</p>\n\n <p><strong>Changes To This Agreement</strong><br />We reserve the right, at our sole discretion, to modify or replace these Terms of Service by posting the updated terms on the Site. Your continued use of the Site after any such changes constitutes your acceptance of the new Terms of Service.</p>\n\n <p>Please review this Agreement periodically for changes. If you do not agree to any of this Agreement or any changes to this Agreement, do not use, access or continue to access the Site or discontinue any use of the Site immediately.</p>\n\n <p><strong>Contact Us</strong><br />If you have any questions about this Agreement, please contact us.</p>\n </div>\n </div>\n</div>', 234controller:"TermsCtrl"}).state("privacy",{url:"/privacy",template:'<div class="privacy panel panel_lego panel_transition_yellow_dark">\n <div class="container">\n <div class="panel-heading">\n <h2 class="panel-title">SnapSearch Privacy Policy</h2>\n </div>\n <div class="panel-body">\n <p>This Privacy Policy was last modified on March 05, 2014.</p>\n\n <p>Golden World (au) pty ltd ("us", "we", or "our") operates https://snapsearch.io (the "Site"). This page informs you of our policies regarding the collection, use and disclosure of Personal Information we receive from users of the Site.</p>\n\n <p>We use your Personal Information only for providing and improving the Site. By using the Site, you agree to the collection and use of information in accordance with this policy. Unless otherwise defined in this Privacy Policy, terms used in this Privacy Policy have the same meanings as in our Terms and Conditions, accessible at https://snapsearch.io.</p>\n\n <p><strong>Information Collection And Use</strong><br />While using our Site, we may ask you to provide us with certain personally identifiable information that can be used to contact or identify you. Personally identifiable information may include, but is not limited to, your name, email address, postal address and phone number ("Personal Information").</p>\n\n <p><strong>Log Data</strong><br />Like many site operators, we collect information that your browser sends whenever you visit our Site ("Log Data"). This Log Data may include information such as your computer\'s Internet Protocol ("IP") address, browser type, browser version, the pages of our Site that you visit, the time and date of your visit, the time spent on those pages and other statistics.</p>\n\n <p><strong>Cookies</strong><br />Cookies are files with small amount of data, which may include an anonymous unique identifier. Cookies are sent to your browser from a web site and stored on your computer\'s hard drive.</p>\n\n <p>Like many sites, we use "cookies" to collect information. You can instruct your browser to refuse all cookies or to indicate when a cookie is being sent. However, if you do not accept cookies, you may not be able to use some portions of our Site.</p>\n\n <p><strong>Security</strong><br />The security of your Personal Information is important to us, but remember that no method of transmission over the Internet, or method of electronic storage, is 100% secure. While we strive to use commercially acceptable means to protect your Personal Information, we cannot guarantee its absolute security.</p>\n\n <p><strong>Links To Other Sites</strong><br />Our Site may contain links to other sites that are not operated by us. If you click on a third party link, you will be directed to that third party\'s site. We strongly advise you to review the Privacy Policy of every site you visit.</p>\n \n <p>Golden World (au) pty ltd has no control over, and assumes no responsibility for, the content, privacy policies, or practices of any third party sites or services.</p>\n\n <p><strong>Changes To This Privacy Policy</strong><br />Golden World (au) pty ltd may update this Privacy Policy from time to time. We will notify you of any changes by posting the new Privacy Policy on the Site. You are advised to review this Privacy Policy periodically for any changes.</p>\n\n <p><strong>Contact Us</strong><br />If you have any questions about this Privacy Policy, please contact us.</p>\n </div>\n </div>\n</div>',controller:"PrivacyCtrl"}).state("confirmForgottenPassword",{url:"/confirm_forgotten_password?user_id&forgotten_code",template:'<div class="confirm-forgotten-password panel panel_lego panel_transition_yellow_dark">\n <div class="container">\n <div class="panel-heading">\n <h2 class="panel-title">Confirm Forgotten Password</h2>\n </div>\n <div class="panel-body row">\n <form class="confirm-forgotten-password-form" name="confirmForgottenPasswordForm" ng-show="showForm">\n <div \n class="form-group clearfix" \n ng-class="{\n \'has-error\': confirmForgottenPasswordForm.newPassword.$invalid && confirmForgottenPasswordForm.newPassword.$dirty\n }"\n >\n <label class="control-label col-sm-3" for="confirmForgottenPasswordFormNewPassword">New Password:</label>\n <div class="col-sm-9">\n <input \n id="confirmForgottenPasswordFormNewPassword" \n class="form-control" \n type="password" \n name="newPassword" \n ng-model="user.newPassword" \n required \n ng-minlength="6" \n ng-maxlength="100" \n />
234\n <span class="help-block" ng-show="confirmForgottenPasswordForm.newPassword.$error.required">Required</span>\n <span class="help-block" ng-show="confirmForgottenPasswordForm.newPassword.$error.minlength">New Password is too short</span>\n <span class="help-block" ng-show="confirmForgottenPasswordForm.newPassword.$error.maxlength">New Password is too long</span>\n </div>\n </div>\n <div \n class="form-group clearfix" \n ng-class="{\n \'has-error\': confirmForgottenPasswordForm.newPasswordConfirm.$invalid && confirmForgottenPasswordForm.newPasswordConfirm.$dirty\n }"\n >\n <label class="control-label col-sm-3" for="confirmForgottenPasswordFormNewPasswordConfirm">New Password Confirm:</label>\n <div class="col-sm-9">\n <input \n id="confirmForgottenPasswordFormNewPasswordConfirm" \n class="form-control" \n type="password" \n name="newPasswordConfirm" \n ng-model="user.newPasswordConfirm" \n required \n ng-minlength="6" \n ng-maxlength="100" \n password-match="user.newPassword" \n />\n <span class="help-block" ng-show="confirmForgottenPasswordForm.newPasswordConfirm.$error.required">Required</span>\n <span class="help-block" ng-show="confirmForgottenPasswordForm.newPasswordConfirm.$error.minlength">New Password Confirm is too short</span>\n <span class="help-block" ng-show="confirmForgottenPasswordForm.newPasswordConfirm.$error.maxlength">New Password Confirm is too long</span>\n <span class="help-block" ng-show="confirmForgottenPasswordForm.newPasswordConfirm.$error.passwordMatch">New Password Confirm doesn\'t match Password</span>\n </div>\n </div>\n <div class="form-errors" ng-show="formErrors">\n <em class="text-warning">Oops! Please fix up these errors:</em>\n <ul class="form-errors-list">\n <li class="form-errors-list-item alert alert-warning" ng-repeat="error in formErrors">{{error}}</li>\n </ul>\n </div>\n <div class="form-success alert alert-success" ng-show="formSuccess">\n {{formSuccess}}\n </div>\n <div class="form-group clearfix">\n <div class="col-sm-offset-3 col-sm-8">\n <button class="btn btn-primary" ng-click="changePassword(user)" ng-disabled="confirmForgottenPasswordForm.$invalid || !confirmForgottenPasswordForm.$dirty">Change Password</button>\n </div>\n </div>\n </form>\n <div ng-show="!showForm">\n <p class="text-center">This page is for changing passwords for users who have forgotten their passwords. You should probably go to the homepage!</p>\n </div>\n </div>\n </div>\n</div>',controller:"ConfirmForgottenPasswordCtrl"})}]},{fs:94}],7:[function(e,n,t){"use strict" 235var s=e("./Settings") 236n.exports=["$rootScope","$cookies","$http","$state","$stateParams","BaseUrlConst",function(e,n,t,a,r,o){e.$state=a,e.$stateParams=r,e.settings=s,e.baseUrl=o}]},{"./Settings":8}],8:[function(e,n,t){"use strict" 237n.exports={meta:{email:"[email protected]",price:.002,freeUsageCap:1e3,chatUrl:"https://www.hipchat.com/gz6yae0iP"},apiKeys:{stripePublicKey:"pk_live_nPKTP1tMr0P4AvS0xIsSNX4o",stripePublicTestKey:"pk_test_lTYkoe2RnQa2vkPtrDRYLjyP"}}},{}],9:[function(e,n,t){"use strict" 238angular.module("App.Controllers",[]).controller("ConfirmForgottenPasswordCtrl",e("./administrative/ConfirmForgottenPasswordCtrl")).controller("AppCtrl",e("./common/AppCtrl")).controller("HeaderCtrl",e("./common/HeaderCtrl")).controller("HomeCtrl",e("./home/HomeCtrl")).controller("CodeGroupCtrl",e("./home/CodeGroupCtrl")).controller("DemoCtrl",e("./home/DemoCtrl")).controller("DocumentationCtrl",e("./documentation/DocumentationCtrl")).controller("PricingCtrl",e("./pricing/PricingCtrl")).controller("CostCalculatorCtrl",e("./pricing/CostCalculatorCtrl")).controller("ControlPanelCtrl",e("./control_panel/ControlPanelCtrl")).controller("ControlCrawlingCtrl",e("./control_panel/ControlCrawlingCtrl")).controller("ControlCacheCtrl",e("./control_panel/ControlCacheCtrl")).controller("ControlPaymentsCtrl",e("./control_panel/ControlPaymentsCtrl")).controller("ControlBillingCtrl",e("./control_panel/ControlBillingCtrl")).controller("ControlAccountCtrl",e("./control_panel/ControlA
238ccountCtrl")).controller("TermsCtrl",e("./terms/TermsCtrl")).controller("PrivacyCtrl",e("./privacy/PrivacyCtrl")),n.exports=angular.module("App.Controllers")},{"./administrative/ConfirmForgottenPasswordCtrl":10,"./common/AppCtrl":11,"./common/HeaderCtrl":13,"./control_panel/ControlAccountCtrl":16,"./control_panel/ControlBillingCtrl":17,"./control_panel/ControlCacheCtrl":18,"./control_panel/ControlCrawlingCtrl":19,"./control_panel/ControlPanelCtrl":20,"./control_panel/ControlPaymentsCtrl":21,"./documentation/DocumentationCtrl":23,"./home/CodeGroupCtrl":24,"./home/DemoCtrl":25,"./home/HomeCtrl":26,"./pricing/CostCalculatorCtrl":27,"./pricing/PricingCtrl":28,"./privacy/PrivacyCtrl":29,"./terms/TermsCtrl":30}],10:[function(e,n,t){"use strict" 239n.exports=["$scope","$state","$stateParams","$timeout","Restangular",function(e,n,t,s,a){var r=t.user_id,o=t.forgotten_code 240e.showForm=!0,o&&r||(e.showForm=!1),e.user={},e.changePassword=function(t){e.formErrors=!1,e.formSuccess=!1,a.all("accounts/confirm_forgotten_password").post({userId:r,forgottenCode:o,newPassword:t.newPassword}).then(function(t){e.formSuccess="Successfully Changed Password.",s(function(){n.go("home")},1500)},function(n){"string"==typeof n.data.content?e.formErrors=[n.data.content]:e.formErrors=n.data.content})}}]},{}],11:[function(e,n,t){"use strict" 241e("fs") 242n.exports=["$scope","$modal","$state","BusyLoopServ","UserSystemServ",function(n,t,s,a,r){n.modal={},n.auth={},n.modal.signUp=function(){t.open({template:'<div class="modal-header">\n <h3>Sign Up</h3>\n</div>\n<div class="modal-body">\n <form name="signupForm">\n <div \n class="form-group clearfix" \n ng-class="{\n \'has-error\': signupForm.username.$invalid && signupForm.username.$dirty\n }"\n >\n <label class="control-label col-sm-2" for="signupFormUsername">Username:</label>\n <div class="col-sm-10">\n <input id="signupFormUsername" class="form-control" type="text" name="username" ng-model="user.username" required ng-minlength="2" ng-maxlength="100" />\n <span class="help-block" ng-show="signupForm.username.$error.required">Required</span>\n <span class="help-block" ng-show="signupForm.username.$error.minlength">Username is too short</span>\n <span class="help-block" ng-show="signupForm.username.$error.maxlength">Username is too long</span>\n </div>\n </div>\n <div \n class="form-group clearfix" \n ng-class="{\n \'has-error\': signupForm.email.$invalid && signupForm.email.$dirty\n }"\n >\n <label class="control-label col-sm-2" for="signupFormEmail">Email:</label>\n <div class="col-sm-10">\n <input id="signupFormEmail" class="form-control" type="email" name="email" ng-model="user.email" required ng-maxlength="100" />\n <span class="help-block" ng-show="signupForm.email.$error.required">Required</span>\n <span class="help-block" ng-show="signupForm.email.$error.maxlength">Email is too long</span>\n <span class="help-block" ng-show="signupForm.email.$error.email">Email is invalid</span>\n </div>\n </div>\n <div \n class="form-group clearfix"\n ng-class="{\n \'has-error\': signupForm.password.$invalid && signupForm.password.$dirty\n }"\n >\n <label class="control-label col-sm-2" for="signupFormPassword">Password:</label>\n <div class="col-sm-10">\n <input \n id="signupFormPassword" \n class="form-control" \n type="password" \n name="password" \n ng-model="user.password" \n required \n ng-minlength="6" \n ng-maxlength="100" \n />\n <span class="help-block" ng-show="signupForm.password.$error.required">Required</span>
242\n <span class="help-block" ng-show="signupForm.password.$error.minlength">Password is too short</span>\n <span class="help-block" ng-show="signupForm.password.$error.maxlength">Password is too long</span>\n </div>\n </div>\n <div \n class="form-group clearfix" \n ng-class="{\n \'has-error\': signupForm.passwordConfirm.$invalid && signupForm.passwordConfirm.$dirty\n }"\n >\n <label class="control-label col-sm-2" for="signupFormPasswordConfirm">Password Confirm:</label>\n <div class="col-sm-10">\n <input \n id="signupFormPasswordConfirm" \n class="form-control" \n type="password" \n name="passwordConfirm" \n ng-model="user.passwordConfirm" \n required \n ng-minlength="6" \n ng-maxlength="100" \n password-match="user.password" \n />\n <span class="help-block" ng-show="signupForm.passwordConfirm.$error.required">Required</span>\n <span class="help-block" ng-show="signupForm.passwordConfirm.$error.minlength">Password Confirm is too short</span>\n <span class="help-block" ng-show="signupForm.passwordConfirm.$error.maxlength">Password Confirm is too long</span>\n <span class="help-block" ng-show="signupForm.passwordConfirm.$error.passwordMatch">Password Confirm doesn\'t match Password</span>\n </div>\n </div>\n <div class="form-group clearfix">\n <label class="control-label col-sm-2" for="signupFormCode">Code:</label>\n <div class="col-sm-4">\n <input id="signupFormCode" class="form-control" type="text" name="code" ng-model="user.code" />\n <span class="help-block">Optional Promo Code</span>\n </div>\n </div>\n </form>\n <p>By clicking "Sign Up", you agree to our <a href="terms" ng-click="cancel()">terms of service</a> and <a href="privacy" ng-click="cancel()">privacy policy</a>.</p>\n <div class="form-errors" ng-show="formErrors">\n <em class="text-warning">Oops! Please fix up these errors:</em>\n <ul class="form-errors-list">\n <li class="form-errors-list-item alert alert-warning" ng-repeat="error in formErrors">{{error}}</li>\n </ul>\n </div>\n <div class="form-success alert alert-success" ng-show="formSuccess">\n {{formSuccess}}\n </div>\n</div>\n<div class="modal-footer">\n <button class="btn btn-primary" ng-click="signup(user)" ng-disabled="signupForm.$invalid">Sign Up</button>\n <button class="btn btn-warning" ng-click="cancel()">Close</button>\n</div>',controller:e("./SignUpModalCtrl"),windowClass:"signup-modal form-modal"}).result.then(function(){s.go("controlPanel")})},n.modal.logIn=function(){t.open({template:'<div class="modal-header">\n <h3>Log In</h3>\n</div>\n<div class="modal-body">\n <form class="form-horizontal" name="loginForm">\n <div \n class="form-group clearfix" \n ng-class="{\n \'has-error\': loginForm.email.$invalid && loginForm.email.$dirty\n }"\n >\n <label class="control-label col-sm-2" for="loginFormEmail">Email:</label>\n <div class="col-sm-10">\n <input id="loginFormEmail" class="form-control" type="email" name="email" ng-model="user.email" required ng-maxlength="100" />\n <span class="help-block" ng-show="loginForm.email.$error.required">Required</span>\n <span class="help-block" ng-show="loginForm.email.$error.maxlength">Email is too long</span>\n <span class="help-block" ng-show="loginForm.email.$error.email">Email is invalid</span>\n </div>\n </div>\n <div \n class="form-group clearfix"\n ng-class="{\n \'has-error\': loginForm.password.$invalid && loginForm.password.$dirty\n }"\n >\n <label class="control-label col-sm-2" for="loginFormPassword">Password:</label>\n <div class="col-sm-10">\n <input \n id="loginFormPassword" \n class="form-control" \n type="password" \n name="password" \n ng-model="user.password" \n required \n ng-minlength="6" \n ng-maxlength="100" \n />
242\n <span class="help-block" ng-show="loginForm.password.$error.required">Required</span>\n <span class="help-block" ng-show="loginForm.password.$error.minlength">Password is too short</span>\n <span class="help-block" ng-show="loginForm.password.$error.maxlength">Password is too long</span>\n </div>\n </div>\n <div class="form-group clearfix">\n <div class="col-sm-offset-2 col-sm-10">\n <div class="checkbox">\n <label>\n <input type="checkbox" name="autologin" ng-model="user.autologin"> Remember Me\n </label>\n </div>\n </div>\n </div>\n </form>\n <div class="form-errors" ng-show="formErrors">\n <em class="text-warning">Oops! Please fix up these errors:</em>\n <ul class="form-errors-list">\n <li class="form-errors-list-item alert alert-warning" ng-repeat="error in formErrors">{{error}}</li>\n </ul>\n </div>\n <div class="form-success alert alert-success" ng-show="formSuccess">\n {{formSuccess}}\n </div>\n</div>\n<div class="modal-footer">\n <button class="btn btn-primary" ng-click="login(user)" ng-disabled="loginForm.$invalid">Log In</button>\n <button class="btn btn-info" ng-click="forgottenPassword()">Forgot Password?</button>\n <button class="btn btn-warning" ng-click="cancel()">Close</button>\n</div>',controller:e("./LogInModalCtrl"),windowClass:"login-modal form-modal"}).result.then(function(){s.go("controlPanel")})},n.auth.logOut=function(){r.logoutSession().then(function(){s.go("home")})}}]},{"./LogInModalCtrl":14,"./SignUpModalCtrl":15,fs:94}],12:[function(e,n,t){"use strict" 243n.exports=["$scope","$modalInstance","$timeout","Restangular",function(e,n,t,s){e.user={},e.forgot=function(a){e.formErrors=!1,e.formSuccess=!1,s.all("accounts/forgotten_password/"+a.email).customGET().then(function(s){e.formSuccess="Sent password reset request email. Please check your email and spam filters.",t(function(){n.close()},1500)},function(n){"string"==typeof n.data.content?e.formErrors=[n.data.content]:e.formErrors=n.data.content})},e.cancel=function(){n.dismiss()}}]},{}],13:[function(e,n,t){"use strict" 244n.exports=["$scope",function(e){}]},{}],14:[function(e,n,t){"use strict" 245e("fs") 246n.exports=["$scope","$modalInstance","$timeout","$modal","UserSystemServ",function(n,t,s,a,r){n.user={},n.login=function(e){n.formErrors=!1,n.formSuccess=!1,r.loginSession(e).then(function(){n.formSuccess="Successfully logged in.",s(function(){t.close()},1500)},function(e){400===e.status||401===e.status?n.formErrors=e.data.content:n.formErrors=["System error, try again or contact us."]})},n.cancel=function(){t.dismiss()},n.forgottenPassword=function(){t.dismiss(),a.open({template:'<div class="modal-header">\n <h3>Forgotten Password</h3>\n</div>\n<div class="modal-body">\n <form class="form-horizontal" name="forgottenPasswordForm">\n <div \n class="form-group clearfix" \n ng-class="{\n \'has-error\': forgottenPasswordForm.email.$invalid && forgottenPasswordForm.email.$dirty\n }"\n >\n <label class="control-label col-sm-2" for="forgottenPasswordFormEmail">Email:</label>\n <div class="col-sm-10">\n <input id="forgottenPasswordFormEmail" class="form-control" type="email" name="email" ng-model="user.email" required ng-maxlength="100" />\n <span class="help-block" ng-show="forgottenPasswordForm.email.$error.required">Required</span>\n <span class="help-block" ng-show="forgottenPasswordForm.email.$error.maxlength">Email is too long</span>\n <span class="help-block" ng-show="forgottenPasswordForm.email.$error.email">Email is invalid</span>\n </div>\n </div>\n </form>\n <div class="form-errors" ng-show="formErrors">\n <em class="text-warning">Oops! Please fix up these errors:</em>\n <ul class="form-errors-list">\n <li class="form-errors-list-item alert alert-warning" ng-repeat="error in formErrors">{{error}}</li>\n </ul>\n </div>\n <div class="form-success alert alert-success" ng-show="formSuccess">\n {{formSuccess}}\n </div>\n</div>\n<div class="modal-footer">\n <button class="btn btn-primary" ng-click="forgot(user)" ng-disabled="forgottenPasswordForm.$invali
246d">Reset Password</button>\n <button class="btn btn-warning" ng-click="cancel()">Close</button>\n</div>',controller:e("./ForgottenPasswordModalCtrl"),windowClass:"forgotten-password-modal form-modal"})}}]},{"./ForgottenPasswordModalCtrl":12,fs:94}],15:[function(e,n,t){"use strict" 247n.exports=["$scope","$modalInstance","$timeout","UserSystemServ",function(e,n,t,s){e.user={},e.signup=function(a){e.formErrors=!1,e.formSuccess=!1,s.registerAccount(a).then(function(s){e.formSuccess="Successfully registered. Automatically logging in.",t(function(){n.close()},1500)},function(n){400===n.status?e.formErrors=n.data.content:e.formErrors=["System error, try again or contact us."]})},e.cancel=function(){n.dismiss()}}]},{}],16:[function(e,n,t){"use strict" 248n.exports=["$scope","UserSystemServ","Restangular",function(e,n,t){var s 249e.regenerateApiKey=function(){t.all("accounts/regenerate_api_key/"+s.id).customPOST().then(function(e){n.getAccount(s.id)})},e.updateAccount=function(t){e.formErrors=!1,e.formSuccess=!1,n.patchAccount(t).then(function(n){e.formSuccess="Updated Account"},function(n){400===n.status?e.formErrors=n.data.content:e.formErrors=["System error, try again or contact us."]})} 250var a=function(n){s=n,e.account=n} 251n.getUserState()&&Object.keys(n.getUserData()).length>0?a(n.getUserData()):e.$watch(n.getUserData,function(e,n){angular.equals(e,n)||Object.keys(e).length>0&&a(e)})}]},{}],17:[function(e,n,t){"use strict" 252var s=(e("fs"),e("../../Settings")) 253n.exports=["$scope","UserSystemServ","ExternalScriptLoaderServ","Restangular",function(e,n,t,a){var r,o=function(){e.billingRecords=[],a.all("billing").customGET("",{user:r.id}).then(function(n){n.content=n.content.map(function(e){var n=parseInt(e.cardInvalid,10) 254return n?e.validation="Invalid: "+e.invalidReason:e.validation="Valid",e}),e.billingRecords=n.content})},i=function(n,t){return function(s){e.stripeBillingBackendErrors=!1,e.stripeBillingBackendSuccess=!1,"create"===n?a.all("billing").post({stripeToken:s.id,stripeEmail:s.email,userId:r.id}).then(function(n){e.stripeBillingBackendSuccess="Created Customer",o()},function(n){e.stripeBillingBackendErrors=n.data.content}):"update"===n&&a.one("billing",t).customPUT({stripeToken:s.id,stripeEmail:s.email}).then(function(n){e.stripeBillingBackendSuccess="Updated Customer",o()},function(n){e.stripeBillingBackendErrors=n.data.content})}},l=function(){t.importScript("https://checkout.stripe.com/checkout.js","stripeScript",function(){var n=StripeCheckout.configure({key:s.apiKeys.stripePublicKey,locale:"auto",currency:"aud",panelLabel:"Subscribe",name:"SnapSearch",description:"Add a Card via Stripe",allowRememberMe:!1,email:r.email}) 255e.cardCreate=function(){n.open({token:i("create",null)})},e.cardUpdate=function(e){n.open({token:i("update",e)})}})},c=function(e){r=e,o(),l()} 256e.cardDelete=function(n){a.one("billing",n).remove().then(function(n){e.stripeBillingBackendSuccess="Deleted Customer",o()},function(n){e.stripeBillingBackendSuccess="Already Deleted Customer",o()})},n.getUserState()&&Object.keys(n.getUserData()).length>0?c(n.getUserData()):e.$watch(n.getUserData,function(e,n){angular.equals(e,n)||Object.keys(e).length>0&&c(e)})}]},{"../../Settings":8,fs:94}],18:[function(e,n,t){"use strict" 257e("fs") 258n.exports=["$scope","$modal","UserSystemServ","Restangular",function(n,t,s,a){var r,o=function(){a.all("cache").customGET("",{user:r.id,transform:"count"}).then(function(e){n.snapshotCount=e.content},function(e){n.snapshotCount=0})},i=0,l=40,c=function(){a.all("cache").customGET("",{user:r.id,offset:i,limit:l}).then(function(e){n.snapshots=e.content},function(e){n.snapshots=!1})} 259n.forwardCache=function(){i-=l,c()},n.backwardCache=function(){i+=l,c()},n.viewSnapshot=function(n){t.open({template:'<div class="modal-header">\n <h3>Snapshot #{{snapshotId}}</h3>\n</div>\n<div class="modal-body">\n <syntax class="snapshot-code" ng-show="snapshot" syntax-language="json" syntax-code="{{snapshot}}"></syntax>\n <pre class="snapshot-code" ng-show="!snapshot"><code>//loading snapshot data...</code></pre>\n</div>\n<div class="modal-footer">\n <button class="btn btn-warning" ng-click="cancel()">Close</button>\n</div>',controller:e("./SnapshotModalCtrl"),windowClass:"snapshot-modal form-modal",resolve:{snapshotId:function(){return n}}})},n.deleteSnapshot=function(e,t){a.one("cache",e).remove().then(function(e){n.snapshotCount=n.snapshotCount-1,n.snapshots.splice(t,1)},function(e){c(),o()})},n.primeCache=function(e){n.formErrors=!1,n.formSuccess=!1 260var t={} 261_.isEmpty(e.parameters)||(t=JSON.parse(e.parameters)),(!angular.isObject(t)||angular.isArray(t))&&(t={}),t.url=e.url,a.all("v1/robot").post(t).then(function(e){c(),o(),n.formSuccess="Done!"},function(e){400===e.status?n.formErrors=e.data.content:401===e.status||429===e.status?n.formErrors=[e.data.content]:n.formErrors=["System error, try again or c
261ontact us."]})} 262var d=function(e){r=e,o(),c()} 263s.getUserState()&&Object.keys(s.getUserData()).length>0?d(s.getUserData()):n.$watch(s.getUserData,function(e,n){angular.equals(e,n)||Object.keys(e).length>0&&d(e)})}]},{"./SnapshotModalCtrl":22,fs:94}],19:[function(e,n,t){"use strict" 264var s=e("../../Settings") 265n.exports=["$scope","$q","UserSystemServ","CalculateServ","Restangular","MomentServ",function(e,n,t,a,r,o){var i=function(n){e.apiLimitModifier={},e.apiLimitModifier.quantity=n.apiLimit,r.all("billing").customGET("",{user:n.id,active:!0,valid:!0}).then(function(){e.hasBillingDetails=!0},function(){e.hasBillingDetails=!1}),e.$watch(function(e){return e.apiLimitModifier.quantity},function(t){t||(t=0),t=parseInt(t) 266var r=s.meta.price*(t-n.apiFreeLimit) 2670>r&&(r=0),r=a.round(r,2),e.price=r}),e.changeLimit=function(n){e.formErrors=!1,e.formSuccess=!1,t.patchAccount({apiLimit:n.quantity}).then(function(n){e.formSuccess="Successfully updated API Usage Cap!"},function(n){"string"==typeof n.data.content?e.formErrors=[n.data.content]:e.formErrors=n.data.content})}} 268e.xAxisDateFormatFunction=function(){return function(e){return d3.time.format("%Y-%m-%d")(new Date(e))}},e.xPieFunction=function(){return function(e){return e.key}},e.yPieFunction=function(){return function(e){return e.quantity}},e.totalDomainDistinctionRequestsQuantity=0,e.totalDomainDistinctionUsagesQuantity=0,e.domainDistinctionRequestsToolTip=function(){return function(n,t,s,a){return"<h3>"+n+"</h3><p>"+t+" Requests - "+Math.round(t/e.totalDomainDistinctionRequestsQuantity*100)+"%</p>"}},e.domainDistinctionUsagesToolTip=function(){return function(n,t,s,a){return"<h3>"+n+"</h3><p>"+t+" Usages - "+Math.round(t/e.totalDomainDistinctionUsagesQuantity*100)+"%</p>"}} 269var l=function(t){e.logGraphDate={beginning:o().subtract(o.duration(t.chargeInterval)),ending:o()} 270var s=function(){var s=e.logGraphDate.beginning.format("YYYY-MM-DD HH:mm:ss"),a=[],i=[],l=[],c=r.all("log").customGET("",{user:t.id,date:s,type:"cached",transform:"by_date"}),d=r.all("log").customGET("",{user:t.id,date:s,type:"uncached",transform:"by_date"}) 271n.all([c,d]).then(function(n){n[0].content.forEach(function(e,n){var t=o(e.date,"YYYY-MM-DD HH:mm:ss") 272a.push(t),i.push([t,e.quantity])}),n[1].content.forEach(function(e,n){var t=o(e.date,"YYYY-MM-DD HH:mm:ss") 273a.push(t),l.push([t,e.quantity])}) 274var s=a.reduce(function(e,n){return n.unix()<e.unix()?n:e}),r=a.reduce(function(e,n){return n.unix()>e.unix()?n:e}) 275e.usageHistoryData=[{key:"Usage Cap",values:[[s,t.apiLimit],[r,t.apiLimit]]},{key:"Requests",values:i},{key:"Usages",values:l}]},function(n){e.usageHistoryData=[]})} 276e.forwardGraph=function(){e.logGraphDate.beginning=e.logGraphDate.beginning.add(o.duration(t.chargeInterval)),s()},e.backwardGraph=function(){e.logGraphDate.beginning=e.logGraphDate.beginning.subtract(o.duration(t.chargeInterval)),s()},s()},c=function(n){var t="P30D" 277e.domainDistinctionDate={beginning:o().subtract(o.duration(t)),ending:o()} 278var s=function(){var t=e.domainDistinctionDate.beginning.format("YYYY-MM-DD HH:mm:ss") 279e.domainDistinctionDataRequests=[],r.all("log").customGET("",{user:n.id,date:t,transform:"by_domain"}).then(function(n){e.totalDomainDistinctionRequestsQuantity=0 280var t=[] 281angular.forEach(n.content,function(n,s){e.totalDomainDistinctionRequestsQuantity=e.totalDomainDistinctionRequestsQuantity+n,t.push({key:s,quantity:n})}),e.domainDistinctionDataRequests=t}),e.domainDistinctionDataUsages=[],r.all("log").customGET("",{user:n.id,date:t,type:"uncached",transform:"by_domain"}).then(function(n){e.totalDomainDistinctionUsagesQuantity=0 282var t=[] 283angular.forEach(n.content,function(n,s){e.totalDomainDistinctionUsagesQuantity=e.totalDomainDistinctionUsagesQuantity+n,t.push({key:s,quantity:n})}),e.domainDistinctionDataUsages=t})} 284e.forwardDomains=function(){e.domainDistinctionDate.beginning=e.domainDistinctionDate.beginning.add(o.duration(t)),s()},e.backwardDomains=function(){e.domainDistinctionDate.beginning=e.domainDistinctionDate.beginning.subtract(o.duration(t)),s()},s()}
284,d=function(n){var t=0,s=10,a=function(){r.all("log").customGET("",{user:n.id,offset:t,limit:s}).then(function(n){e.logs=n.content},function(n){e.logs=!1})} 285e.forwardLogs=function(){t-=s,a()},e.backwardLogs=function(){t+=s,a()},a()},u=function(e){i(e),l(e),c(e),d(e)} 286t.getUserState()&&Object.keys(t.getUserData()).length>0?u(t.getUserData()):e.$watch(t.getUserData,function(e,n){angular.equals(e,n)||Object.keys(e).length>0&&u(e)})}]},{"../../Settings":8}],20:[function(e,n,t){"use strict" 287n.exports=["$scope","BusyLoopServ","UserSystemServ","MomentServ","CalculateServ",function(e,n,t,s,a){var r=n(function(){if(t.getUserState()){var e=t.getUserData() 288t.getAccount(e.id)}},6e4) 289e.$on("$destroy",function(){r()}),e.$watch(t.getUserData,function(n){if(Object.keys(n).length>0){var t=angular.copy(n) 290e.userAccount=t,e.userAccount.apiUsagePercentage=a.round(n.apiUsage/n.apiLimit*100,"2"),e.chargeCycle={beginning:s(n.chargeDate,"YYYY-MM-DD HH:mm:ss").subtract(s.duration(n.chargeInterval)),ending:s(n.chargeDate,"YYYY-MM-DD HH:mm:ss")}}},!0)}]},{}],21:[function(e,n,t){"use strict" 291var s=e("../../Settings") 292n.exports=["$scope","UserSystemServ","Restangular","CalculateServ",function(e,n,t,a){var r,o=function(){var n=100*s.meta.price,t=n*(r.apiUsage-r.apiFreeLimit) 293t+=r.apiLeftOverCharge,0>t&&(t=0),t/=100,e.billThisMonth=a.round(t,2)},i=0,l=50,c=function(){t.all("payments").customGET("",{user:r.id,offset:i,limit:l}).then(function(n){e.paymentRecords=n.content})} 294e.forwardPayments=function(){i-=l,c()},e.backwardPayments=function(){i+=l,c()} 295var d=function(e){r=e,o(),c()} 296n.getUserState()&&Object.keys(n.getUserData()).length>0?d(n.getUserData()):e.$watch(n.getUserData,function(e,n){angular.equals(e,n)||Object.keys(e).length>0&&d(e)})}]},{"../../Settings":8}],22:[function(e,n,t){"use strict" 297n.exports=["$scope","$modalInstance","snapshotId","Restangular",function(e,n,t,s){e.snapshotId=t,s.one("cache",t).get().then(function(n){e.snapshot=JSON.stringify(n.content,void 0,2)},function(n){e.snapshot="//cannot find snapshot"}),e.cancel=function(){n.dismiss()}}]},{}],23:[function(e,n,t){"use strict" 298n.exports=["$scope",function(e){}]},{}],24:[function(e,n,t){"use strict" 299n.exports=["$scope",function(e){e.activeCode="php",e.changeCode=function(n){e.activeCode=n}}]},{}],25:[function(e,n,t){"use strict" 300n.exports=["$scope","Restangular",function(e,n){e.demoUrls=["http://your-site.com/","https://snapsearch.io/","http://dreamitapp.com/","http://angularjs.org/","http://hn.premii.com/"],e.requestingDemoService="never",e.submit=function(t){e.formErrors=!1,e.formSuccess=!1,e.requestingDemoService="started",n.all("demo").customGET("",{url:t.url}).then(function(n){e.formSuccess=!0,e.demoServiceResponse=n.content},function(n){400===n.status?e.formErrors=n.data.content:500===n.status&&(e.formErrors=["Failed to scrape URL. Please try again later."])})["finally"](function(){e.requestingDemoService="finished"})}}]},{}],26:[function(e,n,t){"use strict" 301n.exports=["$scope",function(e){}]},{}],27:[function(e,n,t){"use strict" 302var s=e("../../Settings") 303n.exports=["$scope","CalculateServ",function(e,n){var t=s.meta.price,a=s.meta.freeUsageCap 304e.cost={},e.$watch(function(e){return e.cost.quantity},function(s){s||(s=0),s=parseInt(s) 305var r=t*(s-a) 3060>r&&(r=0),r=n.round(r,2),e.price=r})}]},{"../../Settings":8}],28:[function(e,n,t){"use strict" 307var s=e("../../Settings") 308n.exports=["$scope",function(e){e.pricePerUsage=s.meta.price,e.freeUsageCap=s.meta.freeUsageCap}]},{"../../Settings":8}],29:[function(e,n,t){"use strict" 309n.exports=["$scope",function(e){}]},{}],30:[function(e,n,t){"use strict" 310n.exports=["$scope",function(e){}]},{}],31:[function(e,n,t){"use strict" 311angular.module("App.Directives",[]),n.exports=angular.module("App.Directives").directive("equaliseHeights",e("./equaliseHeights")).directive("anchor",e("./anchor")).directive("scroll",e("./scroll")).directive("passwordMatch",e("./passwordMatch")).directive("affix",e("./affix")).directive("minValid",e("./minValid")).directive("maxValid",e("./maxValid")).directive("jsonChecker",e("./jsonChecker")).directive("placeholderSwitch",e("./
311placeholderSwitch"))},{"./affix":32,"./anchor":33,"./equaliseHeights":34,"./jsonChecker":35,"./maxValid":36,"./minValid":37,"./passwordMatch":38,"./placeholderSwitch":39,"./scroll":40}],32:[function(e,n,t){"use strict" 312n.exports=["$window","$document",function(e,n){return{link:function(t,s,a){var r,o=angular.element(e),i=angular.element(n),l=s.parent(),c=function(){var e,n=t.$eval(a.affixTop)||0,l=t.$eval(a.affixBottom)||0 313o.prop("pageYOffset")<=n?e="affix-top":o.prop("pageYOffset")+s.outerHeight()<i.height()-l?e="affix":o.prop("pageYOffset")+s.outerHeight()>=i.height()-l&&(e="affix-bottom"),r!==e&&(r=e,s.removeClass("affix affix-top affix-bottom").addClass(e),"affix-bottom"===e?s.offset({top:i.height()-l-s.outerHeight()}):s.css("top",""))},d=function(){s.css("width",l.width())},u=_.throttle(c,50),p=_.throttle(d,100),h=function(){u(),p()} 314o.bind("scroll",u),o.bind("resize",h),l.resize(h),c(),d(),t.$on("$destroy",function(){o.unbind("scroll",u),o.unbind("resize",h),l.removeResize(h)})}}}]},{}],33:[function(e,n,t){"use strict" 315var s=e("./..\\..\\..\\components\\imagesloaded\\imagesloaded.js") 316n.exports=["$location","$anchorScroll","$timeout",function(e,n,t){return{link:function(a,r,o){var i=o.anchor||o.id||o.name,l=o.anchorDelay,c=o.anchorEvent,d=!0 317r.attr("id",i) 318var u=function(e){i&&e&&i===e&&(l&&d?t(function(){s(r,function(){n()})},l):s(r,function(){n()}),d=!1)} 319c&&a.$on(c,function(){u(e.hash())}),a.$watch(function(){return e.hash()},function(e){u(e)})}}}]},{"./..\\..\\..\\components\\imagesloaded\\imagesloaded.js":3}],34:[function(e,n,t){"use strict" 320var s=e("./..\\..\\..\\components\\imagesloaded\\imagesloaded.js") 321n.exports=[function(){return{link:function(e,n,t){var a=angular.element(t.equaliseHeights),r=function(){var e=0 322a.height("auto").each(function(){e=angular.element(this).height()>e?angular.element(this).height():e}).height(e)} 323s(a,function(){r()}),angular.element(window).resize(r)}}}]},{"./..\\..\\..\\components\\imagesloaded\\imagesloaded.js":3}],35:[function(e,n,t){"use strict" 324n.exports=[function(){return{restrict:"A",require:"ngModel",link:function(e,n,t,s){var a=function(e){return angular.isUndefined(e)||""===e||null===e},r=function(e){try{return a(e)||JSON.parse(e),s.$setValidity("jsonChecker",!0),e}catch(n){return void s.$setValidity("jsonChecker",!1)}} 325s.$parsers.push(r),s.$formatters.push(r)}}}]},{}],36:[function(e,n,t){"use strict" 326n.exports=[function(){return{restrict:"A",require:"ngModel",link:function(e,n,t,s){var a=function(e){return angular.isUndefined(e)||""===e||null===e||e!==e} 327e.$watch(t.maxValid,function(){s.$setViewValue(s.$viewValue)}) 328var r=function(n){var r=e.$eval(t.maxValid)||1/0 329return!a(n)&&n>r?void s.$setValidity("maxValid",!1):(s.$setValidity("maxValid",!0),n)} 330s.$parsers.push(r),s.$formatters.push(r)}}}]},{}],37:[function(e,n,t){"use strict" 331n.exports=[function(){return{restrict:"A",require:"ngModel",link:function(e,n,t,s){var a=function(e){return angular.isUndefined(e)||""===e||null===e||e!==e} 332e.$watch(t.minValid,function(){s.$setViewValue(s.$viewValue)}) 333var r=function(n){var r=e.$eval(t.minValid)||0 334return!a(n)&&r>n?void s.$setValidity("minValid",!1):(s.$setValidity("minValid",!0),n)} 335s.$parsers.push(r),s.$formatters.push(r)}}}]},{}],38:[function(e,n,t){"use strict" 336n.exports=[function(){return{restrict:"A",require:"ngModel",scope:!1,link:function(e,n,t,s){e.$watch(t.passwordMatch,function(e){s.$setValidity("passwordMatch",e===s.$viewValue)}),s.$parsers.push(function(n){var a=n===e.$eval(t.passwordMatch) 337return s.$setValidity("passwordMatch",a),a?n:void 0})}}}]},{}],39:[function(e,n,t){"use strict" 338n.exports=["$interval",function(e){return{link:function(n,t,s){var a,r 339s.$observe("placeholderDelay",function(e){a=e?e:1e3}),n.$watch(s.placeholderSwitch,function(n){if(r&&e.cancel(r),n){var t=0 340s.$set("placeholder",n[t]),r=e(function(){t++,t>=n.length&&(t=0),s.$set("placeholder",n[t])},a)}})}}}]},{}],40:[function(e,n,t){"use strict" 341n.exports=["$anchorScroll","$location",function(e,n){return{link:function(t,s,a){var r=function(){n.hash(a.scroll),e(),t.$apply()} 342s.on("click",r)}}}]},{}],41:[function(e,n,t){"use strict" 343angular.module("App.Elements",[]),n.exports=angular.module("App.Elements").directive("syntax",e("./syntaxHighlight")).directive("chatTab",e("./chatTab"))},{"./chatTab":42,"./syntaxHighlight":78}],42:[function(e,n,t){"use strict" 344var s=(e("fs"),e("insert-css")),a=".chatTab {\n position: fixed;\n right: 1%;\n bottom: 0;\n width: 180px;\n}\n\n.chatTab button {\n color: #FFF;\n margin: 0 auto;\n display: block;\n padding: 6px;\n background: #428bca;\n border-top-left-radius: 6px;\n border-top-right-radius: 6px;\n border-left: 1px solid #357ebd;\n border-right: 1px solid #357ebd;\n border-top: 1px solid #357ebd;\n border-bottom: none;\n width: 100%;\n}\n\n.chatTab button:hover {\n background-color: #2D6CA2;\n border-color: #2B669A;\n}\n\n.chatTab-content {\n background: #FFF;\n width: auto;\n height: auto;\n padding: 10px;\n border-left: 1px solid #dcdcdc;\n border-right: 1px solid #dcdcdc;\n}\n\n.chatTab-content.crushed {\n width: 0;\n height: 0;\n display: none;\n}\n\n.chatTab-link {\n display: block;\n margin-bottom: 5px;\n text-align: center;\n}",r='<div class="chatTab">\n <button ng-click="openCloseChatTab()">Chat with the Developers</button>\n <div class="chatTab-content crushed">\n <a class="chatTab-link" ng-href="{{chatUrl}}" target="_blank">Access WebChat</a>\n <p>Generally online between 1200 - 2000 UTC + 10/11, leave a message and we will receive it.</p>\n </div>\n</div>' 345s(a),n.exports=[function(){return{scope:{chatUrl:"@"},restrict:"AE",template:r,replace:!0,link:function(e,n,t){e.openCloseChatTab=function(){n.children(".chatTab-content").toggleClass("crushed")}}}}]},{fs:94,"insert-css":95}],43:[function(e,n,t){var s=function(){function e(e){return e.replace(/&/gm,"&").replace(/</gm,"<").replace(/>/gm,">")}
345function n(e){return e.nodeName.toLowerCase()}function t(e,n){var t=e&&e.exec(n) 346return t&&0==t.index}function s(e){var n=(e.className+" "+(e.parentNode?e.parentNode.className:"")).split(/\s+/) 347return n=n.map(function(e){return e.replace(/^lang(uage)?-/,"")}),n.filter(function(e){return b(e)||"no-highlight"==e})[0]}function a(e,n){var t={} 348for(var s in e)t[s]=e[s] 349if(n)for(var s in n)t[s]=n[s] 350return t}function r(e){var t=[] 351return function s(e,a){for(var r=e.firstChild;r;r=r.nextSibling)3==r.nodeType?a+=r.nodeValue.length:"br"==n(r)?a+=1:1==r.nodeType&&(t.push({event:"start",offset:a,node:r}),a=s(r,a),t.push({event:"stop",offset:a,node:r})) 352return a}(e,0),t}function o(t,s,a){function r(){return t.length&&s.length?t[0].offset!=s[0].offset?t[0].offset<s[0].offset?t:s:"start"==s[0].event?t:s:t.length?t:s}function o(t){function s(n){return" "+n.nodeName+'="'+e(n.value)+'"'}d+="<"+n(t)+Array.prototype.map.call(t.attributes,s).join("")+">"}function i(e){d+="</"+n(e)+">"}function l(e){("start"==e.event?o:i)(e.node)}for(var c=0,d="",u=[];t.length||s.length;){var p=r() 353if(d+=e(a.substr(c,p[0].offset-c)),c=p[0].offset,p==t){u.reverse().forEach(i) 354do l(p.splice(0,1)[0]),p=r() 355while(p==t&&p.length&&p[0].offset==c) 356u.reverse().forEach(o)}else"start"==p[0].event?u.push(p[0].node):u.pop(),l(p.splice(0,1)[0])}return d+e(a.substr(c))}function i(e){function n(e){return e&&e.source||e}function t(t,s){return RegExp(n(t),"m"+(e.case_insensitive?"i":"")+(s?"g":""))}function s(r,o){function i(n,t){e.case_insensitive&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|") 357l[t[0]]=[n,t[1]?Number(t[1]):1]})}if(!r.compiled){if(r.compiled=!0,r.keywords=r.keywords||r.beginKeywords,r.keywords){var l={} 358"string"==typeof r.keywords?i("keyword",r.keywords):Object.keys(r.keywords).forEac
358h(function(e){i(e,r.keywords[e])}),r.keywords=l}r.lexemesRe=t(r.lexemes||/\b[A-Za-z0-9_]+\b/,!0),o&&(r.beginKeywords&&(r.begin="\\b("+r.beginKeywords.split(" ").join("|")+")\\b"),r.begin||(r.begin=/\B|\b/),r.beginRe=t(r.begin),r.end||r.endsWithParent||(r.end=/\B|\b/),r.end&&(r.endRe=t(r.end)),r.terminator_end=n(r.end)||"",r.endsWithParent&&o.terminator_end&&(r.terminator_end+=(r.end?"|":"")+o.terminator_end)),r.illegal&&(r.illegalRe=t(r.illegal)),void 0===r.relevance&&(r.relevance=1),r.contains||(r.contains=[]) 359var c=[] 360r.contains.forEach(function(e){e.variants?e.variants.forEach(function(n){c.push(a(e,n))}):c.push("self"==e?r:e)}),r.contains=c,r.contains.forEach(function(e){s(e,r)}),r.starts&&s(r.starts,o) 361var d=r.contains.map(function(e){return e.beginKeywords?"\\.?("+e.begin+")\\.?":e.begin}).concat([r.terminator_end,r.illegal]).map(n).filter(Boolean) 362r.terminators=d.length?t(d.join("|"),!0):{exec:function(e){return null}},r.continuation={}}}s(e)}function l(n,s,a,r){function o(e,n){for(var s=0;s<n.contains.length;s++)if(t(n.contains[s].beginRe,e))return n.contains[s]}function d(e,n){return t(e.endRe,n)?e:e.endsWithParent?d(e.parent,n):void 0}function u(e,n){return!a&&t(n.illegalRe,e)}function p(e,n){var t=S.case_insensitive?n[0].toLowerCase():n[0] 363return e.keywords.hasOwnProperty(t)&&e.keywords[t]}function h(e,n,t,s){var a=s?"":v.classPrefix,r='<span class="'+a,o=t?"":"</span>" 364return r+=e+'">',r+n+o}function g(){if(!k.keywords)return e(C) 365var n="",t=0 366k.lexemesRe.lastIndex=0 367for(var s=k.lexemesRe.exec(C);s;){n+=e(C.substr(t,s.index-t)) 368var a=p(k,s) 369a?(N+=a[1],n+=h(a[0],e(s[0]))):n+=e(s[0]),t=k.lexemesRe.lastIndex,s=k.lexemesRe.exec(C)}return n+e(C.substr(t))}function m(){if(k.subLanguage&&!y[k.subLanguage])return e(C) 370var n=k.subLanguage?l(k.subLanguage,C,!0,k.continuation.top):c(C) 371return k.relevance>0&&(N+=n.relevance),"continuous"==k.subLanguageMode&&(k.continuation.top=n.top),h(n.language,n.value,!1,!0)}function f(){return void 0!==k.subLanguage?m():g()}function w(n,t){var s=n.className?h(n.className,"",!0):"" 372n.returnBegin?(E+=s,C=""):n.excludeBegin?(E+=e(t)+s,C=""):(E+=s,C=t),k=Object.create(n,{parent:{value:k}})}function _(n,t){if(C+=n,void 0===t)return E+=f(),0 373var s=o(t,k) 374if(s)return E+=f(),w(s,t),s.returnBegin?0:t.length 375var a=d(k,t) 376if(a){var r=k 377r.returnEnd||r.excludeEnd||(C+=t),E+=f() 378do k.className&&(E+="</span>"),N+=k.relevance,k=k.parent 379while(k!=a.parent) 380return r.excludeEnd&&(E+=e(t)),C="",a.starts&&w(a.starts,""),r.returnEnd?0:t.length}if(u(t,k))throw new Error('Illegal lexeme "'+t+'" for mode "'+(k.className||"<unnamed>")+'"') 381return C+=t,t.length||1}var S=b(n) 382if(!S)throw new Error('Unknown language: "'+n+'"') 383i(S) 384for(var k=r||S,E="",x=k;x!=S;x=x.parent)x.className&&(E+=h(x.className,E,!0)) 385var C="",N=0 386try{for(var D,M,T=0;;){if(k.terminators.lastIndex=T,D=k.terminators.exec(s),!D)break 387M=_(s.substr(T,D.index-T),D[0]),T=D.index+M}_(s.substr(T)) 388for(var x=k;x.parent;x=x.parent)x.className&&(E+="</span>") 389return{relevance:N,value:E,language:n,top:k}}catch(O){if(-1!=O.message.indexOf("Illegal"))return{relevance:0,value:e(s)} 390throw O}}function c(n,t){t=t||v.languages||Object.keys(y) 391var s={relevance:0,value:e(n)},a=s 392return t.forEach(function(e){if(b(e)){var t=l(e,n,!1) 393t.language=e,t.relevance>a.relevance&&(a=t),t.relevance>s.relevance&&(a=s,s=t)}}),a.language&&(s.second_best=a),s}function d(e){return v.tabReplace&&(e=e.replace(/^((<[^>]+>|\t)+)/gm,function(e,n,t,s){return n.replace(/\t/g,v.tabReplace)})),v.useBR&&(e=e.replace(/\n/g,"<br>")),e}function u(e){var n=v.useBR?e.innerHTML.replace(/\n/g,"").replace(/<br>|<br [^>]*>/g,"\n").replace(/<[^>]*>/g,""):e.textContent,t=s(e) 394if("no-highlight"!=t){var a=t?l(t,n,!0):c(n),i=r(e) 395if(i.length){var u=document.createElementNS("http://www.w3.org/1999/xhtml","pre") 396u.innerHTML=a.value,a.value=o(i,r(u),n)}a.value=d(a.value),e.innerHTML=a.value,e.className+=" hljs "+(!t&&a.language||""),e.result={language:a.language,re:a.relevance},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.relevance})}}function p(e){v=a(v,e)}function h(){if(!h.called){h.called=!0 397var e=document.querySelectorAll("pre code") 398Array.prototype.forEach.call(e,u)}}function g(){addEventListener("DOMContentLoaded",h,!1),addEventListener("load",h,!1)}function m(e,n){var t=y[e]=n(this)
399t.aliases&&t.aliases.forEach(function(n){w[n]=e})}function f(){return Object.keys(y)}function b(e){return y[e]||y[w[e]]}var v={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},y={},w={} 400this.highlight=l,this.highlightAuto=c,this.fixMarkup=d,this.highlightBlock=u,this.configure=p,this.initHighlighting=h,this.initHighlightingOnLoad=g,this.registerLanguage=m,this.listLanguages=f,this.getLanguage=b,this.inherit=a,this.IDENT_RE="[a-zA-Z][a-zA-Z0-9_]*",this.UNDERSCORE_IDENT_RE="[a-zA-Z_][a-zA-Z0-9_]*",this.NUMBER_RE="\\b\\d+(\\.\\d+)?",this.C_NUMBER_RE="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",this.BINARY_NUMBER_RE="\\b(0b[01]+)",this.RE_STARTERS_RE="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",this.BACKSLASH_ESCAPE={begin:"\\\\[\\s\\S]",relevance:0},this.APOS_STRING_MODE={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[this.BACKSLASH_ESCAPE]},this.QUOTE_STRING_MODE={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[this.BACKSLASH_ESCAPE]},this.PHRASAL_WORDS_MODE={begin:/\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such)\b/},this.C_LINE_COMMENT_MODE={className:"comment",begin:"//",end:"$",contains:[this.PHRASAL_WORDS_MODE]},this.C_BLOCK_COMMENT_MODE={className:"comment",begin:"/\\*",end:"\\*/",contains:[this.PHRASAL_WORDS_MODE]},this.HASH_COMMENT_MODE={className:"comment",begin:"#",end:"$",contains:[this.PHRASAL_WORDS_MODE]},this.NUMBER_MODE={className:"number",begin:this.NUMBER_RE,relevance:0},this.C_NUMBER_MODE={className:"number",begin:this.C_NUMBER_RE,relevance:0},this.BINARY_NUMBER_MODE={className:"number",begin:this.BINARY_NUMBER_RE,relevance:0},this.CSS_NUMBER_MODE={className:"number",begin:this.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},this.REGEXP_MODE={className:"regexp",begin:/\//,end:/\/[gim]*/,illegal:/\n/,contains:[this.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[this.BACKSLASH_ESCAPE]}]},this.TITLE_MODE={className:"title",begin:this.IDENT_RE,relevance:0},this.UNDERSCORE_TITLE_MODE={className:"title",begin:this.UNDERSCORE_IDENT_RE,relevance:0}} 401n.exports=s},{}],44:[function(e,n,t){var s=e("./highlight"),a=new s 402a.registerLanguage("apache",e("./languages/apache.js")),a.registerLanguage("bash",e("./languages/bash.js")),a.registerLanguage("clojure",e("./languages/clojure.js")),a.registerLanguage("coffeescript",e("./languages/coffeescript.js")),a.registerLanguage("cpp",e("./languages/cpp.js")),a.registerLanguage("cs",e("./languages/cs.js")),a.registerLanguage("css",e("./languages/css.js")),a.registerLanguage("diff",e("./languages/diff.js")),a.registerLanguage("erlang",e("./languages/erlang.js")),a.registerLanguage("go",e("./languages/go.js")),a.registerLanguage("ruby",e("./languages/ruby.js")),a.registerLanguage("haml",e("./languages/haml.js")),a.registerLanguage("haskell",e("./languages/haskell.js")),a.registerLanguage("http",e("./languages/http.js")),a.registerLanguage("ini",e("./languages/ini.js")),a.registerLanguage("java",e("./languages/java.js")),a.registerLanguage("javascript",e("./languages/javascript.js")),a.registerLanguage("json",e("./languages/json.js")),a.registerLanguage("lisp",e("./languages/lisp.js")),a.registerLanguage("lua",e("./languages/lua.js")),a.registerLanguage("makefile",e("./languages/makefile.js")),a.registerLanguage("xml",e("./languages/xml.js")),a.registerLanguage("markdown",e("./languages/markdown.js")),a.registerLanguage("nginx",e("./languages/nginx.js")),a.registerLanguage("objectivec",e("./languages/objectivec.js")),a.registerLanguage("perl",e("./languages/perl.js")),a.registerLanguage("php",e("./languages/php.js")),a.registerLanguage("python",e("./languages/python.js")),a.registerLanguage("r",e("./languages/r.js")),a.registerLanguage("rust",e("./languages/rust.js")),a.registerLanguage("scala",e("./languages/scala.js")),a.registerLanguage("scss",e("./languages/scss.js")),a.registerLanguage("sql",e("./languages/sql.js")),n.exports=a},{"./highlight":43,"./languages/apache.js":45,"./languages/bash.js":46,"./languages/clojure.js":47,"./languages/coffeescript.js":48,"./languages/cpp.js":49,"./languages/cs.js":50,"./languages/css.js":51,"./languages/diff.js":52,"./languages/erlang.js":53,"./languages/go.js":54,"./languages/haml.js":55,"./languages/haskell.js":56,"./languages/http.js":57,"./languages/ini.js":58,"./languages/java.js":59,"./languages/javascript.js":60,"./languages/json.js":61,"./languages/lisp.js":62,"./languages/lua.js":63,"./languages/makefile.js":64,"./languages/markdown.js":65,"./languages/nginx.js":66,"./languages/objectivec.js":67,"./languages/perl.js":68,"./languages/php.js":69,"./languages/python.js":70,"./languages/r.js":71,"./languages/ruby.js":72,"./languages/rust.js":73,"./languages/scala.js":74,"./languages/scss.js":75,"./languages/sql.js":76,"./languages/xml.js":77}],45:[function(e,n,t){n.exports=function(e){var n={className:"number",begin:"[\\$%]\\d+"} 403return{aliases:["apacheconf"],case_insensitive:!0,contains:[e.HASH_COMMENT_MODE,{className:"tag",begin:"</?",end:">"},{className:"keyword",begin:/\w+/,relevance:0,keywords:{common:"order deny allow setenv rewriterule rewriteengine rewritec
403ond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{end:/$/,relevance:0,keywords:{literal:"on off all"},contains:[{className:"sqbracket",begin:"\\s\\[",end:"\\]$"},{className:"cbracket",begin:"[\\$%]\\{",end:"\\}",contains:["self",n]},n,e.QUOTE_STRING_MODE]}}],illegal:/\S/}}},{}],46:[function(e,n,t){n.exports=function(e){var n={className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{(.*?)\}/}]},t={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,n,{className:"variable",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]}]},s={className:"string",begin:/'/,end:/'/} 404return{aliases:["sh","zsh"],lexemes:/-?[a-z\.]+/,keywords:{keyword:"if then else elif fi for break continue while in do done exit return set declare case esac export exec",literal:"true false",built_in:"printf echo read cd pwd pushd popd dirs let eval unset typeset readonly getopts source shopt caller type hash bind help sudo",operator:"-ne -eq -lt -gt -f -d -e -s -l -a"},contains:[{className:"shebang",begin:/^#![^\n]+sh\s*$/,relevance:10},{className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},e.HASH_COMMENT_MODE,e.NUMBER_MODE,t,s,n]}}},{}],47:[function(e,n,t){n.exports=function(e){var n={built_in:"def cond apply if-not if-let if not not= = < < > <= <= >= == + / * - rem quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last drop-while while intern condp case reduced cycle split-at split-with repeat replicate iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter monitor-exit defmacro defn defn- macroexpand macroexpand-1 for dosync and or when when-not when-let comp juxt partial sequence memoize constantly complement identity assert peek pop doto proxy defstruct first rest cons defprotocol cast coll deftype defrecord last butlast sigs reify second ffirst fnext nfirst nnext defmulti defmethod meta with-meta ns in-ns create-ns import refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize"},t="[a-zA-Z_0-9\\!\\.\\?\\-\\+\\*\\/\\<\\=\\>\\&\\#\\$';]+",s="[\\s:\\(\\{]+\\d+(\\.\\d+)?",a={className:"number",begin:s,relevance:0},r=e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),o={className:"comment",begin:";",end:"$",relevance:0},i={className:"collection",begin:"[\\[\\{]",end:"[\\]\\}]"},l={className:"comment",begin:"\\^"+t},c={className:"comment",begin:"\\^\\{",end:"\\}"},d={className:"attribute",begin:"[:]"+t},u={className:"list",begin:"\\(",end:"\\)"},p={endsWithParent:!0,keywords:{literal:"true false nil"},relevance:0}
404,h={keywords:n,lexemes:t,className:"title",begin:t,starts:p} 405return u.contains=[{className:"comment",begin:"comment"},h,p],p.contains=[u,r,l,c,o,d,i,a],i.contains=[u,r,l,o,d,i,a],{aliases:["clj"],illegal:/\S/,contains:[o,u,{className:"prompt",begin:/^=> /,starts:{end:/\n\n|\Z/}}]}}},{}],48:[function(e,n,t){n.exports=function(e){var n={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",reserved:"case default function var void with const let enum export import native __hasProp __extends __slice __bind __indexOf",built_in:"npm require console print module global window document"},t="[A-Za-z$_][0-9A-Za-z$_]*",s=e.inherit(e.TITLE_MODE,{begin:t}),a={className:"subst",begin:/#\{/,end:/}/,keywords:n},r=[e.BINARY_NUMBER_MODE,e.inherit(e.C_NUMBER_MODE,{starts:{end:"(\\s*/)?",relevance:0}}),{className:"string",variants:[{begin:/'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE]},{begin:/'/,end:/'/,contains:[e.BACKSLASH_ESCAPE]},{begin:/"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,a]},{begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,a]}]},{className:"regexp",variants:[{begin:"///",end:"///",contains:[a,e.HASH_COMMENT_MODE]},{begin:"//[gim]*",relevance:0},{begin:"/\\S(\\\\.|[^\\n])*?/[gim]*(?=\\s|\\W|$)"}]},{className:"property",begin:"@"+t},{begin:"`",end:"`",excludeBegin:!0,excludeEnd:!0,subLanguage:"javascript"}] 406return a.contains=r,{aliases:["coffee","cson","iced"],keywords:n,contains:r.concat([{className:"comment",begin:"###",end:"###"},e.HASH_COMMENT_MODE,{className:"function",begin:"("+t+"\\s*=\\s*)?(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[s,{className:"params",begin:"\\(",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:n,contains:["self"].concat(r)}]}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[s]},s]},{className:"attribute",begin:t+":",end:":",returnBegin:!0,excludeEnd:!0,relevance:0}])}}},{}],49:[function(e,n,t){n.exports=function(e){var n={keyword:"false int float while private char catch export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long throw volatile static protected bool template mutable if public friend do return goto auto void enum else break new extern using true class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue wchar_t inline delete alignof char16_t char32_t constexpr decltype noexcept nullptr static_assert thread_local restrict _Bool complex _Complex _Imaginary",built_in:"std string cin cout cerr clog stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf"} 407return{aliases:["c","h","c++","h++"],keywords:n,illegal:"</",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"'\\\\?.",end:"'",illegal:"."},{className:"number",begin:"\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)"},e.C_NUMBER_MODE,{className:"preprocessor",begin:"#",end:"$",keywords:"if else elif endif define undef warning error line pragma",contains:[{begin:'include\\s*[<"]',end:'[>"]',keywords:"include",illegal:"\\n"},e.C_LINE_COMMENT_MODE]},{className:"stl_container",begin:"\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",end:">",keywords:n,relevance:10,contains:["self"]},{begin:e.IDENT_RE+"::"}]}}},{}],50:[function(e,n,t){n.exports=function(e){var n="abstract as base bool break byte case catch char checked const continue decimal default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long new null object operator out override params private protected public readonly ref return sbyte sealed short sizeof stackalloc static string struct switch this throw true try typeof uint ulong unchecked unsafe ushort using virtual volatile void while async await ascending descending from get group into join let orderby partial select set value var where yield" 408return{keywords:n,illegal:/::/,contains:[{className:"comment",begin:"///",end:"$",returnBegin:!0,contains:[{className:"xmlDocTag",variants:[{begin:"///",relevance:0},{begin:"<!--|-->"},{begin:"</?",end:">"}]}]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"preprocessor",begin:"#",end:"$",keywords:"if else elif endif define undef warning error line region endregion pragma checksum"},{className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,{beginKeywords:"protected public private internal",end:/[{;=]/,keywords:n,contains:[{beginKeywords:"class namespace interface",starts:{contains:[e.TITLE_MODE]}},{begin:e.IDENT_RE+"\\s*\\(",returnBegin:!0,contains:[e.TITLE_MODE]}]}]}}},{}],51:[function(e,n,t){n.exports=function(e){var n="[a-zA-Z-][a-zA-Z0-9_-]*",t={className:"function",begin:n+"\\(",returnBegin:!0,excludeEnd:!0,end:"\\("} 409return{case_insensitive:!0,illegal:"[=/|']",contains:[e.C_BLOCK_COMMENT_MODE,{className:"id",begin:"\\#[A-Za-z0-9_-]+"},{className:"class",begin:"\\.[A-Za-z0-9_-]+",relevance:0}
409,{className:"attr_selector",begin:"\\[",end:"\\]",illegal:"$"},{className:"pseudo",begin:":(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\\\"\\']+"},{className:"at_rule",begin:"@(font-face|page)",lexemes:"[a-z-]+",keywords:"font-face page"},{className:"at_rule",begin:"@",end:"[{;]",contains:[{className:"keyword",begin:/\S+/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,contains:[t,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},{className:"tag",begin:n,relevance:0},{className:"rules",begin:"{",end:"}",illegal:"[^\\s]",relevance:0,contains:[e.C_BLOCK_COMMENT_MODE,{className:"rule",begin:"[^\\s]",returnBegin:!0,end:";",endsWithParent:!0,contains:[{className:"attribute",begin:"[A-Z\\_\\.\\-]+",end:":",excludeEnd:!0,illegal:"[^\\s]",starts:{className:"value",endsWithParent:!0,excludeEnd:!0,contains:[t,e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{className:"hexcolor",begin:"#[0-9A-Fa-f]+"},{className:"important",begin:"!important"}]}}]}]}]}}},{}],52:[function(e,n,t){n.exports=function(e){return{aliases:["patch"],contains:[{className:"chunk",relevance:10,variants:[{begin:/^\@\@ +\-\d+,\d+ +\+\d+,\d+ +\@\@$/},{begin:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{begin:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{className:"header",variants:[{begin:/Index: /,end:/$/},{begin:/=====/,end:/=====$/},{begin:/^\-\-\-/,end:/$/},{begin:/^\*{3} /,end:/$/},{begin:/^\+\+\+/,end:/$/},{begin:/\*{5}/,end:/\*{5}$/}]},{className:"addition",begin:"^\\+",end:"$"},{className:"deletion",begin:"^\\-",end:"$"},{className:"change",begin:"^\\!",end:"$"}]}}},{}],53:[function(e,n,t){n.exports=function(e){var n="[a-z'][a-zA-Z0-9_']*",t="("+n+":"+n+"|"+n+")",s={keyword:"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun let not of orelse|10 query receive rem try when xor",literal:"false true"},a={className:"comment",begin:"%",end:"$",relevance:0},r={className:"number",begin:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",relevance:0},o={begin:"fun\\s+"+n+"/\\d+"},i={begin:t+"\\(",end:"\\)",returnBegin:!0,relevance:0,contains:[{className:"function_name",begin:t,relevance:0},{begin:"\\(",end:"\\)",endsWithParent:!0,returnEnd:!0,relevance:0}]},l={className:"tuple",begin:"{",end:"}",relevance:0},c={className:"variable",begin:"\\b_([A-Z][A-Za-z0-9_]*)?",relevance:0},d={className:"variable",begin:"[A-Z][a-zA-Z0-9_]*",relevance:0},u={begin:"#"+e.UNDERSCORE_IDENT_RE,relevance:0,returnBegin:!0,contains:[{className:"record_name",begin:"#"+e.UNDERSCORE_IDENT_RE,relevance:0},{begin:"{",end:"}",relevance:0}]},p={beginKeywords:"fun receive if try case",end:"end",keywords:s} 410p.contains=[a,o,e.inherit(e.APOS_STRING_MODE,{className:""}),p,i,e.QUOTE_STRING_MODE,r,l,c,d,u] 411var h=[a,o,p,i,e.QUOTE_STRING_MODE,r,l,c,d,u] 412i.contains[1].contains=h,l.contains=h,u.contains[1].contains=h 413var g={className:"params",begin:"\\(",end:"\\)",contains:h} 414return{aliases:["erl"],keywords:s,illegal:"(</|\\*=|\\+=|-=|/=|/\\*|\\*/|\\(\\*|\\*\\))",contains:[{className:"function",begin:"^"+n+"\\s*\\(",end:"->",returnBegin:!0,illegal:"\\(|#|//|/\\*|\\\\|:|;",contains:[g,e.inherit(e.TITLE_MODE,{begin:n})],starts:{end:";|\\.",keywords:s,contains:h}},a,{className:"pp",begin:"^-",end:"\\.",relevance:0,excludeEnd:!0,returnBegin:!0,lexemes:"-"+e.IDENT_RE,keywords:"-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn -import -include -include_lib -compile -define -else -endif -file -behaviour -behavior",contains:[g]},r,e.QUOTE_STRING_MODE,u,c,d,l]}}},{}],54:[function(e,n,t){n.exports=function(e){var n={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer",constant:"true false iota nil",typename:"bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",built_in:"append cap close complex copy imag len make new panic print println real recover delete"} 415return{aliases:["golang"],keywords:n,illegal:"</",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'"},{className:"string",begin:"`",end:"`"},{className:"number",begin:"[^a-zA-Z_0-9](\\-|\\+)?\\d+(\\.\\d+|\\/\\d+)?((d|e|f|l|s)(\\+|\\-)?\\d+)?",relevance:0},e.C_NUMBER_MODE]}}},{}],55:[function(e,n,t){n.exports=function(e){return{case_insensitive:!0,contains:[{className:"doctype",begin:"^!!!( (5|1\\.1|Strict|Frameset|Basic|Mobile|RDFa|XML\\b.*))?$",relevance:10},{className:"comment",begin:"^\\s*(!=#|=#|-#|/).*$",relevance:0},{begin:"^\\s*(-|=|!=)(?!#)",starts:{end:"\\n",subLanguage:"ruby"}},{className:"tag",begin:"^\\s*%",contains:[{className:"title",begin:"\\w+"},{className:"value",begin:"[#\\.]\\w+"},{begin:"{\\s*",end:"\\s*}",excludeEnd:!0,contains:[{begin:":\\w+\\s*=>",end:",\\s+",returnBegin:!0,endsWithParent:!0,contains:[{className:"symbol",begin:":\\w+"},{className:"string",begin:'"',end:'"'},{className:"string",begin:"'",end:"'"},{begin:"\\w+",relevance:0}]}]},{begin:"\\(\\s*",end:"\\s*\\)",excludeEnd:!0,contains:[{begin:"\\w+\\s*=",end:"\\s+",returnBegin:!0,endsWithParent:!0,contains:[{className:"attribute",begin:"\\w+",relevance:0}
415,{className:"string",begin:'"',end:'"'},{className:"string",begin:"'",end:"'"},{begin:"\\w+",relevance:0}]}]}]},{className:"bullet",begin:"^\\s*[=~]\\s*",relevance:0},{begin:"#{",starts:{end:"}",subLanguage:"ruby"}}]}}},{}],56:[function(e,n,t){n.exports=function(e){var n={className:"comment",variants:[{begin:"--",end:"$"},{begin:"{-",end:"-}",contains:["self"]}]},t={className:"pragma",begin:"{-#",end:"#-}"},s={className:"preprocessor",begin:"^#",end:"$"},a={className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},r={className:"container",begin:"\\(",end:"\\)",illegal:'"',contains:[t,n,s,{className:"type",begin:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},e.inherit(e.TITLE_MODE,{begin:"[_a-z][\\w']*"})]},o={className:"container",begin:"{",end:"}",contains:r.contains} 416return{aliases:["hs"],keywords:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",contains:[{className:"module",begin:"\\bmodule\\b",end:"where",keywords:"module where",contains:[r,n],illegal:"\\W\\.|;"},{className:"import",begin:"\\bimport\\b",end:"$",keywords:"import|0 qualified as hiding",contains:[r,n],illegal:"\\W\\.|;"},{className:"class",begin:"^(\\s*)?(class|instance)\\b",end:"where",keywords:"class family instance where",contains:[a,r,n]},{className:"typedef",begin:"\\b(data|(new)?type)\\b",end:"$",keywords:"data family type newtype deriving",contains:[t,n,a,r,o]},{className:"default",beginKeywords:"default",end:"$",contains:[a,r,n]},{className:"infix",beginKeywords:"infix infixl infixr",end:"$",contains:[e.C_NUMBER_MODE,n]},{className:"foreign",begin:"\\bforeign\\b",end:"$",keywords:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",contains:[a,e.QUOTE_STRING_MODE,n]},{className:"shebang",begin:"#!\\/usr\\/bin\\/env runhaskell",end:"$"},t,n,s,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,a,e.inherit(e.TITLE_MODE,{begin:"^[_a-z][\\w']*"}),{begin:"->|<-"}]}}},{}],57:[function(e,n,t){n.exports=function(e){return{illegal:"\\S",contains:[{className:"status",begin:"^HTTP/[0-9\\.]+",end:"$",contains:[{className:"number",begin:"\\b\\d{3}\\b"}]},{className:"request",begin:"^[A-Z]+ (.*?) HTTP/[0-9\\.]+$",returnBegin:!0,end:"$",contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0}]},{className:"attribute",begin:"^\\w",end:": ",excludeEnd:!0,illegal:"\\n|\\s|=",starts:{className:"string",end:"$"}},{begin:"\\n\\n",starts:{subLanguage:"",endsWithParent:!0}}]}}},{}],58:[function(e,n,t){n.exports=function(e){return{case_insensitive:!0,illegal:/\S/,contains:[{className:"comment",begin:";",end:"$"},{className:"title",begin:"^\\[",end:"\\]"},{className:"setting",begin:"^[a-z0-9\\[\\]_-]+[ \\t]*=[ \\t]*",end:"$",contains:[{className:"value",endsWithParent:!0,keywords:"on off true false yes no",contains:[e.QUOTE_STRING_MODE,e.NUMBER_MODE],relevance:0}]}]}}},{}],59:[function(e,n,t){n.exports=function(e){var n="false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws" 417return{aliases:["jsp"],keywords:n,illegal:/<\//,contains:[{className:"javadoc",begin:"/\\*\\*",end:"\\*/",contains:[{className:"javadoctag",begin:"(^|\\s)@[A-Za-z]+"}],relevance:10},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{beginKeywords:"protected public private",end:/[{;=]/,keywords:n,contains:[{className:"class",beginKeywords:"class interface",endsWithParent:!0,excludeEnd:!0,illegal:/[:"<>]/,contains:[{beginKeywords:"extends implements",relevance:10},e.UNDERSCORE_TITLE_MODE]},{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,contains:[e.UNDERSCORE_TITLE_MODE]}]},e.C_NUMBER_MODE,{className:"annotation",begin:"@[A-Za-z]+"}]}}},{}],60:[function(e,n,t){n.exports=function(e){return{aliases:["js"],keywords:{keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this
417switch continue typeof delete let yield const class",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document"},contains:[{className:"pi",begin:/^\s*('|")use strict('|")/,relevance:10},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.REGEXP_MODE,{begin:/</,end:/>;/,relevance:0,subLanguage:"xml"}],relevance:0},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/}),{className:"params",begin:/\(/,end:/\)/,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],illegal:/["'\(]/}],illegal:/\[|%/},{begin:/\$[(.]/},{begin:"\\."+e.IDENT_RE,relevance:0}]}}},{}],61:[function(e,n,t){n.exports=function(e){var n={literal:"true false null"},t=[e.QUOTE_STRING_MODE,e.C_NUMBER_MODE],s={className:"value",end:",",endsWithParent:!0,excludeEnd:!0,contains:t,keywords:n},a={begin:"{",end:"}",contains:[{className:"attribute",begin:'\\s*"',end:'"\\s*:\\s*',excludeBegin:!0,excludeEnd:!0,contains:[e.BACKSLASH_ESCAPE],illegal:"\\n",starts:s}],illegal:"\\S"},r={begin:"\\[",end:"\\]",contains:[e.inherit(s,{className:null})],illegal:"\\S"} 418return t.splice(t.length,0,a,r),{contains:t,keywords:n,illegal:"\\S"}}},{}],62:[function(e,n,t){n.exports=function(e){var n="[a-zA-Z_\\-\\+\\*\\/\\<\\=\\>\\&\\#][a-zA-Z0-9_\\-\\+\\*\\/\\<\\=\\>\\&\\#!]*",t="(\\-|\\+)?\\d+(\\.\\d+|\\/\\d+)?((d|e|f|l|s)(\\+|\\-)?\\d+)?",s={className:"shebang",begin:"^#!",end:"$"},a={className:"literal",begin:"\\b(t{1}|nil)\\b"},r={className:"number",variants:[{begin:t,relevance:0},{begin:"#b[0-1]+(/[0-1]+)?"},{begin:"#o[0-7]+(/[0-7]+)?"},{begin:"#x[0-9a-f]+(/[0-9a-f]+)?"},{begin:"#c\\("+t+" +"+t,end:"\\)"}]},o=e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),i={className:"comment",begin:";",end:"$"},l={className:"variable",begin:"\\*",end:"\\*"},c={className:"keyword",begin:"[:&]"+n},d={begin:"\\(",end:"\\)",contains:["self",a,o,r]},u={className:"quoted",contains:[r,o,l,c,d],variants:[{begin:"['`]\\(",end:"\\)"},{begin:"\\(quote ",end:"\\)",keywords:{title:"quote"}}]},p={className:"list",begin:"\\(",end:"\\)"},h={endsWithParent:!0,relevance:0} 419return p.contains=[{className:"title",begin:n},h],h.contains=[u,p,a,r,o,i,l,c],{illegal:/\S/,contains:[r,s,a,o,i,u,p]}}},{}],63:[function(e,n,t){n.exports=function(e){var n="\\[=*\\[",t="\\]=*\\]",s={begin:n,end:t,contains:["self"]},a=[{className:"comment",begin:"--(?!"+n+")",end:"$"},{className:"comment",begin:"--"+n,end:t,contains:[s],relevance:10}] 420return{lexemes:e.UNDERSCORE_IDENT_RE,keywords:{keyword:"and break do else elseif end false for if in local nil not or repeat return then true until while",built_in:"_G _VERSION assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall coroutine debug io math os package string table"},contains:a.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[e.inherit(e.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:a}].concat(a)},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:n,end:t,contains:[s],relevance:10}])}}},{}],64:[function(e,n,t){n.exports=function(e){var n={className:"variable",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]} 421return{aliases:["mk","mak"],contains:[e.HASH_COMMENT_MODE,{begin:/^\w+\s*\W*=/,returnBegin:!0,relevance:0,starts:{className:"constant",end:/\s*\W*=/,excludeEnd:!0,starts:{end:/$/,relevance:0,contains:[n]}}},{className:"title",begin:/^[\w]+:\s*$/},{className:"phony",begin:/^\.PHONY:/,end:/$/,keywords:".PHONY",lexemes:/[\.\w]+/},{begin:/^\t+/,end:/$/,contains:[e.QUOTE_STRING_MODE,n]}]}}},{}],65:[function(e,n,t){n.exports=function(e){return{aliases:["md","mkdown","mkd"],contains:[{className:"header",variants:[{begin:"^#{1,6}",end:"$"},{begin:"^.+?\\n[=-]{2,}$"}]},{begin:"<",end:">",subLanguage:"xml",relevance:0}
421,{className:"bullet",begin:"^([*+-]|(\\d+\\.))\\s+"},{className:"strong",begin:"[*_]{2}.+?[*_]{2}"},{className:"emphasis",variants:[{begin:"\\*.+?\\*"},{begin:"_.+?_",relevance:0}]},{className:"blockquote",begin:"^>\\s+",end:"$"},{className:"code",variants:[{begin:"`.+?`"},{begin:"^( {4}| )",end:"$",relevance:0}]},{className:"horizontal_rule",begin:"^[-\\*]{3,}",end:"$"},{begin:"\\[.+?\\][\\(\\[].+?[\\)\\]]",returnBegin:!0,contains:[{className:"link_label",begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0,relevance:0},{className:"link_url",begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"link_reference",begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}],relevance:10},{begin:"^\\[.+\\]:",end:"$",returnBegin:!0,contains:[{className:"link_reference",begin:"\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0},{className:"link_url",begin:"\\s",end:"$"}]}]}}},{}],66:[function(e,n,t){n.exports=function(e){var n={className:"variable",variants:[{begin:/\$\d+/},{begin:/\$\{/,end:/}/},{begin:"[\\$\\@]"+e.UNDERSCORE_IDENT_RE}]},t={endsWithParent:!0,lexemes:"[a-z/_]+",keywords:{built_in:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},relevance:0,illegal:"=>",contains:[e.HASH_COMMENT_MODE,{className:"string",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/}]},{className:"url",begin:"([a-z]+):/",end:"\\s",endsWithParent:!0,excludeEnd:!0},{className:"regexp",contains:[e.BACKSLASH_ESCAPE,n],variants:[{begin:"\\s\\^",end:"\\s|{|;",returnEnd:!0},{begin:"~\\*?\\s+",end:"\\s|{|;",returnEnd:!0},{begin:"\\*(\\.[a-z\\-]+)+"},{begin:"([a-z\\-]+\\.)+\\*"}]},{className:"number",begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{className:"number",begin:"\\b\\d+[kKmMgGdshdwy]*\\b",relevance:0},n]} 422return{aliases:["nginxconf"],contains:[e.HASH_COMMENT_MODE,{begin:e.UNDERSCORE_IDENT_RE+"\\s",end:";|{",returnBegin:!0,contains:[{className:"title",begin:e.UNDERSCORE_IDENT_RE,starts:t}],relevance:0}],illegal:"[^\\s\\}]"}}},{}],67:[function(e,n,t){n.exports=function(e){var n={keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign self synchronized id nonatomic super unichar IBOutlet IBAction strong weak @private @protected @public @try @property @end @throw @catch @finally @synthesize @dynamic @selector @optional @required",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"NSString NSDictionary CGRect CGPoint UIButton UILabel UITextView UIWebView MKMapView UISegmentedControl NSObject UITableViewDelegate UITableViewDataSource NSThread UIActivityIndicator UITabbar UIToolBar UIBarButtonItem UIImageView NSAutoreleasePool UITableView BOOL NSInteger CGFloat NSException NSLog NSMutableString NSMutableArray NSMutableDictionary NSURL NSIndexPath CGSize UITableViewCell UIView UIViewController UINavigationBar UINavigationController UITabBarController UIPopoverController UIPopoverControllerDelegate UIImage NSNumber UISearchBar NSFetchedResultsController NSFetchedResultsChangeType UIScrollView UIScrollViewDelegate UIEdgeInsets UIColor UIFont UIApplication NSNotFound NSNotificationCenter NSNotification UILocalNotification NSBundle NSFileManager NSTimeInterval NSDate NSCalendar NSUserDefaults UIWindow NSRange NSArray NSError NSURLRequest NSURLConnection UIInterfaceOrientation MPMoviePlayerController dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},t=/[a-zA-Z@][a-zA-Z0-9_]*/,s="@interface @class @protocol @implementation" 423return{aliases:["m","mm","objc","obj-c"],keywords:n,lexemes:t,illegal:"</",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",illegal:"[^\\\\][^']"},{className:"preprocessor",begin:"#import",end:"$",contains:[{className:"title",begin:'"',end:'"'},{className:"title",begin:"<",end:">"}]},{className:"preprocessor",begin:"#",end:"$"},{className:"class",begin:"("+s.split(" ").join("|")+")\\b",end:"({|$)",excludeEnd:!0,keywords:s,lexemes:t,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"variable",begin:"\\."+e.UNDERSCORE_IDENT_RE,relevance:0}]}}},{}],68:[function(e,n,t){n.exports=function(e){var n="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwu
423id my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",t={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:n},s={begin:"->{",end:"}"},a={className:"variable",variants:[{begin:/\$\d/},{begin:/[\$\%\@\*](\^\w\b|#\w+(\:\:\w+)*|{\w+}|\w+(\:\:\w*)*)/},{begin:/[\$\%\@\*][^\s\w{]/,relevance:0}]},r={className:"comment",begin:"^(__END__|__DATA__)",end:"\\n$",relevance:5},o=[e.BACKSLASH_ESCAPE,t,a],i=[a,e.HASH_COMMENT_MODE,r,{className:"comment",begin:"^\\=\\w",end:"\\=cut",endsWithParent:!0},s,{className:"string",contains:o,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*\\<",end:"\\>",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE]},{begin:"{\\w+}",contains:[],relevance:0},{begin:"-?\\w+\\s*\\=\\>",contains:[],relevance:0}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[e.HASH_COMMENT_MODE,r,{className:"regexp",begin:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",relevance:10},{className:"regexp",begin:"(m|qr)?/",end:"/[a-z]*",contains:[e.BACKSLASH_ESCAPE],relevance:0}]},{className:"sub",beginKeywords:"sub",end:"(\\s*\\(.*?\\))?[;{]",relevance:5},{className:"operator",begin:"-\\w\\b",relevance:0}] 424return t.contains=i,s.contains=i,{aliases:["pl"],keywords:n,contains:i}}},{}],69:[function(e,n,t){n.exports=function(e){var n={className:"variable",begin:"\\$+[a-zA-Z_�-ÿ][a-zA-Z0-9_�-ÿ]*"},t={className:"preprocessor",begin:/<\?(php)?|\?>/},s={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:'b"',end:'"'},{begin:"b'",end:"'"},e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null})]},a={variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]} 425return{aliases:["php3","php4","php5","php6"],case_insensitive:!0,keywords:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",contains:[e.C_LINE_COMMENT_MODE,e.HASH_COMMENT_MODE,{className:"comment",begin:"/\\*",end:"\\*/",contains:[{className:"phpdoc",begin:"\\s@[A-Za-z]+"},t]},{className:"comment",begin:"__halt_compiler.+?;",endsWithParent:!0,keywords:"__halt_compiler",lexemes:e.UNDERSCORE_IDENT_RE},{className:"string",begin:"<<<['\"]?\\w+['\"]?$",end:"^\\w+;",contains:[e.BACKSLASH_ESCAPE]},t,n,{className:"function",beginKeywords:"function",end:/[;{]/,excludeEnd:!0,illegal:"\\$|\\[|%",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",contains:["self",n,e.C_BLOCK_COMMENT_MODE,s,a]}]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:/[:\(\$"]/,contains:[{beginKeywords:"extends implements",relevance:10},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",end:";",illegal:/[\.']/,contains:[e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"use",end:";",contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"=>"},s,a]}}},{}],70:[function(e,n,t){n.exports=function(e){var n={className:"prompt",begin:/^(>>>|\.\.\.) /},t={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/(u|b)?r?'''/,end:/'''/,contains:[n],relevance:10},{begin:/(u|b)?r?"""/,end:/"""/,contains:[n],relevance:10},{begin:/(u|r|ur)'/,end:/'/,relevance:10},{begin:/(u|r|ur)"/,end:/"/,relevance:10},{begin:/(b|br)'/,end:/'/},{begin:/(b|br)"/,end:/"/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},s={className:"number",relevance:0,variants:[{begin:e.BINARY_NUMBER_RE+"[lLjJ]?"},{begin:"\\b(0o[0-7]+)[lLjJ]?"},{begin:e.C_NUMBER_RE+"[lLjJ]?"}]},a={className:"params",begin:/\(/,end:/\)/,contains:["self",n,s,t]},r={end:/:/,illegal:/[${=;\n]/,contains:[e.UNDERSCORE_TITLE_MODE,a]} 426return{aliases:["py","gyp"],keywords:{keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda n
426onlocal|10 None True False",built_in:"Ellipsis NotImplemented"},illegal:/(<\/|->|\?)/,contains:[n,s,t,e.HASH_COMMENT_MODE,e.inherit(r,{className:"function",beginKeywords:"def",relevance:10}),e.inherit(r,{className:"class",beginKeywords:"class"}),{className:"decorator",begin:/@/,end:/$/},{begin:/\b(print|exec)\(/}]}}},{}],71:[function(e,n,t){n.exports=function(e){var n="([a-zA-Z]|\\.[a-zA-Z.])[a-zA-Z0-9._]*" 427return{contains:[e.HASH_COMMENT_MODE,{begin:n,lexemes:n,keywords:{keyword:"function if in break next repeat else for return switch while try tryCatch|10 stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...|10",literal:"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10"},relevance:0},{className:"number",begin:"0[xX][0-9a-fA-F]+[Li]?\\b",relevance:0},{className:"number",begin:"\\d+(?:[eE][+\\-]?\\d*)?L\\b",relevance:0},{className:"number",begin:"\\d+\\.(?!\\d)(?:i\\b)?",relevance:0},{className:"number",begin:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{className:"number",begin:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{begin:"`",end:"`",relevance:0},{className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:'"',end:'"'},{begin:"'",end:"'"}]}]}}},{}],72:[function(e,n,t){n.exports=function(e){var n="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",t="and false then defined module in return redo if BEGIN retry end for true self when next until do begin unless END rescue nil else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",s={className:"yardoctag",begin:"@[A-Za-z]+"},a={className:"comment",variants:[{begin:"#",end:"$",contains:[s]},{begin:"^\\=begin",end:"^\\=end",contains:[s],relevance:10},{begin:"^__END__",end:"\\n$"}]},r={className:"subst",begin:"#\\{",end:"}",keywords:t},o={className:"string",contains:[e.BACKSLASH_ESCAPE,r],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:"%[qw]?\\(",end:"\\)"},{begin:"%[qw]?\\[",end:"\\]"},{begin:"%[qw]?{",end:"}"},{begin:"%[qw]?<",end:">",relevance:10},{begin:"%[qw]?/",end:"/",relevance:10},{begin:"%[qw]?%",end:"%",relevance:10},{begin:"%[qw]?-",end:"-",relevance:10},{begin:"%[qw]?\\|",end:"\\|",relevance:10},{begin:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/}]},i={className:"params",begin:"\\(",end:"\\)",keywords:t},l=[o,a,{className:"class",beginKeywords:"class module",end:"$|;",illegal:/=/,contains:[e.inherit(e.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{className:"inheritance",begin:"<\\s*",contains:[{className:"parent",begin:"("+e.IDENT_RE+"::)?"+e.IDENT_RE}]},a]},{className:"function",beginKeywords:"def",end:" |$|;",relevance:0,contains:[e.inherit(e.TITLE_MODE,{begin:n}),i,a]},{className:"constant",begin:"(::)?(\\b[A-Z]\\w*(::)?)+",relevance:0},{className:"symbol",begin:":",contains:[o,{begin:n}],relevance:0},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(\\!|\\?)?:",relevance:0},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{className:"variable",begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{begin:"("+e.RE_STARTERS_RE+")\\s*",contains:[a,{className:"regexp",contains:[e.BACKSLASH_ESCAPE,r],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r{",end:"}[a-z]*"},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}],relevance:0}] 428return r.contains=l,i.contains=l,{aliases:["rb","gemspec","podspec","thor"],keywords:t,contains:l}}},{}],73:[function(e,n,t){n.exports=function(e){return{aliases:["rs"],keywords:"assert bool break char check claim comm const cont copy dir do drop else enum extern export f32 f64 fail false float fn for i16 i32 i64 i8 if impl int let log loop match mod move mut priv pub pure ref return self static str struct task true trait type u16 u32 u64 u8 uint unsafe use vec while",illegal:"</",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.inherit(e.QUOTE_STRING_MODE,{illegal:null}),e.APOS_STRING_MODE,{className:"number",begin:"\\b(0[xb][A-Za-z0-9_]+|[0-9_]+(\\.[0-9_]+)?([uif](8|16|32|64)?)?)",relevance:0}
428,{className:"function",beginKeywords:"fn",end:"(\\(|<)",excludeEnd:!0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"preprocessor",begin:"#\\[",end:"\\]"},{beginKeywords:"type",end:"(=|<)",contains:[e.UNDERSCORE_TITLE_MODE],illegal:"\\S"},{beginKeywords:"trait enum",end:"({|<)",contains:[e.UNDERSCORE_TITLE_MODE],illegal:"\\S"},{begin:e.IDENT_RE+"::"},{begin:"->"}]}}},{}],74:[function(e,n,t){n.exports=function(e){var n={className:"annotation",begin:"@[A-Za-z]+"},t={className:"string",begin:'u?r?"""',end:'"""',relevance:10},s={className:"symbol",begin:"'\\w[\\w\\d_]*(?!')"} 429return{keywords:"type yield lazy override def with val var false true sealed abstract private trait object null if for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws",contains:[{className:"javadoc",begin:"/\\*\\*",end:"\\*/",contains:[{className:"javadoctag",begin:"@[A-Za-z]+"}],relevance:10},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,t,e.QUOTE_STRING_MODE,s,{className:"class",begin:"((case )?class |object |trait )",end:"({|$)",excludeEnd:!0,illegal:":",keywords:"case class trait object",contains:[{beginKeywords:"extends with",relevance:10},e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",contains:[e.QUOTE_STRING_MODE,t,n]}]},e.C_NUMBER_MODE,n]}}},{}],75:[function(e,n,t){n.exports=function(e){var n="[a-zA-Z-][a-zA-Z0-9_-]*",t={className:"variable",begin:"(\\$"+n+")\\b"},s={className:"function",begin:n+"\\(",returnBegin:!0,excludeEnd:!0,end:"\\("},a={className:"hexcolor",begin:"#[0-9A-Fa-f]+"};({className:"attribute",begin:"[A-Z\\_\\.\\-]+",end:":",excludeEnd:!0,illegal:"[^\\s]",starts:{className:"value",endsWithParent:!0,excludeEnd:!0,contains:[s,a,e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{className:"important",begin:"!important"}]}}) 430return{case_insensitive:!0,illegal:"[=/|']",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s,{className:"id",begin:"\\#[A-Za-z0-9_-]+",relevance:0},{className:"class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},{className:"attr_selector",begin:"\\[",end:"\\]",illegal:"$"},{className:"tag",begin:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",relevance:0},{className:"pseudo",begin:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{className:"pseudo",begin:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},t,{className:"attribute",begin:"\\b(z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",illegal:"[^\\s]"},{className:"value",begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inl
430ine|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{className:"value",begin:":",end:";",contains:[s,t,a,e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{className:"important",begin:"!important"}]},{className:"at_rule",begin:"@",end:"[{;]",keywords:"mixin include extend for if else each while charset import debug media page content font-face namespace warn",contains:[s,t,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,a,e.CSS_NUMBER_MODE,{className:"preprocessor",begin:"\\s[A-Za-z0-9_.-]+",relevance:0}]}]}}},{}],76:[function(e,n,t){n.exports=function(e){var n={className:"comment",begin:"--",end:"$"} 431return{case_insensitive:!0,illegal:/[<>]/,contains:[{className:"operator",beginKeywords:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate savepoint release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup",end:/;/,endsWithParent:!0,keywords:{keyword:"abs absolute acos action add adddate addtime aes_decrypt aes_encrypt after aggregate all allocate alter analyze and any are as asc ascii asin assertion at atan atan2 atn2 authorization authors avg backup before begin benchmark between bin binlog bit_and bit_count bit_length bit_or bit_xor both by cache call cascade cascaded case cast catalog ceil ceiling chain change changed char_length character_length charindex charset check checksum checksum_agg choose close coalesce coercibility collate collation collationproperty column columns columns_updated commit compress concat concat_ws concurrent connect connection connection_id consistent constraint constraints continue contributors conv convert convert_tz corresponding cos cot count count_big crc32 create cross cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime data database databases datalength date_add date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts datetimeoffsetfromparts day dayname dayofmonth dayofweek dayofyear deallocate declare decode default deferrable deferred degrees delayed delete des_decrypt des_encrypt des_key_file desc describe descriptor diagnostics difference disconnect distinct distinctrow div do domain double drop dumpfile each else elt enclosed encode encrypt end end-exec engine engines eomonth errors escape escaped event eventdata events except exception exec execute exists exp explain export_set extended external extract fast fetch field fields find_in_set first first_value floor flush for force foreign format found found_rows from from_base64 from_days from_unixtime full function get get_format get_lock getdate getutcdate global go goto grant grants greatest group group_concat grouping grouping_id gtid_subset gtid_subtract handler having help hex high_priority hosts hour ident_current ident_incr ident_seed identified identity if ifnull ignore iif ilike immediate in index indicator inet6_aton inet6_ntoa inet_aton inet_ntoa infile initially inner innodb input insert install instr intersect into is is_free_lock is_ipv4 is_ipv4_compat is_ipv4_mapped is_not is_not_null is_used_lock isdate isnull isolation join key kill language last last_day last_insert_id last_value lcase lead leading least leaves left len lenght level like limit lines ln load load_file local localtime localtimestamp locate lock log log10 log2 logfile logs low_priority lower lpad ltrim make_set makedate maketime master master_pos_wait match matched max md5 medium merge microsecond mid min minute mod mode module month monthname mutex name_const names national natural nchar next no no_write_to_binlog not now nullif nvarchar oct octet_length of old_password on only open optimize option optionally or ord order outer outfile output pad parse partial partition password patindex percent_rank percentile_cont percentile_disc period_add period_diff pi plugin position pow power pragma precision prepare preserve primary prior privileges procedure procedure_analyze processlist profile profiles public publishingservername purge quarter query quick quote quotename radians rand read references regexp relative relaylog release release_lock rename repair repeat replace replicate reset restore restrict return returns reverse revoke right rlike rollback rollup round row row_count rows rpad rtrim savepoint schema scroll sec_to_time second section select serializable server session session_user set sha sha1 sha2 share show sign sin size slave sleep smalldatetimefromparts snapshot some soname soundex sounds_like space sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sql_variant_property sqlstate sqrt square start starting status std stddev stddev_pop stddev_samp stdev stdevp stop str str_to_date straight_join strcmp string stuff subdate substr substring subtime subtring_index sum switchoffset sysdate sysdatetime sysdatetimeoffset system_user sysutcdatetime table tables tablespace tan temporary terminated tertiary_weights then time time_format time_to_sec timediff timefromparts timestamp timestampadd timestampdiff timezone_hour timezone_minute to to_base64 to_days to_seconds todatetimeoffset trailing transaction translation trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse ucase uncompress uncompressed_length unhex unicode uninstall union unique unix_timestamp unknown unlock update upgrade upped upper usage use user user_resources using utc_date utc_time utc_timestamp uuid uuid_short validate_password_strength value values var var_pop var_samp variables variance varp version view warnings week weekday weekofyear weight_string when whenever where with work write xml xor year yearweek zon",literal:"true false null",built_in:"array bigint binary bit blob boolean char character date dec decimal float int integer interval number numeric real serial smallint varchar varying int8 serial8 text"},contains:[{className:"string",begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE,{begin:"''"}]},{className:"string",begin:'"',end:'"',contains:[e.BACKSLASH_ESCAPE,{begin:'""'}]},{className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,n]},e.C_BLOCK_COMMENT_MODE,n]}}},{}],77:[function(e,n,t){n.exports=function(e){var n="[A-Za-z0-9\\._:-]+",t={begin:/<\?(php)?(?!\w)/,end:/\?>/,subLanguage:"php",subLanguageMode:"continuous"},s={endsWithParent:!0,illegal:/</,relevance:0,contains:[t,{className:"attribute",begin:n,relevance:0},{begin:"=",relevance:0,contains:[{className:"value",variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/},{begin:/[^\s\/>]+/}]}]}]} 432return{aliases:["html","xhtml","rss","atom","xsl","plist"],case_insensitive:!0,contains:[{className:"doctype",begin:"<!DOCTYPE",end:">",relevance:10,contains:[{begin:"\\[",end:"\\]"}]},{className:"comment",begin:"<!--",end:"-->",relevance:10},{className:"cdata",begin:"<\\!\\[CDATA\\[",end:"\\]\\]>",relevance:10},{className:"tag",begin:"<style(?=\\s|>|$)",end:">",keywords:{title:"style"},contains:[s],starts:{end:"</style>",returnEnd:!0,subLanguage:"css"}}
432,{className:"tag",begin:"<script(?=\\s|>|$)",end:">",keywords:{title:"script"},contains:[s],starts:{end:"</script>",returnEnd:!0,subLanguage:"javascript"}},{begin:"<%",end:"%>",subLanguage:"vbscript"},t,{className:"pi",begin:/<\?\w+/,end:/\?>/,relevance:10},{className:"tag",begin:"</?",end:"/?>",contains:[{className:"title",begin:"[^ /><]+",relevance:0},s]}]}}},{}],78:[function(e,n,t){"use strict" 433var s=(e("fs"),e("insert-css")),a=e("./lib/hljs/index"),r="/*\n\nOriginal style from softwaremaniacs.org (c) Ivan Sagalaev <[email protected]>\n\n*/\n\n.hljs {\n display: block;\n padding: 0.5em;\n background: #f0f0f0;\n}\n\n.hljs,\n.hljs-subst,\n.hljs-tag .hljs-title,\n.lisp .hljs-title,\n.clojure .hljs-built_in,\n.nginx .hljs-title {\n color: black;\n}\n\n.hljs-string,\n.hljs-title,\n.hljs-constant,\n.hljs-parent,\n.hljs-tag .hljs-value,\n.hljs-rules .hljs-value,\n.hljs-preprocessor,\n.hljs-pragma,\n.haml .hljs-symbol,\n.ruby .hljs-symbol,\n.ruby .hljs-symbol .hljs-string,\n.hljs-template_tag,\n.django .hljs-variable,\n.smalltalk .hljs-class,\n.hljs-addition,\n.hljs-flow,\n.hljs-stream,\n.bash .hljs-variable,\n.apache .hljs-tag,\n.apache .hljs-cbracket,\n.tex .hljs-command,\n.tex .hljs-special,\n.erlang_repl .hljs-function_or_atom,\n.asciidoc .hljs-header,\n.markdown .hljs-header,\n.coffeescript .hljs-attribute {\n color: #800;\n}\n\n.smartquote,\n.hljs-comment,\n.hljs-annotation,\n.hljs-template_comment,\n.diff .hljs-header,\n.hljs-chunk,\n.asciidoc .hljs-blockquote,\n.markdown .hljs-blockquote {\n color: #888;\n}\n\n.hljs-number,\n.hljs-date,\n.hljs-regexp,\n.hljs-literal,\n.hljs-hexcolor,\n.smalltalk .hljs-symbol,\n.smalltalk .hljs-char,\n.go .hljs-constant,\n.hljs-change,\n.lasso .hljs-variable,\n.makefile .hljs-variable,\n.asciidoc .hljs-bullet,\n.markdown .hljs-bullet,\n.asciidoc .hljs-link_url,\n.markdown .hljs-link_url {\n color: #080;\n}\n\n.hljs-label,\n.hljs-javadoc,\n.ruby .hljs-string,\n.hljs-decorator,\n.hljs-filter .hljs-argument,\n.hljs-localvars,\n.hljs-array,\n.hljs-attr_selector,\n.hljs-important,\n.hljs-pseudo,\n.hljs-pi,\n.haml .hljs-bullet,\n.hljs-doctype,\n.hljs-deletion,\n.hljs-envvar,\n.hljs-shebang,\n.apache .hljs-sqbracket,\n.nginx .hljs-built_in,\n.tex .hljs-formula,\n.erlang_repl .hljs-reserved,\n.hljs-prompt,\n.asciidoc .hljs-link_label,\n.markdown .hljs-link_label,\n.vhdl .hljs-attribute,\n.clojure .hljs-attribute,\n.asciidoc .hljs-attribute,\n.lasso .hljs-attribute,\n.coffeescript .hljs-property,\n.hljs-phony {\n color: #88f;\n}\n\n.hljs-keyword,\n.hljs-id,\n.hljs-title,\n.hljs-built_in,\n.css .hljs-tag,\n.hljs-javadoctag,\n.hljs-phpdoc,\n.hljs-yardoctag,\n.smalltalk .hljs-class,\n.hljs-winutils,\n.bash .hljs-variable,\n.apache .hljs-tag,\n.go .hljs-typename,\n.tex .hljs-command,\n.asciidoc .hljs-strong,\n.markdown .hljs-strong,\n.hljs-request,\n.hljs-status {\n font-weight: bold;\n}\n\n.asciidoc .hljs-emphasis,\n.markdown .hljs-emphasis {\n font-style: italic;\n}\n\n.nginx .hljs-built_in {\n font-weight: normal;\n}\n\n.coffeescript .javascript,\n.javascript .xml,\n.lasso .markup,\n.tex .hljs-formula,\n.xml .javascript,\n.xml .vbscript,\n.xml .css,\n.xml .hljs-cdata {\n opacity: 0.5;\n}\n",o='<pre><code ng-bind-html="highlightedCode"></code></pre>' 434s(r),n.exports=["$sce",function(e){return{scope:{syntaxLanguage:"@",syntaxCode:"@"},restrict:"AE",template:o,transclude:!0,replace:!0,link:function(n,t,s,r,o){"undefined"!=typeof s.syntaxCode?s.$observe("syntaxCode",function(t){if("string"==typeof t&&t.length>0){var s=a.highlight(n.syntaxLanguage,t,!0) 435n.highlightedCode=e.trustAsHtml(s.value)}}):o(n,function(t){var s=angular.element(t).text(),r=a.highlight(n.syntaxLanguage,s,!0) 436n.highlightedCode=e.trustAsHtml(r.value.replace(/\n/g,"<br />"))})}}}]},{"./lib/hljs/index":44,fs:94,"insert-css":95}],79:[function(e,n,t){"use strict" 437angular.module("App.Filters",[]),n.exports=angular.module("App.Filters").filter("booleanStyle",e("./booleanStyle"))},{"./booleanStyle":80}],80:[function(e,n,t){"use strict" 438n.exports=[function(){return function(e,n,t){n="undefined"==typeof n?!0:n,t="undefined"==typeof t?!1:t 439var s 440switch(e){case!0:case"true":case 1:case"1":case"on":case"yes":s=n 441break 442case!1:case"false":case 0:case"0":case"off":case"no":s=t 443break 444default:s=t}return s}}]},{}],81:[function(e,n,t){"use strict" 445angular.module("App.Modules",[e("./UserSystem").name]),n.exports=angular.module("App.Modules")},{"./UserSystem":82}],82:[function(e,n,t){"use strict" 446angular.module("UserSystemMod",[]).provider("UserSystemServ",e("./UserSystemServ")).run(e("./UserSystemRun")),n.exports=angular.module("UserSystemMod")},{"./UserSystemRun":83,"./UserSystemServ":84}],83:[function(e,n,t){"use strict"
447n.exports=["$rootScope","UserSystemServ",function(e,n){n.getSession().then(function(n){"anonymous"!==n.content&&e.$broadcast("sessionLogin.UserSystem",n.content)})}]},{}],84:[function(e,n,t){"use strict" 448n.exports=function(){var e=!1,n={},t="accounts",s="sessions" 449this.setAccountsResource=function(e){t=e},this.setSessionResource=function(e){s=e},this.$get=["$rootScope","$location","Restangular",function(a,r,o){var i={getUserState:function(){return e},getUserData:function(){return n},setUserData:function(e){n=e},mergeUserData:function(e){angular.extend(n,e)},getAccount:function(e){return o.all(t).get(e).then(function(e){return a.$broadcast("accountProvided.UserSystem",e.content),e})},registerAccount:function(e){return o.all(t).post(e).then(function(n){return a.$broadcast("accountRegistered.UserSystem",e),n})},updateAccount:function(e){return o.one(t,n.id).customPUT(e).then(function(n){return a.$broadcast("accountUpdated.UserSystem",e),n})},patchAccount:function(e){return o.one(t,n.id).patch(e).then(function(n){return a.$broadcast("accountPatched.UserSystem",e),n})},deleteAccount:function(){return o.one(t,n.id).remove().then(function(e){return a.$broadcast("accountDestroyed.UserSystem",n.id),e})},getSession:function(){return o.all(s).customGET().then(function(e){return a.$broadcast("sessionProvided.UserSystem",e.content),e})},loginSession:function(e){return o.all(s).post(e).then(function(e){return a.$broadcast("sessionLogin.UserSystem",e.content),e})},logoutSession:function(){return o.all(s).customDELETE().then(function(e){return a.$broadcast("sessionLogout.UserSystem",n.id),e})}} 450return a.$on("accountProvided.UserSystem",function(e,n){i.setUserData(n)}),a.$on("accountRegistered.UserSystem",function(e,n){i.loginSession({username:n.username,email:n.email,password:n.password})}),a.$on("accountUpdated.UserSystem",function(e,n){i.setUserData(n)}),a.$on("accountPatched.UserSystem",function(e,n){i.mergeUserData(n)}),a.$on("accountDestroyed.UserSystem",function(n,t){e=!1,i.logoutSession()}),a.$on("sessionProvided.UserSystem",function(n,t){e="anonymous"!==t?!0:!1}),a.$on("sessionLogin.UserSystem",function(n,t){e=!0,i.getAccount(t)}),a.$on("sessionLogout.UserSystem",function(n,t){e=!1,i.setUserData({})}),i}]}},{}],85:[function(e,n,t){"use strict" 451n.exports=["$rootScope","UserSystemServ",function(e,n){e.loggedIn=!1,e.loggedOut=!0,e.$watch(function(){return n.getUserState()},function(n){e.loggedIn=n,e.loggedOut=!n},!0)}]},{}],86:[function(e,n,t){"use strict" 452n.exports=angular.element("base").attr("href")},{}],87:[function(e,n,t){"use strict" 453n.exports=["$timeout",function(e){return function(n,t,s){t=t||0,s="undefined"!=typeof s?s:!0 454var a,r=function(){a=e(function(){n(),r()},t,s)} 455return r(),function(){r=angular.noop,e.cancel(a)}}}]},{}],88:[function(e,n,t){"use strict" 456n.exports=[function(){this.round=function(e,n){return"undefined"==typeof n||0===+n?Math.round(e):(e=+e,n=+n,isNaN(e)||"number"!=typeof n||n%1!==0?NaN:(e=e.toString().split("e"),e=Math.round(+(e[0]+"e"+(e[1]?+e[1]+n:n))),e=e.toString().split("e"),+(e[0]+"e"+(e[1]?+e[1]-n:-n))))}}]},{}],89:[function(e,n,t){"use strict" 457n.exports=[function(){this.importScript=function(e,n,t){!function(n,s,a){var r,o=n.getElementsByTagName(s)[0] 458n.getElementById(a)||(r=n.createElement(s),r.id=a,t&&(r.onload=t),r.src=e,o.parentNode.insertBefore(r,o))}(document,"script",n)}}]},{}],90:[function(e,n,t){"use strict" 459var s=e("./..\\..\\..\\components\\moment\\moment.js") 460n.exports=[function(){return s}]},{"./..\\..\\..\\components\\moment\\moment.js":4}],91:[function(e,n,t){"use strict"
461n.exports=["RestangularProvider","BaseUrlConst",function(e,n){n=n.replace(new RegExp("/*$"),""),e.setBaseUrl(n+"/api")}]},{}],92:[function(e,n,t){"use strict" 462angular.module("App.Services",[]),n.exports=angular.module("App.Services").constant("BaseUrlConst",e("./BaseUrlConst")).config(e("./RestangularConfig")).config(e("./UserSystemConfig")).run(e("./AuthenticationStateRun")).service("CalculateServ",e("./CalculateServ")).service("ExternalScriptLoaderServ",e("./ExternalScriptLoaderServ")).factory("MomentServ",e("./MomentServ")).factory("BusyLoopServ",e("./BusyLoopServ"))},{"./AuthenticationStateRun":85,"./BaseUrlConst":86,"./BusyLoopServ":87,"./CalculateServ":88,"./ExternalScriptLoaderServ":89,"./MomentServ":90,"./RestangularConfig":91,"./UserSystemConfig":93}],93:[function(e,n,t){"use strict" 463n.exports=["UserSystemServProvider",function(e){e.setAccountsResource("accounts"),e.setSessionResource("session")}]},{}],94:[function(e,n,t){},{}],95:[function(e,n,t){var s={} 464n.exports=function(e){if(!s[e]){s[e]=!0 465var n=document.createElement("style") 466n.setAttribute("type","text/css"),"textContent"in n?n.textContent=e:n.styleSheet.cssText=e 467var t=document.getElementsByTagName("head")[0] 468t.appendChild(n)}}},{}]},{},[5])
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.