diff --git a/Installers/Electron/package.json b/Installers/Electron/package.json
new file mode 100644
index 00000000..4af12ce4
--- /dev/null
+++ b/Installers/Electron/package.json
@@ -0,0 +1,20 @@
+{
+ "name": "betterdiscordinstaller",
+ "description": "Better Discord installer.",
+ "version": "0.1.1",
+ "homepage": "https://github.com/Jiiks/BetterDiscordApp",
+ "license": "MIT",
+ "main": "index.js",
+ "dependencies": {
+ "fs-extra": "^0.30.0",
+ "readline": "^1.3.0",
+ "open": "^0.0.5",
+ "request": "^2.72.0",
+ "path": "^0.12.7",
+ "walk": "^2.3.9",
+ "unzip": "^0.1.11"
+ },
+ "devDependencies": {
+ "electron-prebuilt": "~1.2.8"
+ }
+}
diff --git a/Installers/Electron/src/asar.js b/Installers/Electron/src/asar.js
new file mode 100644
index 00000000..5e4b15ab
--- /dev/null
+++ b/Installers/Electron/src/asar.js
@@ -0,0 +1,71 @@
+'use strict';
+
+const
+ fs = require('fs'),
+ path = require('path'),
+ walk = require('walk'),
+ p = require('path');
+
+fs.mkdirPSync = function(dirPath) {
+ try {
+ fs.mkdirSync(dirPath);
+ } catch(err) {
+ if(err.errno === -4058 || err.errno === -2) {
+ fs.mkdirPSync(path.dirname(dirPath));
+ fs.mkdirPSync(dirPath);
+ } else if(err.errno === -4075) {
+ return "EXIST";
+ } else {
+ return "NOT OK";
+ }
+ }
+ return "OK";
+}
+
+class Asar {
+
+ constructor(filePath) {
+ this.path = filePath;
+ this.files = [];
+ }
+
+ extract(statusCb, progressCb, cb) {
+ this.walker = walk.walk(this.path, { followLinks: false });
+ statusCb("Creating Directories");
+ this.walker.on('file', (root, stat, next) => {
+ this.files.push(`${root}/${stat.name}`);
+ try {
+ fs.statSync(root.replace("app.asar", "app"));
+ } catch(err) {
+ fs.mkdirPSync(root.replace("app.asar", "app"));
+ }
+ next();
+ });
+
+ this.walker.on('end', () => {
+ var self = this;
+ statusCb("Copying files");
+ var p = 1;
+ var filecount = this.files.length;
+
+ function copy(files, index) {
+ if(index >= filecount) {
+ statusCb("Finished extracting app package");
+ cb(null);
+ return;
+ }
+ setTimeout(() => { self.copyfile(files, index, copy) }, 1);
+ progressCb(index, filecount);
+ }
+
+ copy(this.files, 0);
+ });
+ }
+
+ copyfile(files, index, cb) {
+ fs.writeFileSync(files[index].replace("app.asar", "app"), fs.readFileSync(files[index]));
+ cb(files, index+1);
+ }
+}
+
+module.exports = Asar;
\ No newline at end of file
diff --git a/Installers/Electron/src/data/css/main.css b/Installers/Electron/src/data/css/main.css
new file mode 100644
index 00000000..11f89ba3
--- /dev/null
+++ b/Installers/Electron/src/data/css/main.css
@@ -0,0 +1,650 @@
+@font-face {
+ font-family: 'Open Sans';
+ font-style: normal;
+ font-weight: 400;
+ src:local('Open Sans'), local('OpenSans'), url('../font/OpenSans-Regular.ttf') format('TrueType');
+}
+
+/* latin-ext */
+@font-face {
+ font-family: 'Inconsolata';
+ font-style: normal;
+ font-weight: 400;
+ src: local('Inconsolata'), url('../font/Inconsolata.woff2') format('woff2');
+ unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+ font-family: 'Inconsolata';
+ font-style: normal;
+ font-weight: 400;
+ src: local('Inconsolata'), url('../font/Inconsolata.woff2') format('woff2');
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
+}
+
+html, body {
+ margin:0;
+ padding:0;
+ background: rgba(34, 35, 42, 1);
+ overflow: hidden;
+}
+
+html, body {
+ width:800px;
+ height:400px;
+}
+
+* {
+ font-family: "Open Sans";
+ color:#E8E8E8;
+ outline:none;
+ user-select: none;
+ -webkit-user-select: none;
+ cursor: default;
+}
+
+a {
+ cursor: pointer;
+ color: dodgerblue;
+}
+
+#titleBar {
+ display:flex;
+ -webkit-app-region: drag;
+ pointer-events: none;
+ width:100%;
+ height:40px;
+ background:rgba(34, 35, 42, 0.6);
+ border-bottom:1px solid #000;
+ box-shadow:0 1px 0 0 #303030;
+ background: rgba(23, 23, 23, 0.6);
+ border:none;
+ box-shadow: none;
+}
+
+#titleBar h3 {
+ color:#FFF;
+}
+
+.icon {
+ display:inline-block;
+ width:40px;
+ height:40px;
+ padding:5px;
+}
+
+.icon-image {
+ background:blue;
+ height:30px;
+ width:30px;
+}
+
+.title {
+ display:inline-block;
+ height:40px;
+ line-height:40px;
+ color:#FFF;
+}
+
+.main-container {
+ display:flex;
+ width:100%;
+ height:calc(100% - 40px);
+}
+
+.sidebar {
+ width:200px;
+ height:358px;
+ border-right:1px solid #000;
+ box-shadow:1px 0 0 0 #303030;
+ background:rgba(44, 45, 56, 0.6);
+ z-index:90001;
+ margin-top: 1px;
+ border:none;
+ margin:0;
+ box-shadow: none;
+ margin-left:1px;
+}
+
+.sidebar-inner {
+ width:100%;
+ height:100%;
+ padding:5px;
+}
+
+.main {
+ flex-grow:1;
+ padding:5px;
+ transform:translateX(0);
+}
+
+.panel-container {
+ position:absolute;
+ left:10px;
+ transition: all 0.5s ease-in-out;
+}
+
+.panel {
+ display:inline-block;
+ width:580px;
+ position:absolute;
+ transition: all 0.5s ease-in-out;
+ opacity: 0;
+}
+
+.main-container.panel-0 #uninstall {
+ display: inline-block;
+}
+
+.main-container.panel-0 #back {
+ display: none;
+}
+
+.main-container.panel-0 #next {
+ display: inline-block;
+}
+
+.main-container.panel-0 #cancel {
+ display: inline-block;
+}
+
+.main-container.panel-1 #uninstall {
+ display: none;
+}
+
+.main-container.panel-1 #back {
+ display: inline-block;
+}
+
+.main-container.panel-1 #next {
+ display: inline-block;
+}
+
+.main-container.panel-1 #cancel {
+ display: inline-block;
+}
+
+.main-container.panel-2 #uninstall {
+ display: none;
+}
+
+.main-container.panel-2 #back {
+ display: inline-block;
+}
+
+.main-container.panel-2 #next {
+ display: inline-block;
+}
+
+.main-container.panel-2 #cancel {
+ display: inline-block;
+}
+
+.main-container.panel-3 #uninstall {
+ display: none;
+}
+
+.main-container.panel-3 #back {
+ display: none;
+}
+
+.main-container.panel-3 #next {
+ display: none;
+}
+
+.main-container.panel-3 #cancel {
+ display: inline-block;
+}
+
+.main-container.panel-0 #li-0:before {
+ background:dodgerblue;
+}
+.main-container.panel-0 #li-1:before {
+ background:gray;
+}
+.main-container.panel-0 #li-2:before {
+ background:gray;
+}
+.main-container.panel-0 #li-3:before {
+ background:gray;
+}
+
+.main-container.panel-1 #li-0:before {
+ background:#00D443;
+}
+.main-container.panel-1 #li-1:before {
+ background:dodgerblue;
+}
+.main-container.panel-1 #li-2:before {
+ background:gray;
+}
+.main-container.panel-1 #li-3:before {
+ background:gray;
+}
+
+.main-container.panel-2 #li-0:before,
+.main-container.panel-advanced #li-0:before {
+ background:#00D443;
+}
+.main-container.panel-2 #li-1:before,
+.main-container.panel-advanced #li-1:before {
+ background:#00D443;
+}
+.main-container.panel-2 #li-2:before,
+.main-container.panel-advanced #li-2:before {
+ background:dodgerblue;
+}
+.main-container.panel-2 #li-3:before,
+.main-container.panel-advanced #li-3:before {
+ background:gray;
+}
+.main-container.panel-2 #panel-advanced {
+ pointer-events: none;
+}
+
+.main-container.panel-3 #li-0:before {
+ background:#00D443;
+}
+.main-container.panel-3 #li-1:before {
+ background:#00D443;
+}
+.main-container.panel-3 #li-2:before {
+ background:#00D443;
+}
+.main-container.panel-3 #li-3:before {
+ background:dodgerblue;
+}
+
+
+.main-container.panel-0 .panel-container {
+ left: 10px;
+}
+.main-container.panel-1 .panel-container {
+ left: -590px;
+}
+.main-container.panel-2 .panel-container,
+.main-container.panel-advanced .panel-container {
+ left: -1180px;
+}
+.main-container.panel-3 .panel-container {
+ left: -1770px;
+}
+
+.main-container.panel-0 .panel-container #panel-0 {
+ opacity: 1;
+}
+.main-container.panel-0 .panel-container #panel-1 {
+ opacity: 0;
+}
+.main-container.panel-0 .panel-container #panel-2 {
+ opacity: 0;
+}
+.main-container.panel-0 .panel-container #panel-3 {
+ opacity: 0;
+}
+
+.main-container.panel-1 .panel-container #panel-0 {
+ opacity: 0;
+}
+.main-container.panel-1 .panel-container #panel-1 {
+ opacity: 1;
+}
+.main-container.panel-1 .panel-container #panel-2 {
+ opacity: 0;
+}
+.main-container.panel-1 .panel-container #panel-3 {
+ opacity: 0;
+}
+
+.main-container.panel-2 .panel-container #panel-0 {
+ opacity: 0;
+}
+.main-container.panel-2 .panel-container #panel-1 {
+ opacity: 0;
+}
+.main-container.panel-2 .panel-container #panel-2 {
+ opacity: 1;
+}
+.main-container.panel-2 .panel-container #panel-3 {
+ opacity: 0;
+}
+
+.main-container.panel-3 .panel-container #panel-0 {
+ opacity: 0;
+}
+.main-container.panel-3 .panel-container #panel-1 {
+ opacity: 0;
+}
+.main-container.panel-3 .panel-container #panel-2 {
+ opacity: 0;
+}
+.main-container.panel-3 .panel-container #panel-3 {
+ opacity: 1;
+}
+
+.main-container.panel-advanced .controls button {
+ display: none;
+}
+
+.main-container.panel-advanced #panel-advanced {
+ pointer-events: initial;
+}
+
+.main-container.panel-advanced .panel-container #panel-0 {
+ opacity: 0;
+}
+
+.main-container.panel-advanced .panel-container #panel-1 {
+ opacity: 0;
+}
+
+.main-container.panel-advanced .panel-container #panel-2 {
+ opacity: 0;
+}
+
+.main-container.panel-advanced .panel-container #panel-3 {
+ opacity: 0;
+}
+
+.main-container.panel-advanced .panel-container #panel-advanced {
+ opacity: 1;
+}
+
+.main-container .panel-container #panel-advanced textarea {
+ background: rgba(33, 34, 41, 0.98);
+ width: 570px;
+ height: 140px;
+ resize: none;
+ border: 1px solid #000;
+ outline: 1px solid #303030;
+}
+
+.main-container .panel-container #panel-advanced button {
+ float: right;
+ margin-right: 10px;
+ margin-top: 5px;
+}
+
+.visible {
+ opacity: 1;
+}
+
+#panel-1 {
+ left:600px;
+}
+
+#panel-2 {
+ left:1200px;
+}
+
+#panel-advanced {
+ left:1200px;
+}
+
+#panel-3 {
+ left:1775px;
+}
+
+#licensetext {
+ width: 100%;
+ overflow-y: scroll;
+ white-space: pre-line;
+ height:280px;
+}
+
+#licenseform {
+ float:right;
+ margin-top:5px;
+ margin-right:10px;
+}
+
+input[type='radio'] {
+ cursor:pointer;
+}
+
+label {
+ cursor:pointer;
+}
+
+label, input[type='radio']{
+ font-size: 16px;
+ display: inline-block;
+ margin: 0;
+ margin-left: 3px;
+ line-height: 25px;
+ height: 28px;
+ vertical-align: top;
+}
+
+
+ul {
+ margin:0;
+ padding:0;
+ list-style:none;
+}
+
+li {
+ list-style:none;
+ color:gray;
+}
+
+li.active {
+ color:#FFF;
+}
+
+li.visited {
+ color:#EBEBEB;
+}
+
+.sidebar-inner li:before {
+ content: "";
+ display:inline-block;
+ background:gray;
+ border-radius: 50%;
+ width: 10px;
+ height: 10px;
+ margin-right:3px;
+}
+
+.sidebar-inner li.active:before {
+ background:dodgerblue;
+}
+
+.sidebar-inner li.visited:before {
+ background:#00D443;
+}
+
+.controls {
+ position:absolute;
+ bottom:5px;
+ right:5px;
+}
+
+button {
+ color:gray;
+ width:60px;
+ background:#1b1c23;
+ border-style:solid;
+ border-color:#000;
+ border-width:0 1px 1px 0;
+ padding:5px;
+ box-shadow:1px 1px 0 0 #303030 inset;
+ cursor:pointer;
+ border: none;
+ box-shadow: none;
+}
+
+button:hover {
+ color:#FFF;
+ background:#24262f;
+}
+
+button:disabled {
+ background:#292929;
+ border-color:#191919;
+ color:gray;
+ cursor: not-allowed;
+}
+button:active {
+ background: #232b2e;
+}
+button#advanced-settings {
+ width: 100px;
+ display: block;
+}
+
+::-webkit-scrollbar-thumb {
+ background:#282828 !important;
+}
+
+::-webkit-scrollbar, ::-webkit-scrollbar-track-piece {
+ background:#383838 !important;
+}
+
+input.path {
+ width: 450px;
+ height: 23px;
+ background: rgb(27, 28, 35) none repeat scroll 0% 0%;
+ border: 1px solid rgb(17, 17, 17);
+ box-shadow: -1px -1px 0px 0px rgb(50, 49, 49) inset;
+ border-width: 1px 0px 0px 1px;
+ border-style: solid;
+ border-color: #111;
+}
+
+.modal {
+ position: absolute;
+ background: rgba(29, 29, 29, 0.71);
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ z-index: 900000;
+}
+
+.modal-container {
+ background: #212229;
+ width: 600px;
+ height: 200px;
+ position: relative;
+ margin: auto;
+ top: 100px;
+ box-shadow: 0px 0px 5px 5px rgba(0, 0, 0, 0.39);
+}
+
+.modal-header {
+ height: 30px;
+ line-height: 30px;
+ background: #212229;
+ padding-left: 10px;
+ border-bottom: 1px solid #000;
+ box-shadow: 0 1px 0 0 #303030;
+}
+
+.modal-body {
+ padding:30px;
+}
+
+.modal-footer {
+ position: absolute;
+ bottom: 0;
+ left:0;
+ right: 0;
+ height: 35px;
+ padding-top:10px;
+ background:#212229;
+ box-shadow: 0 1px 0 0 #303030 inset;
+ border-top: 1px solid #000;
+}
+
+.modal-footer button {
+ margin-right:5px;
+ float: right;
+}
+
+.splash {
+ width:300px !important;
+ height:100px !important;
+}
+.splash .wrapper {
+ top:20px;
+ width:40px;
+ margin:auto;
+ position:relative;
+}
+.splash .wrapper .spinner {
+ width:30px;
+ height:30px;
+ border-radius:30px;
+ border-width:5px;
+ border-color:#121212 #404040 #404040 #404040;
+ border-style:solid;
+ animation: spin 0.7s linear infinite;
+}
+.splash .spinnertext {
+ position: absolute;
+ bottom: 0;
+ width: 100%;
+ display: block;
+ text-align: center;
+ bottom: 10px;
+ color: rgb(171, 171, 171);
+ -webkit-animation: spinnertext-opacity 2s linear 0s infinite;
+}
+
+@-webkit-keyframes spin {
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+@-webkit-keyframes spinnertext-opacity {
+ 0% {opacity: 0}
+ 20% {opacity: 0}
+ 50% {opacity: 1}
+ 100%{opacity: 0}
+}
+
+#log {
+ padding: 10px;
+ height:294px;
+ resize: none;
+ width: 570px;
+ background: rgba(42, 44, 55, 0.6);
+ border: none;
+ -webkit-user-select: text;
+ word-wrap: break-word;
+ white-space: pre-line;
+ overflow: auto;
+}
+
+progress {
+ position: absolute;
+ bottom: -36px;
+ left:0;
+ width:525px;
+ height: 27px;
+ -webkit-appearance:none;
+}
+
+progress::-webkit-progress-bar {
+ background:rgba(42, 44, 55, 0.6);
+}
+
+progress[value]::-webkit-progress-value {
+ background-image: -webkit-linear-gradient(left, rgba(73,155,234,1) 0%, rgba(32,124,229,1) 100%);
+}
+
+.border {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ border:1px solid #55BBF7;
+ pointer-events: none;
+}
+
+.warning {
+ color: red;
+ font-weight: 700;
+}
\ No newline at end of file
diff --git a/Installers/Electron/src/data/error.html b/Installers/Electron/src/data/error.html
new file mode 100644
index 00000000..c9a01c46
--- /dev/null
+++ b/Installers/Electron/src/data/error.html
@@ -0,0 +1,36 @@
+
+
+
+ ").append(x.parseHTML(e)).find(r):e)}).complete(n&&function(e,t){s.each(n,o||[e.responseText,t,e])}),this},x.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Xt,type:"GET",isLocal:Qt.test(_t[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":on,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":x.parseJSON,"text xml":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?ln(ln(e,x.ajaxSettings),t):ln(x.ajaxSettings,e)},ajaxPrefilter:an(nn),ajaxTransport:an(rn),ajax:function(e,t){"object"==typeof e&&(t=e,e=undefined),t=t||{};var n,r,i,o,s,a,u,l,c=x.ajaxSetup({},t),f=c.context||c,p=c.context&&(f.nodeType||f.jquery)?x(f):x.event,h=x.Deferred(),d=x.Callbacks("once memory"),g=c.statusCode||{},m={},y={},v=0,b="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(2===v){if(!o){o={};while(t=Jt.exec(i))o[t[1].toLowerCase()]=t[2]}t=o[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===v?i:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return v||(e=y[n]=y[n]||e,m[e]=t),this},overrideMimeType:function(e){return v||(c.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>v)for(t in e)g[t]=[g[t],e[t]];else T.always(e[T.status]);return this},abort:function(e){var t=e||b;return n&&n.abort(t),k(0,t),this}};if(h.promise(T).complete=d.add,T.success=T.done,T.error=T.fail,c.url=((e||c.url||Xt)+"").replace(Vt,"").replace(Zt,_t[1]+"//"),c.type=t.method||t.type||c.method||c.type,c.dataTypes=x.trim(c.dataType||"*").toLowerCase().match(w)||[""],null==c.crossDomain&&(a=en.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===_t[1]&&a[2]===_t[2]&&(a[3]||("http:"===a[1]?"80":"443"))===(_t[3]||("http:"===_t[1]?"80":"443")))),c.data&&c.processData&&"string"!=typeof c.data&&(c.data=x.param(c.data,c.traditional)),un(nn,c,t,T),2===v)return T;u=c.global,u&&0===x.active++&&x.event.trigger("ajaxStart"),c.type=c.type.toUpperCase(),c.hasContent=!Kt.test(c.type),r=c.url,c.hasContent||(c.data&&(r=c.url+=(Yt.test(r)?"&":"?")+c.data,delete c.data),c.cache===!1&&(c.url=Gt.test(r)?r.replace(Gt,"$1_="+Ut++):r+(Yt.test(r)?"&":"?")+"_="+Ut++)),c.ifModified&&(x.lastModified[r]&&T.setRequestHeader("If-Modified-Since",x.lastModified[r]),x.etag[r]&&T.setRequestHeader("If-None-Match",x.etag[r])),(c.data&&c.hasContent&&c.contentType!==!1||t.contentType)&&T.setRequestHeader("Content-Type",c.contentType),T.setRequestHeader("Accept",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+("*"!==c.dataTypes[0]?", "+on+"; q=0.01":""):c.accepts["*"]);for(l in c.headers)T.setRequestHeader(l,c.headers[l]);if(c.beforeSend&&(c.beforeSend.call(f,T,c)===!1||2===v))return T.abort();b="abort";for(l in{success:1,error:1,complete:1})T[l](c[l]);if(n=un(rn,c,t,T)){T.readyState=1,u&&p.trigger("ajaxSend",[T,c]),c.async&&c.timeout>0&&(s=setTimeout(function(){T.abort("timeout")},c.timeout));try{v=1,n.send(m,k)}catch(C){if(!(2>v))throw C;k(-1,C)}}else k(-1,"No Transport");function k(e,t,o,a){var l,m,y,b,w,C=t;2!==v&&(v=2,s&&clearTimeout(s),n=undefined,i=a||"",T.readyState=e>0?4:0,l=e>=200&&300>e||304===e,o&&(b=cn(c,T,o)),b=fn(c,b,T,l),l?(c.ifModified&&(w=T.getResponseHeader("Last-Modified"),w&&(x.lastModified[r]=w),w=T.getResponseHeader("etag"),w&&(x.etag[r]=w)),204===e?C="nocontent":304===e?C="notmodified":(C=b.state,m=b.data,y=b.error,l=!y)):(y=C,(e||!C)&&(C="error",0>e&&(e=0))),T.status=e,T.statusText=(t||C)+"",l?h.resolveWith(f,[m,C,T]):h.rejectWith(f,[T,C,y]),T.statusCode(g),g=undefined,u&&p.trigger(l?"ajaxSuccess":"ajaxError",[T,c,l?m:y]),d.fireWith(f,[T,C]),u&&(p.trigger("ajaxComplete",[T,c]),--x.active||x.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return x.get(e,t,n,"json")},getScript:function(e,t){return x.get(e,undefined,t,"script")}}),x.each(["get","post"],function(e,t){x[t]=function(e,n,r,i){return x.isFunction(n)&&(i=i||r,r=n,n=undefined),x.ajax({url:e,type:t,dataType:i,data:n,success:r})}});function cn(e,t,n){var r,i,o,s,a=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),r===undefined&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in a)if(a[i]&&a[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}s||(s=i)}o=o||s}return o?(o!==u[0]&&u.unshift(o),n[o]):undefined}function fn(e,t,n,r){var i,o,s,a,u,l={},c=e.dataTypes.slice();if(c[1])for(s in e.converters)l[s.toLowerCase()]=e.converters[s];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(s=l[u+" "+o]||l["* "+o],!s)for(i in l)if(a=i.split(" "),a[1]===o&&(s=l[u+" "+a[0]]||l["* "+a[0]])){s===!0?s=l[i]:l[i]!==!0&&(o=a[0],c.unshift(a[1]));break}if(s!==!0)if(s&&e["throws"])t=s(t);else try{t=s(t)}catch(f){return{state:"parsererror",error:s?f:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}x.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter("script",function(e){e.cache===undefined&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),x.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(r,i){t=x("
+
+
+
+
+
+
+
Checking for updates...
+
+