webpackJsonp([1],{"3IRH":function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},"5PlU":function(e,t,s){var r=s("RY/4"),a=s("dSzd")("iterator"),n=s("/bQp");e.exports=s("FeBl").isIterable=function(e){var t=Object(e);return void 0!==t[a]||"@@iterator"in t||n.hasOwnProperty(r(t))}},"5pwE":function(e,t,s){(e.exports=s("YHym")(!1)).push([e.i,".schemaDetail a{text-decoration:none}.schemaDetail .property ul{list-style-type:disc;padding-left:1em;margin-left:0;margin-top:0}",""])},"77aO":function(e,t,s){"use strict";t.a={props:{collapsed:{type:Boolean,default:!1}},data:function(){return{expanded:!this.collapsed,transitioning:!1}},watch:{collapsed:function(e){this.expanded=!e}},methods:{beforeenter:function(e){this.transitioning=!0,e.style.height=0},enter:function(e){e.style.height=e.scrollHeight+"px"},afterenter:function(e){e.style.height="",this.transitioning=!1},beforeleave:function(e){this.transitioning=!0,e.style.height=e.offsetHeight+"px",e.offsetHeight},leave:function(e){e.style.height=0,e.offsetHeight},afterleave:function(e){this.transitioning=!1},toggle:function(){this.transitioning||(this.expanded=!this.expanded,this.$emit(this.expanded?"expanding":"collapsing",this.id))}}}},A51D:function(e,t,s){var r=s("5pwE");"string"==typeof r&&(r=[[e.i,r,""]]),r.locals&&(e.exports=r.locals);s("rjj0")("188b52d2",r,!1)},AxiT:function(e,t,s){var r=s("Lw7C");"string"==typeof r&&(r=[[e.i,r,""]]),r.locals&&(e.exports=r.locals);s("rjj0")("0868896c",r,!1)},D9sP:function(e,t,s){"use strict";var r=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div",{staticClass:"schemaDetail",class:{"is-loading":e.loading},attrs:{id:"schema-detail"}},[s("div",{staticClass:"accordion"},[null!==e.schemas?s("card",{attrs:{collapsed:!0}},[s("template",{slot:"header"},[e._v("\n          Structure of payload\n        ")]),s("schemaToc",{attrs:{schemas:e.schemas,tag:"div"}})],2):e._e(),e._t("default")],2),s("h1",[s("a",{attrs:{id:e.type+"-schema-detail",title:e.type+" Fields definition"}}),e._v("\n      Fields definition\n    ")]),e._l(e.schemas,function(t){return s("div",{key:t.$key,staticClass:"card property"},[s("header",{staticClass:"card-header"},[s("a",{attrs:{id:"p-"+t.$idx}}),s("p",{staticClass:"card-header-title"},[s("span",{domProps:{innerHTML:e._s(t.$path)}})]),s("nuxt-link",{staticClass:"card-header-icon",attrs:{to:"#schema-detail",title:"go up"}},[s("span",{staticClass:"icon"},[s("i",{staticClass:"fa fa-angle-up"})])])],1),s("div",{staticClass:"card-content"},[t.description||t.type?s("div",{staticClass:"field is-horizontal"},[e._m(0,!0),t.description?s("div",{staticClass:"field-body"},[e._v("\n            "+e._s(t.description)+"\n          ")]):t.type?s("div",{staticClass:"field-body"},[e._v("\n            A simple "+e._s(e._f("capitalize")(t.type))+"\n          ")]):e._e()]):e._e(),t.$parent?s("div",{staticClass:"field is-horizontal"},[e._m(1,!0),s("div",{staticClass:"field-body"},[s("nuxt-link",{attrs:{to:"#p-"+t.$parent[0].$idx}},[s("span",{domProps:{innerHTML:e._s(t.$parent[0].$path)}})])],1)]):e._e(),t.type?s("div",{staticClass:"field is-horizontal"},[e._m(2,!0),s("div",{staticClass:"field-body"},[e._v("\n            "+e._s(e._f("capitalize")(t.type,t))+"\n          ")])]):e._e(),t.format?s("div",{staticClass:"field is-horizontal"},[e._m(3,!0),s("div",{staticClass:"field-body"},[e._v("\n            "+e._s(t.format)+"\n            "),e.$static.formats[t.format]?s("a",{attrs:{href:e.$static.formats[t.format].link}},[e._v(" ("+e._s(e.$static.formats[t.format].name)+")")]):e._e()])]):e._e(),t.enum&&t.enum.length?s("div",{staticClass:"field is-horizontal"},[e._m(4,!0),s("div",{staticClass:"field-body"},[s("div",[e._v("\n              "+e._s(t.enum.join(", "))+"\n            ")])])]):e._e(),t.hasOwnProperty("default")?s("div",{staticClass:"field is-horizontal"},[e._m(5,!0),s("div",{staticClass:"field-body"},[s("div",[e._v("\n              "+e._s(t.default)+"\n            ")])])]):e._e(),t.maxLength?s("div",{staticClass:"field is-horizontal"},[e._m(6,!0),s("div",{staticClass:"field-body"},[s("div",[e._v("\n              "+e._s(t.maxLength)+"\n            ")])])]):e._e(),t.properties||t.patternProperties||t.items?s("div",{staticClass:"field is-horizontal"},[e._m(7,!0),s("div",{staticClass:"field-body"},[Object.keys(t.properties||{}).length>0?s("schemaLink",{attrs:{schemas:e.schemas,link:t.properties}}):e._e(),Object.keys(t.patternProperties||{}).length>0?s("schemaLink",{attrs:{schemas:e.schemas,link:t.patternProperties}},[s("div",[e._v("Matching regular expressions:")])]):e._e(),!t.items||t.items instanceof Array?t.items?s("schemaLink",{attrs:{schemas:e.schemas,link:t.items}},[s("div",[e._v("Ordered items of type:")])]):e._e():s("schemaLink",{attrs:{schemas:e.schemas,link:t.items}}),Object.keys(t.properties||{}).length+Object.keys(t.patternProperties||{}).length!==0||t.items?e._e():[e._v("none")]],2)]):e._e(),t.minProperties?s("div",{staticClass:"field is-horizontal"},[e._m(8,!0),s("div",{staticClass:"field-body"},[s("div",[e._v("\n              "+e._s(t.minProperties)+"\n            ")])])]):e._e(),t.minItems?s("div",{staticClass:"field is-horizontal"},[e._m(9,!0),s("div",{staticClass:"field-body"},[s("div",[e._v("\n              "+e._s(t.minItems)+"\n            ")])])]):e._e(),t.hasOwnProperty("additionalProperties")?s("div",{staticClass:"field is-horizontal"},[e._m(10,!0),"boolean"==typeof t.additionalProperties?s("schemaLink",{staticClass:"field-body",attrs:{schemas:e.schemas,link:t.additionalProperties}}):s("div",{staticClass:"field-body"},[e._v("\n            if fulfilling "),s("schemaLink",{staticClass:"field-body",attrs:{schemas:e.schemas,link:t.additionalProperties}})],1)],1):e._e(),t.not||t.oneOf||t.allOf||t.anyOf?s("div",{staticClass:"field is-horizontal"},[e._m(11,!0),s("div",{staticClass:"field-body"},[t.not?s("schemaLink",{attrs:{schemas:e.schemas,link:t.not}},[e._v("\n              Not fulfilling \n            ")]):e._e(),t.oneOf?s("schemaLink",{attrs:{schemas:e.schemas,link:t.oneOf}},[s("div",[e._v("Fulfilling exactly one of:")])]):e._e(),t.allOf?s("schemaLink",{attrs:{schemas:e.schemas,link:t.allOf}},[s("div",[e._v("Fulfilling all of:")])]):e._e(),t.anyOf?s("schemaLink",{attrs:{schemas:e.schemas,link:t.anyOf}},[s("div",[e._v("Fulfilling one of:")])]):e._e()],1)]):e._e(),t.required&&t.required.length?s("div",{staticClass:"field is-horizontal"},[e._m(12,!0),s("div",{staticClass:"field-body"},[e._v("\n            "+e._s(t.required.join(", "))+"\n          ")])]):e._e(),e.examples.hasOwnProperty(t.$key)?s("div",{staticClass:"field is-horizontal"},[e._m(13,!0),s("div",{staticClass:"field-body"},[s("prism",{attrs:{language:"json"}},[e._v('...\n"'+e._s(e.examples[t.$key][1])+'": '+e._s(e._f("stringify")(e.examples[t.$key][0][e.examples[t.$key][1]]))+"\n...")])],1)]):e._e()])])})],2)};r._withStripped=!0;var a={render:r,staticRenderFns:[function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"field-label"},[t("label",{staticClass:"label"},[this._v("Description:")])])},function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"field-label"},[t("label",{staticClass:"label"},[this._v("Parent:")])])},function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"field-label"},[t("label",{staticClass:"label"},[this._v("Type:")])])},function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"field-label"},[t("label",{staticClass:"label"},[this._v("Format:")])])},function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"field-label"},[t("label",{staticClass:"label"},[this._v("Possible values:")])])},function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"field-label"},[t("label",{staticClass:"label"},[this._v("Defaults to:")])])},function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"field-label"},[t("label",{staticClass:"label"},[this._v("Maximum length:")])])},function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"field-label"},[t("label",{staticClass:"label"},[this._v("Restriction on subfields:")])])},function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"field-label"},[t("label",{staticClass:"label"},[this._v("Minimum amount of subfields:")])])},function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"field-label"},[t("label",{staticClass:"label"},[this._v("Minimum amount of items:")])])},function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"field-label"},[t("label",{staticClass:"label"},[this._v("Allows additional fields:")])])},function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"field-label"},[t("label",{staticClass:"label"},[this._v("Restriction with boolean logic:")])])},function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"field-label"},[t("label",{staticClass:"label"},[this._v("Required fields:")])])},function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"field-label"},[t("label",{staticClass:"label"},[this._v("Example:")])])}]};t.a=a},Gs0Q:function(e,t,s){"use strict";t.a={name:"schemaToc",props:{tag:{type:String,default:"li"},schemas:{type:Object},entryNode:{type:String,default:"$"}},computed:{schema:function(){return this.schemas[this.entryNode]}}}},LJry:function(e,t,s){"use strict";var r={functional:!0,props:{code:{type:String},language:{type:String,default:"markup"}},render:function(e,t){var s=t.props.code||t.children[0].text,r=t.props.language,a=Prism.languages[r],n="language-"+r;return e("pre",function(e){for(var t=arguments,s=1;s<arguments.length;s++)for(var r in arguments[s])e[r]=t[s][r];return e}({},t.data,{class:[t.data.class,n]}),[e("code",{class:n,domProps:{innerHTML:Prism.highlight(s,a)}})])}};e.exports=r},Lw7C:function(e,t,s){(e.exports=s("YHym")(!1)).push([e.i,"@keyframes spinAround{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}",""])},NVTU:function(e,t,s){"use strict";var r=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div",{staticClass:"card collapsibleCard",class:{collapsed:!e.expanded}},[e.$slots.header?s("header",{staticClass:"card-header",on:{click:function(t){t.preventDefault(),e.toggle()}}},[s("p",{staticClass:"card-header-title"},[!e.$slots.headerCollapsed||e.expanded?e._t("header"):e._t("headerCollapsed")],2),s("a",{staticClass:"card-header-icon"},[s("span",{staticClass:"icon"},[s("i",{staticClass:"fa",class:{"fa-angle-down":e.expanded,"fa-angle-up":!e.expanded}})])])]):e._e(),s("transition",{attrs:{name:"rollup","leave-active-class":"collapsing","enter-active-class":"collapsing"},on:{"before-leave":e.beforeleave,leave:e.leave,"after-leave":e.afterleave,"before-enter":e.beforeenter,enter:e.enter,"after-enter":e.afterenter}},[s("div",{directives:[{name:"show",rawName:"v-show",value:e.expanded,expression:"expanded"}]},[s("div",{staticClass:"card-content"},[e._t("default")],2)])])],1)};r._withStripped=!0;var a={render:r,staticRenderFns:[]};t.a=a},PD5z:function(e,t,s){"use strict";var r=function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"measurement-message content"},[this._m(0),t("p",[this._v("The measurement message is the format to exchange simple (non-structured, non-complex ) measurement data. It also allows to transport multiple measurement data (eg. values over time), called 'series'.")]),t("img",{staticClass:"is-centered",attrs:{src:"images/measurementPayload.svg",alt:"Class diagram of the measurement payload",title:"Class diagram of the measurement payload"}}),t("schemaDetail",{attrs:{type:"measurement",examples:this.$static.examples}},[t("card",{attrs:{collapsed:!0}},[t("template",{slot:"header"},[this._v("\n        Minimal message example\n      ")]),t("prism",{attrs:{language:"json"}},[this._v(this._s(this._f("stringify")(this.$static.message)))])],2),t("card",{attrs:{collapsed:!0}},[t("template",{slot:"header"},[this._v("\n        Multiple message example\n      ")]),t("prism",{attrs:{language:"json"}},[this._v(this._s(this._f("stringify")(this.$static.complexMessage)))])],2)],1)],1)};r._withStripped=!0;var a={render:r,staticRenderFns:[function(){var e=this.$createElement,t=this._self._c||e;return t("h1",[t("a",{attrs:{id:"Measurement-Payload",title:"Measurement Payload"}}),this._v("\n    Measurement Payload\n  ")])}]};t.a=a},T9Hf:function(e,t,s){"use strict";var r=s("77aO"),a=s("NVTU"),n=!1;var i=function(e){n||s("WVEp")},o=s("VU/8")(r.a,a.a,!1,i,null,null);o.options.__file="components\\collapsibleCard.vue",t.a=o.exports},TmV0:function(e,t,s){s("fZOM"),e.exports=s("FeBl").Object.values},W3Iv:function(e,t,s){e.exports={default:s("wEtr"),__esModule:!0}},WVEp:function(e,t,s){var r=s("a3hs");"string"==typeof r&&(r=[[e.i,r,""]]),r.locals&&(e.exports=r.locals);s("rjj0")("52cedc5e",r,!1)},Xd32:function(e,t,s){s("+tPU"),s("zQR9"),e.exports=s("5PlU")},a3hs:function(e,t,s){(e.exports=s("YHym")(!1)).push([e.i,"@keyframes spinAround{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.card.collapsibleCard>header{cursor:pointer;background-color:#f5f5f5;border-bottom:1px solid hsla(0,0%,4%,.1)}.card.collapsibleCard>header .card-header-icon{text-decoration:none}.card.collapsibleCard>header .card-header-title{font-weight:400}.card.collapsibleCard>header p{margin-bottom:0}.card.collapsibleCard.collapsed header{border-bottom:none}.card.collapsibleCard>div.collapsing{position:relative;height:0;overflow:hidden;display:block;transition-property:height;transition-duration:.35s;transition-timing-function:ease}",""])},bOdI:function(e,t,s){"use strict";t.__esModule=!0;var r,a=s("C4MV"),n=(r=a)&&r.__esModule?r:{default:r};t.default=function(e,t,s){return t in e?(0,n.default)(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}},"bXX+":function(e,t,s){"use strict";var r=s("jhkR"),a=s("fvMW"),n=s("VU/8")(r.a,a.a,!1,null,null,null);n.options.__file="components\\schemaLink.vue",t.a=n.exports},cER1:function(e,t,s){"use strict";var r=s("mvHQ"),a=s.n(r),n=s("gRE1"),i=s.n(n),o=s("fZjL"),c=s.n(o),l=s("d7EF"),u=s.n(l),p=s("W3Iv"),f=s.n(p),d=s("bOdI"),m=s.n(d),h=s("woOf"),v=s.n(h),_=s("LJry"),y=s.n(_),g=s("zM1N"),b=s.n(g),$=s("T9Hf"),x=s("mQxp"),C=s("bXX+");t.a={props:{type:{type:String,required:!0},examples:{type:Object,required:!1,default:function(){return{}}}},data:function(){return{schema:null,loading:!0}},created:function(){var e=this,t={date:{link:"https://tools.ietf.org/html/rfc3339#section-5.6",name:"RFC3339, 5.6"},email:{link:"https://tools.ietf.org/html/rfc5322#section-3.4.1",name:"RFC5322, 3.4.1"}};s("kGrr")("./"+this.type+"_schema.json").then(function(t){return e.schema=t,e.loading=!1,e.idx=0,t}).catch(function(e){throw e}),this.$static={formats:{"date-time":t.date,date:t.date,time:t.date,email:t.email}}},methods:{flattenSchema:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{$key:"$",$path:"$"};!0===t?t={}:!1===t&&(t={not:!0});var r=m()({},s.$key,v()(t,s,{$idx:++this.idx}));if(t.items)if(t.items instanceof Array)t.items.forEach(function(a,n){var i={$key:s.$key+"/"+n,$path:s.$path+"["+n+"]",$parent:[t,t.items,n]};v()(r,e.flattenSchema(a,i)),t.items[n]=i.$key});else{var a={$key:s.$key+"/",$path:s.$path+"[*]",$parent:[t,t,"items"]};v()(r,this.flattenSchema(t.items,a)),t.items=a.$key}return["properties","patternProperties"].filter(function(e){return t.hasOwnProperty(e)}).forEach(function(a){return f()(t[a]).forEach(function(n,i){var o=u()(n,2),c=o[0],l=o[1],p={$key:s.$key+"/"+a+"/"+encodeURIComponent(c),$path:s.$path+"&#8203;.",$parent:[t,t[a],c]};p.$path+="patternProperties"===a?"&lt;field&gt;":c,v()(r,e.flattenSchema(l,p)),t[a][c]=p.$key})}),["additionalItems","additionalProperties","contains","propertyNames","not"].filter(function(e){return t.hasOwnProperty(e)}).forEach(function(a){var n={$key:s.$key+"/"+a,$path:s.$path+"+",$parent:[t,t,a]};v()(r,e.flattenSchema(t[a],n)),t[a]=n.$key}),["allOf","anyOf","oneOf"].filter(function(e){return t.hasOwnProperty(e)}).forEach(function(a){return t[a].forEach(function(n,i){var o={$key:s.$key+"/"+a+"/"+i,$path:s.$path+"("+i+")?",$parent:[t,t[a],i]};v()(r,e.flattenSchema(n,o)),t[a][i]=o.$key})}),r},shrinkSchemas:function(e){var t=function(e){return e.anyOf&&e.anyOf.indexOf(!0)>=0?[e,!0]:e.allOf&&e.allOf.indexOf(!1)>=0?[e,!1]:!0===e.not?[e,!1]:0===c()(e).filter(function(e){return"$"!==e[0]}).length?[e,!0]:null};return i()(e).map(t).filter(function(e){return e}).forEach(function s(r){if(r){var a=u()(r,2),n=a[0],i=a[1];n.$parent[1][n.$parent[2]]=i,delete e[n.$key],s(t(n.$parent[0]))}}),e}},computed:{schemas:function(){return null===this.schema?null:this.shrinkSchemas(this.flattenSchema(b()(this.schema)))}},filters:{stringify:function(e){return a()(e," ",2)},capitalize:function(e,t){return e?(e instanceof Array||(e=[e]),e.map(function(e){return""+e[0].toUpperCase()+e.slice(1)}).join(", ")):""}},components:{card:$.a,prism:y.a,schemaToc:x.a,schemaLink:C.a}}},d7EF:function(e,t,s){"use strict";t.__esModule=!0;var r=n(s("us/S")),a=n(s("BO1k"));function n(e){return e&&e.__esModule?e:{default:e}}t.default=function(){return function(e,t){if(Array.isArray(e))return e;if((0,r.default)(Object(e)))return function(e,t){var s=[],r=!0,n=!1,i=void 0;try{for(var o,c=(0,a.default)(e);!(r=(o=c.next()).done)&&(s.push(o.value),!t||s.length!==t);r=!0);}catch(e){n=!0,i=e}finally{try{!r&&c.return&&c.return()}finally{if(n)throw i}}return s}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()},fC1w:function(e,t,s){"use strict";var r=s("mvHQ"),a=s.n(r),n=s("LJry"),i=s.n(n),o=s("T9Hf"),c=s("s8mu");t.a={created:function(){var e=new Date,t="a4927dad-58d4-4580-b460-79cefd56775b";this.$static={message:{"content-spec":"urn:spec://eclipse.org/unide/measurement-message#v2",device:{deviceID:t},measurements:[{ts:e.toISOString(),series:{$_time:[0,23,24],temperature:[45.4231,46.4222,44.2432]}}]},complexMessage:{"content-spec":"urn:spec://eclipse.org/unide/measurement-message#v2",device:{deviceID:t,operationalStatus:"MM",metaData:{swVersion:"2.0.3.13",swBuildID:"41535"}},part:{partTypeID:"F00VH07328",partID:"420003844",result:"OK",code:"HUH289",metaData:{lotID:"845849",toolID:"32324-432143"}},measurements:[{ts:e.toISOString(),code:"190ABT",result:"OK",series:{$_time:[0,23,24],temperature:[45.4231,46.4222,44.2432]},limits:{temperature:{lowerError:40,lowerWarn:45,upperError:50,upperWarn:47.5}}},{ts:new Date(e.valueOf()-5e3).toISOString(),series:{$_time:[0,130,2633],pressure:[52.4,46.32,44.2432]}}]}},this.$static.examples={"$/properties/content-spec":[this.$static.message,"content-spec"],"$/properties/device":[this.$static.complexMessage,"device"],"$/properties/device/properties/deviceID":[this.$static.message.device,"deviceID"],"$/properties/device/properties/metaData":[this.$static.complexMessage.device,"metaData"],"$/properties/device/properties/operationalStatus":[this.$static.complexMessage.device,"operationalStatus"],"$/properties/measurements":[this.$static.message,"measurements"],"$/properties/measurements//properties/code":[this.$static.complexMessage.measurements[0],"code"],"$/properties/measurements//properties/limits":[this.$static.complexMessage.measurements[0],"limits"],"$/properties/measurements//properties/limits/patternProperties/%5E%5B%5E%24%5D.%2B":[this.$static.complexMessage.measurements[0].limits,"temperature"],"$/properties/measurements//properties/limits/patternProperties/%5E%5B%5E%24%5D.%2B/properties/lowerError":[this.$static.complexMessage.measurements[0].limits.temperature,"lowerError"],"$/properties/measurements//properties/limits/patternProperties/%5E%5B%5E%24%5D.%2B/properties/lowerWarn":[this.$static.complexMessage.measurements[0].limits.temperature,"lowerWarn"],"$/properties/measurements//properties/limits/patternProperties/%5E%5B%5E%24%5D.%2B/properties/upperError":[this.$static.complexMessage.measurements[0].limits.temperature,"upperError"],"$/properties/measurements//properties/limits/patternProperties/%5E%5B%5E%24%5D.%2B/properties/upperWarn":[this.$static.complexMessage.measurements[0].limits.temperature,"upperWarn"],"$/properties/measurements//properties/result":[this.$static.complexMessage.measurements[0],"result"],"$/properties/measurements//properties/series":[this.$static.message.measurements[0],"series"],"$/properties/measurements//properties/series/patternProperties/%5E%5B%5E%24%5D.%2B":[this.$static.message.measurements[0].series,"temperature"],"$/properties/measurements//properties/series/properties/%24_time":[this.$static.message.measurements[0].series,"$_time"],"$/properties/measurements//properties/ts":[this.$static.message.measurements[0],"ts"],"$/properties/part":[this.$static.complexMessage,"part"],"$/properties/part/properties/code":[this.$static.complexMessage.part,"code"],"$/properties/part/properties/metaData":[this.$static.complexMessage.part,"metaData"],"$/properties/part/properties/partID":[this.$static.complexMessage.part,"partID"],"$/properties/part/properties/partTypeID":[this.$static.complexMessage.part,"partTypeID"],"$/properties/part/properties/result":[this.$static.complexMessage.part,"result"]}},filters:{stringify:function(e){return a()(e," ",2)}},components:{card:o.a,prism:i.a,schemaDetail:c.a}}},fZOM:function(e,t,s){var r=s("kM2E"),a=s("mbce")(!1);r(r.S,"Object",{values:function(e){return a(e)}})},fvMW:function(e,t,s){"use strict";var r=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div",[e._t("default"),!0===e.link?[e._v("\n    yes \n  ")]:!1===e.link?[e._v("\n    no \n  ")]:"string"==typeof e.link?[s("nuxt-link",{attrs:{to:"#p-"+e.schemas[e.link].$idx}},[s("span",{domProps:{innerHTML:e._s(e.schemas[e.link].$path)}})])]:e.link instanceof Array?s("ul",e._l(e.link,function(t){return s("li",[s("nuxt-link",{attrs:{to:"#p-"+e.schemas[t].$idx}},[s("span",{domProps:{innerHTML:e._s(e.schemas[t].$path)}})])],1)})):e.link instanceof Object?s("ul",e._l(e.link,function(t,r){return s("li",[s("nuxt-link",{attrs:{to:"#p-"+e.schemas[t].$idx}},[e._v("\n        "+e._s(r)+"\n      ")])],1)})):e._e()],2)};r._withStripped=!0;var a={render:r,staticRenderFns:[]};t.a=a},gRE1:function(e,t,s){e.exports={default:s("TmV0"),__esModule:!0}},gSvA:function(e,t,s){var r=s("kM2E"),a=s("mbce")(!0);r(r.S,"Object",{entries:function(e){return a(e)}})},hvFG:function(e,t,s){"use strict";var r=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s(e.tag,{tag:"component"},[s("nuxt-link",{attrs:{to:"#p-"+e.schema.$idx}},[s("span",{domProps:{innerHTML:e._s(e.schema.$path)}})]),e.schema.properties||e.schema.patternProperties||e.schema.items?s("ul",[e._l(e.schema.properties,function(t,r){return s("schemaToc",{key:r,attrs:{schemas:e.schemas,entryNode:t}})}),e._l(e.schema.patternProperties,function(t,r){return s("schemaToc",{key:r,attrs:{schemas:e.schemas,entryNode:t}})}),e.schema.items?[e.schema.items instanceof Array?e._l(e.schema.items,function(t,r){return s("schemaToc",{key:r,attrs:{schemas:e.schemas,entryNode:t}})}):s("schemaToc",{attrs:{schemas:e.schemas,entryNode:e.schema.items}})]:e._e()],2):e._e()],1)};r._withStripped=!0;var a={render:r,staticRenderFns:[]};t.a=a},jhkR:function(e,t,s){"use strict";t.a={props:{schemas:{type:Object,required:!0},link:{required:!0}}}},kGrr:function(e,t,s){var r={"./measurement_schema.json":["oGp6",17],"./message_schema.json":["2BTs",16],"./process_schema.json":["rRyJ",15]};function a(e){var t=r[e];return t?s.e(t[1]).then(function(){return s(t[0])}):Promise.reject(new Error("Cannot find module '"+e+"'."))}a.keys=function(){return Object.keys(r)},a.id="kGrr",e.exports=a},lYS2:function(e,t,s){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=s("fC1w"),a=s("PD5z"),n=s("VU/8")(r.a,a.a,!1,null,null,null);n.options.__file="pages\\specification\\measurement-message.vue",t.default=n.exports},mQxp:function(e,t,s){"use strict";var r=s("Gs0Q"),a=s("hvFG"),n=!1;var i=function(e){n||s("AxiT")},o=s("VU/8")(r.a,a.a,!1,i,null,null);o.options.__file="components\\schemaToc.vue",t.a=o.exports},mbce:function(e,t,s){var r=s("lktj"),a=s("TcQ7"),n=s("NpIQ").f;e.exports=function(e){return function(t){for(var s,i=a(t),o=r(i),c=o.length,l=0,u=[];c>l;)n.call(i,s=o[l++])&&u.push(e?[s,i[s]]:i[s]);return u}}},s8mu:function(e,t,s){"use strict";var r=s("cER1"),a=s("D9sP"),n=!1;var i=function(e){n||s("A51D")},o=s("VU/8")(r.a,a.a,!1,i,null,null);o.options.__file="components\\schemaDetail.vue",t.a=o.exports},"us/S":function(e,t,s){e.exports={default:s("Xd32"),__esModule:!0}},wEtr:function(e,t,s){s("gSvA"),e.exports=s("FeBl").Object.entries},zM1N:function(e,t,s){(function(e,s){var r=200,a="__lodash_hash_undefined__",n=9007199254740991,i="[object Arguments]",o="[object Boolean]",c="[object Date]",l="[object Function]",u="[object GeneratorFunction]",p="[object Map]",f="[object Number]",d="[object Object]",m="[object Promise]",h="[object RegExp]",v="[object Set]",_="[object String]",y="[object Symbol]",g="[object WeakMap]",b="[object ArrayBuffer]",$="[object DataView]",x="[object Float32Array]",C="[object Float64Array]",k="[object Int8Array]",j="[object Int16Array]",O="[object Int32Array]",w="[object Uint8Array]",E="[object Uint8ClampedArray]",P="[object Uint16Array]",M="[object Uint32Array]",S=/\w*$/,D=/^\[object .+?Constructor\]$/,A=/^(?:0|[1-9]\d*)$/,I={};I[i]=I["[object Array]"]=I[b]=I[$]=I[o]=I[c]=I[x]=I[C]=I[k]=I[j]=I[O]=I[p]=I[f]=I[d]=I[h]=I[v]=I[_]=I[y]=I[w]=I[E]=I[P]=I[M]=!0,I["[object Error]"]=I[l]=I[g]=!1;var T="object"==typeof e&&e&&e.Object===Object&&e,L="object"==typeof self&&self&&self.Object===Object&&self,F=T||L||Function("return this")(),R="object"==typeof t&&t&&!t.nodeType&&t,z=R&&"object"==typeof s&&s&&!s.nodeType&&s,B=z&&z.exports===R;function H(e,t){return e.set(t[0],t[1]),e}function U(e,t){return e.add(t),e}function V(e,t,s,r){var a=-1,n=e?e.length:0;for(r&&n&&(s=e[++a]);++a<n;)s=t(s,e[a],a,e);return s}function N(e){var t=!1;if(null!=e&&"function"!=typeof e.toString)try{t=!!(e+"")}catch(e){}return t}function W(e){var t=-1,s=Array(e.size);return e.forEach(function(e,r){s[++t]=[r,e]}),s}function Q(e,t){return function(s){return e(t(s))}}function G(e){var t=-1,s=Array(e.size);return e.forEach(function(e){s[++t]=e}),s}var q,X=Array.prototype,J=Function.prototype,Y=Object.prototype,Z=F["__core-js_shared__"],K=(q=/[^.]+$/.exec(Z&&Z.keys&&Z.keys.IE_PROTO||""))?"Symbol(src)_1."+q:"",ee=J.toString,te=Y.hasOwnProperty,se=Y.toString,re=RegExp("^"+ee.call(te).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),ae=B?F.Buffer:void 0,ne=F.Symbol,ie=F.Uint8Array,oe=Q(Object.getPrototypeOf,Object),ce=Object.create,le=Y.propertyIsEnumerable,ue=X.splice,pe=Object.getOwnPropertySymbols,fe=ae?ae.isBuffer:void 0,de=Q(Object.keys,Object),me=ze(F,"DataView"),he=ze(F,"Map"),ve=ze(F,"Promise"),_e=ze(F,"Set"),ye=ze(F,"WeakMap"),ge=ze(Object,"create"),be=Ne(me),$e=Ne(he),xe=Ne(ve),Ce=Ne(_e),ke=Ne(ye),je=ne?ne.prototype:void 0,Oe=je?je.valueOf:void 0;function we(e){var t=-1,s=e?e.length:0;for(this.clear();++t<s;){var r=e[t];this.set(r[0],r[1])}}function Ee(e){var t=-1,s=e?e.length:0;for(this.clear();++t<s;){var r=e[t];this.set(r[0],r[1])}}function Pe(e){var t=-1,s=e?e.length:0;for(this.clear();++t<s;){var r=e[t];this.set(r[0],r[1])}}function Me(e){this.__data__=new Ee(e)}function Se(e,t){var s,r,a,n=Qe(e)||(a=r=s=e)&&"object"==typeof a&&Ge(r)&&te.call(s,"callee")&&(!le.call(s,"callee")||se.call(s)==i)?function(e,t){for(var s=-1,r=Array(e);++s<e;)r[s]=t(s);return r}(e.length,String):[],o=n.length,c=!!o;for(var l in e)!t&&!te.call(e,l)||c&&("length"==l||Ue(l,o))||n.push(l);return n}function De(e,t,s){var r=e[t];te.call(e,t)&&We(r,s)&&(void 0!==s||t in e)||(e[t]=s)}function Ae(e,t){for(var s=e.length;s--;)if(We(e[s][0],t))return s;return-1}function Ie(e,t,s,r,a,n,m){var g;if(r&&(g=n?r(e,a,n,m):r(e)),void 0!==g)return g;if(!Je(e))return e;var D,A,T,L,F,R,z=Qe(e);if(z){if(g=function(e){var t=e.length,s=e.constructor(t);t&&"string"==typeof e[0]&&te.call(e,"index")&&(s.index=e.index,s.input=e.input);return s}(e),!t)return function(e,t){var s=-1,r=e.length;t||(t=Array(r));for(;++s<r;)t[s]=e[s];return t}(e,g)}else{var B=He(e),Q=B==l||B==u;if(qe(e))return function(e,t){if(t)return e.slice();var s=new e.constructor(e.length);return e.copy(s),s}(e,t);if(B==d||B==i||Q&&!n){if(N(e))return n?e:{};if(g="function"!=typeof(F=Q?{}:e).constructor||Ve(F)?{}:Je(R=oe(F))?ce(R):{},!t)return D=e,L=e,A=(T=g)&&Fe(L,Ye(L),T),Fe(D,Be(D),A)}else{if(!I[B])return n?e:{};g=function(e,t,s,r){var a=e.constructor;switch(t){case b:return Le(e);case o:case c:return new a(+e);case $:return D=e,A=r?Le(D.buffer):D.buffer,new D.constructor(A,D.byteOffset,D.byteLength);case x:case C:case k:case j:case O:case w:case E:case P:case M:return m=e,g=r?Le(m.buffer):m.buffer,new m.constructor(g,m.byteOffset,m.length);case p:return d=e,V(r?s(W(d),!0):W(d),H,new d.constructor);case f:case _:return new a(e);case h:return(u=new(l=e).constructor(l.source,S.exec(l))).lastIndex=l.lastIndex,u;case v:return i=e,V(r?s(G(i),!0):G(i),U,new i.constructor);case y:return n=e,Oe?Object(Oe.call(n)):{}}var n;var i;var l,u;var d;var m,g;var D,A}(e,B,Ie,t)}}m||(m=new Me);var q,X,J,Y=m.get(e);if(Y)return Y;if(m.set(e,g),!z)var Z=s?(X=Be,J=Ye(q=e),Qe(q)?J:function(e,t){for(var s=-1,r=t.length,a=e.length;++s<r;)e[a+s]=t[s];return e}(J,X(q))):Ye(e);return function(e,t){for(var s=-1,r=e?e.length:0;++s<r&&!1!==t(e[s],s,e););}(Z||e,function(a,n){Z&&(a=e[n=a]),De(g,n,Ie(a,t,s,r,n,e,m))}),g}function Te(e){return!(!Je(e)||K&&K in e)&&(Xe(e)||N(e)?re:D).test(Ne(e))}function Le(e){var t=new e.constructor(e.byteLength);return new ie(t).set(new ie(e)),t}function Fe(e,t,s,r){s||(s={});for(var a=-1,n=t.length;++a<n;){var i=t[a],o=r?r(s[i],e[i],i,s,e):void 0;De(s,i,void 0===o?e[i]:o)}return s}function Re(e,t){var s,r,a=e.__data__;return("string"==(r=typeof(s=t))||"number"==r||"symbol"==r||"boolean"==r?"__proto__"!==s:null===s)?a["string"==typeof t?"string":"hash"]:a.map}function ze(e,t){var s,r=null==(s=e)?void 0:s[t];return Te(r)?r:void 0}we.prototype.clear=function(){this.__data__=ge?ge(null):{}},we.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},we.prototype.get=function(e){var t=this.__data__;if(ge){var s=t[e];return s===a?void 0:s}return te.call(t,e)?t[e]:void 0},we.prototype.has=function(e){var t=this.__data__;return ge?void 0!==t[e]:te.call(t,e)},we.prototype.set=function(e,t){return this.__data__[e]=ge&&void 0===t?a:t,this},Ee.prototype.clear=function(){this.__data__=[]},Ee.prototype.delete=function(e){var t=this.__data__,s=Ae(t,e);return!(s<0||(s==t.length-1?t.pop():ue.call(t,s,1),0))},Ee.prototype.get=function(e){var t=this.__data__,s=Ae(t,e);return s<0?void 0:t[s][1]},Ee.prototype.has=function(e){return Ae(this.__data__,e)>-1},Ee.prototype.set=function(e,t){var s=this.__data__,r=Ae(s,e);return r<0?s.push([e,t]):s[r][1]=t,this},Pe.prototype.clear=function(){this.__data__={hash:new we,map:new(he||Ee),string:new we}},Pe.prototype.delete=function(e){return Re(this,e).delete(e)},Pe.prototype.get=function(e){return Re(this,e).get(e)},Pe.prototype.has=function(e){return Re(this,e).has(e)},Pe.prototype.set=function(e,t){return Re(this,e).set(e,t),this},Me.prototype.clear=function(){this.__data__=new Ee},Me.prototype.delete=function(e){return this.__data__.delete(e)},Me.prototype.get=function(e){return this.__data__.get(e)},Me.prototype.has=function(e){return this.__data__.has(e)},Me.prototype.set=function(e,t){var s=this.__data__;if(s instanceof Ee){var a=s.__data__;if(!he||a.length<r-1)return a.push([e,t]),this;s=this.__data__=new Pe(a)}return s.set(e,t),this};var Be=pe?Q(pe,Object):function(){return[]},He=function(e){return se.call(e)};function Ue(e,t){return!!(t=null==t?n:t)&&("number"==typeof e||A.test(e))&&e>-1&&e%1==0&&e<t}function Ve(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||Y)}function Ne(e){if(null!=e){try{return ee.call(e)}catch(e){}try{return e+""}catch(e){}}return""}function We(e,t){return e===t||e!=e&&t!=t}(me&&He(new me(new ArrayBuffer(1)))!=$||he&&He(new he)!=p||ve&&He(ve.resolve())!=m||_e&&He(new _e)!=v||ye&&He(new ye)!=g)&&(He=function(e){var t=se.call(e),s=t==d?e.constructor:void 0,r=s?Ne(s):void 0;if(r)switch(r){case be:return $;case $e:return p;case xe:return m;case Ce:return v;case ke:return g}return t});var Qe=Array.isArray;function Ge(e){return null!=e&&("number"==typeof(t=e.length)&&t>-1&&t%1==0&&t<=n)&&!Xe(e);var t}var qe=fe||function(){return!1};function Xe(e){var t=Je(e)?se.call(e):"";return t==l||t==u}function Je(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function Ye(e){return Ge(e)?Se(e):function(e){if(!Ve(e))return de(e);var t=[];for(var s in Object(e))te.call(e,s)&&"constructor"!=s&&t.push(s);return t}(e)}s.exports=function(e){return Ie(e,!0,!0)}}).call(t,s("DuR2"),s("3IRH")(e))}});