diff --git a/backend/beastiary/webapp-dist/index.html b/backend/beastiary/webapp-dist/index.html
index df6e62f..b222a22 100644
--- a/backend/beastiary/webapp-dist/index.html
+++ b/backend/beastiary/webapp-dist/index.html
@@ -1 +1 @@
-
Beastiary
\ No newline at end of file
+Beastiary
\ No newline at end of file
diff --git a/backend/beastiary/webapp-dist/js/app.6e02c1c3.js b/backend/beastiary/webapp-dist/js/app.7bccd7dc.js
similarity index 99%
rename from backend/beastiary/webapp-dist/js/app.6e02c1c3.js
rename to backend/beastiary/webapp-dist/js/app.7bccd7dc.js
index 5b4d1b7..59f4230 100644
--- a/backend/beastiary/webapp-dist/js/app.6e02c1c3.js
+++ b/backend/beastiary/webapp-dist/js/app.7bccd7dc.js
@@ -1,2 +1,2 @@
-!function(t){function webpackJsonpCallback(r){for(var a,i,u=r[0],l=r[1],_=r[2],d=0,h=[];d0&&t.notifications[0]}},i=Object(o.getStoreAccessors)("").read,u=i(c.dashboardMiniDrawer),l=i(c.dashboardShowDrawer),p=i(c.isLoggedIn),_=i(c.loginError),d=(i(c.token),i(c.firstNotification))},"5f03":function(t,r,a){"use strict";a.d(r,"a",(function(){return o})),a.d(r,"b",(function(){return c}));var o="".concat(""),c="Beastiary"},"5f86":function(t,r,a){"use strict";var o=a("2b0e"),c=a("8c4f");o.default.use(c.a),r.a=new c.a({mode:"history",base:"/",routes:[{path:"/",component:function component(){return a.e("start").then(a.bind(null,"cd28"))},children:[{path:"login",component:function component(){return Promise.all([a.e("login~main~main-dashboard"),a.e("login~main-dashboard"),a.e("login")]).then(a.bind(null,"a55b"))}},{path:"404",component:function component(){return a.e("reset-password").then(a.bind(null,"8cdb"))}},{path:"main",component:function component(){return Promise.all([a.e("login~main~main-dashboard"),a.e("main~main-dashboard"),a.e("main")]).then(a.bind(null,"6b61"))},children:[{path:"dashboard",component:function component(){return Promise.all([a.e("login~main~main-dashboard"),a.e("main~main-dashboard"),a.e("login~main-dashboard"),a.e("main-dashboard")]).then(a.bind(null,"f021"))}}]}]},{path:"/*",redirect:"/404"}]})},"635a":function(t,r,a){"use strict";a.d(r,"h",(function(){return c})),a.d(r,"c",(function(){return u})),a.d(r,"d",(function(){return l})),a.d(r,"f",(function(){return p})),a.d(r,"e",(function(){return _})),a.d(r,"g",(function(){return d})),a.d(r,"a",(function(){return h})),a.d(r,"b",(function(){return b}));var o=a("e8fb"),c={setToken:function setToken(t,r){t.token=r},setLoggedIn:function setLoggedIn(t,r){t.isLoggedIn=r},setLogInError:function setLogInError(t,r){t.logInError=r},setDashboardMiniDrawer:function setDashboardMiniDrawer(t,r){t.dashboardMiniDrawer=r},setDashboardShowDrawer:function setDashboardShowDrawer(t,r){t.dashboardShowDrawer=r},addNotification:function addNotification(t,r){t.notifications.push(r)},removeNotification:function removeNotification(t,r){t.notifications=t.notifications.filter((function(t){return t!==r}))}},i=Object(o.getStoreAccessors)("").commit,u=i(c.setDashboardMiniDrawer),l=i(c.setDashboardShowDrawer),p=i(c.setLoggedIn),_=i(c.setLogInError),d=i(c.setToken),h=i(c.addNotification),b=i(c.removeNotification)},"72e7":function(t,r,a){"use strict";a.d(r,"a",(function(){return c})),a.d(r,"d",(function(){return u})),a.d(r,"c",(function(){return l})),a.d(r,"b",(function(){return p}));var o=a("e8fb"),c={traces:function traces(t){return t.traces},loadingSamples:function loadingSamples(t){return t.loadingSamples},activeTraceIDs:function activeTraceIDs(t){return Object.values(t.traces).filter((function(t){return t.isActive})).map((function(t){return t.id}))}},i=Object(o.getStoreAccessors)("").read,u=i(c.traces),l=i(c.loadingSamples),p=i(c.activeTraceIDs)},"7f5d":function(t,r,a){"use strict";a.d(r,"a",(function(){return p}));var o=a("a34a"),c=a.n(o),i=a("5f03"),u=a("bc3a"),l=a.n(u);function asyncGeneratorStep(t,r,a,o,c,i,u){try{var l=t[i](u),p=l.value}catch(t){return void a(t)}l.done?r(p):Promise.resolve(p).then(o,c)}function _asyncToGenerator(t){return function(){var r=this,a=arguments;return new Promise((function(o,c){var i=t.apply(r,a);function _next(t){asyncGeneratorStep(i,o,c,_next,_throw,"next",t)}function _throw(t){asyncGeneratorStep(i,o,c,_next,_throw,"throw",t)}_next(void 0)}))}}function authHeaders(t){return{headers:{Authorization:"Bearer ".concat(t)},params:{}}}var p={getToken:function getToken(t){return _asyncToGenerator(c.a.mark((function _callee(){return c.a.wrap((function _callee$(r){for(;;)switch(r.prev=r.next){case 0:return r.abrupt("return",l.a.get("".concat(i.a,"/api/security/token"),authHeaders(t)));case 1:case"end":return r.stop()}}),_callee)})))()},getTraces:function getTraces(t){return _asyncToGenerator(c.a.mark((function _callee2(){return c.a.wrap((function _callee2$(r){for(;;)switch(r.prev=r.next){case 0:return r.abrupt("return",l.a.get("".concat(i.a,"/api/traces/"),authHeaders(t)));case 1:case"end":return r.stop()}}),_callee2)})))()},createTrace:function createTrace(t,r){return _asyncToGenerator(c.a.mark((function _callee3(){return c.a.wrap((function _callee3$(a){for(;;)switch(a.prev=a.next){case 0:return a.abrupt("return",l.a.post("".concat(i.a,"/api/traces/"),r,authHeaders(t)));case 1:case"end":return a.stop()}}),_callee3)})))()},getSamples:function getSamples(t,r){var a=arguments;return _asyncToGenerator(c.a.mark((function _callee4(){var o,u,p;return c.a.wrap((function _callee4$(c){for(;;)switch(c.prev=c.next){case 0:return o=a.length>2&&void 0!==a[2]?a[2]:0,u=a.length>3&&void 0!==a[3]?a[3]:100,(p=authHeaders(t)).params={trace_id:r.id,skip:o,limit:u},c.abrupt("return",l.a.get("".concat(i.a,"/api/samples/"),p));case 5:case"end":return c.stop()}}),_callee4)})))()}}},8041:function(t,r,a){"use strict";a.d(r,"h",(function(){return i})),a.d(r,"g",(function(){return l})),a.d(r,"f",(function(){return p})),a.d(r,"b",(function(){return _})),a.d(r,"e",(function(){return d})),a.d(r,"a",(function(){return h})),a.d(r,"c",(function(){return b})),a.d(r,"d",(function(){return v}));var o=a("e8fb"),c=a("2b0e");function _createForOfIteratorHelper(t,r){var a="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!a){if(Array.isArray(t)||(a=function _unsupportedIterableToArray(t,r){if(!t)return;if("string"==typeof t)return _arrayLikeToArray(t,r);var a=Object.prototype.toString.call(t).slice(8,-1);"Object"===a&&t.constructor&&(a=t.constructor.name);if("Map"===a||"Set"===a)return Array.from(t);if("Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return _arrayLikeToArray(t,r)}(t))||r&&t&&"number"==typeof t.length){a&&(t=a);var o=0,c=function F(){};return{s:c,n:function n(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function e(t){throw t},f:c}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,u=!0,l=!1;return{s:function s(){a=a.call(t)},n:function n(){var t=a.next();return u=t.done,t},e:function e(t){l=!0,i=t},f:function f(){try{u||null==a.return||a.return()}finally{if(l)throw i}}}}function _arrayLikeToArray(t,r){(null==r||r>t.length)&&(r=t.length);for(var a=0,o=new Array(r);a0&&t.notifications[0]}},i=Object(o.getStoreAccessors)("").read,u=i(c.dashboardMiniDrawer),l=i(c.dashboardShowDrawer),p=i(c.isLoggedIn),_=i(c.loginError),d=(i(c.token),i(c.firstNotification))},"5f03":function(t,r,a){"use strict";a.d(r,"a",(function(){return o})),a.d(r,"b",(function(){return c}));var o="".concat(""),c="Beastiary"},"5f86":function(t,r,a){"use strict";var o=a("2b0e"),c=a("8c4f");o.default.use(c.a),r.a=new c.a({mode:"history",base:"/",routes:[{path:"/",component:function component(){return a.e("start").then(a.bind(null,"cd28"))},children:[{path:"login",component:function component(){return Promise.all([a.e("login~main~main-dashboard"),a.e("login~main-dashboard"),a.e("login")]).then(a.bind(null,"a55b"))}},{path:"404",component:function component(){return a.e("reset-password").then(a.bind(null,"8cdb"))}},{path:"main",component:function component(){return Promise.all([a.e("login~main~main-dashboard"),a.e("main~main-dashboard"),a.e("main")]).then(a.bind(null,"6b61"))},children:[{path:"dashboard",component:function component(){return Promise.all([a.e("login~main~main-dashboard"),a.e("main~main-dashboard"),a.e("login~main-dashboard"),a.e("main-dashboard")]).then(a.bind(null,"f021"))}}]}]},{path:"/*",redirect:"/404"}]})},"635a":function(t,r,a){"use strict";a.d(r,"h",(function(){return c})),a.d(r,"c",(function(){return u})),a.d(r,"d",(function(){return l})),a.d(r,"f",(function(){return p})),a.d(r,"e",(function(){return _})),a.d(r,"g",(function(){return d})),a.d(r,"a",(function(){return h})),a.d(r,"b",(function(){return b}));var o=a("e8fb"),c={setToken:function setToken(t,r){t.token=r},setLoggedIn:function setLoggedIn(t,r){t.isLoggedIn=r},setLogInError:function setLogInError(t,r){t.logInError=r},setDashboardMiniDrawer:function setDashboardMiniDrawer(t,r){t.dashboardMiniDrawer=r},setDashboardShowDrawer:function setDashboardShowDrawer(t,r){t.dashboardShowDrawer=r},addNotification:function addNotification(t,r){t.notifications.push(r)},removeNotification:function removeNotification(t,r){t.notifications=t.notifications.filter((function(t){return t!==r}))}},i=Object(o.getStoreAccessors)("").commit,u=i(c.setDashboardMiniDrawer),l=i(c.setDashboardShowDrawer),p=i(c.setLoggedIn),_=i(c.setLogInError),d=i(c.setToken),h=i(c.addNotification),b=i(c.removeNotification)},"72e7":function(t,r,a){"use strict";a.d(r,"a",(function(){return c})),a.d(r,"d",(function(){return u})),a.d(r,"c",(function(){return l})),a.d(r,"b",(function(){return p}));var o=a("e8fb"),c={traces:function traces(t){return t.traces},loadingSamples:function loadingSamples(t){return t.loadingSamples},activeTraceIDs:function activeTraceIDs(t){return Object.values(t.traces).filter((function(t){return t.isActive})).map((function(t){return t.id}))}},i=Object(o.getStoreAccessors)("").read,u=i(c.traces),l=i(c.loadingSamples),p=i(c.activeTraceIDs)},"7f5d":function(t,r,a){"use strict";a.d(r,"a",(function(){return p}));var o=a("a34a"),c=a.n(o),i=a("5f03"),u=a("bc3a"),l=a.n(u);function asyncGeneratorStep(t,r,a,o,c,i,u){try{var l=t[i](u),p=l.value}catch(t){return void a(t)}l.done?r(p):Promise.resolve(p).then(o,c)}function _asyncToGenerator(t){return function(){var r=this,a=arguments;return new Promise((function(o,c){var i=t.apply(r,a);function _next(t){asyncGeneratorStep(i,o,c,_next,_throw,"next",t)}function _throw(t){asyncGeneratorStep(i,o,c,_next,_throw,"throw",t)}_next(void 0)}))}}function authHeaders(t){return{headers:{Authorization:"Bearer ".concat(t)},params:{}}}var p={getToken:function getToken(t){return _asyncToGenerator(c.a.mark((function _callee(){return c.a.wrap((function _callee$(r){for(;;)switch(r.prev=r.next){case 0:return r.abrupt("return",l.a.get("".concat(i.a,"/api/security/token"),authHeaders(t)));case 1:case"end":return r.stop()}}),_callee)})))()},getTraces:function getTraces(t){return _asyncToGenerator(c.a.mark((function _callee2(){return c.a.wrap((function _callee2$(r){for(;;)switch(r.prev=r.next){case 0:return r.abrupt("return",l.a.get("".concat(i.a,"/api/traces/"),authHeaders(t)));case 1:case"end":return r.stop()}}),_callee2)})))()},createTrace:function createTrace(t,r){return _asyncToGenerator(c.a.mark((function _callee3(){return c.a.wrap((function _callee3$(a){for(;;)switch(a.prev=a.next){case 0:return a.abrupt("return",l.a.post("".concat(i.a,"/api/traces/"),r,authHeaders(t)));case 1:case"end":return a.stop()}}),_callee3)})))()},getSamples:function getSamples(t,r){var a=arguments;return _asyncToGenerator(c.a.mark((function _callee4(){var o,u,p;return c.a.wrap((function _callee4$(c){for(;;)switch(c.prev=c.next){case 0:return o=a.length>2&&void 0!==a[2]?a[2]:0,u=a.length>3&&void 0!==a[3]?a[3]:100,(p=authHeaders(t)).params={trace_id:r.id,skip:o,limit:u},c.abrupt("return",l.a.get("".concat(i.a,"/api/samples/"),p));case 5:case"end":return c.stop()}}),_callee4)})))()}}},8041:function(t,r,a){"use strict";a.d(r,"h",(function(){return i})),a.d(r,"g",(function(){return l})),a.d(r,"f",(function(){return p})),a.d(r,"b",(function(){return _})),a.d(r,"e",(function(){return d})),a.d(r,"a",(function(){return h})),a.d(r,"c",(function(){return b})),a.d(r,"d",(function(){return v}));var o=a("e8fb"),c=a("2b0e");function _createForOfIteratorHelper(t,r){var a="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!a){if(Array.isArray(t)||(a=function _unsupportedIterableToArray(t,r){if(!t)return;if("string"==typeof t)return _arrayLikeToArray(t,r);var a=Object.prototype.toString.call(t).slice(8,-1);"Object"===a&&t.constructor&&(a=t.constructor.name);if("Map"===a||"Set"===a)return Array.from(t);if("Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return _arrayLikeToArray(t,r)}(t))||r&&t&&"number"==typeof t.length){a&&(t=a);var o=0,c=function F(){};return{s:c,n:function n(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function e(t){throw t},f:c}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,u=!0,l=!1;return{s:function s(){a=a.call(t)},n:function n(){var t=a.next();return u=t.done,t},e:function e(t){l=!0,i=t},f:function f(){try{u||null==a.return||a.return()}finally{if(l)throw i}}}}function _arrayLikeToArray(t,r){(null==r||r>t.length)&&(r=t.length);for(var a=0,o=new Array(r);a = {\n modules: {\n main: mainModule,\n data: dataModule,\n },\n};\n\nexport const store = new Vuex.Store(storeOptions);\n\nexport default store;\n","import { getStoreAccessors } from 'typesafe-vuex';\nimport { State } from '../state';\nimport { MainState } from './state';\n\nexport const getters = {\n loginError: (state: MainState) => state.logInError,\n dashboardShowDrawer: (state: MainState) => state.dashboardShowDrawer,\n dashboardMiniDrawer: (state: MainState) => state.dashboardMiniDrawer,\n token: (state: MainState) => state.token,\n isLoggedIn: (state: MainState) => state.isLoggedIn,\n firstNotification: (state: MainState) => state.notifications.length > 0 && state.notifications[0],\n};\n\nconst {read} = getStoreAccessors('');\n\nexport const readDashboardMiniDrawer = read(getters.dashboardMiniDrawer);\nexport const readDashboardShowDrawer = read(getters.dashboardShowDrawer);\nexport const readIsLoggedIn = read(getters.isLoggedIn);\nexport const readLoginError = read(getters.loginError);\nexport const readToken = read(getters.token);\nexport const readFirstNotification = read(getters.firstNotification);\n","const env = process.env.VUE_APP_ENV;\n\nlet envApiUrl = '';\n\nif (env === 'production') {\n envApiUrl = `${process.env.VUE_APP_DOMAIN_PROD}`;\n} else if (env === 'staging') {\n envApiUrl = `${process.env.VUE_APP_DOMAIN_STAG}`;\n} else {\n envApiUrl = `${process.env.VUE_APP_DOMAIN_DEV}`;\n}\n\nexport const apiUrl = envApiUrl;\nexport const appName = process.env.VUE_APP_NAME;\n","import Vue from 'vue';\nimport Router from 'vue-router';\n\nimport RouterComponent from './components/RouterComponent.vue';\n\nVue.use(Router);\n\nexport default new Router({\n mode: 'history',\n base: process.env.BASE_URL,\n routes: [\n {\n path: '/',\n component: () => import(/* webpackChunkName: \"start\" */ './views/main/Start.vue'),\n children: [\n {\n path: 'login',\n // route level code-splitting\n // this generates a separate chunk (about.[hash].js) for this route\n // which is lazy-loaded when the route is visited.\n component: () => import(/* webpackChunkName: \"login\" */ './views/Login.vue'),\n },\n {\n path: '404',\n component: () => import(/* webpackChunkName: \"reset-password\" */ './views/404.vue'),\n },\n {\n path: 'main',\n component: () => import(/* webpackChunkName: \"main\" */ './views/main/Main.vue'),\n children: [\n {\n path: 'dashboard',\n component: () => import(/* webpackChunkName: \"main-dashboard\" */ './views/main/Dashboard.vue'),\n },\n ],\n },\n ],\n },\n {\n path: '/*', redirect: '/404',\n },\n ],\n});\n","import { getStoreAccessors } from 'typesafe-vuex';\nimport { State } from '../state';\nimport { AppNotification, MainState } from './state';\n\n\nexport const mutations = {\n setToken(state: MainState, payload: string) {\n state.token = payload;\n },\n setLoggedIn(state: MainState, payload: boolean) {\n state.isLoggedIn = payload;\n },\n setLogInError(state: MainState, payload: boolean) {\n state.logInError = payload;\n },\n setDashboardMiniDrawer(state: MainState, payload: boolean) {\n state.dashboardMiniDrawer = payload;\n },\n setDashboardShowDrawer(state: MainState, payload: boolean) {\n state.dashboardShowDrawer = payload;\n },\n addNotification(state: MainState, payload: AppNotification) {\n state.notifications.push(payload);\n },\n removeNotification(state: MainState, payload: AppNotification) {\n state.notifications = state.notifications.filter((notification) => notification !== payload);\n },\n};\n\nconst {commit} = getStoreAccessors('');\n\nexport const commitSetDashboardMiniDrawer = commit(mutations.setDashboardMiniDrawer);\nexport const commitSetDashboardShowDrawer = commit(mutations.setDashboardShowDrawer);\nexport const commitSetLoggedIn = commit(mutations.setLoggedIn);\nexport const commitSetLogInError = commit(mutations.setLogInError);\nexport const commitSetToken = commit(mutations.setToken);\nexport const commitAddNotification = commit(mutations.addNotification);\nexport const commitRemoveNotification = commit(mutations.removeNotification);\n","import { getStoreAccessors } from 'typesafe-vuex';\nimport { State } from '../state';\nimport { DataState } from './state';\n\nexport const getters = {\n traces: (state: DataState) => state.traces,\n loadingSamples: (state: DataState) => state.loadingSamples,\n activeTraceIDs: (state: DataState) => Object.values(state.traces).filter((t) => t.isActive).map((t) => t.id),\n};\nconst {read} = getStoreAccessors('');\n\nexport const readTraces = read(getters.traces);\nexport const readLoadingSamples = read(getters.loadingSamples);\nexport const readActiveTraceIDs = read(getters.activeTraceIDs);\n\n","import { apiUrl } from '@/env';\nimport { InSample, Trace, TraceCreate } from '@/interfaces';\nimport axios from 'axios';\nimport { config } from 'vue/types/umd';\n\nfunction authHeaders(token: string) {\n return {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n params: {},\n };\n}\n\nexport const api = {\n async getToken(token: string) {\n return axios.get(`${apiUrl}/api/security/token`, authHeaders(token));\n },\n async getTraces(token: string) {\n return axios.get(`${apiUrl}/api/traces/`, authHeaders(token));\n },\n async createTrace(token: string, data: TraceCreate) {\n return axios.post(`${apiUrl}/api/traces/`, data, authHeaders(token));\n },\n async getSamples(token: string, trace: Trace, skip: number = 0, limit: number = 100) {\n const options = authHeaders(token);\n options.params = {trace_id: trace.id, skip, limit};\n return axios.get(`${apiUrl}/api/samples/`, options);\n },\n};\n","import { Data, InSample, SetSample, Trace } from '@/interfaces';\nimport { getStoreAccessors } from 'typesafe-vuex';\nimport Vue from 'vue';\nimport { State } from '../state';\nimport { DataState } from './state';\n\nfunction formatData(samples: InSample[]) {\n const parameters: { [key: string]: Data[] } = {};\n for (let index = 0; index < samples.length; index++) {\n const row = samples[index].data;\n const state = samples[index].state;\n for (const param in row) {\n if (param) {\n if (index === 0) {\n parameters[param] = [];\n }\n parameters[param].push({ state, value: row[param] });\n }\n }\n\n }\n\n return parameters;\n}\n\nfunction setTraceDefaults(trace: Trace) {\n trace.parameters = {};\n trace.activeParams = [];\n trace.isActive = false;\n trace.burnIn = 10;\n}\n\nexport const mutations = {\n setTraces(state: DataState, payload: Trace[]) {\n for (const trace of payload) {\n setTraceDefaults(trace);\n }\n const traces = payload.reduce((obj, trace) => {\n obj[trace.id] = trace;\n return obj;\n }, {});\n state.traces = traces;\n },\n setTrace(state: DataState, payload: Trace) {\n console.log(payload);\n setTraceDefaults(payload);\n // https://vuex.vuejs.org/guide/mutations.html#mutations-follow-vue-s-reactivity-rules\n Vue.set(state.traces, payload.id, payload);\n },\n setActiveTrace(state: DataState, payload: Trace) {\n state.traces[payload.id].isActive = true;\n\n },\n setActiveParams(state: DataState, payload: {traceID: number, params: string[]}) {\n state.traces[payload.traceID].activeParams = payload.params;\n },\n setBurnIn(state: DataState, payload: {traceID: number, burnIn: number}) {\n console.log(payload);\n state.traces[payload.traceID].burnIn = payload.burnIn;\n },\n setLoadingSamples(state: DataState, payload: boolean) {\n state.loadingSamples = payload;\n },\n setSetSamples(state: DataState, payload: {traceID: number, data: InSample[]}) {\n const data = formatData(payload.data);\n const trace = state.traces[payload.traceID];\n if (Object.keys(trace.parameters).length === 0) {\n trace.parameters = data;\n } else {\n for (const paramName in data) {\n if (paramName) {\n trace.parameters[paramName] = trace.parameters[paramName].concat(\n data[paramName]).sort((a, b) => a.state - b.state,\n );\n }\n }\n }\n },\n};\n\nconst {commit} = getStoreAccessors('');\n\nexport const commitSetTraces = commit(mutations.setTraces);\nexport const commitSetTrace = commit(mutations.setTrace);\nexport const commitSetActiveTrace = commit(mutations.setActiveTrace);\nexport const commitSetSamples = commit(mutations.setSetSamples);\nexport const commitSetActiveParams = commit(mutations.setActiveParams);\nexport const commitSetBurnIn = commit(mutations.setBurnIn);\nexport const commitSetLoadingSamples = commit(mutations.setLoadingSamples);\n\n","import { api } from '@/api';\nimport { Trace, TraceCreate } from '@/interfaces';\nimport { AxiosResponse } from 'axios';\nimport { getStoreAccessors } from 'typesafe-vuex';\nimport { ActionContext } from 'vuex';\nimport { dispatchCheckApiError } from '../main/actions';\nimport { commitAddNotification, commitRemoveNotification } from '../main/mutations';\nimport { State } from '../state';\nimport {\n commitSetActiveParams,\n commitSetActiveTrace,\n commitSetBurnIn,\n commitSetLoadingSamples,\n commitSetSamples,\n commitSetTrace,\n commitSetTraces,\n} from './mutations';\nimport { DataState } from './state';\n\ntype MainContext = ActionContext;\n\nexport const actions = {\n async actionGetTraces(context: MainContext) {\n let response: AxiosResponse | null = null;\n try {\n response = await api.getTraces(context.rootState.main.token);\n } catch (error) {\n await dispatchCheckApiError(context, error);\n }\n if (response) {\n commitSetTraces(context, response.data);\n }\n },\n async actionCreateTrace(context: MainContext, payload: TraceCreate) {\n const loadingNotification = { content: 'saving', showProgress: true };\n commitAddNotification(context, loadingNotification);\n let response: AxiosResponse | null = null;\n try {\n response = await api.createTrace(context.rootState.main.token, payload);\n } catch (error) {\n await dispatchCheckApiError(context, error);\n }\n commitRemoveNotification(context, loadingNotification);\n if (response != null) {\n commitSetTrace(context, response.data);\n commitAddNotification(context, { content: 'Trace successfully created', color: 'success' });\n }\n },\n async actionSetActiveTrace(context: MainContext, payload: Trace) {\n commitSetActiveTrace(context, payload);\n },\n async actionSetActiveParams(context: MainContext, payload: {traceID: number, params: string[]}) {\n commitSetActiveParams(context, payload);\n },\n async actionGetSamples(\n context: MainContext,\n payload: {trace: Trace,\n skip?: number,\n limit?: number,\n all?: boolean}) {\n const trace = payload.trace;\n const skip = payload.skip ? payload.skip : 0;\n const limit = payload.limit ? payload.limit : 100;\n const all = payload.all ? payload.all : false;\n const loadingNotification = { content: 'Loading samples...', showProgress: true };\n if (skip === 0) {\n commitAddNotification(context, loadingNotification);\n }\n let response: AxiosResponse | null = null;\n try {\n response = await api.getSamples(context.rootState.main.token, trace, skip, limit);\n } catch (error) {\n await dispatchCheckApiError(context, error);\n }\n commitRemoveNotification(context, loadingNotification);\n if (response != null) {\n if (all === true && response.data.length === limit) {\n // if you get back what you request go again\n await dispatchGetSamples(context, {trace, skip: skip + limit, limit, all: true});\n }\n commitSetSamples(context, {traceID: trace.id, data: response.data});\n }\n },\n async actionSetBurnIn(context: MainContext, payload: {traceID: number, burnIn: number}) {\n commitSetBurnIn(context, payload);\n },\n async actionSetLoadingSamples(context: MainContext, payload: boolean) {\n commitSetLoadingSamples(context, payload);\n },\n};\n\nconst { dispatch } = getStoreAccessors('');\n\nexport const dispatchGetTraces = dispatch(actions.actionGetTraces);\nexport const dispatchCreateTrace = dispatch(actions.actionCreateTrace);\nexport const dispatchSetActiveTrace = dispatch(actions.actionSetActiveTrace);\nexport const dispatchGetSamples = dispatch(actions.actionGetSamples);\nexport const dispatchSetActiveParams = dispatch(actions.actionSetActiveParams);\nexport const dispatchSetBurnIn = dispatch(actions.actionSetBurnIn);\nexport const dispatchSetLoadingSamples = dispatch(actions.actionSetLoadingSamples);\n\n\n","\n\n\n\n\n\n\n\n\n\n\n\n\nimport { dispatchRemoveNotification } from '@/store/main/actions';\nimport { readFirstNotification } from '@/store/main/getters';\nimport { commitRemoveNotification } from '@/store/main/mutations';\nimport { AppNotification } from '@/store/main/state';\nimport { Component, Prop, Vue, Watch } from 'vue-property-decorator';\n\n@Component\nexport default class NotificationsManager extends Vue {\n public show: boolean = false;\n public text: string = '';\n public showProgress: boolean = false;\n public notFound: boolean = false;\n public currentNotification: AppNotification | false = false;\n\n public async hide() {\n this.show = false;\n await new Promise((resolve, reject) => setTimeout(() => resolve(), 500));\n }\n\n public async close() {\n await this.hide();\n await this.removeCurrentNotification();\n }\n\n public async removeCurrentNotification() {\n if (this.currentNotification) {\n commitRemoveNotification(this.$store, this.currentNotification);\n }\n }\n\n public get firstNotification() {\n return readFirstNotification(this.$store);\n }\n\n public async setNotification(notification: AppNotification | false) {\n if (this.show) {\n await this.hide();\n }\n if (notification) {\n this.currentNotification = notification;\n this.showProgress = notification.showProgress || false;\n this.notFound = notification.notFound || false;\n this.show = true;\n } else {\n this.currentNotification = false;\n }\n }\n\n @Watch('firstNotification')\n public async onNotificationChange(\n newNotification: AppNotification | false,\n oldNotification: AppNotification | false,\n ) {\n if (newNotification !== this.currentNotification) {\n await this.setNotification(newNotification);\n if (newNotification) {\n dispatchRemoveNotification(this.$store, { notification: newNotification, timeout: 10000 });\n }\n }\n }\n\n public get currentNotificationContent() {\n return this.currentNotification && this.currentNotification.content || '';\n }\n\n public get currentNotificationColor() {\n return this.currentNotification && this.currentNotification.color || 'info';\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NotificationsManager.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NotificationsManager.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./NotificationsManager.vue?vue&type=template&id=2b4f56c1&\"\nimport script from \"./NotificationsManager.vue?vue&type=script&lang=ts&\"\nexport * from \"./NotificationsManager.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\nimport { VSnackbar } from 'vuetify/lib/components/VSnackbar';\ninstallComponents(component, {VBtn,VIcon,VProgressCircular,VSnackbar})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-snackbar',{attrs:{\"color\":_vm.currentNotificationColor},model:{value:(_vm.show),callback:function ($$v) {_vm.show=$$v},expression:\"show\"}},[_c('div',{staticClass:\"d-flex justify-space-between align-center \"},[_c('v-progress-circular',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showProgress),expression:\"showProgress\"}],staticClass:\"ma-1\",attrs:{\"indeterminate\":\"\"}}),_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.notFound),expression:\"notFound\"}],staticClass:\"ma-1\",attrs:{\"large\":\"\"}},[_vm._v(\"mdi-cancel\")]),_vm._v(\" \"+_vm._s(_vm.currentNotificationContent)+\" \"),_c('v-btn',{attrs:{\"text\":\"\"},nativeOn:{\"click\":function($event){return _vm.close.apply(null, arguments)}}},[_vm._v(\"Close\")])],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport NotificationsManager from '@/components/NotificationsManager.vue';\nimport { dispatchCheckLoggedIn } from '@/store/main/actions';\nimport { readIsLoggedIn } from '@/store/main/getters';\nimport { Component, Vue } from 'vue-property-decorator';\n\n@Component({\n components: {\n NotificationsManager,\n },\n})\nexport default class App extends Vue {\n\n get loggedIn() {\n return readIsLoggedIn(this.$store);\n }\n\n public async created() {\n await dispatchCheckLoggedIn(this.$store);\n }\n}\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--13-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??ref--13-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--13-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??ref--13-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=12c528ee&\"\nimport script from \"./App.vue?vue&type=script&lang=ts&\"\nexport * from \"./App.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VContent } from 'vuetify/lib/components/VContent';\nimport { VFlex } from 'vuetify/lib/components/VGrid';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\nimport { VRow } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VApp,VContainer,VContent,VFlex,VProgressCircular,VRow})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('v-app',[(_vm.loggedIn===null)?_c('v-content',[_c('v-container',{attrs:{\"fill-height\":\"\"}},[_c('v-row',{attrs:{\"align-center\":\"\",\"justify-center\":\"\"}},[_c('v-flex',[_c('div',{staticClass:\"text-xs-center\"},[_c('div',{staticClass:\"headline my-5\"},[_vm._v(\"Loading...\")]),_c('v-progress-circular',{attrs:{\"size\":\"100\",\"indeterminate\":\"\",\"color\":\"primary\"}})],1)])],1)],1)],1):_c('router-view'),_c('NotificationsManager')],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import Component from 'vue-class-component';\n\n// Register the router hooks with their names\nComponent.registerHooks([\n 'beforeRouteEnter',\n 'beforeRouteLeave',\n 'beforeRouteUpdate', // for vue-router 2.2+\n]);\n","import VeeValidate from 'vee-validate';\nimport Vue from 'vue';\n\nVue.use(VeeValidate);\n","import Vue from 'vue';\nimport Vuetify from 'vuetify/lib/framework';\n\nVue.use(Vuetify);\n\nexport default new Vuetify({\n});\n","import store from '@/store';\nimport '@babel/polyfill';\nimport Vue from 'vue';\nimport App from './App.vue';\n// Import Component hooks before component definitions\nimport './component-hooks';\nimport './plugins/vee-validate';\nimport vuetify from './plugins/vuetify';\nimport router from './router';\n\nVue.config.productionTip = false;\n\nnew Vue({\n router,\n store,\n vuetify,\n render: (h) => h(App),\n}).$mount('#app');\n","export const getLocalToken = () => localStorage.getItem('token');\n\nexport const saveLocalToken = (token: string) => localStorage.setItem('token', token);\n\nexport const removeLocalToken = () => localStorage.removeItem('token');\n","import { api } from '@/api';\nimport router from '@/router';\nimport { getLocalToken, removeLocalToken, saveLocalToken } from '@/utils';\nimport { AxiosError } from 'axios';\nimport { getStoreAccessors } from 'typesafe-vuex';\nimport { ActionContext } from 'vuex';\nimport { State } from '../state';\nimport {\n commitAddNotification,\n commitRemoveNotification,\n commitSetLoggedIn,\n commitSetLogInError,\n commitSetToken,\n} from './mutations';\nimport { AppNotification, MainState } from './state';\n\ntype MainContext = ActionContext;\n\nexport const actions = {\n async actionCheckToken(context: MainContext, payload: { token: string }) {\n try {\n const response = await api.getToken(payload.token);\n const token = response.data.token;\n if (token) {\n saveLocalToken(token);\n commitSetToken(context, token);\n commitSetLoggedIn(context, true);\n commitSetLogInError(context, false);\n await dispatchRouteLoggedIn(context);\n commitAddNotification(context, { content: 'Logged in', color: 'success' });\n } else {\n await dispatchLogOut(context);\n }\n } catch (err) {\n commitSetLogInError(context, true);\n await dispatchLogOut(context);\n }\n },\n async actionCheckLoggedIn(context: MainContext) {\n if (!context.state.isLoggedIn) {\n let token = context.state.token;\n if (!token) {\n const localToken = getLocalToken();\n if (localToken) {\n commitSetToken(context, localToken);\n token = localToken;\n }\n }\n if (token) {\n try {\n commitSetLoggedIn(context, true);\n } catch (error) {\n await dispatchRemoveLogIn(context);\n }\n } else {\n await dispatchRemoveLogIn(context);\n }\n }\n },\n async actionRemoveLogIn(context: MainContext) {\n removeLocalToken();\n commitSetToken(context, '');\n commitSetLoggedIn(context, false);\n },\n async actionLogOut(context: MainContext) {\n await dispatchRemoveLogIn(context);\n await dispatchRouteLogOut(context);\n },\n async actionUserLogOut(context: MainContext) {\n await dispatchLogOut(context);\n commitAddNotification(context, { content: 'Logged out', color: 'success' });\n },\n actionRouteLogOut(context: MainContext) {\n if (router.currentRoute.path !== '/login') {\n router.push('/login');\n }\n },\n async actionCheckApiError(context: MainContext, payload: AxiosError) {\n if (payload.response!.status === 401) {\n await dispatchLogOut(context);\n }\n if (payload.response!.status === 404) {\n commitAddNotification(context, { content: payload.response!.data.detail, color: 'error', notFound: true});\n }\n if (payload.response!.status === 500) {\n commitAddNotification(context, { content: payload.response!.data.detail, color: 'error', notFound: true});\n }\n },\n actionRouteLoggedIn(context: MainContext) {\n if (router.currentRoute.path === '/login' || router.currentRoute.path === '/') {\n router.push('/main/dashboard');\n }\n },\n async removeNotification(context: MainContext, payload: { notification: AppNotification, timeout: number }) {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n commitRemoveNotification(context, payload.notification);\n resolve(true);\n }, payload.timeout);\n });\n },\n};\n\nconst { dispatch } = getStoreAccessors('');\n\nexport const dispatchCheckApiError = dispatch(actions.actionCheckApiError);\nexport const dispatchCheckLoggedIn = dispatch(actions.actionCheckLoggedIn);\nexport const dispatchCheckToken = dispatch(actions.actionCheckToken);\nexport const dispatchLogOut = dispatch(actions.actionLogOut);\nexport const dispatchUserLogOut = dispatch(actions.actionUserLogOut);\nexport const dispatchRemoveLogIn = dispatch(actions.actionRemoveLogIn);\nexport const dispatchRouteLoggedIn = dispatch(actions.actionRouteLoggedIn);\nexport const dispatchRouteLogOut = dispatch(actions.actionRouteLogOut);\nexport const dispatchRemoveNotification = dispatch(actions.removeNotification);\n"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/store/data/index.ts","webpack:///./src/store/main/index.ts","webpack:///./src/store/index.ts","webpack:///./src/store/main/getters.ts","webpack:///./src/env.ts","webpack:///./src/router.ts","webpack:///./src/store/main/mutations.ts","webpack:///./src/store/data/getters.ts","webpack:///./src/api.ts","webpack:///./src/store/data/mutations.ts","webpack:///./src/store/data/actions.ts","webpack:///./src/components/NotificationsManager.vue","webpack:///./src/components/NotificationsManager.vue?820d","webpack:///./src/components/NotificationsManager.vue?c2a9","webpack:///./src/components/NotificationsManager.vue?cb7d","webpack:///./src/App.vue","webpack:///./src/App.vue?640d","webpack:///./src/App.vue?b1ee","webpack:///./src/App.vue?6169","webpack:///./src/component-hooks.ts","webpack:///./src/plugins/vee-validate.ts","webpack:///./src/plugins/vuetify.ts","webpack:///./src/main.ts","webpack:///./src/utils.ts","webpack:///./src/store/main/actions.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","installedCssChunks","exports","module","l","e","requireEnsure","promises","Promise","resolve","reject","href","fullhref","p","existingLinkTags","document","getElementsByTagName","dataHref","tag","getAttribute","rel","existingStyleTags","linkTag","createElement","type","onload","onerror","event","request","target","src","err","Error","code","parentNode","removeChild","appendChild","then","installedChunkData","promise","onScriptComplete","script","charset","timeout","nc","setAttribute","jsonpScriptSrc","error","clearTimeout","chunk","errorType","realSrc","message","name","undefined","setTimeout","head","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","getDefault","getModuleExports","object","property","oe","console","jsonpArray","window","oldJsonpFunction","slice","dataModule","state","traces","loadingSamples","mutations","actions","getters","mainModule","isLoggedIn","token","logInError","dashboardMiniDrawer","dashboardShowDrawer","notifications","use","storeOptions","main","store","Store","loginError","firstNotification","read","readDashboardMiniDrawer","readDashboardShowDrawer","readIsLoggedIn","readLoginError","readFirstNotification","apiUrl","appName","base","routes","path","component","children","redirect","setToken","payload","setLoggedIn","setLogInError","setDashboardMiniDrawer","setDashboardShowDrawer","addNotification","removeNotification","filter","notification","commit","commitSetDashboardMiniDrawer","commitSetDashboardShowDrawer","commitSetLoggedIn","commitSetLogInError","commitSetToken","commitAddNotification","commitRemoveNotification","activeTraceIDs","values","isActive","map","id","readTraces","readLoadingSamples","readActiveTraceIDs","authHeaders","headers","Authorization","params","api","getToken","a","getTraces","createTrace","post","getSamples","trace","skip","limit","options","trace_id","setTraceDefaults","parameters","activeParams","burnIn","setTraces","reduce","obj","setTrace","log","set","setActiveTrace","setActiveParams","traceID","setBurnIn","setLoadingSamples","setSetSamples","formatData","samples","index","row","param","keys","paramName","concat","sort","b","commitSetTraces","commitSetTrace","commitSetActiveTrace","commitSetSamples","commitSetActiveParams","commitSetBurnIn","commitSetLoadingSamples","actionGetTraces","context","response","rootState","actionCreateTrace","loadingNotification","content","showProgress","color","actionSetActiveTrace","actionSetActiveParams","actionGetSamples","dispatchGetSamples","actionSetBurnIn","actionSetLoadingSamples","dispatch","dispatchGetTraces","dispatchCreateTrace","dispatchSetActiveTrace","dispatchSetActiveParams","dispatchSetBurnIn","show","text","notFound","currentNotification","this","hide","removeCurrentNotification","$store","newNotification","oldNotification","setNotification","_vm","_h","$createElement","_c","_self","attrs","currentNotificationColor","model","callback","$$v","expression","staticClass","directives","rawName","_v","_s","currentNotificationContent","nativeOn","$event","close","arguments","VBtn","VIcon","VProgressCircular","VSnackbar","components","NotificationsManager","loggedIn","VApp","VContainer","VContent","VFlex","VRow","registerHooks","config","productionTip","router","vuetify","render","h","$mount","getLocalToken","localStorage","getItem","saveLocalToken","setItem","removeLocalToken","removeItem","actionCheckToken","dispatchRouteLoggedIn","dispatchLogOut","actionCheckLoggedIn","localToken","dispatchRemoveLogIn","actionRemoveLogIn","actionLogOut","dispatchRouteLogOut","actionUserLogOut","actionRouteLogOut","currentRoute","actionCheckApiError","status","detail","actionRouteLoggedIn","dispatchCheckApiError","dispatchCheckLoggedIn","dispatchCheckToken","dispatchUserLogOut","dispatchRemoveNotification"],"mappings":"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","file":"js/app.7bccd7dc.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"app\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({\"login~main~main-dashboard\":\"login~main~main-dashboard\",\"login~main-dashboard\":\"login~main-dashboard\",\"login\":\"login\",\"main~main-dashboard\":\"main~main-dashboard\",\"main-dashboard\":\"main-dashboard\",\"main\":\"main\",\"reset-password\":\"reset-password\",\"start\":\"start\"}[chunkId]||chunkId) + \".\" + {\"login~main~main-dashboard\":\"274e0fba\",\"login~main-dashboard\":\"b88e9356\",\"login\":\"81d3c393\",\"main~main-dashboard\":\"3a8668ab\",\"main-dashboard\":\"98d84fb0\",\"main\":\"6536a1d2\",\"reset-password\":\"16721f30\",\"start\":\"76ff2574\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"login~main~main-dashboard\":1,\"login~main-dashboard\":1,\"login\":1,\"main~main-dashboard\":1,\"main-dashboard\":1,\"main\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"css/\" + ({\"login~main~main-dashboard\":\"login~main~main-dashboard\",\"login~main-dashboard\":\"login~main-dashboard\",\"login\":\"login\",\"main~main-dashboard\":\"main~main-dashboard\",\"main-dashboard\":\"main-dashboard\",\"main\":\"main\",\"reset-password\":\"reset-password\",\"start\":\"start\"}[chunkId]||chunkId) + \".\" + {\"login~main~main-dashboard\":\"87cb79bc\",\"login~main-dashboard\":\"49552835\",\"login\":\"4b7f13da\",\"main~main-dashboard\":\"7a0daa79\",\"main-dashboard\":\"e4e498b4\",\"main\":\"ccc0de8f\",\"reset-password\":\"31d6cfe0\",\"start\":\"31d6cfe0\"}[chunkId] + \".css\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import { actions } from './actions';\nimport { getters } from './getters';\nimport { mutations } from './mutations';\nimport { DataState } from './state';\n\nconst defaultState: DataState = {\n traces: {},\n loadingSamples: false,\n};\n\nexport const dataModule = {\n state: defaultState,\n mutations,\n actions,\n getters,\n};\n","import { actions } from './actions';\nimport { getters } from './getters';\nimport { mutations } from './mutations';\nimport { MainState } from './state';\n\nconst defaultState: MainState = {\n isLoggedIn: null,\n token: '',\n logInError: false,\n dashboardMiniDrawer: false,\n dashboardShowDrawer: false,\n notifications: [],\n};\n\nexport const mainModule = {\n state: defaultState,\n mutations,\n actions,\n getters,\n};\n","import Vue from 'vue';\nimport Vuex, { StoreOptions } from 'vuex';\n\nimport { dataModule } from './data';\nimport { mainModule } from './main';\nimport { State } from './state';\n\nVue.use(Vuex);\n\nconst storeOptions: StoreOptions = {\n modules: {\n main: mainModule,\n data: dataModule,\n },\n};\n\nexport const store = new Vuex.Store(storeOptions);\n\nexport default store;\n","import { getStoreAccessors } from 'typesafe-vuex';\nimport { State } from '../state';\nimport { MainState } from './state';\n\nexport const getters = {\n loginError: (state: MainState) => state.logInError,\n dashboardShowDrawer: (state: MainState) => state.dashboardShowDrawer,\n dashboardMiniDrawer: (state: MainState) => state.dashboardMiniDrawer,\n token: (state: MainState) => state.token,\n isLoggedIn: (state: MainState) => state.isLoggedIn,\n firstNotification: (state: MainState) => state.notifications.length > 0 && state.notifications[0],\n};\n\nconst {read} = getStoreAccessors('');\n\nexport const readDashboardMiniDrawer = read(getters.dashboardMiniDrawer);\nexport const readDashboardShowDrawer = read(getters.dashboardShowDrawer);\nexport const readIsLoggedIn = read(getters.isLoggedIn);\nexport const readLoginError = read(getters.loginError);\nexport const readToken = read(getters.token);\nexport const readFirstNotification = read(getters.firstNotification);\n","const env = process.env.VUE_APP_ENV;\n\nlet envApiUrl = '';\n\nif (env === 'production') {\n envApiUrl = `${process.env.VUE_APP_DOMAIN_PROD}`;\n} else if (env === 'staging') {\n envApiUrl = `${process.env.VUE_APP_DOMAIN_STAG}`;\n} else {\n envApiUrl = `${process.env.VUE_APP_DOMAIN_DEV}`;\n}\n\nexport const apiUrl = envApiUrl;\nexport const appName = process.env.VUE_APP_NAME;\n","import Vue from 'vue';\nimport Router from 'vue-router';\n\nimport RouterComponent from './components/RouterComponent.vue';\n\nVue.use(Router);\n\nexport default new Router({\n mode: 'history',\n base: process.env.BASE_URL,\n routes: [\n {\n path: '/',\n component: () => import(/* webpackChunkName: \"start\" */ './views/main/Start.vue'),\n children: [\n {\n path: 'login',\n // route level code-splitting\n // this generates a separate chunk (about.[hash].js) for this route\n // which is lazy-loaded when the route is visited.\n component: () => import(/* webpackChunkName: \"login\" */ './views/Login.vue'),\n },\n {\n path: '404',\n component: () => import(/* webpackChunkName: \"reset-password\" */ './views/404.vue'),\n },\n {\n path: 'main',\n component: () => import(/* webpackChunkName: \"main\" */ './views/main/Main.vue'),\n children: [\n {\n path: 'dashboard',\n component: () => import(/* webpackChunkName: \"main-dashboard\" */ './views/main/Dashboard.vue'),\n },\n ],\n },\n ],\n },\n {\n path: '/*', redirect: '/404',\n },\n ],\n});\n","import { getStoreAccessors } from 'typesafe-vuex';\nimport { State } from '../state';\nimport { AppNotification, MainState } from './state';\n\n\nexport const mutations = {\n setToken(state: MainState, payload: string) {\n state.token = payload;\n },\n setLoggedIn(state: MainState, payload: boolean) {\n state.isLoggedIn = payload;\n },\n setLogInError(state: MainState, payload: boolean) {\n state.logInError = payload;\n },\n setDashboardMiniDrawer(state: MainState, payload: boolean) {\n state.dashboardMiniDrawer = payload;\n },\n setDashboardShowDrawer(state: MainState, payload: boolean) {\n state.dashboardShowDrawer = payload;\n },\n addNotification(state: MainState, payload: AppNotification) {\n state.notifications.push(payload);\n },\n removeNotification(state: MainState, payload: AppNotification) {\n state.notifications = state.notifications.filter((notification) => notification !== payload);\n },\n};\n\nconst {commit} = getStoreAccessors('');\n\nexport const commitSetDashboardMiniDrawer = commit(mutations.setDashboardMiniDrawer);\nexport const commitSetDashboardShowDrawer = commit(mutations.setDashboardShowDrawer);\nexport const commitSetLoggedIn = commit(mutations.setLoggedIn);\nexport const commitSetLogInError = commit(mutations.setLogInError);\nexport const commitSetToken = commit(mutations.setToken);\nexport const commitAddNotification = commit(mutations.addNotification);\nexport const commitRemoveNotification = commit(mutations.removeNotification);\n","import { getStoreAccessors } from 'typesafe-vuex';\nimport { State } from '../state';\nimport { DataState } from './state';\n\nexport const getters = {\n traces: (state: DataState) => state.traces,\n loadingSamples: (state: DataState) => state.loadingSamples,\n activeTraceIDs: (state: DataState) => Object.values(state.traces).filter((t) => t.isActive).map((t) => t.id),\n};\nconst {read} = getStoreAccessors('');\n\nexport const readTraces = read(getters.traces);\nexport const readLoadingSamples = read(getters.loadingSamples);\nexport const readActiveTraceIDs = read(getters.activeTraceIDs);\n\n","import { apiUrl } from '@/env';\nimport { InSample, Trace, TraceCreate } from '@/interfaces';\nimport axios from 'axios';\nimport { config } from 'vue/types/umd';\n\nfunction authHeaders(token: string) {\n return {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n params: {},\n };\n}\n\nexport const api = {\n async getToken(token: string) {\n return axios.get(`${apiUrl}/api/security/token`, authHeaders(token));\n },\n async getTraces(token: string) {\n return axios.get(`${apiUrl}/api/traces/`, authHeaders(token));\n },\n async createTrace(token: string, data: TraceCreate) {\n return axios.post(`${apiUrl}/api/traces/`, data, authHeaders(token));\n },\n async getSamples(token: string, trace: Trace, skip: number = 0, limit: number = 100) {\n const options = authHeaders(token);\n options.params = {trace_id: trace.id, skip, limit};\n return axios.get(`${apiUrl}/api/samples/`, options);\n },\n};\n","import { Data, InSample, SetSample, Trace } from '@/interfaces';\nimport { getStoreAccessors } from 'typesafe-vuex';\nimport Vue from 'vue';\nimport { State } from '../state';\nimport { DataState } from './state';\n\nfunction formatData(samples: InSample[]) {\n const parameters: { [key: string]: Data[] } = {};\n for (let index = 0; index < samples.length; index++) {\n const row = samples[index].data;\n const state = samples[index].state;\n for (const param in row) {\n if (param) {\n if (index === 0) {\n parameters[param] = [];\n }\n parameters[param].push({ state, value: row[param] });\n }\n }\n\n }\n\n return parameters;\n}\n\nfunction setTraceDefaults(trace: Trace) {\n trace.parameters = {};\n trace.activeParams = [];\n trace.isActive = false;\n trace.burnIn = 10;\n}\n\nexport const mutations = {\n setTraces(state: DataState, payload: Trace[]) {\n for (const trace of payload) {\n setTraceDefaults(trace);\n }\n const traces = payload.reduce((obj, trace) => {\n obj[trace.id] = trace;\n return obj;\n }, {});\n state.traces = traces;\n },\n setTrace(state: DataState, payload: Trace) {\n console.log(payload);\n setTraceDefaults(payload);\n // https://vuex.vuejs.org/guide/mutations.html#mutations-follow-vue-s-reactivity-rules\n Vue.set(state.traces, payload.id, payload);\n },\n setActiveTrace(state: DataState, payload: Trace) {\n state.traces[payload.id].isActive = true;\n\n },\n setActiveParams(state: DataState, payload: {traceID: number, params: string[]}) {\n state.traces[payload.traceID].activeParams = payload.params;\n },\n setBurnIn(state: DataState, payload: {traceID: number, burnIn: number}) {\n console.log(payload);\n state.traces[payload.traceID].burnIn = payload.burnIn;\n },\n setLoadingSamples(state: DataState, payload: boolean) {\n state.loadingSamples = payload;\n },\n setSetSamples(state: DataState, payload: {traceID: number, data: InSample[]}) {\n const data = formatData(payload.data);\n const trace = state.traces[payload.traceID];\n if (Object.keys(trace.parameters).length === 0) {\n trace.parameters = data;\n } else {\n for (const paramName in data) {\n if (paramName) {\n trace.parameters[paramName] = trace.parameters[paramName].concat(\n data[paramName]).sort((a, b) => a.state - b.state,\n );\n }\n }\n }\n },\n};\n\nconst {commit} = getStoreAccessors('');\n\nexport const commitSetTraces = commit(mutations.setTraces);\nexport const commitSetTrace = commit(mutations.setTrace);\nexport const commitSetActiveTrace = commit(mutations.setActiveTrace);\nexport const commitSetSamples = commit(mutations.setSetSamples);\nexport const commitSetActiveParams = commit(mutations.setActiveParams);\nexport const commitSetBurnIn = commit(mutations.setBurnIn);\nexport const commitSetLoadingSamples = commit(mutations.setLoadingSamples);\n\n","import { api } from '@/api';\nimport { Trace, TraceCreate } from '@/interfaces';\nimport { AxiosResponse } from 'axios';\nimport { getStoreAccessors } from 'typesafe-vuex';\nimport { ActionContext } from 'vuex';\nimport { dispatchCheckApiError } from '../main/actions';\nimport { commitAddNotification, commitRemoveNotification } from '../main/mutations';\nimport { State } from '../state';\nimport {\n commitSetActiveParams,\n commitSetActiveTrace,\n commitSetBurnIn,\n commitSetLoadingSamples,\n commitSetSamples,\n commitSetTrace,\n commitSetTraces,\n} from './mutations';\nimport { DataState } from './state';\n\ntype MainContext = ActionContext;\n\nexport const actions = {\n async actionGetTraces(context: MainContext) {\n let response: AxiosResponse | null = null;\n try {\n response = await api.getTraces(context.rootState.main.token);\n } catch (error) {\n await dispatchCheckApiError(context, error);\n }\n if (response) {\n commitSetTraces(context, response.data);\n }\n },\n async actionCreateTrace(context: MainContext, payload: TraceCreate) {\n const loadingNotification = { content: 'saving', showProgress: true };\n commitAddNotification(context, loadingNotification);\n let response: AxiosResponse | null = null;\n try {\n response = await api.createTrace(context.rootState.main.token, payload);\n } catch (error) {\n await dispatchCheckApiError(context, error);\n }\n commitRemoveNotification(context, loadingNotification);\n if (response != null) {\n commitSetTrace(context, response.data);\n commitAddNotification(context, { content: 'Trace successfully created', color: 'success' });\n }\n },\n async actionSetActiveTrace(context: MainContext, payload: Trace) {\n commitSetActiveTrace(context, payload);\n },\n async actionSetActiveParams(context: MainContext, payload: {traceID: number, params: string[]}) {\n commitSetActiveParams(context, payload);\n },\n async actionGetSamples(\n context: MainContext,\n payload: {trace: Trace,\n skip?: number,\n limit?: number,\n all?: boolean}) {\n const trace = payload.trace;\n const skip = payload.skip ? payload.skip : 0;\n const limit = payload.limit ? payload.limit : 100;\n const all = payload.all ? payload.all : false;\n const loadingNotification = { content: 'Loading samples...', showProgress: true };\n if (skip === 0) {\n commitAddNotification(context, loadingNotification);\n }\n let response: AxiosResponse | null = null;\n try {\n response = await api.getSamples(context.rootState.main.token, trace, skip, limit);\n } catch (error) {\n await dispatchCheckApiError(context, error);\n }\n commitRemoveNotification(context, loadingNotification);\n if (response != null) {\n if (all === true && response.data.length === limit) {\n // if you get back what you request go again\n await dispatchGetSamples(context, {trace, skip: skip + limit, limit, all: true});\n }\n commitSetSamples(context, {traceID: trace.id, data: response.data});\n }\n },\n async actionSetBurnIn(context: MainContext, payload: {traceID: number, burnIn: number}) {\n commitSetBurnIn(context, payload);\n },\n async actionSetLoadingSamples(context: MainContext, payload: boolean) {\n commitSetLoadingSamples(context, payload);\n },\n};\n\nconst { dispatch } = getStoreAccessors('');\n\nexport const dispatchGetTraces = dispatch(actions.actionGetTraces);\nexport const dispatchCreateTrace = dispatch(actions.actionCreateTrace);\nexport const dispatchSetActiveTrace = dispatch(actions.actionSetActiveTrace);\nexport const dispatchGetSamples = dispatch(actions.actionGetSamples);\nexport const dispatchSetActiveParams = dispatch(actions.actionSetActiveParams);\nexport const dispatchSetBurnIn = dispatch(actions.actionSetBurnIn);\nexport const dispatchSetLoadingSamples = dispatch(actions.actionSetLoadingSamples);\n\n\n","\n\n\n\n\n\n\n\n\n\n\n\n\nimport { dispatchRemoveNotification } from '@/store/main/actions';\nimport { readFirstNotification } from '@/store/main/getters';\nimport { commitRemoveNotification } from '@/store/main/mutations';\nimport { AppNotification } from '@/store/main/state';\nimport { Component, Prop, Vue, Watch } from 'vue-property-decorator';\n\n@Component\nexport default class NotificationsManager extends Vue {\n public show: boolean = false;\n public text: string = '';\n public showProgress: boolean = false;\n public notFound: boolean = false;\n public currentNotification: AppNotification | false = false;\n\n public async hide() {\n this.show = false;\n await new Promise((resolve, reject) => setTimeout(() => resolve(), 500));\n }\n\n public async close() {\n await this.hide();\n await this.removeCurrentNotification();\n }\n\n public async removeCurrentNotification() {\n if (this.currentNotification) {\n commitRemoveNotification(this.$store, this.currentNotification);\n }\n }\n\n public get firstNotification() {\n return readFirstNotification(this.$store);\n }\n\n public async setNotification(notification: AppNotification | false) {\n if (this.show) {\n await this.hide();\n }\n if (notification) {\n this.currentNotification = notification;\n this.showProgress = notification.showProgress || false;\n this.notFound = notification.notFound || false;\n this.show = true;\n } else {\n this.currentNotification = false;\n }\n }\n\n @Watch('firstNotification')\n public async onNotificationChange(\n newNotification: AppNotification | false,\n oldNotification: AppNotification | false,\n ) {\n if (newNotification !== this.currentNotification) {\n await this.setNotification(newNotification);\n if (newNotification) {\n dispatchRemoveNotification(this.$store, { notification: newNotification, timeout: 10000 });\n }\n }\n }\n\n public get currentNotificationContent() {\n return this.currentNotification && this.currentNotification.content || '';\n }\n\n public get currentNotificationColor() {\n return this.currentNotification && this.currentNotification.color || 'info';\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NotificationsManager.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--13-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NotificationsManager.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./NotificationsManager.vue?vue&type=template&id=2b4f56c1&\"\nimport script from \"./NotificationsManager.vue?vue&type=script&lang=ts&\"\nexport * from \"./NotificationsManager.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\nimport { VSnackbar } from 'vuetify/lib/components/VSnackbar';\ninstallComponents(component, {VBtn,VIcon,VProgressCircular,VSnackbar})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-snackbar',{attrs:{\"color\":_vm.currentNotificationColor},model:{value:(_vm.show),callback:function ($$v) {_vm.show=$$v},expression:\"show\"}},[_c('div',{staticClass:\"d-flex justify-space-between align-center \"},[_c('v-progress-circular',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showProgress),expression:\"showProgress\"}],staticClass:\"ma-1\",attrs:{\"indeterminate\":\"\"}}),_c('v-icon',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.notFound),expression:\"notFound\"}],staticClass:\"ma-1\",attrs:{\"large\":\"\"}},[_vm._v(\"mdi-cancel\")]),_vm._v(\" \"+_vm._s(_vm.currentNotificationContent)+\" \"),_c('v-btn',{attrs:{\"text\":\"\"},nativeOn:{\"click\":function($event){return _vm.close.apply(null, arguments)}}},[_vm._v(\"Close\")])],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport NotificationsManager from '@/components/NotificationsManager.vue';\nimport { dispatchCheckLoggedIn } from '@/store/main/actions';\nimport { readIsLoggedIn } from '@/store/main/getters';\nimport { Component, Vue } from 'vue-property-decorator';\n\n@Component({\n components: {\n NotificationsManager,\n },\n})\nexport default class App extends Vue {\n\n get loggedIn() {\n return readIsLoggedIn(this.$store);\n }\n\n public async created() {\n await dispatchCheckLoggedIn(this.$store);\n }\n}\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--13-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??ref--13-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--13-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/ts-loader/index.js??ref--13-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=12c528ee&\"\nimport script from \"./App.vue?vue&type=script&lang=ts&\"\nexport * from \"./App.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VContent } from 'vuetify/lib/components/VContent';\nimport { VFlex } from 'vuetify/lib/components/VGrid';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\nimport { VRow } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VApp,VContainer,VContent,VFlex,VProgressCircular,VRow})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('v-app',[(_vm.loggedIn===null)?_c('v-content',[_c('v-container',{attrs:{\"fill-height\":\"\"}},[_c('v-row',{attrs:{\"align-center\":\"\",\"justify-center\":\"\"}},[_c('v-flex',[_c('div',{staticClass:\"text-xs-center\"},[_c('div',{staticClass:\"headline my-5\"},[_vm._v(\"Loading...\")]),_c('v-progress-circular',{attrs:{\"size\":\"100\",\"indeterminate\":\"\",\"color\":\"primary\"}})],1)])],1)],1)],1):_c('router-view'),_c('NotificationsManager')],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import Component from 'vue-class-component';\n\n// Register the router hooks with their names\nComponent.registerHooks([\n 'beforeRouteEnter',\n 'beforeRouteLeave',\n 'beforeRouteUpdate', // for vue-router 2.2+\n]);\n","import VeeValidate from 'vee-validate';\nimport Vue from 'vue';\n\nVue.use(VeeValidate);\n","import Vue from 'vue';\nimport Vuetify from 'vuetify/lib/framework';\n\nVue.use(Vuetify);\n\nexport default new Vuetify({\n});\n","import store from '@/store';\nimport '@babel/polyfill';\nimport Vue from 'vue';\nimport App from './App.vue';\n// Import Component hooks before component definitions\nimport './component-hooks';\nimport './plugins/vee-validate';\nimport vuetify from './plugins/vuetify';\nimport router from './router';\n\nVue.config.productionTip = false;\n\nnew Vue({\n router,\n store,\n vuetify,\n render: (h) => h(App),\n}).$mount('#app');\n","export const getLocalToken = () => localStorage.getItem('token');\n\nexport const saveLocalToken = (token: string) => localStorage.setItem('token', token);\n\nexport const removeLocalToken = () => localStorage.removeItem('token');\n","import { api } from '@/api';\nimport router from '@/router';\nimport { getLocalToken, removeLocalToken, saveLocalToken } from '@/utils';\nimport { AxiosError } from 'axios';\nimport { getStoreAccessors } from 'typesafe-vuex';\nimport { ActionContext } from 'vuex';\nimport { State } from '../state';\nimport {\n commitAddNotification,\n commitRemoveNotification,\n commitSetLoggedIn,\n commitSetLogInError,\n commitSetToken,\n} from './mutations';\nimport { AppNotification, MainState } from './state';\n\ntype MainContext = ActionContext;\n\nexport const actions = {\n async actionCheckToken(context: MainContext, payload: { token: string }) {\n try {\n const response = await api.getToken(payload.token);\n const token = response.data.token;\n if (token) {\n saveLocalToken(token);\n commitSetToken(context, token);\n commitSetLoggedIn(context, true);\n commitSetLogInError(context, false);\n await dispatchRouteLoggedIn(context);\n commitAddNotification(context, { content: 'Logged in', color: 'success' });\n } else {\n await dispatchLogOut(context);\n }\n } catch (err) {\n commitSetLogInError(context, true);\n await dispatchLogOut(context);\n }\n },\n async actionCheckLoggedIn(context: MainContext) {\n if (!context.state.isLoggedIn) {\n let token = context.state.token;\n if (!token) {\n const localToken = getLocalToken();\n if (localToken) {\n commitSetToken(context, localToken);\n token = localToken;\n }\n }\n if (token) {\n try {\n commitSetLoggedIn(context, true);\n } catch (error) {\n await dispatchRemoveLogIn(context);\n }\n } else {\n await dispatchRemoveLogIn(context);\n }\n }\n },\n async actionRemoveLogIn(context: MainContext) {\n removeLocalToken();\n commitSetToken(context, '');\n commitSetLoggedIn(context, false);\n },\n async actionLogOut(context: MainContext) {\n await dispatchRemoveLogIn(context);\n await dispatchRouteLogOut(context);\n },\n async actionUserLogOut(context: MainContext) {\n await dispatchLogOut(context);\n commitAddNotification(context, { content: 'Logged out', color: 'success' });\n },\n actionRouteLogOut(context: MainContext) {\n if (router.currentRoute.path !== '/login') {\n router.push('/login');\n }\n },\n async actionCheckApiError(context: MainContext, payload: AxiosError) {\n if (payload.response!.status === 401) {\n await dispatchLogOut(context);\n }\n if (payload.response!.status === 404) {\n commitAddNotification(context, { content: payload.response!.data.detail, color: 'error', notFound: true});\n }\n if (payload.response!.status === 500) {\n commitAddNotification(context, { content: payload.response!.data.detail, color: 'error', notFound: true});\n }\n },\n actionRouteLoggedIn(context: MainContext) {\n if (router.currentRoute.path === '/login' || router.currentRoute.path === '/') {\n router.push('/main/dashboard');\n }\n },\n async removeNotification(context: MainContext, payload: { notification: AppNotification, timeout: number }) {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n commitRemoveNotification(context, payload.notification);\n resolve(true);\n }, payload.timeout);\n });\n },\n};\n\nconst { dispatch } = getStoreAccessors('');\n\nexport const dispatchCheckApiError = dispatch(actions.actionCheckApiError);\nexport const dispatchCheckLoggedIn = dispatch(actions.actionCheckLoggedIn);\nexport const dispatchCheckToken = dispatch(actions.actionCheckToken);\nexport const dispatchLogOut = dispatch(actions.actionLogOut);\nexport const dispatchUserLogOut = dispatch(actions.actionUserLogOut);\nexport const dispatchRemoveLogIn = dispatch(actions.actionRemoveLogIn);\nexport const dispatchRouteLoggedIn = dispatch(actions.actionRouteLoggedIn);\nexport const dispatchRouteLogOut = dispatch(actions.actionRouteLogOut);\nexport const dispatchRemoveNotification = dispatch(actions.removeNotification);\n"],"sourceRoot":""}
\ No newline at end of file
diff --git a/backend/beastiary/webapp-dist/js/main-dashboard.eb06aced.js b/backend/beastiary/webapp-dist/js/main-dashboard.98d84fb0.js
similarity index 95%
rename from backend/beastiary/webapp-dist/js/main-dashboard.eb06aced.js
rename to backend/beastiary/webapp-dist/js/main-dashboard.98d84fb0.js
index e16faef..2bac2b2 100644
--- a/backend/beastiary/webapp-dist/js/main-dashboard.eb06aced.js
+++ b/backend/beastiary/webapp-dist/js/main-dashboard.98d84fb0.js
@@ -61,5 +61,5 @@ var Ue=Be("1fb5"),We=Be("9152"),$e=Be("2335");function kMaxLength(){return Buffe
*
* Copyright (c) 2020, Robert Eisele (robert@xarg.org)
* Dual licensed under the MIT or GPL Version 2 licenses.
- **/!function(Be){"use strict";var cosh=function(Ee){return.5*(Math.exp(Ee)+Math.exp(-Ee))},sinh=function(Ee){return.5*(Math.exp(Ee)-Math.exp(-Ee))},parser_exit=function(){throw SyntaxError("Invalid Param")};function logHypot(Ee,ze){var Be=Math.abs(Ee),Ue=Math.abs(ze);return 0===Ee?Math.log(Ue):0===ze?Math.log(Be):Be<3e3&&Ue<3e3?.5*Math.log(Ee*Ee+ze*ze):Math.log(Ee/Math.cos(Math.atan2(ze,Ee)))}function Complex(Ee,ze){if(!(this instanceof Complex))return new Complex(Ee,ze);var Be=function(Ee,ze){var Be={re:0,im:0};if(null==Ee)Be.re=Be.im=0;else if(void 0!==ze)Be.re=Ee,Be.im=ze;else switch(typeof Ee){case"object":if("im"in Ee&&"re"in Ee)Be.re=Ee.re,Be.im=Ee.im;else if("abs"in Ee&&"arg"in Ee){if(!Number.isFinite(Ee.abs)&&Number.isFinite(Ee.arg))return Complex.INFINITY;Be.re=Ee.abs*Math.cos(Ee.arg),Be.im=Ee.abs*Math.sin(Ee.arg)}else if("r"in Ee&&"phi"in Ee){if(!Number.isFinite(Ee.r)&&Number.isFinite(Ee.phi))return Complex.INFINITY;Be.re=Ee.r*Math.cos(Ee.phi),Be.im=Ee.r*Math.sin(Ee.phi)}else 2===Ee.length?(Be.re=Ee[0],Be.im=Ee[1]):parser_exit();break;case"string":Be.im=Be.re=0;var Ue=Ee.match(/\d+\.?\d*e[+-]?\d+|\d+\.?\d*|\.\d+|./g),We=1,$e=0;null===Ue&&parser_exit();for(var Qe=0;Qe0&&parser_exit();break;case"number":Be.im=0,Be.re=Ee;break;default:parser_exit()}return isNaN(Be.re)||isNaN(Be.im),Be}(Ee,ze);this.re=Be.re,this.im=Be.im}Complex.prototype={re:0,im:0,sign:function(){var Ee=this.abs();return new Complex(this.re/Ee,this.im/Ee)},add:function(Ee,ze){var Be=new Complex(Ee,ze);return this.isInfinite()&&Be.isInfinite()?Complex.NAN:this.isInfinite()||Be.isInfinite()?Complex.INFINITY:new Complex(this.re+Be.re,this.im+Be.im)},sub:function(Ee,ze){var Be=new Complex(Ee,ze);return this.isInfinite()&&Be.isInfinite()?Complex.NAN:this.isInfinite()||Be.isInfinite()?Complex.INFINITY:new Complex(this.re-Be.re,this.im-Be.im)},mul:function(Ee,ze){var Be=new Complex(Ee,ze);return this.isInfinite()&&Be.isZero()||this.isZero()&&Be.isInfinite()?Complex.NAN:this.isInfinite()||Be.isInfinite()?Complex.INFINITY:0===Be.im&&0===this.im?new Complex(this.re*Be.re,0):new Complex(this.re*Be.re-this.im*Be.im,this.re*Be.im+this.im*Be.re)},div:function(Ee,ze){var Be=new Complex(Ee,ze);if(this.isZero()&&Be.isZero()||this.isInfinite()&&Be.isInfinite())return Complex.NAN;if(this.isInfinite()||Be.isZero())return Complex.INFINITY;if(this.isZero()||Be.isInfinite())return Complex.ZERO;Ee=this.re,ze=this.im;var Ue,We,$e=Be.re,Qe=Be.im;return 0===Qe?new Complex(Ee/$e,ze/$e):Math.abs($e)0)return new Complex(Math.pow(Ee,Be.re),0);if(0===Ee)switch((Be.re%4+4)%4){case 0:return new Complex(Math.pow(ze,Be.re),0);case 1:return new Complex(0,Math.pow(ze,Be.re));case 2:return new Complex(-Math.pow(ze,Be.re),0);case 3:return new Complex(0,-Math.pow(ze,Be.re))}}if(0===Ee&&0===ze&&Be.re>0&&Be.im>=0)return Complex.ZERO;var Ue=Math.atan2(ze,Ee),We=logHypot(Ee,ze);return Ee=Math.exp(Be.re*We-Be.im*Ue),ze=Be.im*We+Be.re*Ue,new Complex(Ee*Math.cos(ze),Ee*Math.sin(ze))},sqrt:function(){var Ee,ze,Be=this.re,Ue=this.im,We=this.abs();if(Be>=0){if(0===Ue)return new Complex(Math.sqrt(Be),0);Ee=.5*Math.sqrt(2*(We+Be))}else Ee=Math.abs(Ue)/Math.sqrt(2*(We-Be));return ze=Be<=0?.5*Math.sqrt(2*(We-Be)):Math.abs(Ue)/Math.sqrt(2*(We+Be)),new Complex(Ee,Ue<0?-ze:ze)},exp:function(){var Ee=Math.exp(this.re);return this.im,new Complex(Ee*Math.cos(this.im),Ee*Math.sin(this.im))},expm1:function(){var Ee=this.re,ze=this.im;return new Complex(Math.expm1(Ee)*Math.cos(ze)+function(Ee){var ze=Math.PI/4;if(-ze>Ee||Ee>ze)return Math.cos(Ee)-1;var Be=Ee*Ee;return Be*(Be*(Be*(Be*(Be*(Be*(Be*(Be/20922789888e3-1/87178291200)+1/479001600)-1/3628800)+1/40320)-1/720)+1/24)-.5)}(ze),Math.exp(Ee)*Math.sin(ze))},log:function(){var Ee=this.re,ze=this.im;return new Complex(logHypot(Ee,ze),Math.atan2(ze,Ee))},abs:function(){return Ee=this.re,ze=this.im,Be=Math.abs(Ee),Ue=Math.abs(ze),Be<3e3&&Ue<3e3?Math.sqrt(Be*Be+Ue*Ue):(Be1&&0===ze,Ue=1-Ee,We=1+Ee,$e=Ue*Ue+ze*ze,Qe=0!==$e?new Complex((We*Ue-ze*ze)/$e,(ze*Ue+We*ze)/$e):new Complex(-1!==Ee?Ee/0:0,0!==ze?ze/0:0),et=Qe.re;return Qe.re=logHypot(Qe.re,Qe.im)/2,Qe.im=Math.atan2(Qe.im,et)/2,Be&&(Qe.im=-Qe.im),Qe},acoth:function(){var Ee=this.re,ze=this.im;if(0===Ee&&0===ze)return new Complex(0,Math.PI/2);var Be=Ee*Ee+ze*ze;return 0!==Be?new Complex(Ee/Be,-ze/Be).atanh():new Complex(0!==Ee?Ee/0:0,0!==ze?-ze/0:0).atanh()},acsch:function(){var Ee=this.re,ze=this.im;if(0===ze)return new Complex(0!==Ee?Math.log(Ee+Math.sqrt(Ee*Ee+1)):1/0,0);var Be=Ee*Ee+ze*ze;return 0!==Be?new Complex(Ee/Be,-ze/Be).asinh():new Complex(0!==Ee?Ee/0:0,0!==ze?-ze/0:0).asinh()},asech:function(){var Ee=this.re,ze=this.im;if(this.isZero())return Complex.INFINITY;var Be=Ee*Ee+ze*ze;return 0!==Be?new Complex(Ee/Be,-ze/Be).acosh():new Complex(0!==Ee?Ee/0:0,0!==ze?-ze/0:0).acosh()},inverse:function(){if(this.isZero())return Complex.INFINITY;if(this.isInfinite())return Complex.ZERO;var Ee=this.re,ze=this.im,Be=Ee*Ee+ze*ze;return new Complex(Ee/Be,-ze/Be)},conjugate:function(){return new Complex(this.re,-this.im)},neg:function(){return new Complex(-this.re,-this.im)},ceil:function(Ee){return Ee=Math.pow(10,Ee||0),new Complex(Math.ceil(this.re*Ee)/Ee,Math.ceil(this.im*Ee)/Ee)},floor:function(Ee){return Ee=Math.pow(10,Ee||0),new Complex(Math.floor(this.re*Ee)/Ee,Math.floor(this.im*Ee)/Ee)},round:function(Ee){return Ee=Math.pow(10,Ee||0),new Complex(Math.round(this.re*Ee)/Ee,Math.round(this.im*Ee)/Ee)},equals:function(Ee,ze){var Be=new Complex(Ee,ze);return Math.abs(Be.re-this.re)<=Complex.EPSILON&&Math.abs(Be.im-this.im)<=Complex.EPSILON},clone:function(){return new Complex(this.re,this.im)},toString:function(){var Ee=this.re,ze=this.im,Be="";return this.isNaN()?"NaN":this.isInfinite()?"Infinity":(Math.abs(Ee)\'',this),this.addActivatorEvents()},beforeDestroy:function beforeDestroy(){this.removeActivatorEvents()},methods:{addActivatorEvents:function addActivatorEvents(){if(this.activator&&!this.disabled&&this.getActivator()){this.listeners=this.genActivatorListeners();for(var Ee=0,ze=Object.keys(this.listeners);EeEe.length)&&(ze=Ee.length);for(var Be=0,Ue=new Array(ze);Be0&&void 0!==arguments[0]?arguments[0]:[],ze=this.$el,Be=[this.stackMinZIndex,Object(tr.o)(ze)],Ue=[].concat(_toConsumableArray(document.getElementsByClassName("v-menu__content--active")),_toConsumableArray(document.getElementsByClassName("v-dialog__content--active"))),We=0;WeEe.length)&&(ze=Ee.length);for(var Be=0,Ue=new Array(ze);Be=this.getMaxZIndex()},hideScroll:function hideScroll(){this.fullscreen?document.documentElement.classList.add("overflow-y-hidden"):sn.a.options.methods.hideScroll.call(this)},show:function show(){var Ee=this;!this.fullscreen&&!this.hideOverlay&&this.genOverlay(),this.$nextTick((function(){Ee.$nextTick((function(){Ee.previousActiveElement=document.activeElement,Ee.$refs.content.focus(),Ee.bind()}))}))},bind:function bind(){window.addEventListener("focusin",this.onFocusin)},unbind:function unbind(){window.removeEventListener("focusin",this.onFocusin)},onClickOutside:function onClickOutside(Ee){this.$emit("click:outside",Ee),this.persistent?this.noClickAnimation||this.animateClick():this.isActive=!1},onKeydown:function onKeydown(Ee){if(Ee.keyCode===tr.q.esc&&!this.getOpenDependents().length)if(this.persistent)this.noClickAnimation||this.animateClick();else{this.isActive=!1;var ze=this.getActivator();this.$nextTick((function(){return ze&&ze.focus()}))}this.$emit("keydown",Ee)},onFocusin:function onFocusin(Ee){if(Ee&&this.retainFocus){var ze=Ee.target;if(ze&&![document,this.$refs.content].includes(ze)&&!this.$refs.content.contains(ze)&&this.activeZIndex>=this.getMaxZIndex()&&!this.getOpenDependentElements().some((function(Ee){return Ee.contains(ze)}))){var Be=VDialog_toConsumableArray(this.$refs.content.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])')).find((function(Ee){return!Ee.hasAttribute("disabled")}));Be&&Be.focus()}}},genContent:function genContent(){var Ee=this;return this.showLazyContent((function(){return[Ee.$createElement(xt,{props:{root:!0,light:Ee.light,dark:Ee.dark}},[Ee.$createElement("div",{class:Ee.contentClasses,attrs:_objectSpread({role:"document",tabindex:Ee.isActive?0:void 0},Ee.getScopeIdAttrs()),on:{keydown:Ee.onKeydown},style:{zIndex:Ee.activeZIndex},ref:"content"},[Ee.genTransition()])])]}))},genTransition:function genTransition(){var Ee=this.genInnerContent();return this.transition?this.$createElement("transition",{props:{name:this.transition,origin:this.origin,appear:!0}},[Ee]):Ee},genInnerContent:function genInnerContent(){var Ee={class:this.classes,ref:"dialog",directives:[{name:"click-outside",value:{handler:this.onClickOutside,closeConditional:this.closeConditional,include:this.getOpenDependentElements}},{name:"show",value:this.isActive}],style:{transformOrigin:this.origin}};return this.fullscreen||(Ee.style=_objectSpread(_objectSpread({},Ee.style),{},{maxWidth:"none"===this.maxWidth?void 0:Object(tr.f)(this.maxWidth),width:"auto"===this.width?void 0:Object(tr.f)(this.width)})),this.$createElement("div",Ee,this.getContentSlot())}},render:function render(Ee){return Ee("div",{staticClass:"v-dialog__container",class:{"v-dialog__container--attached":""===this.attach||!0===this.attach||"attach"===this.attach},attrs:{role:"dialog"}},[this.genActivator(),this.genContent()])}}),vn=Be("132d"),yn=Be("2fa4"),_n=Be("8654"),Mn=Object(tt.a)(et,(function(){var Ee=this,ze=Ee.$createElement,Be=Ee._self._c||ze;return Be("v-dialog",{attrs:{persistent:"","max-width":"600px"},scopedSlots:Ee._u([{key:"activator",fn:function(ze){var Ue=ze.on,We=ze.attrs;return[Be("v-btn",Ee._g(Ee._b({attrs:{color:"primary",dark:"",fab:"",elevation:"2","x-small":""}},"v-btn",We,!1),Ue),[Be("v-icon",{attrs:{dark:""}},[Ee._v(" mdi-plus ")])],1)]}}]),model:{value:Ee.dialog,callback:function(ze){Ee.dialog=ze},expression:"dialog"}},[Be("v-card",[Be("v-card-title",[Be("span",{staticClass:"text-h5"},[Ee._v("Add trace to Beastiary")])]),Be("v-card-text",[Be("form",[Be("v-text-field",{attrs:{required:"",label:"Path to the log file"},model:{value:Ee.path,callback:function(ze){Ee.path=ze},expression:"path"}})],1)]),Be("v-card-actions",[Be("v-spacer"),Be("v-btn",{attrs:{color:"blue darken-1",text:""},on:{click:function(ze){Ee.dialog=!1}}},[Ee._v(" Close ")]),Be("v-btn",{attrs:{color:"blue darken-1",text:""},on:{click:Ee.submit}},[Ee._v(" Add ")])],1)],1)],1)}),[],!1,null,null,null),Cn=Mn.exports;nt()(Mn,{VBtn:it.a,VCard:at.a,VCardActions:ct.a,VCardText:ct.b,VCardTitle:ct.c,VDialog:dn,VIcon:vn.a,VSpacer:yn.a,VTextField:_n.a});var En=Be("72e7"),Pn=Be("04d1");function Tracevue_type_script_lang_ts_typeof(Ee){return(Tracevue_type_script_lang_ts_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(Ee){return typeof Ee}:function _typeof(Ee){return Ee&&"function"==typeof Symbol&&Ee.constructor===Symbol&&Ee!==Symbol.prototype?"symbol":typeof Ee})(Ee)}function _createForOfIteratorHelper(Ee,ze){var Be="undefined"!=typeof Symbol&&Ee[Symbol.iterator]||Ee["@@iterator"];if(!Be){if(Array.isArray(Ee)||(Be=function Tracevue_type_script_lang_ts_unsupportedIterableToArray(Ee,ze){if(!Ee)return;if("string"==typeof Ee)return Tracevue_type_script_lang_ts_arrayLikeToArray(Ee,ze);var Be=Object.prototype.toString.call(Ee).slice(8,-1);"Object"===Be&&Ee.constructor&&(Be=Ee.constructor.name);if("Map"===Be||"Set"===Be)return Array.from(Ee);if("Arguments"===Be||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(Be))return Tracevue_type_script_lang_ts_arrayLikeToArray(Ee,ze)}(Ee))||ze&&Ee&&"number"==typeof Ee.length){Be&&(Ee=Be);var Ue=0,We=function F(){};return{s:We,n:function n(){return Ue>=Ee.length?{done:!0}:{done:!1,value:Ee[Ue++]}},e:function e(Ee){throw Ee},f:We}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var $e,Qe=!0,et=!1;return{s:function s(){Be=Be.call(Ee)},n:function n(){var Ee=Be.next();return Qe=Ee.done,Ee},e:function e(Ee){et=!0,$e=Ee},f:function f(){try{Qe||null==Be.return||Be.return()}finally{if(et)throw $e}}}}function Tracevue_type_script_lang_ts_arrayLikeToArray(Ee,ze){(null==ze||ze>Ee.length)&&(ze=Ee.length);for(var Be=0,Ue=new Array(ze);Be0})).length?"".concat(rt):"".concat(this.fileName($e.path)," - ").concat(rt),marker:{color:ze[Be]},hovertemplate:"%{y}",legendgroup:rt,bingroup:"1"}),Be++}}catch(Ee){tt.e(Ee)}finally{tt.f()}}}return Ee}},{key:"fileName",value:function fileName(Ee){return Ee.substring(Ee.lastIndexOf("/")+1)}}]),Histogram}($e.c),Bn=In=Object(Ue.a)([Object($e.a)({components:{Plotly:Pn.Plotly}})],In),Hn=Object(tt.a)(Bn,(function(){var Ee=this.$createElement,ze=this._self._c||Ee;return ze("div",[ze("Plotly",{attrs:{data:this.traceData,layout:this.layout,"display-mode-bar":!1}})],1)}),[],!1,null,null,null).exports;function Violinvue_type_script_lang_ts_typeof(Ee){return(Violinvue_type_script_lang_ts_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(Ee){return typeof Ee}:function _typeof(Ee){return Ee&&"function"==typeof Symbol&&Ee.constructor===Symbol&&Ee!==Symbol.prototype?"symbol":typeof Ee})(Ee)}function Violinvue_type_script_lang_ts_createForOfIteratorHelper(Ee,ze){var Be="undefined"!=typeof Symbol&&Ee[Symbol.iterator]||Ee["@@iterator"];if(!Be){if(Array.isArray(Ee)||(Be=function Violinvue_type_script_lang_ts_unsupportedIterableToArray(Ee,ze){if(!Ee)return;if("string"==typeof Ee)return Violinvue_type_script_lang_ts_arrayLikeToArray(Ee,ze);var Be=Object.prototype.toString.call(Ee).slice(8,-1);"Object"===Be&&Ee.constructor&&(Be=Ee.constructor.name);if("Map"===Be||"Set"===Be)return Array.from(Ee);if("Arguments"===Be||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(Be))return Violinvue_type_script_lang_ts_arrayLikeToArray(Ee,ze)}(Ee))||ze&&Ee&&"number"==typeof Ee.length){Be&&(Ee=Be);var Ue=0,We=function F(){};return{s:We,n:function n(){return Ue>=Ee.length?{done:!0}:{done:!1,value:Ee[Ue++]}},e:function e(Ee){throw Ee},f:We}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var $e,Qe=!0,et=!1;return{s:function s(){Be=Be.call(Ee)},n:function n(){var Ee=Be.next();return Qe=Ee.done,Ee},e:function e(Ee){et=!0,$e=Ee},f:function f(){try{Qe||null==Be.return||Be.return()}finally{if(et)throw $e}}}}function Violinvue_type_script_lang_ts_arrayLikeToArray(Ee,ze){(null==ze||ze>Ee.length)&&(ze=Ee.length);for(var Be=0,Ue=new Array(ze);Be0?1:Ee<0?-1:0},ci=Math.log2||function log2(Ee){return Math.log(Ee)/Math.LN2},hi=Math.log10||function log10(Ee){return Math.log(Ee)/Math.LN10},Ci=(Math.log1p,Math.cbrt||function cbrt(Ee){if(0===Ee)return Ee;var ze,Be=Ee<0;return Be&&(Ee=-Ee),ze=isFinite(Ee)?(Ee/((ze=Math.exp(Math.log(Ee)/3))*ze)+2*ze)/3:Ee,Be?-ze:ze}),Pi=Math.expm1||function expm1(Ee){return Ee>=2e-4||Ee<=-2e-4?Math.exp(Ee)-1:Ee+Ee*Ee/2+Ee*Ee*Ee/6};function formatNumberToBase(Ee,ze,Be){var Ue={2:"0b",8:"0o",16:"0x"}[ze],We="";if(Be){if(Be<1)throw new Error("size must be in greater than 0");if(!number_isInteger(Be))throw new Error("size must be an integer");if(Ee>2**(Be-1)-1||Ee<-(2**(Be-1)))throw new Error("Value must be in range [-2^".concat(Be-1,", 2^").concat(Be-1,"-1]"));if(!number_isInteger(Ee))throw new Error("Value must be an integer");Ee<0&&(Ee+=2**Be),We="i".concat(Be)}var $e="";return Ee<0&&(Ee=-Ee,$e="-"),"".concat($e).concat(Ue).concat(Ee.toString(ze)).concat(We)}function number_format(Ee,ze){if("function"==typeof ze)return ze(Ee);if(Ee===1/0)return"Infinity";if(Ee===-1/0)return"-Infinity";if(isNaN(Ee))return"NaN";var Be,Ue,We="auto";if(ze&&(ze.notation&&(We=ze.notation),isNumber(ze)?Be=ze:isNumber(ze.precision)&&(Be=ze.precision),ze.wordSize&&"number"!=typeof(Ue=ze.wordSize)))throw new Error('Option "wordSize" must be a number');switch(We){case"fixed":return toFixed(Ee,Be);case"exponential":return toExponential(Ee,Be);case"engineering":return function toEngineering(Ee,ze){if(isNaN(Ee)||!isFinite(Ee))return String(Ee);var Be=roundDigits(splitNumber(Ee),ze),Ue=Be.exponent,We=Be.coefficients,$e=Ue%3==0?Ue:Ue<0?Ue-3-Ue%3:Ue-Ue%3;if(isNumber(ze))for(;ze>We.length||Ue-$e+1>We.length;)We.push(0);else for(var Qe=Math.abs(Ue-$e)-(We.length-1),et=0;et0;)rt++,tt--;var nt=We.slice(rt).join(""),it=isNumber(ze)&&nt.length||nt.match(/[1-9]/)?"."+nt:"",at=We.slice(0,rt).join("")+it+"e"+(Ue>=0?"+":"")+$e.toString();return Be.sign+at}(Ee,Be);case"bin":return formatNumberToBase(Ee,2,Ue);case"oct":return formatNumberToBase(Ee,8,Ue);case"hex":return formatNumberToBase(Ee,16,Ue);case"auto":return function toPrecision(Ee,ze,Be){if(isNaN(Ee)||!isFinite(Ee))return String(Ee);var Ue=Be&&void 0!==Be.lowerExp?Be.lowerExp:-3,We=Be&&void 0!==Be.upperExp?Be.upperExp:5,$e=splitNumber(Ee),Qe=ze?roundDigits($e,ze):$e;if(Qe.exponent=We)return toExponential(Ee,ze);var et=Qe.coefficients,tt=Qe.exponent;et.length0?tt:0;return rt0?"."+We.join(""):"")+"e"+($e>=0?"+":"")+$e}function roundDigits(Ee,ze){for(var Be={sign:Ee.sign,coefficients:Ee.coefficients,exponent:Ee.exponent},Ue=Be.coefficients;ze<=0;)Ue.unshift(0),Be.exponent++,ze++;if(Ue.length>ze&&Ue.splice(ze,Ue.length-ze)[0]>=5){var We=ze-1;for(Ue[We]++;10===Ue[We];)Ue.pop(),0===We&&(Ue.unshift(0),Be.exponent++,We++),Ue[--We]++}return Be}function number_zeros(Ee){for(var ze=[],Be=0;Be=0?"+":"")+Ue.toString()}(Ee,Be);case"bin":return formatBigNumberToBase(Ee,2,Ue);case"oct":return formatBigNumberToBase(Ee,8,Ue);case"hex":return formatBigNumberToBase(Ee,16,Ue);case"auto":var $e=ze&&void 0!==ze.lowerExp?ze.lowerExp:-3,Qe=ze&&void 0!==ze.upperExp?ze.upperExp:5;if(Ee.isZero())return"0";var et=Ee.toSignificantDigits(Be),tt=et.e;return(tt>=$e&&tt'"'+Be+'": '+string_format(Ee[Be],ze)).join(", ")+"}":String(Ee)}function DimensionError(Ee,ze,Be){if(!(this instanceof DimensionError))throw new SyntaxError("Constructor must be called with the new operator");this.actual=Ee,this.expected=ze,this.relation=Be,this.message="Dimension mismatch ("+(Array.isArray(Ee)?"["+Ee.join(", ")+"]":Ee)+" "+(this.relation||"!=")+" "+(Array.isArray(ze)?"["+ze.join(", ")+"]":ze)+")",this.stack=(new Error).stack}function IndexError(Ee,ze,Be){if(!(this instanceof IndexError))throw new SyntaxError("Constructor must be called with the new operator");this.index=Ee,arguments.length<3?(this.min=0,this.max=ze):(this.min=ze,this.max=Be),void 0!==this.min&&this.index=this.max?this.message="Index out of range ("+this.index+" > "+(this.max-1)+")":this.message="Index out of range ("+this.index+")",this.stack=(new Error).stack}function arraySize(Ee){for(var ze=[];Array.isArray(Ee);)ze.push(Ee.length),Ee=Ee[0];return ze}function utils_array_validate(Ee,ze){if(0===ze.length){if(Array.isArray(Ee))throw new DimensionError(Ee.length,0)}else!function array_validate(Ee,ze,Be){var Ue,We=Ee.length;if(We!==ze[Be])throw new DimensionError(We,ze[Be]);if(Be")}(Ee,ze,0)}function validateIndex(Ee,ze){if(!isNumber(Ee)||!number_isInteger(Ee))throw new TypeError("Index must be an integer (value: "+Ee+")");if(Ee<0||"number"==typeof ze&&Ee>=ze)throw new IndexError(Ee,ze)}function array_resize(Ee,ze,Be){if(!Array.isArray(Ee)||!Array.isArray(ze))throw new TypeError("Array expected");if(0===ze.length)throw new Error("Resizing to scalar is not supported");return ze.forEach((function(Ee){if(!isNumber(Ee)||!number_isInteger(Ee)||Ee<0)throw new TypeError("Invalid size, must contain positive integers (size: "+string_format(ze)+")")})),function utils_array_resize(Ee,ze,Be,Ue){var We,$e,Qe=Ee.length,et=ze[Be],tt=Math.min(Qe,et);if(Ee.length=et,Be0;We--){var $e=ze[We];Be=[];for(var Qe=Ue.length/$e,et=0;et=0)throw new Error("More than one wildcard in sizes");if(We>=0){if(!(ze%Be==0))throw new Error("Could not replace wildcard, since "+ze+" is no multiple of "+-Be);Ue[We]=-ze/Be}return Ue}function array_product(Ee){return Ee.reduce((Ee,ze)=>Ee*ze,1)}function unsqueeze(Ee,ze,Be,Ue){var We=Ue||arraySize(Ee);if(Be)for(var $e=0;$e!function isOptionalDependency(Ee){return Ee&&"?"===Ee[0]}(Ee)).every(Ee=>void 0!==Be[Ee])){var Ue=ze.filter(Ee=>void 0===Be[Ee]);throw new Error('Cannot create function "'.concat(Ee,'", ')+"some dependencies are missing: ".concat(Ue.map(Ee=>'"'.concat(Ee,'"')).join(", "),"."))}}(Ee,ze,Ue),Be(We)}return assertAndCreate.isFactory=!0,assertAndCreate.fn=Ee,assertAndCreate.dependencies=ze.slice().sort(),Ue&&(assertAndCreate.meta=Ue),assertAndCreate}function stripOptionalNotation(Ee){return Ee&&"?"===Ee[0]?Ee.slice(1):Ee}DimensionError.prototype=new RangeError,DimensionError.prototype.constructor=RangeError,DimensionError.prototype.name="DimensionError",DimensionError.prototype.isDimensionError=!0,IndexError.prototype=new RangeError,IndexError.prototype.constructor=RangeError,IndexError.prototype.name="IndexError",IndexError.prototype.isIndexError=!0;var La=Be("edaf"),Ia=Be.n(La),Ra=factory_factory("Complex",[],()=>(Ia.a.prototype.type="Complex",Ia.a.prototype.isComplex=!0,Ia.a.prototype.toJSON=function(){return{mathjs:"Complex",re:this.re,im:this.im}},Ia.a.prototype.toPolar=function(){return{r:this.abs(),phi:this.arg()}},Ia.a.prototype.format=function(Ee){var ze=this.im,Be=this.re,Ue=number_format(this.re,Ee),We=number_format(this.im,Ee),$e=isNumber(Ee)?Ee:Ee?Ee.precision:null;if(null!==$e){var Qe=Math.pow(10,-$e);Math.abs(Be/ze)ze.re?1:Ee.reze.im?1:Ee.im1&&void 0!==arguments[1]?arguments[1]:{};return Be=null==Be?Number.POSITIVE_INFINITY:Be,ze=null==ze?JSON.stringify:ze,function memoize(){"object"!=typeof memoize.cache&&(memoize.cache={values:new Map,lru:lruQueue(Be||Number.POSITIVE_INFINITY)});for(var Ue=[],We=0;We{var{on:ze,config:Be}=Ee,Ue=qa.a.clone({precision:Be.precision,modulo:qa.a.EUCLID});return Ue.prototype=Object.create(Ue.prototype),Ue.prototype.type="BigNumber",Ue.prototype.isBigNumber=!0,Ue.prototype.toJSON=function(){return{mathjs:"BigNumber",value:this.toString()}},Ue.fromJSON=function(Ee){return new Ue(Ee.value)},ze&&ze("config",(function(Ee,ze){Ee.precision!==ze.precision&&Ue.config({precision:Ee.precision})})),Ue},{isClass:!0}),Co=factory_factory("Matrix",[],()=>{function Matrix(){if(!(this instanceof Matrix))throw new SyntaxError("Constructor must be called with the new operator")}return Matrix.prototype.type="Matrix",Matrix.prototype.isMatrix=!0,Matrix.prototype.storage=function(){throw new Error("Cannot invoke storage on a Matrix interface")},Matrix.prototype.datatype=function(){throw new Error("Cannot invoke datatype on a Matrix interface")},Matrix.prototype.create=function(Ee,ze){throw new Error("Cannot invoke create on a Matrix interface")},Matrix.prototype.subset=function(Ee,ze,Be){throw new Error("Cannot invoke subset on a Matrix interface")},Matrix.prototype.get=function(Ee){throw new Error("Cannot invoke get on a Matrix interface")},Matrix.prototype.set=function(Ee,ze,Be){throw new Error("Cannot invoke set on a Matrix interface")},Matrix.prototype.resize=function(Ee,ze){throw new Error("Cannot invoke resize on a Matrix interface")},Matrix.prototype.reshape=function(Ee,ze){throw new Error("Cannot invoke reshape on a Matrix interface")},Matrix.prototype.clone=function(){throw new Error("Cannot invoke clone on a Matrix interface")},Matrix.prototype.size=function(){throw new Error("Cannot invoke size on a Matrix interface")},Matrix.prototype.map=function(Ee,ze){throw new Error("Cannot invoke map on a Matrix interface")},Matrix.prototype.forEach=function(Ee){throw new Error("Cannot invoke forEach on a Matrix interface")},Matrix.prototype[Symbol.iterator]=function(){throw new Error("Cannot iterate a Matrix interface")},Matrix.prototype.toArray=function(){throw new Error("Cannot invoke toArray on a Matrix interface")},Matrix.prototype.valueOf=function(){throw new Error("Cannot invoke valueOf on a Matrix interface")},Matrix.prototype.format=function(Ee){throw new Error("Cannot invoke format on a Matrix interface")},Matrix.prototype.toString=function(){throw new Error("Cannot invoke toString on a Matrix interface")},Matrix},{isClass:!0});numberFactory("fineStructure",.0072973525693),numberFactory("weakMixingAngle",.2229),numberFactory("efimovFactor",22.7),numberFactory("sackurTetrode",-1.16487052358);function numberFactory(Ee,ze){return factory_factory(Ee,["config","BigNumber"],Ee=>{var{config:Be,BigNumber:Ue}=Ee;return"BigNumber"===Be.number?new Ue(ze):ze})}var zo=Be("d61e"),Bo=Be.n(zo),Vo=factory_factory("Fraction",[],()=>(Bo.a.prototype.type="Fraction",Bo.a.prototype.isFraction=!0,Bo.a.prototype.toJSON=function(){return{mathjs:"Fraction",n:this.s*this.n,d:this.d}},Bo.a.fromJSON=function(Ee){return new Bo.a(Ee)},Bo.a),{isClass:!0}),Uo=factory_factory("DenseMatrix",["Matrix"],Ee=>{var{Matrix:ze}=Ee;function DenseMatrix(Ee,ze){if(!(this instanceof DenseMatrix))throw new SyntaxError("Constructor must be called with the new operator");if(ze&&!isString(ze))throw new Error("Invalid datatype: "+ze);if(isMatrix(Ee))"DenseMatrix"===Ee.type?(this._data=clone(Ee._data),this._size=clone(Ee._size),this._datatype=ze||Ee._datatype):(this._data=Ee.toArray(),this._size=Ee.size(),this._datatype=ze||Ee._datatype);else if(Ee&&ii(Ee.data)&&ii(Ee.size))this._data=Ee.data,this._size=Ee.size,utils_array_validate(this._data,this._size),this._datatype=ze||Ee.datatype;else if(ii(Ee))this._data=function preprocess(Ee){for(var ze=0,Be=Ee.length;ze");_fit(Ee,ze.max().map((function(Ee){return Ee+1})),Ue);var rt=$e.length;!function _setSubmatrix(Ee,ze,Be,Ue,We){var $e=We===Ue-1,Qe=ze.dimension(We);$e?Qe.forEach((function(ze,Ue){validateIndex(ze),Ee[ze]=Be[Ue[0]]})):Qe.forEach((function($e,Qe){validateIndex($e),_setSubmatrix(Ee[$e],ze,Be[Qe[0]],Ue,We+1)}))}(Ee._data,ze,Be,rt,0)}return Ee}function _resize(Ee,ze,Be){if(0===ze.length){for(var Ue=Ee._data;ii(Ue);)Ue=Ue[0];return Ue}return Ee._size=ze.slice(0),Ee._data=array_resize(Ee._data,Ee._size,Be),Ee}function _fit(Ee,ze,Be){for(var Ue=Ee._size.slice(0),We=!1;Ue.lengthUe[$e]&&(Ue[$e]=ze[$e],We=!0);We&&_resize(Ee,Ue,Be)}return DenseMatrix.prototype=new ze,DenseMatrix.prototype.createDenseMatrix=function(Ee,ze){return new DenseMatrix(Ee,ze)},DenseMatrix.prototype.type="DenseMatrix",DenseMatrix.prototype.isDenseMatrix=!0,DenseMatrix.prototype.getDataType=function(){return getArrayDataType(this._data,typeOf)},DenseMatrix.prototype.storage=function(){return"dense"},DenseMatrix.prototype.datatype=function(){return this._datatype},DenseMatrix.prototype.create=function(Ee,ze){return new DenseMatrix(Ee,ze)},DenseMatrix.prototype.subset=function(Ee,ze,Be){switch(arguments.length){case 1:return _get(this,Ee);case 2:case 3:return _set(this,Ee,ze,Be);default:throw new SyntaxError("Wrong number of arguments")}},DenseMatrix.prototype.get=function(Ee){if(!ii(Ee))throw new TypeError("Array expected");if(Ee.length!==this._size.length)throw new DimensionError(Ee.length,this._size.length);for(var ze=0;zeArray.isArray(Ee)&&1===Ee.length?Ee[0]:Ee);return _resize(Be?this.clone():this,Ue,ze)},DenseMatrix.prototype.reshape=function(Ee,ze){var Be=ze?this.clone():this;Be._data=reshape(Be._data,Ee);var Ue=Be._size.reduce((Ee,ze)=>Ee*ze);return Be._size=processSizesWildcard(Ee,Ue),Be},DenseMatrix.prototype.clone=function(){return new DenseMatrix({data:clone(this._data),size:clone(this._size),datatype:this._datatype})},DenseMatrix.prototype.size=function(){return this._size.slice(0)},DenseMatrix.prototype.map=function(Ee){var ze=this,Be=function recurse(Be,Ue){return ii(Be)?Be.map((function(Ee,ze){return recurse(Ee,Ue.concat(ze))})):Ee(Be,Ue,ze)}(this._data,[]);return new DenseMatrix(Be,void 0!==this._datatype?getArrayDataType(Be,typeOf):void 0)},DenseMatrix.prototype.forEach=function(Ee){var ze=this;!function recurse(Be,Ue){ii(Be)?Be.forEach((function(Ee,ze){recurse(Ee,Ue.concat(ze))})):Ee(Be,Ue,ze)}(this._data,[])},DenseMatrix.prototype[Symbol.iterator]=function*(){yield*function*recurse(Ee,ze){if(ii(Ee))for(var Be=0;Be[Ee[Be]]);ze.push(new DenseMatrix(We,Ee._datatype))},$e=0;$e0?Ee:0,Be=Ee<0?-Ee:0,Ue=this._size[0],We=this._size[1],$e=Math.min(Ue-Be,We-ze),Qe=[],et=0;et<$e;et++)Qe[et]=this._data[et+Be][et+ze];return new DenseMatrix({data:Qe,size:[$e],datatype:this._datatype})},DenseMatrix.diagonal=function(Ee,ze,Be,Ue){if(!ii(Ee))throw new TypeError("Array expected, size parameter");if(2!==Ee.length)throw new Error("Only two dimensions matrix are supported");if(Ee=Ee.map((function(Ee){if(isBigNumber(Ee)&&(Ee=Ee.toNumber()),!isNumber(Ee)||!number_isInteger(Ee)||Ee<1)throw new Error("Size values must be positive integers");return Ee})),Be){if(isBigNumber(Be)&&(Be=Be.toNumber()),!isNumber(Be)||!number_isInteger(Be))throw new TypeError("The parameter k must be an integer number")}else Be=0;var We,$e=Be>0?Be:0,Qe=Be<0?-Be:0,et=Ee[0],tt=Ee[1],rt=Math.min(et-Qe,tt-$e);if(ii(ze)){if(ze.length!==rt)throw new Error("Invalid value array length");We=function _value(Ee){return ze[Ee]}}else if(isMatrix(ze)){var nt=ze.size();if(1!==nt.length||nt[0]!==rt)throw new Error("Invalid matrix length");We=function _value(Ee){return ze.get([Ee])}}else We=function _value(){return ze};Ue||(Ue=isBigNumber(We(0))?We(0).mul(0):0);var it=[];if(Ee.length>0){it=array_resize(it,Ee,Ue);for(var at=0;at