function rem(e) { var t = $("
"); t.css({ position: "absolute", left: -9999, top: e + "rem" }), t.appendto("body"); var n = t.position().top; return t.remove(), n } function issmalldevice() { return $(window).width() < 1200 } function display(e) { var t = this; t.canvas = e, t.context = void 0, t.framerate = 30, t.numframes = 0, t.paused = !0, t.nextredraw = 0, t.scale = 1, t.listeners = {}, t.draw = { continuous: !1, info: !1 }, t.info = { fps: 0, lastframetime: 0, runningframetime: 0 }, t.frames_for_menu_to_ramin_visible = 3 * t.framerate, t.triggered_initial_mouseover = !1, t.logo = {}, t.init = function() { return t.canvas.getcontext ? (t.context = t.canvas.getcontext("2d"), t.context.scale(t.scale, t.scale), t.calculate_scale(), t.canvas.onmousedown = function(e) { return t.fireevent("mousedown", e), !1 }, t.canvas.onmouseup = function(e) { return t.fireevent("mouseup", e), !1 }, t.canvas.onmouseover = function(e) { t.fireevent("mouseover", e) }, t.canvas.onmousemove = function(e) { t.fireevent("mousemove", e) }, window.requestanimframe = window.requestanimationframe || window.webkitrequestanimationframe || window.mozrequestanimationframe || window.orequestanimationframe || window.msrequestanimationframe, t.addlistener("draw", t), t.addlistener("afterdraw", t), t.addlistener("newframe", t), t.main(), void t.setupstats()) : void t.error("no context") }, t.calculate_scale = function() { t.width = t.canvas.width / t.scale, t.height = t.canvas.height / t.scale }, t.addlistener = function(e, n) { t.listeners[e] || (t.listeners[e] = []), t.listeners[e].push(n) }, t.fireevent = function(e, n) { if (t.listeners[e] && t.listeners[e].length > 0) for (var i = "on" + e.substr(0, 1).touppercase() + e.substr(1), o = 0; o < t.listeners[e].length; o++) t.listeners[e][o][i] && t.listeners[e][o][i].call(t.listeners[e][o], n, t) }, t.main = function() { t.paused || t.nextframe(), window.requestanimframe ? window.requestanimframe(function() { t.main() }) : t.nextredraw = settimeout(function() { t.main() }, 1e3 / t.framerate) }, t.nextframe = function() { t.fireevent("newframe"), t.fireevent("beforeupdate"), t.fireevent("update"), t.fireevent("afterupdate"), t.fireevent("beforedraw"), t.fireevent("draw"), t.fireevent("afterdraw") }, t.error = function(e) { t.fireevent("error", { text: e }) }, t.getfps = function() { return (1e3 / t.info.runningframetime).tofixed(1) }, t.ondraw = function() { t.tick() }, t.onafterdraw = function() { t.draw.info && this.stats.end() }, t.drawstats = function() {}, t.onnewframe = function() { if (t.draw.info && this.stats.begin(), t.numframes > t.frames_for_menu_to_ramin_visible && !t.triggered_initial_mouseover) { var e = $.event("mousemove"); t.canvas.onmousemove(e), t.triggered_initial_mouseover = !0 } t.draw.continuous || t.clear() }, t.drawline = function(e, n) { t.context.beginpath(), t.context.moveto(e.x, e.y), t.context.lineto(n.x, n.y), t.context.stroke() }, t.drawtext = function(e, n, i) { t.context.filltext(e, n.x, n.y, i) }, t.drawcircle = function(e, n) { t.context.beginpath(), t.context.arc(e.x, e.y, n, 0, 2 * math.pi), t.context.closepath(), t.context.fill() }, t.fillstyle = function(e) { t.context.fillstyle = e }, t.strokestyle = function(e) { t.context.strokestyle = e }, t.tick = function() { if (t.numframes++, t.info.lastframetime) { var e = (new date).gettime(), n = e - t.info.lastframetime; t.info.runningframetime = .8 * t.info.runningframetime + .2 * n, t.info.lastframetime = e } else t.info.lastframetime = (new date).gettime() }, t.setupstats = function() { return t.draw.info ? (this.stats = new stats, this.stats.domelement.style.position = "absolute", this.stats.domelement.style.bottom = "0px", this.stats.domelement.style.right = "0px", void document.body.appendchild(this.stats.domelement)) : !1 }, t.clear = function() { t.context.clearrect(0, 0, t.width, t.height) }, t.start = function() { t.paused = !1 }, t.stop = function() { t.paused = !0 }, t.togglepause = function() { t.paused = !t.paused }, t.unpause = t.start, t.pause = t.stop, t.step = function() { t.stop(), t.nextframe() }, t.drawconsensyslogo = function() { var e = t.canvas.width / 2 - t.consensys_logo.width / 2, n = t.canvas.height / 2 - t.consensys_logo.height / 2; t.context.drawimage(t.consensys_logo, e, n, 150, 150) } } function particle(e, t) { this.position = e, this.velocity = t, this.acceleration = new vector(0, 0), this.ttl = -1, this.lived = 0, this.isfixed = 0, this.fillstyle = "rgba(255,255,255,0.6)", //闄堝織鍚� this.radius = 1 + 2 * math.random(), this.connects = 0, this.radius >= 2.5 && (this.connects = 1), this.radius < 2.5 && (this.fillstyle = "#abd1ff", this.ttl = 1), this.radius = 2 } function particleemitter(e, t) { this.position = e, this.velocity = t, this.size = 8, this.particlelife = -1, this.spread = .3, this.emissionrate = .08, this.moveto = function(e) { this.position = e }, this.addparticle = function() { var e = new particle(this.position.copy(), vector.fromangle(this.velocity.getangle() + this.spread - math.random() * this.spread * 2, this.velocity.getmagnitude())); return e }, this.tostring = function() { var e = [this.position.tostring(), this.velocity.tostring(), this.size, this.particlelife, this.spread.tofixed(2), this.emissionrate]; return "e" + e.join(":") } } function particlesystem() { var e = this; e.display = null, e.maxparticles = 400, e.starttime = 0, e.draw = { objects: !1, accelerations: !1, velocities: !1, particles: !0 }, e.particles = [], e.emitters = [], e.fields = [], e.listeners = {}, e.elapsed = 0, e.lastemitter = 0, e.mousecoords = new point(0, 0), e.mousefieldstrength = -140, e.mousefield, e.lines = { enabled: !0, min_particle_life: 0 }, e.mindist = 60, e.thresholddist = 0, e.maxlines = 20, e.bounds_threshold = 30, e.buttons = null, e.menu_particles = [], e.init = function(t) { return e.display = t, t.addlistener("draw", e), t.addlistener("afterdraw", e), t.addlistener("beforeupdate", e), t.addlistener("update", e), t.addlistener("mouseup", e), t.addlistener("mousedown", e), t.addlistener("mousemove", e), e }, e.addlistener = function(t, n) { e.listeners[t] || (e.listeners[t] = []), e.listeners[t].push(n) }, e.fireevent = function(t, n) { if (e.listeners[t] && e.listeners[t].length > 0) for (var i = "on" + t.substr(0, 1).touppercase() + t.substr(1), o = 0; o < e.listeners[t].length; o++) e.listeners[t][o][i] && e.listeners[t][o][i].call(e.listeners[t][o], n, e) }, e.addemitter = function(t, n) { var i = new particleemitter(t, n); e.emitters.push(i), e.fireevent("newobject", { particletarget: i }) }, e.removeemitter = function(t) { typeof t.constructor !== number && (t = e.emitters.indexof(t)); var n = e.emitters.splice(t, 1); n && e.fireevent("deleteobject", { particletarget: n }) }, e.addfield = function(t, n) { var i = new field(t, n); e.fields.push(i), e.fireevent("newobject", { particletarget: i }) }, e.removefield = function(t) { typeof t.constructor !== number && (t = e.fields.indexof(t)); var n = e.fields.splice(t, 1); n && e.fireevent("deleteobject", { particletarget: n }) }, e.onbeforeupdate = function(t, n) { e.draw.accelerations && e.drawaccelerations(n), e.draw.velocities && e.drawvelocities(n) }, e.onupdate = function(t, n) { e.elapsed++, e.addnewparticles(), e.plotparticles(n) }, e.ondraw = function(t, n) { e.draw.particles && e.drawparticles(n), e.draw.objects && (e.drawfields(n), e.drawemitters(n)) }, e.onafterdraw = function(e, t) { t.draw.info }, e.onmousedown = function(t) { var n = e.getobjectatpoint(e.mousecoords); e.selected && (t.particletarget = e.selected, e.fireevent("objectblur", t), e.selected = void 0), n ? (e.clicked = n, t.particletarget = n, e.fireevent("objectmousedown")) : (e.mousefield = new field(e.mousecoords, e.mousefieldstrength), e.mousefield.size = 0, e.fields.push(e.mousefield)) }, e.onmouseup = function(t) { var n = e.getobjectatpoint(e.mousecoords); e.mousefield ? (e.removefield(e.mousefield), e.mousefield = void 0) : e.clicked && (t.particletarget = e.clicked, n === e.clicked && (e.clicked.moved ? e.fireevent("objectfinishmove", t) : (e.selected = e.clicked, e.fireevent("objectclick", t), e.fireevent("objectfocus", t)), delete e.clicked.moved, e.clicked = void 0)) }, e.onmousemove = function(t, n) { if (e.mousecoords = new point(t.offsetx || t.layerx - n.canvas.offsetleft, t.offsety || t.layery - n.canvas.offsettop), e.mousefield) e.mousefield.moveto(e.mousecoords); else if (e.clicked) e.clicked.moved = !0, e.clicked.moveto(e.mousecoords); else { var i = e.getobjectatpoint(e.mousecoords); e.objectmouseover !== i && (e.objectmouseover ? (t.particletarget = e.objectmouseover, e.fireevent("objectmouseout", t), e.objectmouseover = void 0) : (t.particletarget = i, e.fireevent("objectmousein", t), e.objectmouseover = i)) } }, e.addnewparticles = function() { if (e.particles.length < e.maxparticles) for (var t, n = 0; t = e.emitters[n]; n++) { var i = t.emissionrate; if (1 > i) { if (!(e.display.numframes % 10 <= 10 * i)) continue; i = 1 } for (var o = 0; i > o; o++) e.particles.push(t.addparticle()) } }, e.plotparticles = function(t) { for (var n, i = e.bounds_threshold, o = t.width + i, r = t.height + i, a = e.particles, s = e.fields, l = []; n = a.pop();) { if (n.ttl > 0) { if (++n.lived >= n.ttl) continue } else n.lived++; n.isfixed || (n.submittofields(s), n.move()); var c = n.position, u = ({ x: t.canvas.width / t.scale / 2, y: t.canvas.height / t.scale / 2 }, { top: t.logo.position.top + t.logo.height / 2, left: t.logo.position.left + t.logo.width / 2 }), d = (t.logo.width - 10) / 2, p = math.pow(c.x - u.left, 2) + math.pow(c.y - u.top, 2), f = t.canvas.width / t.scale / 2; if (f * f >= p) { var h = p / (f * f); n.radius = 2 - 1 * (1 - h) } var m = math.pow(c.x - u.left, 2) + math.pow(c.y - u.top, 2) <= d * d; m || c.x < -i || c.x > o || c.y < -i || c.y > r || l.push(n) } if (e.particles = l, !e.lines.enabled) return !0; for (var g = 0; g < e.particles.length; g++) if (c = e.particles[g], c.connects && !(c.lived < e.lines.min_particle_life)) for (var v = 0, y = g + 1; y < e.particles.length && (p2 = e.particles[y], !p2.connects || p2.lived < e.lines.min_particle_life || (v += e.distance(t, c, p2), !(v >= e.maxlines))); y++); }, e.distance = function(t, n, i) { if (n.menu_particle && i.menu_particle) return 0; var o, r = n.position.x - i.position.x, a = n.position.y - i.position.y, s = t.context; if (o = math.sqrt(r * r + a * a), o <= e.mindist && o > e.thresholddist) { s.beginpath(); var l = 1.2 - o / e.mindist; return (n.anchor_particle && i.menu_particle || i.anchor_particle && n.menu_particle) && (l = 1), s.strokestyle = "rgba(255,255,255," + 0.6 + ")", //闄堝織鍚� s.moveto(n.position.x, n.position.y), s.lineto(i.position.x, i.position.y), s.stroke(), s.closepath(), 1 } return 0 }, e.drawparticles = function(t) { for (var n, i = -1; n = e.particles[++i];) n.draw(t) }, e.drawaccelerations = function(t) { t.strokestyle("white"), t.context.beginpath(); for (var n = 0, i = e.particles.length; i > n; n++) { var o = e.particles[n]; t.context.moveto(o.position.x, o.position.y), t.context.lineto(o.position.x + o.acceleration.x, o.position.y + o.acceleration.y) } t.context.stroke() }, e.drawvelocities = function(t) { t.strokestyle("blue"), t.context.beginpath(); for (var n = 0, i = e.particles.length; i > n; n++) { var o = e.particles[n]; t.context.moveto(o.position.x, o.position.y), t.context.lineto(o.position.x + o.velocity.x, o.position.y + o.velocity.y) } t.context.stroke() }, e.drawfields = function(t) { for (var n = 0, i = e.fields.length; i > n; n++) e.drawcircularobject(t, e.fields[n]) }, e.drawemitters = function(t) { for (var n = 0, i = e.emitters.length; i > n; n++) e.drawcircularobject(t, e.emitters[n]) }, e.drawcircularobject = function(e, t) { var n = t.size >> 1, i = e.context.createlineargradient(t.position.x - n, t.position.y - n, t.position.x + n, t.position.y + n); i.addcolorstop(0, t.drawcolor || t.constructor.drawcolor), i.addcolorstop(1, t.drawcolor2 || t.constructor.drawcolor2), e.fillstyle(i), e.drawcircle(t.position, n) }, e.getobjectatpoint = function(t) { for (var n = 0; n < e.emitters.length; n++) { var i = e.emitters[n]; if (t.withinbounds(i.position, i.size)) return i } for (var n = 0; n < e.fields.length; n++) { var o = e.fields[n]; if (t.withinbounds(o.position, o.size)) return o } }, e.initmenuparticles = function() { var t = { x: e.display.canvas.width / 2, y: e.display.canvas.height / 2 }, n = 160, i = new particle(new point(t.x, t.y - n), new vector(0, 0)); i.setasmenuanchortype(), i.menu_name = "vision", e.particles.push(i), e.menu_particles.push(i); var i = new particle(new point(t.x - n, t.y - n), new vector(0, 0)); i.setasmenuanchortype(), i.menu_name = "blog", e.particles.push(i), e.menu_particles.push(i); var i = new particle(new point(t.x - n, t.y), new vector(0, 0)); i.setasmenuanchortype(), i.menu_name = "mission", e.particles.push(i), e.menu_particles.push(i); var i = new particle(new point(t.x - n, t.y + n), new vector(0, 0)); i.setasmenuanchortype(), i.menu_name = "company", e.particles.push(i), e.menu_particles.push(i); var i = new particle(new point(t.x, t.y + n), new vector(0, 0)); i.setasmenuanchortype(), i.menu_name = "projects", e.particles.push(i), e.menu_particles.push(i); var i = new particle(new point(t.x + n, t.y + n), new vector(0, 0)); i.setasmenuanchortype(), i.menu_name = "team", e.particles.push(i), e.menu_particles.push(i); var i = new particle(new point(t.x + n, t.y), new vector(0, 0)); i.setasmenuanchortype(), i.menu_name = "contact", e.particles.push(i), e.menu_particles.push(i); var i = new particle(new point(t.x + n, t.y - n), new vector(0, 0)); i.setasmenuanchortype(), i.menu_name = "ethereum", e.particles.push(i), e.menu_particles.push(i) }, e.getparticlecount = function() { return e.particles.length }, e.getemittercount = function() { return e.emitters.length }, e.getfieldcount = function() { return e.fields.length }, e.tostring = function() { for (var t = 1, n = [e.maxparticles, e.draw.objects ? 1 : 0, e.draw.accelerations ? 1 : 0, e.draw.velocities ? 1 : 0, e.draw.particles ? 1 : 0], i = 0; i < e.emitters.length; i++) n.push(e.emitters[i].tostring()); for (var i = 0; i < e.fields.length; i++) n.push(e.fields[i].tostring()); return "sv" + t + "(" + n.join("|") + ")" }, e.fromstring = function(t) { var n = { sv1: e.loadstatev1 }, i = t.match(/^([^(]+)\((.*)\)$/); i && 3 == i.length && n[i[1]] && n[i[1]](i[2]) }, e.loadstatev1 = function(t) { var n = t.split("|"); e.maxparticles = parseint(n.shift()), e.draw.objects = "1" === n.shift() ? !0 : !1, e.draw.accelerations = "1" === n.shift() ? !0 : !1, e.draw.velocities = "1" === n.shift() ? !0 : !1, e.draw.particles = "1" === n.shift() ? !0 : !1, e.emitters = [], e.fields = []; for (; objectstring = n.shift();) "e" == objectstring.charat(0) ? e.emitters.push(particleemitter.fromstring(objectstring)) : e.fields.push(field.fromstring(objectstring)) } } function field(e, t) { this.position = e, this.size = 8, this.setmass(t) } function vector(e, t) { this.x = e || 0, this.y = t || 0 } function addemittersandfields(e) { var t = e.display; t.logo.width = $("#blachole").width(), t.logo.height = $("#blachole").height(), t.logo.position = $("#blachole").position(), issmalldevice() ? (e.maxparticles = math.round($(window).width() / 5), e.maxparticles > 150 && (e.maxparticles = 150), e.addemitter(new point(rem(3.2), t.canvas.height / t.scale - rem(30.1)), new vector(1, 0)), e.addemitter(new point(rem(3.2), t.canvas.height / t.scale - rem(22.1)), new vector(1, 0)), e.addemitter(new point(rem(3.2), t.canvas.height / t.scale - rem(16.5)), new vector(1, 0)), e.addemitter(new point(0, 0), new vector(.5, 1)), e.addemitter(new point(rem(3), t.canvas.height / t.scale - rem(4)), new vector(1, -.3))) : (e.maxparticles = 400, e.addemitter(new point(rem(10), rem(14)), new vector(1, .5)), e.addemitter(new point(rem(49), rem(32)), new vector(1, .5)), e.addemitter(new point(rem(9.5), rem(24)), new vector(1, .5)), e.addemitter(new point(rem(9.5), rem(32)), new vector(1, .5)), e.addemitter(new point(rem(10), rem(42)), new vector(1, .5)), e.addemitter(new point(rem(29), rem(14)), new vector(1, .5)), e.addemitter(new point(rem(10), t.canvas.height / t.scale - rem(10)), new vector(1, -.1))); var n = 1 * math.sqrt(t.canvas.width / t.scale / 2 * (t.canvas.width / t.scale / 2) + t.canvas.height / t.scale / 2 * (t.canvas.height / t.scale / 2)), i = { top: t.logo.position.top + t.logo.height / 2, left: t.logo.position.left + t.logo.width / 2 }; e.addfield(new point(i.left, i.top), 2 * n), issmalldevice() ? (e.addfield(new point(t.canvas.width / t.scale - rem(2.4), t.canvas.height / t.scale - rem(2.4)), -n / 10), e.addfield(new point(t.canvas.width / t.scale, 2 * (t.canvas.height / t.scale) / 3), -n / 10)) : (e.addfield(new point(t.canvas.width / t.scale - rem(12), t.canvas.height / t.scale - rem(12)), -n / 10), e.addfield(new point(t.canvas.width / t.scale / 2, 120), n / 5)) } void 0 === jquery.migratemute && (jquery.migratemute = !0), function(e, t, n) { function i(n) { var i = t.console; r[n] || (r[n] = !0, e.migratewarnings.push(n), i && i.warn && !e.migratemute && (i.warn("jqmigrate: " + n), e.migratetrace && i.trace && i.trace())) } function o(t, o, r, a) { if (object.defineproperty) try { return object.defineproperty(t, o, { configurable: !0, enumerable: !0, get: function() { return i(a), r }, set: function(e) { i(a), r = e } }), n } catch (s) {} e._definepropertybroken = !0, t[o] = r } var r = {}; e.migratewarnings = [], !e.migratemute && t.console && t.console.log && t.console.log("jqmigrate: logging is active"), e.migratetrace === n && (e.migratetrace = !0), e.migratereset = function() { r = {}, e.migratewarnings.length = 0 }, "backcompat" === document.compatmode && i("jquery is not compatible with quirks mode"); var a = e("", { size: 1 }).attr("size") && e.attrfn, s = e.attr, l = e.attrhooks.value && e.attrhooks.value.get || function() { return null }, c = e.attrhooks.value && e.attrhooks.value.set || function() { return n }, u = /^(?:input|button)$/i, d = /^[238]$/, p = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, f = /^(?:checked|selected)$/i; o(e, "attrfn", a || {}, "jquery.attrfn is deprecated"), e.attr = function(t, o, r, l) { var c = o.tolowercase(), h = t && t.nodetype; return l && (4 > s.length && i("jquery.fn.attr( props, pass ) is deprecated"), t && !d.test(h) && (a ? o in a : e.isfunction(e.fn[o]))) ? e(t)[o](r) : ("type" === o && r !== n && u.test(t.nodename) && t.parentnode && i("can't change the 'type' of an input or button in ie 6/7/8"), !e.attrhooks[c] && p.test(c) && (e.attrhooks[c] = { get: function(t, i) { var o, r = e.prop(t, i); return r === !0 || "boolean" != typeof r && (o = t.getattributenode(i)) && o.nodevalue !== !1 ? i.tolowercase() : n }, set: function(t, n, i) { var o; return n === !1 ? e.removeattr(t, i) : (o = e.propfix[i] || i, o in t && (t[o] = !0), t.setattribute(i, i.tolowercase())), i } }, f.test(c) && i("jquery.fn.attr('" + c + "') may use property instead of attribute")), s.call(e, t, o, r)) }, e.attrhooks.value = { get: function(e, t) { var n = (e.nodename || "").tolowercase(); return "button" === n ? l.apply(this, arguments) : ("input" !== n && "option" !== n && i("jquery.fn.attr('value') no longer gets properties"), t in e ? e.value : null) }, set: function(e, t) { var o = (e.nodename || "").tolowercase(); return "button" === o ? c.apply(this, arguments) : ("input" !== o && "option" !== o && i("jquery.fn.attr('value', val) no longer sets properties"), e.value = t, n) } }; var h, m, g = e.fn.init, v = e.parsejson, y = /^([^<]*)(<[\w\w]+>)([^>]*)$/; e.fn.init = function(t, n, o) { var r; return t && "string" == typeof t && !e.isplainobject(n) && (r = y.exec(e.trim(t))) && r[0] && ("<" !== t.charat(0) && i("$(html) html strings must start with '<' character"), r[3] && i("$(html) html text after last tag is ignored"), "#" === r[0].charat(0) && (i("html string cannot start with a '#' character"), e.error("jqmigrate: invalid selector string (xss)")), n && n.context && (n = n.context), e.parsehtml) ? g.call(this, e.parsehtml(r[2], n, !0), n, o) : g.apply(this, arguments) }, e.fn.init.prototype = e.fn, e.parsejson = function(e) { return e || null === e ? v.apply(this, arguments) : (i("jquery.parsejson requires a valid json string"), null) }, e.uamatch = function(e) { e = e.tolowercase(); var t = /(chrome)[ \/]([\w.]+)/.exec(e) || /(webkit)[ \/]([\w.]+)/.exec(e) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e) || /(msie) ([\w.]+)/.exec(e) || 0 > e.indexof("compatible") && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e) || []; return { browser: t[1] || "", version: t[2] || "0" } }, e.browser || (h = e.uamatch(navigator.useragent), m = {}, h.browser && (m[h.browser] = !0, m.version = h.version), m.chrome ? m.webkit = !0 : m.webkit && (m.safari = !0), e.browser = m), o(e, "browser", e.browser, "jquery.browser is deprecated"), e.sub = function() { function t(e, n) { return new t.fn.init(e, n) } e.extend(!0, t, this), t.superclass = this, t.fn = t.prototype = this(), t.fn.constructor = t, t.sub = this.sub, t.fn.init = function(i, o) { return o && o instanceof e && !(o instanceof t) && (o = t(o)), e.fn.init.call(this, i, o, n) }, t.fn.init.prototype = t.fn; var n = t(document); return i("jquery.sub() is deprecated"), t }, e.ajaxsetup({ converters: { "text json": e.parsejson } }); var w = e.fn.data; e.fn.data = function(t) { var o, r, a = this[0]; return !a || "events" !== t || 1 !== arguments.length || (o = e.data(a, t), r = e._data(a, t), o !== n && o !== r || r === n) ? w.apply(this, arguments) : (i("use of jquery.fn.data('events') is deprecated"), r) }; var b = /\/(java|ecma)script/i, x = e.fn.andself || e.fn.addback; e.fn.andself = function() { return i("jquery.fn.andself() replaced by jquery.fn.addback()"), x.apply(this, arguments) }, e.clean || (e.clean = function(t, o, r, a) { o = o || document, o = !o.nodetype && o[0] || o, o = o.ownerdocument || o, i("jquery.clean() is deprecated"); var s, l, c, u, d = []; if (e.merge(d, e.buildfragment(t, o).childnodes), r) for (c = function(e) { return !e.type || b.test(e.type) ? a ? a.push(e.parentnode ? e.parentnode.removechild(e) : e) : r.appendchild(e) : n }, s = 0; null != (l = d[s]); s++) e.nodename(l, "script") && c(l) || (r.appendchild(l), l.getelementsbytagname !== n && (u = e.grep(e.merge([], l.getelementsbytagname("script")), c), d.splice.apply(d, [s + 1, 0].concat(u)), s += u.length)); return d }); var s = e.event.add, c = e.event.remove, t = e.event.trigger, e = e.fn.toggle, _ = e.fn.live, i = e.fn.die, p = "ajaxstart|ajaxstop|ajaxsend|ajaxcomplete|ajaxerror|ajaxsuccess", k = regexp("\\b(?:" + p + ")\\b"), m = /(?:^|\s)hover(\.\s+|)\b/, h = function(t) { return "string" != typeof t || e.event.special.hover ? t : (m.test(t) && i("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'"), t && t.replace(m, "mouseenter$1 mouseleave$1")) }; e.event.props && "attrchange" !== e.event.props[0] && e.event.props.unshift("attrchange", "attrname", "relatednode", "srcelement"), e.event.dispatch && o(e.event, "handle", e.event.dispatch, "jquery.event.handle is undocumented and deprecated"), e.event.add = function(e, t, n, o, r) { e !== document && k.test(t) && i("ajax events should be attached to document: " + t), s.call(this, e, h(t || ""), n, o, r) }, e.event.remove = function(e, t, n, i, o) { c.call(this, e, h(t) || "", n, i, o) }, e.fn.error = function() { var e = array.prototype.slice.call(arguments, 0); return i("jquery.fn.error() is deprecated"), e.splice(0, 0, "error"), arguments.length ? this.bind.apply(this, e) : (this.triggerhandler.apply(this, e), this) }, e.fn.toggle = function(t, n) { if (!e.isfunction(t) || !e.isfunction(n)) return e.apply(this, arguments); i("jquery.fn.toggle(handler, handler...) is deprecated"); var o = arguments, r = t.guid || e.guid++, a = 0, s = function(n) { var i = (e._data(this, "lasttoggle" + t.guid) || 0) % a; return e._data(this, "lasttoggle" + t.guid, i + 1), n.preventdefault(), o[i].apply(this, arguments) || !1 }; for (s.guid = r; o.length > a;) o[a++].guid = r; return this.click(s) }, e.fn.live = function(t, n, o) { return i("jquery.fn.live() is deprecated"), _ ? _.apply(this, arguments) : (e(this.context).on(t, this.selector, n, o), this) }, e.fn.die = function(t, n) { return i("jquery.fn.die() is deprecated"), i ? i.apply(this, arguments) : (e(this.context).off(t, this.selector || "**", n), this) }, e.event.trigger = function(e, t, n, o) { return n || k.test(e) || i("global events are undocumented and deprecated"), t.call(this, e, t, n || document, o) }, e.each(p.split("|"), function(t, n) { e.event.special[n] = { setup: function() { var t = this; return t !== document && (e.event.add(document, n + "." + e.guid, function() { e.event.trigger(n, null, t, !0) }), e._data(this, n, e.guid++)), !1 }, teardown: function() { return this !== document && e.event.remove(document, n + "." + e._data(this, n)), !1 } } }) }(jquery, window), jquery.easing.jswing = jquery.easing.swing, jquery.extend(jquery.easing, { def: "easeoutquad", swing: function(e, t, n, i, o) { return jquery.easing[jquery.easing.def](e, t, n, i, o) }, easeinquad: function(e, t, n, i, o) { return i * (t /= o) * t + n }, easeoutquad: function(e, t, n, i, o) { return -i * (t /= o) * (t - 2) + n }, easeinoutquad: function(e, t, n, i, o) { return (t /= o / 2) < 1 ? i / 2 * t * t + n : -i / 2 * (--t * (t - 2) - 1) + n }, easeincubic: function(e, t, n, i, o) { return i * (t /= o) * t * t + n }, easeoutcubic: function(e, t, n, i, o) { return i * ((t = t / o - 1) * t * t + 1) + n }, easeinoutcubic: function(e, t, n, i, o) { return (t /= o / 2) < 1 ? i / 2 * t * t * t + n : i / 2 * ((t -= 2) * t * t + 2) + n }, easeinquart: function(e, t, n, i, o) { return i * (t /= o) * t * t * t + n }, easeoutquart: function(e, t, n, i, o) { return -i * ((t = t / o - 1) * t * t * t - 1) + n }, easeinoutquart: function(e, t, n, i, o) { return (t /= o / 2) < 1 ? i / 2 * t * t * t * t + n : -i / 2 * ((t -= 2) * t * t * t - 2) + n }, easeinquint: function(e, t, n, i, o) { return i * (t /= o) * t * t * t * t + n }, easeoutquint: function(e, t, n, i, o) { return i * ((t = t / o - 1) * t * t * t * t + 1) + n }, easeinoutquint: function(e, t, n, i, o) { return (t /= o / 2) < 1 ? i / 2 * t * t * t * t * t + n : i / 2 * ((t -= 2) * t * t * t * t + 2) + n }, easeinsine: function(e, t, n, i, o) { return -i * math.cos(t / o * (math.pi / 2)) + i + n }, easeoutsine: function(e, t, n, i, o) { return i * math.sin(t / o * (math.pi / 2)) + n }, easeinoutsine: function(e, t, n, i, o) { return -i / 2 * (math.cos(math.pi * t / o) - 1) + n }, easeinexpo: function(e, t, n, i, o) { return 0 == t ? n : i * math.pow(2, 10 * (t / o - 1)) + n }, easeoutexpo: function(e, t, n, i, o) { return t == o ? n + i : i * (-math.pow(2, -10 * t / o) + 1) + n }, easeinoutexpo: function(e, t, n, i, o) { return 0 == t ? n : t == o ? n + i : (t /= o / 2) < 1 ? i / 2 * math.pow(2, 10 * (t - 1)) + n : i / 2 * (-math.pow(2, -10 * --t) + 2) + n }, easeincirc: function(e, t, n, i, o) { return -i * (math.sqrt(1 - (t /= o) * t) - 1) + n }, easeoutcirc: function(e, t, n, i, o) { return i * math.sqrt(1 - (t = t / o - 1) * t) + n }, easeinoutcirc: function(e, t, n, i, o) { return (t /= o / 2) < 1 ? -i / 2 * (math.sqrt(1 - t * t) - 1) + n : i / 2 * (math.sqrt(1 - (t -= 2) * t) + 1) + n }, easeinelastic: function(e, t, n, i, o) { var r = 1.70158, a = 0, s = i; if (0 == t) return n; if (1 == (t /= o)) return n + i; if (a || (a = .3 * o), s < math.abs(i)) { s = i; var r = a / 4 } else var r = a / (2 * math.pi) * math.asin(i / s); return -(s * math.pow(2, 10 * (t -= 1)) * math.sin(2 * (t * o - r) * math.pi / a)) + n }, easeoutelastic: function(e, t, n, i, o) { var r = 1.70158, a = 0, s = i; if (0 == t) return n; if (1 == (t /= o)) return n + i; if (a || (a = .3 * o), s < math.abs(i)) { s = i; var r = a / 4 } else var r = a / (2 * math.pi) * math.asin(i / s); return s * math.pow(2, -10 * t) * math.sin(2 * (t * o - r) * math.pi / a) + i + n }, easeinoutelastic: function(e, t, n, i, o) { var r = 1.70158, a = 0, s = i; if (0 == t) return n; if (2 == (t /= o / 2)) return n + i; if (a || (a = .3 * o * 1.5), s < math.abs(i)) { s = i; var r = a / 4 } else var r = a / (2 * math.pi) * math.asin(i / s); return 1 > t ? -.5 * s * math.pow(2, 10 * (t -= 1)) * math.sin(2 * (t * o - r) * math.pi / a) + n : s * math.pow(2, -10 * (t -= 1)) * math.sin(2 * (t * o - r) * math.pi / a) * .5 + i + n }, easeinback: function(e, t, n, i, o, r) { return void 0 == r && (r = 1.70158), i * (t /= o) * t * ((r + 1) * t - r) + n }, easeoutback: function(e, t, n, i, o, r) { return void 0 == r && (r = 1.70158), i * ((t = t / o - 1) * t * ((r + 1) * t + r) + 1) + n }, easeinoutback: function(e, t, n, i, o, r) { return void 0 == r && (r = 1.70158), (t /= o / 2) < 1 ? i / 2 * t * t * (((r *= 1.525) + 1) * t - r) + n : i / 2 * ((t -= 2) * t * (((r *= 1.525) + 1) * t + r) + 2) + n }, easeinbounce: function(e, t, n, i, o) { return i - jquery.easing.easeoutbounce(e, o - t, 0, i, o) + n }, easeoutbounce: function(e, t, n, i, o) { return (t /= o) < 1 / 2.75 ? 7.5625 * i * t * t + n : 2 / 2.75 > t ? i * (7.5625 * (t -= 1.5 / 2.75) * t + .75) + n : 2.5 / 2.75 > t ? i * (7.5625 * (t -= 2.25 / 2.75) * t + .9375) + n : i * (7.5625 * (t -= 2.625 / 2.75) * t + .984375) + n }, easeinoutbounce: function(e, t, n, i, o) { return o / 2 > t ? .5 * jquery.easing.easeinbounce(e, 2 * t, 0, i, o) + n : .5 * jquery.easing.easeoutbounce(e, 2 * t - o, 0, i, o) + .5 * i + n } }), "object" != typeof json && (json = {}), function() { "use strict"; function f(e) { return 10 > e ? "0" + e : e } function quote(e) { return escapable.lastindex = 0, escapable.test(e) ? '"' + e.replace(escapable, function(e) { var t = meta[e]; return "string" == typeof t ? t : "\\u" + ("0000" + e.charcodeat(0).tostring(16)).slice(-4) }) + '"' : '"' + e + '"' } function str(e, t) { var n, i, o, r, a, s = gap, l = t[e]; switch (l && "object" == typeof l && "function" == typeof l.tojson && (l = l.tojson(e)), "function" == typeof rep && (l = rep.call(t, e, l)), typeof l) { case "string": return quote(l); case "number": return isfinite(l) ? string(l) : "null"; case "boolean": case "null": return string(l); case "object": if (!l) return "null"; if (gap += indent, a = [], "[object array]" === object.prototype.tostring.apply(l)) { for (r = l.length, n = 0; r > n; n += 1) a[n] = str(n, l) || "null"; return o = 0 === a.length ? "[]" : gap ? "[\n" + gap + a.join(",\n" + gap) + "\n" + s + "]" : "[" + a.join(",") + "]", gap = s, o } if (rep && "object" == typeof rep) for (r = rep.length, n = 0; r > n; n += 1) "string" == typeof rep[n] && (i = rep[n], o = str(i, l), o && a.push(quote(i) + (gap ? ": " : ":") + o)); else for (i in l) object.prototype.hasownproperty.call(l, i) && (o = str(i, l), o && a.push(quote(i) + (gap ? ": " : ":") + o)); return o = 0 === a.length ? "{}" : gap ? "{\n" + gap + a.join(",\n" + gap) + "\n" + s + "}" : "{" + a.join(",") + "}", gap = s, o } } "function" != typeof date.prototype.tojson && (date.prototype.tojson = function() { return isfinite(this.valueof()) ? this.getutcfullyear() + "-" + f(this.getutcmonth() + 1) + "-" + f(this.getutcdate()) + "t" + f(this.getutchours()) + ":" + f(this.getutcminutes()) + ":" + f(this.getutcseconds()) + "z" : null }, string.prototype.tojson = number.prototype.tojson = boolean.prototype.tojson = function() { return this.valueof() }); var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, gap, indent, meta = { "\b": "\\b", " ": "\\t", "\n": "\\n", "\f": "\\f", "\r": "\\r", '"': '\\"', "\\": "\\\\" }, rep; "function" != typeof json.stringify && (json.stringify = function(e, t, n) { var i; if (gap = "", indent = "", "number" == typeof n) for (i = 0; n > i; i += 1) indent += " "; else "string" == typeof n && (indent = n); if (rep = t, !t || "function" == typeof t || "object" == typeof t && "number" == typeof t.length) return str("", { "": e }); throw new error("json.stringify") }), "function" != typeof json.parse && (json.parse = function(text, reviver) { function walk(e, t) { var n, i, o = e[t]; if (o && "object" == typeof o) for (n in o) object.prototype.hasownproperty.call(o, n) && (i = walk(o, n), void 0 !== i ? o[n] = i : delete o[n]); return reviver.call(e, t, o) } var j; if (text = string(text), cx.lastindex = 0, cx.test(text) && (text = text.replace(cx, function(e) { return "\\u" + ("0000" + e.charcodeat(0).tostring(16)).slice(-4) })), /^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fa-f]{4})/g, "@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[ee][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) return j = eval("(" + text + ")"), "function" == typeof reviver ? walk({ "": j }, "") : j; throw new syntaxerror("json.parse") }) }(), function(e, t) { "use strict"; var n = e.history = e.history || {}, i = e.jquery; if ("undefined" != typeof n.adapter) throw new error("history.js adapter has already been loaded..."); n.adapter = { bind: function(e, t, n) { i(e).bind(t, n) }, trigger: function(e, t, n) { i(e).trigger(t, n) }, extracteventdata: function(e, n, i) { var o = n && n.originalevent && n.originalevent[e] || i && i[e] || t; return o }, ondomload: function(e) { i(e) } }, "undefined" != typeof n.init && n.init() }(window), function(e) { "use strict"; var t = e.document, n = e.settimeout || n, i = e.cleartimeout || i, o = e.setinterval || o, r = e.history = e.history || {}; if ("undefined" != typeof r.inithtml4) throw new error("history.js html4 support has already been loaded..."); r.inithtml4 = function() { return "undefined" != typeof r.inithtml4.initialized ? !1 : (r.inithtml4.initialized = !0, r.enabled = !0, r.savedhashes = [], r.islasthash = function(e) { var t, n = r.gethashbyindex(); return t = e === n }, r.ishashequal = function(e, t) { return e = encodeuricomponent(e).replace(/%25/g, "%"), t = encodeuricomponent(t).replace(/%25/g, "%"), e === t }, r.savehash = function(e) { return r.islasthash(e) ? !1 : (r.savedhashes.push(e), !0) }, r.gethashbyindex = function(e) { var t = null; return t = "undefined" == typeof e ? r.savedhashes[r.savedhashes.length - 1] : 0 > e ? r.savedhashes[r.savedhashes.length + e] : r.savedhashes[e] }, r.discardedhashes = {}, r.discardedstates = {}, r.discardstate = function(e, t, n) { var i, o = r.gethashbystate(e); return i = { discardedstate: e, backstate: n, forwardstate: t }, r.discardedstates[o] = i, !0 }, r.discardhash = function(e, t, n) { var i = { discardedhash: e, backstate: n, forwardstate: t }; return r.discardedhashes[e] = i, !0 }, r.discardedstate = function(e) { var t, n = r.gethashbystate(e); return t = r.discardedstates[n] || !1 }, r.discardedhash = function(e) { var t = r.discardedhashes[e] || !1; return t }, r.recyclestate = function(e) { var t = r.gethashbystate(e); return r.discardedstate(e) && delete r.discardedstates[t], !0 }, r.emulated.hashchange && (r.hashchangeinit = function() { r.checkerfunction = null; var n, i, a, s, l = "", c = boolean(r.gethash()); return r.isinternetexplorer() ? (n = "historyjs-iframe", i = t.createelement("iframe"), i.setattribute("id", n), i.setattribute("src", "#"), i.style.display = "none", t.body.appendchild(i), i.contentwindow.document.open(), i.contentwindow.document.close(), a = "", s = !1, r.checkerfunction = function() { if (s) return !1; s = !0; var t = r.gethash(), n = r.gethash(i.contentwindow.document); return t !== l ? (l = t, n !== t && (a = n = t, i.contentwindow.document.open(), i.contentwindow.document.close(), i.contentwindow.document.location.hash = r.escapehash(t)), r.adapter.trigger(e, "hashchange")) : n !== a && (a = n, c && "" === n ? r.back() : r.sethash(n, !1)), s = !1, !0 }) : r.checkerfunction = function() { var t = r.gethash() || ""; return t !== l && (l = t, r.adapter.trigger(e, "hashchange")), !0 }, r.intervallist.push(o(r.checkerfunction, r.options.hashchangeinterval)), !0 }, r.adapter.ondomload(r.hashchangeinit)), r.emulated.pushstate && (r.onhashchange = function(t) { var n, i = t && t.newurl || r.getlocationhref(), o = r.gethashbyurl(i), a = null, s = null; return r.islasthash(o) ? (r.busy(!1), !1) : (r.doublecheckcomplete(), r.savehash(o), o && r.istraditionalanchor(o) ? (r.adapter.trigger(e, "anchorchange"), r.busy(!1), !1) : (a = r.extractstate(r.getfullurl(o || r.getlocationhref()), !0), r.islastsavedstate(a) ? (r.busy(!1), !1) : (s = r.gethashbystate(a), n = r.discardedstate(a), n ? (r.gethashbyindex(-2) === r.gethashbystate(n.forwardstate) ? r.back(!1) : r.forward(!1), !1) : (r.pushstate(a.data, a.title, encodeuri(a.url), !1), !0)))) }, r.adapter.bind(e, "hashchange", r.onhashchange), r.pushstate = function(t, n, i, o) { if (i = encodeuri(i).replace(/%25/g, "%"), r.gethashbyurl(i)) throw new error("history.js does not support states with fragment-identifiers (hashes/anchors)."); if (o !== !1 && r.busy()) return r.pushqueue({ scope: r, callback: r.pushstate, args: arguments, queue: o }), !1; r.busy(!0); var a = r.createstateobject(t, n, i), s = r.gethashbystate(a), l = r.getstate(!1), c = r.gethashbystate(l), u = r.gethash(), d = r.expectedstateid == a.id; return r.storestate(a), r.expectedstateid = a.id, r.recyclestate(a), r.settitle(a), s === c ? (r.busy(!1), !1) : (r.savestate(a), d || r.adapter.trigger(e, "statechange"), !r.ishashequal(s, u) && !r.ishashequal(s, r.getshorturl(r.getlocationhref())) && r.sethash(s, !1), r.busy(!1), !0) }, r.replacestate = function(t, n, i, o) { if (i = encodeuri(i).replace(/%25/g, "%"), r.gethashbyurl(i)) throw new error("history.js does not support states with fragment-identifiers (hashes/anchors)."); if (o !== !1 && r.busy()) return r.pushqueue({ scope: r, callback: r.replacestate, args: arguments, queue: o }), !1; r.busy(!0); var a = r.createstateobject(t, n, i), s = r.gethashbystate(a), l = r.getstate(!1), c = r.gethashbystate(l), u = r.getstatebyindex(-2); return r.discardstate(l, a, u), s === c ? (r.storestate(a), r.expectedstateid = a.id, r.recyclestate(a), r.settitle(a), r.savestate(a), r.adapter.trigger(e, "statechange"), r.busy(!1)) : r.pushstate(a.data, a.title, a.url, !1), !0 }), r.emulated.pushstate && r.gethash() && !r.emulated.hashchange && r.adapter.ondomload(function() { r.adapter.trigger(e, "hashchange") }), void 0) }, "undefined" != typeof r.init && r.init() }(window), function(e, t) { "use strict"; var n = e.console || t, i = e.document, o = e.navigator, r = !1, a = e.settimeout, s = e.cleartimeout, l = e.setinterval, c = e.clearinterval, u = e.json, d = e.alert, p = e.history = e.history || {}, f = e.history; try { r = e.sessionstorage, r.setitem("test", "1"), r.removeitem("test") } catch (h) { r = !1 } if (u.stringify = u.stringify || u.encode, u.parse = u.parse || u.decode, "undefined" != typeof p.init) throw new error("history.js core has already been loaded..."); p.init = function() { return "undefined" == typeof p.adapter ? !1 : ("undefined" != typeof p.initcore && p.initcore(), "undefined" != typeof p.inithtml4 && p.inithtml4(), !0) }, p.initcore = function() { if ("undefined" != typeof p.initcore.initialized) return !1; if (p.initcore.initialized = !0, p.options = p.options || {}, p.options.hashchangeinterval = p.options.hashchangeinterval || 100, p.options.safaripollinterval = p.options.safaripollinterval || 500, p.options.doublecheckinterval = p.options.doublecheckinterval || 500, p.options.disablesuid = p.options.disablesuid || !1, p.options.storeinterval = p.options.storeinterval || 1e3, p.options.busydelay = p.options.busydelay || 250, p.options.debug = p.options.debug || !1, p.options.initialtitle = p.options.initialtitle || i.title, p.options.html4mode = p.options.html4mode || !1, p.options.delayinit = p.options.delayinit || !1, p.intervallist = [], p.clearallintervals = function() { var e, t = p.intervallist; if ("undefined" != typeof t && null !== t) { for (e = 0; e < t.length; e++) c(t[e]); p.intervallist = null } }, p.debug = function() { (p.options.debug || !1) && p.log.apply(p, arguments) }, p.log = function() { var e, t, o, r, a, s = "undefined" != typeof n && "undefined" != typeof n.log && "undefined" != typeof n.log.apply, l = i.getelementbyid("log"); for (s ? (r = array.prototype.slice.call(arguments), e = r.shift(), "undefined" != typeof n.debug ? n.debug.apply(n, [e, r]) : n.log.apply(n, [e, r])) : e = "\n" + arguments[0] + "\n", t = 1, o = arguments.length; o > t; ++t) { if (a = arguments[t], "object" == typeof a && "undefined" != typeof u) try { a = u.stringify(a) } catch (c) {} e += "\n" + a + "\n" } return l ? (l.value += e + "\n-----\n", l.scrolltop = l.scrollheight - l.clientheight) : s || d(e), !0 }, p.getinternetexplorermajorversion = function() { var e = p.getinternetexplorermajorversion.cached = "undefined" != typeof p.getinternetexplorermajorversion.cached ? p.getinternetexplorermajorversion.cached : function() { for (var e = 3, t = i.createelement("div"), n = t.getelementsbytagname("i"); (t.innerhtml = "") && n[0];); return e > 4 ? e : !1 }(); return e }, p.isinternetexplorer = function() { var e = p.isinternetexplorer.cached = "undefined" != typeof p.isinternetexplorer.cached ? p.isinternetexplorer.cached : boolean(p.getinternetexplorermajorversion()); return e }, p.emulated = p.options.html4mode ? { pushstate: !0, hashchange: !0 } : { pushstate: !boolean(e.history && e.history.pushstate && e.history.replacestate && !/ mobile\/([1-7][a-z]|(8([abcde]|f(1[0-8]))))/i.test(o.useragent) && !/applewebkit\/5([0-2]|3[0-2])/i.test(o.useragent)), hashchange: boolean(!("onhashchange" in e || "onhashchange" in i) || p.isinternetexplorer() && p.getinternetexplorermajorversion() < 8) }, p.enabled = !p.emulated.pushstate, p.bugs = { sethash: boolean(!p.emulated.pushstate && "apple computer, inc." === o.vendor && /applewebkit\/5([0-2]|3[0-3])/.test(o.useragent)), safaripoll: boolean(!p.emulated.pushstate && "apple computer, inc." === o.vendor && /applewebkit\/5([0-2]|3[0-3])/.test(o.useragent)), iedoublecheck: boolean(p.isinternetexplorer() && p.getinternetexplorermajorversion() < 8), hashescape: boolean(p.isinternetexplorer() && p.getinternetexplorermajorversion() < 7) }, p.isemptyobject = function(e) { for (var t in e) if (e.hasownproperty(t)) return !1; return !0 }, p.cloneobject = function(e) { var t, n; return e ? (t = u.stringify(e), n = u.parse(t)) : n = {}, n }, p.getrooturl = function() { var e = i.location.protocol + "//" + (i.location.hostname || i.location.host); return i.location.port && (e += ":" + i.location.port), e += "/" }, p.getbasehref = function() { var e = i.getelementsbytagname("base"), t = null, n = ""; return 1 === e.length && (t = e[0], n = t.href.replace(/[^\/]+$/, "")), n = n.replace(/\/+$/, ""), n && (n += "/"), n }, p.getbaseurl = function() { var e = p.getbasehref() || p.getbasepageurl() || p.getrooturl(); return e }, p.getpageurl = function() { var e, t = p.getstate(!1, !1), n = (t || {}).url || p.getlocationhref(); return e = n.replace(/\/+$/, "").replace(/[^\/]+$/, function(e) { return /\./.test(e) ? e : e + "/" }) }, p.getbasepageurl = function() { var e = p.getlocationhref().replace(/[#\?].*/, "").replace(/[^\/]+$/, function(e) { return /[^\/]$/.test(e) ? "" : e }).replace(/\/+$/, "") + "/"; return e }, p.getfullurl = function(e, t) { var n = e, i = e.substring(0, 1); return t = "undefined" == typeof t ? !0 : t, /[a-z]+\:\/\//.test(e) || (n = "/" === i ? p.getrooturl() + e.replace(/^\/+/, "") : "#" === i ? p.getpageurl().replace(/#.*/, "") + e : "?" === i ? p.getpageurl().replace(/[\?#].*/, "") + e : t ? p.getbaseurl() + e.replace(/^(\.\/)+/, "") : p.getbasepageurl() + e.replace(/^(\.\/)+/, "")), n.replace(/\#$/, "") }, p.getshorturl = function(e) { var t = e, n = p.getbaseurl(), i = p.getrooturl(); return p.emulated.pushstate && (t = t.replace(n, "")), t = t.replace(i, "/"), p.istraditionalanchor(t) && (t = "./" + t), t = t.replace(/^(\.\/)+/g, "./").replace(/\#$/, "") }, p.getlocationhref = function(e) { return e = e || i, e.url === e.location.href ? e.location.href : e.location.href === decodeuricomponent(e.url) ? e.url : e.location.hash && decodeuricomponent(e.location.href.replace(/^[^#]+/, "")) === e.location.hash ? e.location.href : -1 == e.url.indexof("#") && -1 != e.location.href.indexof("#") ? e.location.href : e.url || e.location.href }, p.store = {}, p.idtostate = p.idtostate || {}, p.statetoid = p.statetoid || {}, p.urltoid = p.urltoid || {}, p.storedstates = p.storedstates || [], p.savedstates = p.savedstates || [], p.normalizestore = function() { p.store.idtostate = p.store.idtostate || {}, p.store.urltoid = p.store.urltoid || {}, p.store.statetoid = p.store.statetoid || {} }, p.getstate = function(e, t) { "undefined" == typeof e && (e = !0), "undefined" == typeof t && (t = !0); var n = p.getlastsavedstate(); return !n && t && (n = p.createstateobject()), e && (n = p.cloneobject(n), n.url = n.cleanurl || n.url), n }, p.getidbystate = function(e) { var t, n = p.extractid(e.url); if (!n) if (t = p.getstatestring(e), "undefined" != typeof p.statetoid[t]) n = p.statetoid[t]; else if ("undefined" != typeof p.store.statetoid[t]) n = p.store.statetoid[t]; else { for (; n = (new date).gettime() + string(math.random()).replace(/\d/g, ""), "undefined" != typeof p.idtostate[n] || "undefined" != typeof p.store.idtostate[n];); p.statetoid[t] = n, p.idtostate[n] = e } return n }, p.normalizestate = function(e) { var t, n; return e && "object" == typeof e || (e = {}), "undefined" != typeof e.normalized ? e : (e.data && "object" == typeof e.data || (e.data = {}), t = {}, t.normalized = !0, t.title = e.title || "", t.url = p.getfullurl(e.url ? e.url : p.getlocationhref()), t.hash = p.getshorturl(t.url), t.data = p.cloneobject(e.data), t.id = p.getidbystate(t), t.cleanurl = t.url.replace(/\??\&_suid.*/, ""), t.url = t.cleanurl, n = !p.isemptyobject(t.data), (t.title || n) && p.options.disablesuid !== !0 && (t.hash = p.getshorturl(t.url).replace(/\??\&_suid.*/, ""), /\?/.test(t.hash) || (t.hash += "?"), t.hash += "&_suid=" + t.id), t.hashedurl = p.getfullurl(t.hash), (p.emulated.pushstate || p.bugs.safaripoll) && p.hasurlduplicate(t) && (t.url = t.hashedurl), t) }, p.createstateobject = function(e, t, n) { var i = { data: e, title: t, url: n }; return i = p.normalizestate(i) }, p.getstatebyid = function(e) { e = string(e); var n = p.idtostate[e] || p.store.idtostate[e] || t; return n }, p.getstatestring = function(e) { var t, n, i; return t = p.normalizestate(e), n = { data: t.data, title: e.title, url: e.url }, i = u.stringify(n) }, p.getstateid = function(e) { var t, n; return t = p.normalizestate(e), n = t.id }, p.gethashbystate = function(e) { var t, n; return t = p.normalizestate(e), n = t.hash }, p.extractid = function(e) { var t, n, i, o; return o = -1 != e.indexof("#") ? e.split("#")[0] : e, n = /(.*)\&_suid=([0-9]+)$/.exec(o), i = n ? n[1] || e : e, t = n ? string(n[2] || "") : "", t || !1 }, p.istraditionalanchor = function(e) { var t = !/[\/\?\.]/.test(e); return t }, p.extractstate = function(e, t) { var n, i, o = null; return t = t || !1, n = p.extractid(e), n && (o = p.getstatebyid(n)), o || (i = p.getfullurl(e), n = p.getidbyurl(i) || !1, n && (o = p.getstatebyid(n)), !o && t && !p.istraditionalanchor(e) && (o = p.createstateobject(null, null, i))), o }, p.getidbyurl = function(e) { var n = p.urltoid[e] || p.store.urltoid[e] || t; return n }, p.getlastsavedstate = function() { return p.savedstates[p.savedstates.length - 1] || t }, p.getlaststoredstate = function() { return p.storedstates[p.storedstates.length - 1] || t }, p.hasurlduplicate = function(e) { var t, n = !1; return t = p.extractstate(e.url), n = t && t.id !== e.id }, p.storestate = function(e) { return p.urltoid[e.url] = e.id, p.storedstates.push(p.cloneobject(e)), e }, p.islastsavedstate = function(e) { var t, n, i, o = !1; return p.savedstates.length && (t = e.id, n = p.getlastsavedstate(), i = n.id, o = t === i), o }, p.savestate = function(e) { return p.islastsavedstate(e) ? !1 : (p.savedstates.push(p.cloneobject(e)), !0) }, p.getstatebyindex = function(e) { var t = null; return t = "undefined" == typeof e ? p.savedstates[p.savedstates.length - 1] : 0 > e ? p.savedstates[p.savedstates.length + e] : p.savedstates[e] }, p.getcurrentindex = function() { var e = null; return e = p.savedstates.length < 1 ? 0 : p.savedstates.length - 1 }, p.gethash = function(e) { var t, n = p.getlocationhref(e); return t = p.gethashbyurl(n) }, p.unescapehash = function(e) { var t = p.normalizehash(e); return t = decodeuricomponent(t) }, p.normalizehash = function(e) { var t = e.replace(/[^#]*#/, "").replace(/#.*/, ""); return t }, p.sethash = function(e, t) { var n, o; return t !== !1 && p.busy() ? (p.pushqueue({ scope: p, callback: p.sethash, args: arguments, queue: t }), !1) : (p.busy(!0), n = p.extractstate(e, !0), n && !p.emulated.pushstate ? p.pushstate(n.data, n.title, n.url, !1) : p.gethash() !== e && (p.bugs.sethash ? (o = p.getpageurl(), p.pushstate(null, null, o + "#" + e, !1)) : i.location.hash = e), p) }, p.escapehash = function(t) { var n = p.normalizehash(t); return n = e.encodeuricomponent(n), p.bugs.hashescape || (n = n.replace(/\%21/g, "!").replace(/\%26/g, "&").replace(/\%3d/g, "=").replace(/\%3f/g, "?")), n }, p.gethashbyurl = function(e) { var t = string(e).replace(/([^#]*)#?([^#]*)#?(.*)/, "$2"); return t = p.unescapehash(t) }, p.settitle = function(e) { var t, n = e.title; n || (t = p.getstatebyindex(0), t && t.url === e.url && (n = t.title || p.options.initialtitle)); try { i.getelementsbytagname("title")[0].innerhtml = n.replace("<", "<").replace(">", ">").replace(" & ", " & ") } catch (o) {} return i.title = n, p }, p.queues = [], p.busy = function(e) { if ("undefined" != typeof e ? p.busy.flag = e : "undefined" == typeof p.busy.flag && (p.busy.flag = !1), !p.busy.flag) { s(p.busy.timeout); var t = function() { var e, n, i; if (!p.busy.flag) for (e = p.queues.length - 1; e >= 0; --e) n = p.queues[e], 0 !== n.length && (i = n.shift(), p.firequeueitem(i), p.busy.timeout = a(t, p.options.busydelay)) }; p.busy.timeout = a(t, p.options.busydelay) } return p.busy.flag }, p.busy.flag = !1, p.firequeueitem = function(e) { return e.callback.apply(e.scope || p, e.args || []) }, p.pushqueue = function(e) { return p.queues[e.queue || 0] = p.queues[e.queue || 0] || [], p.queues[e.queue || 0].push(e), p }, p.queue = function(e, t) { return "function" == typeof e && (e = { callback: e }), "undefined" != typeof t && (e.queue = t), p.busy() ? p.pushqueue(e) : p.firequeueitem(e), p }, p.clearqueue = function() { return p.busy.flag = !1, p.queues = [], p }, p.statechanged = !1, p.doublechecker = !1, p.doublecheckcomplete = function() { return p.statechanged = !0, p.doublecheckclear(), p }, p.doublecheckclear = function() { return p.doublechecker && (s(p.doublechecker), p.doublechecker = !1), p }, p.doublecheck = function(e) { return p.statechanged = !1, p.doublecheckclear(), p.bugs.iedoublecheck && (p.doublechecker = a(function() { return p.doublecheckclear(), p.statechanged || e(), !0 }, p.options.doublecheckinterval)), p }, p.safaristatepoll = function() { var t, n = p.extractstate(p.getlocationhref()); return p.islastsavedstate(n) ? void 0 : (t = n, t || (t = p.createstateobject()), p.adapter.trigger(e, "popstate"), p) }, p.back = function(e) { return e !== !1 && p.busy() ? (p.pushqueue({ scope: p, callback: p.back, args: arguments, queue: e }), !1) : (p.busy(!0), p.doublecheck(function() { p.back(!1) }), f.go(-1), !0) }, p.forward = function(e) { return e !== !1 && p.busy() ? (p.pushqueue({ scope: p, callback: p.forward, args: arguments, queue: e }), !1) : (p.busy(!0), p.doublecheck(function() { p.forward(!1) }), f.go(1), !0) }, p.go = function(e, t) { var n; if (e > 0) for (n = 1; e >= n; ++n) p.forward(t); else { if (!(0 > e)) throw new error("history.go: history.go requires a positive or negative integer passed."); for (n = -1; n >= e; --n) p.back(t) } return p }, p.emulated.pushstate) { var h = function() {}; p.pushstate = p.pushstate || h, p.replacestate = p.replacestate || h } else p.onpopstate = function(t, n) { var i, o, r = !1, a = !1; return p.doublecheckcomplete(), i = p.gethash(), i ? (o = p.extractstate(i || p.getlocationhref(), !0), o ? p.replacestate(o.data, o.title, o.url, !1) : (p.adapter.trigger(e, "anchorchange"), p.busy(!1)), p.expectedstateid = !1, !1) : (r = p.adapter.extracteventdata("state", t, n) || !1, a = r ? p.getstatebyid(r) : p.expectedstateid ? p.getstatebyid(p.expectedstateid) : p.extractstate(p.getlocationhref()), a || (a = p.createstateobject(null, null, p.getlocationhref())), p.expectedstateid = !1, p.islastsavedstate(a) ? (p.busy(!1), !1) : (p.storestate(a), p.savestate(a), p.settitle(a), p.adapter.trigger(e, "statechange"), p.busy(!1), !0)) }, p.adapter.bind(e, "popstate", p.onpopstate), p.pushstate = function(t, n, i, o) { if (p.gethashbyurl(i) && p.emulated.pushstate) throw new error("history.js does not support states with fragement-identifiers (hashes/anchors)."); if (o !== !1 && p.busy()) return p.pushqueue({ scope: p, callback: p.pushstate, args: arguments, queue: o }), !1; p.busy(!0); var r = p.createstateobject(t, n, i); return p.islastsavedstate(r) ? p.busy(!1) : (p.storestate(r), p.expectedstateid = r.id, f.pushstate(r.id, r.title, r.url), p.adapter.trigger(e, "popstate")), !0 }, p.replacestate = function(t, n, i, o) { if (p.gethashbyurl(i) && p.emulated.pushstate) throw new error("history.js does not support states with fragement-identifiers (hashes/anchors)."); if (o !== !1 && p.busy()) return p.pushqueue({ scope: p, callback: p.replacestate, args: arguments, queue: o }), !1; p.busy(!0); var r = p.createstateobject(t, n, i); return p.islastsavedstate(r) ? p.busy(!1) : (p.storestate(r), p.expectedstateid = r.id, f.replacestate(r.id, r.title, r.url), p.adapter.trigger(e, "popstate")), !0 }; if (r) { try { p.store = u.parse(r.getitem("history.store")) || {} } catch (m) { p.store = {} } p.normalizestore() } else p.store = {}, p.normalizestore(); p.adapter.bind(e, "unload", p.clearallintervals), p.savestate(p.storestate(p.extractstate(p.getlocationhref(), !0))), r && (p.onunload = function() { var e, t, n; try { e = u.parse(r.getitem("history.store")) || {} } catch (i) { e = {} } e.idtostate = e.idtostate || {}, e.urltoid = e.urltoid || {}, e.statetoid = e.statetoid || {}; for (t in p.idtostate) p.idtostate.hasownproperty(t) && (e.idtostate[t] = p.idtostate[t]); for (t in p.urltoid) p.urltoid.hasownproperty(t) && (e.urltoid[t] = p.urltoid[t]); for (t in p.statetoid) p.statetoid.hasownproperty(t) && (e.statetoid[t] = p.statetoid[t]); p.store = e, p.normalizestore(), n = u.stringify(e); try { r.setitem("history.store", n) } catch (o) { if (o.code !== domexception.quota_exceeded_err) throw o; r.length && (r.removeitem("history.store"), r.setitem("history.store", n)) } }, p.intervallist.push(l(p.onunload, p.options.storeinterval)), p.adapter.bind(e, "beforeunload", p.onunload), p.adapter.bind(e, "unload", p.onunload)), p.emulated.pushstate || (p.bugs.safaripoll && p.intervallist.push(l(p.safaristatepoll, p.options.safaripollinterval)), ("apple computer, inc." === o.vendor || "mozilla" === (o.appcodename || "")) && (p.adapter.bind(e, "hashchange", function() { p.adapter.trigger(e, "popstate") }), p.gethash() && p.adapter.ondomload(function() { p.adapter.trigger(e, "hashchange") }))) }, (!p.options || !p.options.delayinit) && p.init() }(window), function(e, t) { "function" == typeof define && define.amd ? define(t) : "object" == typeof exports ? module.exports = t() : e.nprogress = t() }(this, function() { function e(e, t, n) { return t > e ? t : e > n ? n : e } function t(e) { return 100 * (-1 + e) } function n(e, n, i) { var o; return o = "translate3d" === c.positionusing ? { transform: "translate3d(" + t(e) + "%,0,0)" } : "translate" === c.positionusing ? { transform: "translate(" + t(e) + "%,0)" } : { "margin-left": t(e) + "%" }, o.transition = "all " + n + "ms " + i, o } function i(e, t) { var n = "string" == typeof e ? e : a(e); return n.indexof(" " + t + " ") >= 0 } function o(e, t) { var n = a(e), o = n + t; i(n, t) || (e.classname = o.substring(1)) } function r(e, t) { var n, o = a(e); i(e, t) && (n = o.replace(" " + t + " ", " "), e.classname = n.substring(1, n.length - 1)) } function a(e) { return (" " + (e.classname || "") + " ").replace(/\s+/gi, " ") } function s(e) { e && e.parentnode && e.parentnode.removechild(e) } var l = {}; l.version = "0.2.0"; var c = l.settings = { minimum: .08, easing: "ease", positionusing: "", speed: 200, trickle: !0, tricklerate: .02, tricklespeed: 800, showspinner: !0, barselector: '[role="bar"]', spinnerselector: '[role="spinner"]', parent: "body", template: '