webpackJsonp([0],{"+66z":function(t,e){var r=Object.prototype.toString;t.exports=function(t){return r.call(t)}},"+99L":function(t,e,r){var n={"./v2/measurement_schema.json":["oGp6",23],"./v2/message_schema.json":["2BTs",22],"./v2/process_schema.json":["rRyJ",21],"./v3/measurement_schema.json":["PpY5",20],"./v3/message_schema.json":["1SJ2",19],"./v3/process_schema.json":["uwRd",18]};function i(t){var e=n[t];return e?r.e(e[1]).then(function(){return r(e[0])}):Promise.reject(new Error("Cannot find module '"+t+"'."))}i.keys=function(){return Object.keys(n)},i.id="+99L",t.exports=i},"+gg+":function(t,e,r){var n=r("TQ3y")["__core-js_shared__"];t.exports=n},"/GnY":function(t,e,r){var n=r("HT7L"),i=r("W529"),o=Object.prototype.hasOwnProperty;t.exports=function(t){if(!n(t))return i(t);var e=[];for(var r in Object(t))o.call(t,r)&&"constructor"!=r&&e.push(r);return e}},"/I3N":function(t,e){t.exports=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}},"037f":function(t,e,r){var n=r("1oyr"),i=r("p0bc"),o=r("wSKX"),a=i?function(t,e){return i(t,"toString",{configurable:!0,enumerable:!1,value:n(e),writable:!0})}:o;t.exports=a},"09Qt":function(t,e,r){var n=r("uIr7"),i=r("vi0E"),o=r("l9Lx"),a=r("C0hh"),s=Object.getOwnPropertySymbols?function(t){for(var e=[];t;)n(e,o(t)),t=i(t);return e}:a;t.exports=s},"0DSl":function(t,e,r){var n=r("YkxI"),i=r("zBOP");t.exports=function(t){return n(function(e,r){var n=-1,o=r.length,a=o>1?r[o-1]:void 0,s=o>2?r[2]:void 0;for(a=t.length>3&&"function"==typeof a?(o--,a):void 0,s&&i(r[0],r[1],s)&&(a=o<3?void 0:a,o=1),e=Object(e);++n<o;){var c=r[n];c&&t(e,c,n,a)}return e})}},"0uX4":function(t,e,r){var n=r("NkRn"),i=n?n.prototype:void 0,o=i?i.valueOf:void 0;t.exports=function(t){return o?Object(o.call(t)):{}}},"1C79":function(t,e,r){var n=r("uIr7"),i=r("Qp3N");t.exports=function t(e,r,o,a,s){var c=-1,u=e.length;for(o||(o=i),s||(s=[]);++c<u;){var l=e[c];r>0&&o(l)?r>1?t(l,r-1,o,a,s):n(s,l):a||(s[s.length]=l)}return s}},"1QDk":function(t,e,r){var n=r("tv3T"),i=r("09Qt");t.exports=function(t,e){return n(t,i(t),e)}},"1Yb9":function(t,e,r){var n=r("mgnk"),i=r("UnEC"),o=Object.prototype,a=o.hasOwnProperty,s=o.propertyIsEnumerable,c=n(function(){return arguments}())?n:function(t){return i(t)&&a.call(t,"callee")&&!s.call(t,"callee")};t.exports=c},"1oyr":function(t,e){t.exports=function(t){return function(){return t}}},"22B7":function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},"2Hvv":function(t,e,r){var n=r("imBK");t.exports=function(t){return n(this.__data__,t)>-1}},"2N6f":function(t,e,r){var n=r("rCVp"),i=r("Q2wK"),o=r("WHce");t.exports=function(t){return o(i(t,void 0,n),t+"")}},"3IRH":function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},"3rZI":function(t,e){t.exports=function(t,e,r,n){var i=-1,o=null==t?0:t.length;for(n&&o&&(r=t[++i]);++i<o;)r=e(r,t[i],i,t);return r}},"4yG7":function(t,e,r){var n=r("HAGj");t.exports=function(t,e,r){return null==t?t:n(t,e,r)}},"5/Qr":function(t,e,r){var n=r("Kzd6"),i=r("6Git"),o=r("Jqj6"),a=r("WyC4"),s=r("7jYp"),c=r("0uX4"),u=r("Ilb/"),l="[object Boolean]",f="[object Date]",p="[object Map]",d="[object Number]",v="[object RegExp]",h="[object Set]",m="[object String]",b="[object Symbol]",y="[object ArrayBuffer]",_="[object DataView]",g="[object Float32Array]",x="[object Float64Array]",j="[object Int8Array]",O="[object Int16Array]",C="[object Int32Array]",w="[object Uint8Array]",k="[object Uint8ClampedArray]",P="[object Uint16Array]",T="[object Uint32Array]";t.exports=function(t,e,r,E){var S=t.constructor;switch(e){case y:return n(t);case l:case f:return new S(+t);case _:return i(t,E);case g:case x:case j:case O:case C:case w:case k:case P:case T:return u(t,E);case p:return o(t,E,r);case d:case m:return new S(t);case v:return a(t);case h:return s(t,E,r);case b:return c(t)}}},"5N57":function(t,e,r){var n=r("ICSD")(r("TQ3y"),"Set");t.exports=n},"5PlU":function(t,e,r){var n=r("RY/4"),i=r("dSzd")("iterator"),o=r("/bQp");t.exports=r("FeBl").isIterable=function(t){var e=Object(t);return void 0!==e[i]||"@@iterator"in e||o.hasOwnProperty(n(e))}},"5zde":function(t,e,r){r("zQR9"),r("qyJz"),t.exports=r("FeBl").Array.from},"6Git":function(t,e,r){var n=r("Kzd6");t.exports=function(t,e){var r=e?n(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}},"6MiT":function(t,e,r){var n=r("aCM0"),i=r("UnEC"),o="[object Symbol]";t.exports=function(t){return"symbol"==typeof t||i(t)&&n(t)==o}},"77aO":function(t,e,r){"use strict";e.a={props:{collapsed:{type:Boolean,default:!1}},data:function(){return{expanded:!this.collapsed,transitioning:!1}},watch:{collapsed:function(t){this.expanded=!t}},methods:{beforeenter:function(t){this.transitioning=!0,t.style.height=0},enter:function(t){t.style.height=t.scrollHeight+"px"},afterenter:function(t){t.style.height="",this.transitioning=!1},beforeleave:function(t){this.transitioning=!0,t.style.height=t.offsetHeight+"px",t.offsetHeight},leave:function(t){t.style.height=0,t.offsetHeight},afterleave:function(t){this.transitioning=!1},toggle:function(){this.transitioning||(this.expanded=!this.expanded,this.$emit(this.expanded?"expanding":"collapsing",this.id))}}}},"7e4z":function(t,e,r){var n=r("uieL"),i=r("1Yb9"),o=r("NGEn"),a=r("ggOT"),s=r("ZGh9"),c=r("YsVG"),u=Object.prototype.hasOwnProperty;t.exports=function(t,e){var r=o(t),l=!r&&i(t),f=!r&&!l&&a(t),p=!r&&!l&&!f&&c(t),d=r||l||f||p,v=d?n(t.length,String):[],h=v.length;for(var m in t)!e&&!u.call(t,m)||d&&("length"==m||f&&("offset"==m||"parent"==m)||p&&("buffer"==m||"byteLength"==m||"byteOffset"==m)||s(m,h))||v.push(m);return v}},"7jYp":function(t,e,r){var n=r("nWuj"),i=r("3rZI"),o=r("octw"),a=1;t.exports=function(t,e,r){var s=e?r(o(t),a):o(t);return i(s,n,new t.constructor)}},"8AZL":function(t,e){t.exports=function(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}},"8gK5":function(t,e){t.exports=function(t){var e=[];if(null!=t)for(var r in Object(t))e.push(r);return e}},"94sX":function(t,e,r){var n=r("dCZQ");t.exports=function(){this.__data__=n?n(null):{},this.size=0}},"9UkZ":function(t,e,r){var n=r("aCM0"),i=r("vi0E"),o=r("UnEC"),a="[object Object]",s=Function.prototype,c=Object.prototype,u=s.toString,l=c.hasOwnProperty,f=u.call(Object);t.exports=function(t){if(!o(t)||n(t)!=a)return!1;var e=i(t);if(null===e)return!0;var r=l.call(e,"constructor")&&e.constructor;return"function"==typeof r&&r instanceof r&&u.call(r)==f}},A9mX:function(t,e,r){var n=r("pTUa");t.exports=function(t){var e=n(this,t).delete(t);return this.size-=e?1:0,e}},"Ai/T":function(t,e){var r=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return r.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},C0hh:function(t,e){t.exports=function(){return[]}},CW5P:function(t,e,r){var n=r("T/bE"),i=r("duB3"),o=r("POb3");t.exports=function(){this.size=0,this.__data__={hash:new n,map:new(o||i),string:new n}}},Cf65:function(t,e,r){var n=r("uCi2"),i=r("M1c9");t.exports=function(t,e){return e.length<2?t:n(t,i(e,0,-1))}},D9sP:function(t,e,r){"use strict";var n=function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("div",{staticClass:"schemaDetail",class:{"is-loading":t.loading},attrs:{id:"schema-detail"}},[r("div",{staticClass:"accordion"},[null!==t.masterSchema?r("card",{attrs:{collapsed:!0}},[r("template",{slot:"header"},[t._v("\n        Structure of the payload\n      ")]),r("ul",t._l(t.masterSchema.properties,function(t,e){return r("schemaToc",{key:e,attrs:{schema:t}})}))],2):t._e(),t._t("default")],2),r("h1",[r("a",{attrs:{id:t.type+"-schema-detail",title:t.type+" Fields definition"}}),t._v("\n    Fields definition\n  ")]),t._l(t.schemas,function(e){return r("div",{key:e.$id,staticClass:"card property"},[r("header",{staticClass:"card-header"},[r("a",{attrs:{id:"p-"+e.$id}}),r("p",{staticClass:"card-header-title"},[r("span",{domProps:{innerHTML:t._s(e.getPath())}})]),r("nuxt-link",{staticClass:"card-header-icon",attrs:{to:"#schema-detail",title:"go up"}},[r("span",{staticClass:"icon"},[r("i",{staticClass:"fa fa-angle-up"})])])],1),r("div",{staticClass:"card-content"},[e.description||e.type?r("div",{staticClass:"field is-horizontal"},[t._m(0,!0),e.description?r("div",{staticClass:"field-body"},[t._v("\n          "+t._s(e.description)+"\n        ")]):e.type?r("div",{staticClass:"field-body"},[t._v("\n          A simple "+t._s(t._f("capitalize")(e.type))+"\n        ")]):t._e()]):t._e(),e.$parent?r("div",{staticClass:"field is-horizontal"},[t._m(1,!0),r("div",{staticClass:"field-body"},[r("nuxt-link",{attrs:{to:"#p-"+e.$parent.schema.$id}},[r("span",{domProps:{innerHTML:t._s(e.$parent.schema.getPath())}})])],1)]):t._e(),e.type?r("div",{staticClass:"field is-horizontal"},[t._m(2,!0),r("div",{staticClass:"field-body"},[t._v("\n          "+t._s(t._f("capitalize")(e.type,e))+"\n        ")])]):t._e(),e.format?r("div",{staticClass:"field is-horizontal"},[t._m(3,!0),r("div",{staticClass:"field-body"},[t._v("\n          "+t._s(e.format)+"\n          "),t.$static.formats[e.format]?r("a",{attrs:{href:t.$static.formats[e.format].link}},[t._v(" ("+t._s(t.$static.formats[e.format].name)+")")]):t._e()])]):t._e(),e.enum&&e.enum.length?r("div",{staticClass:"field is-horizontal"},[t._m(4,!0),r("div",{staticClass:"field-body"},[r("div",[t._v("\n            "+t._s(e.enum.join(", "))+"\n          ")])])]):t._e(),e.hasOwnProperty("default")?r("div",{staticClass:"field is-horizontal"},[t._m(5,!0),r("div",{staticClass:"field-body"},[r("div",[t._v("\n            "+t._s(e.default)+"\n          ")])])]):t._e(),e.maxLength?r("div",{staticClass:"field is-horizontal"},[t._m(6,!0),r("div",{staticClass:"field-body"},[r("div",[t._v("\n            "+t._s(e.maxLength)+"\n          ")])])]):t._e(),e.properties||e.patternProperties||e.items?r("div",{staticClass:"field is-horizontal"},[t._m(7,!0),r("div",{staticClass:"field-body"},[Object.keys(e.properties||{}).length>0?r("schemaLink",{attrs:{link:e.properties}}):t._e(),Object.keys(e.patternProperties||{}).length>0?r("schemaLink",{attrs:{link:e.patternProperties}},[r("div",[t._v("Matching regular expressions:")])]):t._e(),!e.items||e.items instanceof Array?e.items?r("schemaLink",{attrs:{link:e.items}},[r("div",[t._v("Ordered items of type:")])]):t._e():r("schemaLink",{attrs:{link:e.items}}),Object.keys(e.properties||{}).length+Object.keys(e.patternProperties||{}).length!==0||e.items?t._e():[t._v("none")]],2)]):t._e(),e.minProperties?r("div",{staticClass:"field is-horizontal"},[t._m(8,!0),r("div",{staticClass:"field-body"},[r("div",[t._v("\n            "+t._s(e.minProperties)+"\n          ")])])]):t._e(),e.minItems?r("div",{staticClass:"field is-horizontal"},[t._m(9,!0),r("div",{staticClass:"field-body"},[r("div",[t._v("\n            "+t._s(e.minItems)+"\n          ")])])]):t._e(),e.hasOwnProperty("additionalProperties")?r("div",{staticClass:"field is-horizontal"},[t._m(10,!0),"boolean"==typeof e.additionalProperties?r("schemaLink",{staticClass:"field-body",attrs:{link:e.additionalProperties}}):r("div",{staticClass:"field-body"},[t._v("\n          if fulfilling "),r("schemaLink",{staticClass:"field-body",attrs:{link:e.additionalProperties}})],1)],1):t._e(),e.not||e.oneOf||e.allOf||e.anyOf?r("div",{staticClass:"field is-horizontal"},[t._m(11,!0),r("div",{staticClass:"field-body"},[e.not?r("schemaLink",{attrs:{link:e.not}},[t._v("\n            Not fulfilling \n          ")]):t._e(),e.oneOf?r("schemaLink",{attrs:{link:e.oneOf}},[r("div",[t._v("Fulfilling exactly one of:")])]):t._e(),e.allOf?r("schemaLink",{attrs:{link:e.allOf}},[r("div",[t._v("Fulfilling all of:")])]):t._e(),e.anyOf?r("schemaLink",{attrs:{link:e.anyOf}},[r("div",[t._v("Fulfilling one of:")])]):t._e()],1)]):t._e(),e.required&&e.required.length?r("div",{staticClass:"field is-horizontal"},[t._m(12,!0),r("div",{staticClass:"field-body"},[t._v("\n          "+t._s(e.required.join(", "))+"\n        ")])]):t._e(),e.examples?r("div",{staticClass:"field is-horizontal"},[t._m(13,!0),r("div",{staticClass:"field-body"},t._l(e.examples,function(e,n){return r("prism",{key:n,attrs:{language:"json"}},[t._v(t._s(t._f("stringify")(e)))])}))]):t._e()])])})],2)};n._withStripped=!0;var i={render:n,staticRenderFns:[function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Description:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Parent:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Type:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Format:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Possible values:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Defaults to:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Maximum length:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Restriction on subfields:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Minimum amount of subfields:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Minimum amount of items:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Allows additional fields:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Restriction with boolean logic:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Required fields:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Example:")])])}]};e.a=i},Dc0G:function(t,e,r){(function(t){var n=r("blYT"),i="object"==typeof e&&e&&!e.nodeType&&e,o=i&&"object"==typeof t&&t&&!t.nodeType&&t,a=o&&o.exports===i&&n.process,s=function(){try{return a&&a.binding&&a.binding("util")}catch(t){}}();t.exports=s}).call(e,r("3IRH")(t))},Dc7M:function(t,e,r){var n=r("Hxdr"),i=r("Fkvj"),o=r("Vi3P"),a=r("bIjD"),s=r("tv3T"),c=r("dYhQ"),u=r("2N6f"),l=r("xond"),f=u(function(t,e){var r={};if(null==t)return r;var u=!1;e=n(e,function(e){return e=a(e,t),u||(u=e.length>1),e}),s(t,l(t),r),u&&(r=i(r,7,c));for(var f=e.length;f--;)o(r,e[f]);return r});t.exports=f},Dv2r:function(t,e,r){var n=r("pTUa");t.exports=function(t,e){var r=n(this,t),i=r.size;return r.set(t,e),this.size+=r.size==i?0:1,this}},E4Hj:function(t,e){t.exports=function(t){return this.__data__.get(t)}},FCuZ:function(t,e,r){var n=r("uIr7"),i=r("NGEn");t.exports=function(t,e,r){var o=e(t);return i(t)?o:n(o,r(t))}},Fkvj:function(t,e,r){var n=r("bJWQ"),i=r("PqYH"),o=r("i4ON"),a=r("jD7S"),s=r("py9u"),c=r("mKB/"),u=r("hrPF"),l=r("Nkkh"),f=r("1QDk"),p=r("MoMe"),d=r("xond"),v=r("gHOb"),h=r("UfSK"),m=r("5/Qr"),b=r("WQFf"),y=r("NGEn"),_=r("ggOT"),g=r("yCNF"),x=r("ktak"),j=1,O=2,C=4,w="[object Arguments]",k="[object Function]",P="[object GeneratorFunction]",T="[object Object]",E={};E[w]=E["[object Array]"]=E["[object ArrayBuffer]"]=E["[object DataView]"]=E["[object Boolean]"]=E["[object Date]"]=E["[object Float32Array]"]=E["[object Float64Array]"]=E["[object Int8Array]"]=E["[object Int16Array]"]=E["[object Int32Array]"]=E["[object Map]"]=E["[object Number]"]=E[T]=E["[object RegExp]"]=E["[object Set]"]=E["[object String]"]=E["[object Symbol]"]=E["[object Uint8Array]"]=E["[object Uint8ClampedArray]"]=E["[object Uint16Array]"]=E["[object Uint32Array]"]=!0,E["[object Error]"]=E[k]=E["[object WeakMap]"]=!1,t.exports=function t(e,r,S,A,I,$){var F,M=r&j,z=r&O,D=r&C;if(S&&(F=I?S(e,A,I,$):S(e)),void 0!==F)return F;if(!g(e))return e;var N=y(e);if(N){if(F=h(e),!M)return u(e,F)}else{var U=v(e),G=U==k||U==P;if(_(e))return c(e,M);if(U==T||U==w||G&&!I){if(F=z||G?{}:b(e),!M)return z?f(e,s(F,e)):l(e,a(F,e))}else{if(!E[U])return I?e:{};F=m(e,U,t,M)}}$||($=new n);var Q=$.get(e);if(Q)return Q;$.set(e,F);var H=D?z?d:p:z?keysIn:x,L=N?void 0:H(e);return i(L||e,function(n,i){L&&(n=e[i=n]),o(F,i,t(n,r,S,i,e,$))}),F}},Fp5l:function(t,e,r){var n=r("bGc4"),i=r("UnEC");t.exports=function(t){return i(t)&&n(t)}},G0Wc:function(t,e,r){var n=r("yCNF"),i=r("HT7L"),o=r("8gK5"),a=Object.prototype.hasOwnProperty;t.exports=function(t){if(!n(t))return o(t);var e=i(t),r=[];for(var s in t)("constructor"!=s||!e&&a.call(t,s))&&r.push(s);return r}},G2xm:function(t,e){t.exports=function(t){return this.__data__.has(t)}},GACb:function(t,e,r){var n=r("XUIS");"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);r("rjj0")("9f775528",n,!1)},Gs0Q:function(t,e,r){"use strict";e.a={name:"schemaToc",props:{tag:{type:String,default:"li"},schema:{type:Object,required:!0}}}},Gu7T:function(t,e,r){"use strict";e.__esModule=!0;var n,i=r("c/Tr"),o=(n=i)&&n.__esModule?n:{default:n};e.default=function(t){if(Array.isArray(t)){for(var e=0,r=Array(t.length);e<t.length;e++)r[e]=t[e];return r}return(0,o.default)(t)}},HAGj:function(t,e,r){var n=r("i4ON"),i=r("bIjD"),o=r("ZGh9"),a=r("yCNF"),s=r("Ubhr");t.exports=function(t,e,r,c){if(!a(t))return t;for(var u=-1,l=(e=i(e,t)).length,f=l-1,p=t;null!=p&&++u<l;){var d=s(e[u]),v=r;if(u!=f){var h=p[d];void 0===(v=c?c(h,d,p):void 0)&&(v=a(h)?h:o(e[u+1])?[]:{})}n(p,d,v),p=p[d]}return t}},HN2V:function(t,e,r){var n=r("HbnZ"),i=r("0DSl")(function(t,e,r){n(t,e,r)});t.exports=i},HT7L:function(t,e){var r=Object.prototype;t.exports=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||r)}},HbnZ:function(t,e,r){var n=r("bJWQ"),i=r("O1jc"),o=r("rpnb"),a=r("jMi8"),s=r("yCNF"),c=r("t8rQ");t.exports=function t(e,r,u,l,f){e!==r&&o(r,function(o,c){if(s(o))f||(f=new n),a(e,r,c,u,t,l,f);else{var p=l?l(e[c],o,c+"",e,r,f):void 0;void 0===p&&(p=o),i(e,c,p)}},c)}},Hxdr:function(t,e){t.exports=function(t,e){for(var r=-1,n=null==t?0:t.length,i=Array(n);++r<n;)i[r]=e(t[r],r,t);return i}},ICSD:function(t,e,r){var n=r("ITwD"),i=r("mTAn");t.exports=function(t,e){var r=i(t,e);return n(r)?r:void 0}},ITwD:function(t,e,r){var n=r("gGqR"),i=r("eFps"),o=r("yCNF"),a=r("Ai/T"),s=/^\[object .+?Constructor\]$/,c=Function.prototype,u=Object.prototype,l=c.toString,f=u.hasOwnProperty,p=RegExp("^"+l.call(f).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!o(t)||i(t))&&(n(t)?p:s).test(a(t))}},"Ilb/":function(t,e,r){var n=r("Kzd6");t.exports=function(t,e){var r=e?n(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}},JBvZ:function(t,e,r){var n=r("imBK");t.exports=function(t){var e=this.__data__,r=n(e,t);return r<0?void 0:e[r][1]}},Jqj6:function(t,e,r){var n=r("U7Aq"),i=r("3rZI"),o=r("WFiI"),a=1;t.exports=function(t,e,r){var s=e?r(o(t),a):o(t);return i(s,n,new t.constructor)}},KmWZ:function(t,e,r){var n=r("duB3");t.exports=function(){this.__data__=new n,this.size=0}},Kzd6:function(t,e,r){var n=r("qwTf");t.exports=function(t){var e=new t.constructor(t.byteLength);return new n(e).set(new n(t)),e}},LJry:function(t,e,r){"use strict";var n={functional:!0,props:{code:{type:String},language:{type:String,default:"markup"}},render:function(t,e){var r=e.props.code||e.children[0].text,n=e.props.language,i=Prism.languages[n],o="language-"+n;return t("pre",function(t){for(var e=arguments,r=1;r<arguments.length;r++)for(var n in arguments[r])t[n]=e[r][n];return t}({},e.data,{class:[e.data.class,o]}),[t("code",{class:o,domProps:{innerHTML:Prism.highlight(r,i)}})])}};t.exports=n},M1c9:function(t,e){t.exports=function(t,e,r){var n=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(r=r>i?i:r)<0&&(r+=i),i=e>r?0:r-e>>>0,e>>>=0;for(var o=Array(i);++n<i;)o[n]=t[n+e];return o}},MoMe:function(t,e,r){var n=r("FCuZ"),i=r("l9Lx"),o=r("ktak");t.exports=function(t){return n(t,o,i)}},NGEn:function(t,e){var r=Array.isArray;t.exports=r},NVTU:function(t,e,r){"use strict";var n=function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("div",{staticClass:"card collapsibleCard",class:{collapsed:!t.expanded}},[t.$slots.header?r("header",{staticClass:"card-header",on:{click:function(e){e.preventDefault(),t.toggle()}}},[r("p",{staticClass:"card-header-title"},[!t.$slots.headerCollapsed||t.expanded?t._t("header"):t._t("headerCollapsed")],2),r("a",{staticClass:"card-header-icon"},[r("span",{staticClass:"icon"},[r("i",{staticClass:"fa",class:{"fa-angle-down":t.expanded,"fa-angle-up":!t.expanded}})])])]):t._e(),r("transition",{attrs:{name:"rollup","leave-active-class":"collapsing","enter-active-class":"collapsing"},on:{"before-leave":t.beforeleave,leave:t.leave,"after-leave":t.afterleave,"before-enter":t.beforeenter,enter:t.enter,"after-enter":t.afterenter}},[r("div",{directives:[{name:"show",rawName:"v-show",value:t.expanded,expression:"expanded"}]},[r("div",{staticClass:"card-content"},[t._t("default")],2)])])],1)};n._withStripped=!0;var i={render:n,staticRenderFns:[]};e.a=i},NkRn:function(t,e,r){var n=r("TQ3y").Symbol;t.exports=n},Nkkh:function(t,e,r){var n=r("tv3T"),i=r("l9Lx");t.exports=function(t,e){return n(t,i(t),e)}},NqZt:function(t,e){t.exports=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}},O1jc:function(t,e,r){var n=r("nw3t"),i=r("22B7");t.exports=function(t,e,r){(void 0===r||i(t[e],r))&&(void 0!==r||e in t)||n(t,e,r)}},Oey6:function(t,e,r){"use strict";var n=function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"process-message content"},[this._m(0),e("p",[this._v("The process message is the format to exchange data out of discrete processes. It also allows to transport process information, part information and measurement data for each phase of the process.")]),e("img",{staticClass:"is-center",attrs:{src:"images/specification/v3/processPayload.svg",alt:"Class diagram of the Process message payload",title:"Class diagram of the Process Message payload"}}),e("schemaDetail",{attrs:{type:"v3/process",examples:this.$static.examples}},[e("card",{attrs:{collapsed:!0}},[e("template",{slot:"header"},[this._v("\n        Minimal message example \n      ")]),e("prism",{attrs:{language:"json"}},[this._v(this._s(this._f("stringify")(this.$static.message)))])],2),e("card",{attrs:{collapsed:!0}},[e("template",{slot:"header"},[this._v("\n        Process message example \n      ")]),e("prism",{attrs:{language:"json"}},[this._v(this._s(this._f("stringify")(this.$static.complexMessage)))])],2)],1)],1)};n._withStripped=!0;var i={render:n,staticRenderFns:[function(){var t=this.$createElement,e=this._self._c||t;return e("h1",[e("a",{attrs:{id:"Process-Payload",title:"Process Message payload"}}),this._v("\n    Process Payload\n  ")])}]};e.a=i},POb3:function(t,e,r){var n=r("ICSD")(r("TQ3y"),"Map");t.exports=n},PqYH:function(t,e){t.exports=function(t,e){for(var r=-1,n=null==t?0:t.length;++r<n&&!1!==e(t[r],r,t););return t}},Q2wK:function(t,e,r){var n=r("8AZL"),i=Math.max;t.exports=function(t,e,r){return e=i(void 0===e?t.length-1:e,0),function(){for(var o=arguments,a=-1,s=i(o.length-e,0),c=Array(s);++a<s;)c[a]=o[e+a];a=-1;for(var u=Array(e+1);++a<e;)u[a]=o[a];return u[e]=r(c),n(t,this,u)}}},Q7hp:function(t,e,r){var n=r("uCi2");t.exports=function(t,e,r){var i=null==t?void 0:n(t,e);return void 0===i?r:i}},Qp3N:function(t,e,r){var n=r("NkRn"),i=r("1Yb9"),o=r("NGEn"),a=n?n.isConcatSpreadable:void 0;t.exports=function(t){return o(t)||i(t)||!!(a&&t&&t[a])}},RGrk:function(t,e,r){var n=r("dCZQ"),i=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;return n?void 0!==e[t]:i.call(e,t)}},Rh28:function(t,e){var r=9007199254740991;t.exports=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=r}},S7p9:function(t,e){t.exports=function(t){return function(e){return t(e)}}},"T/bE":function(t,e,r){var n=r("94sX"),i=r("ue/d"),o=r("eVIm"),a=r("RGrk"),s=r("Z2pD");function c(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}c.prototype.clear=n,c.prototype.delete=i,c.prototype.get=o,c.prototype.has=a,c.prototype.set=s,t.exports=c},T7jo:function(t,e,r){(t.exports=r("YHym")(!1)).push([t.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}",""])},T9Hf:function(t,e,r){"use strict";var n=r("77aO"),i=r("NVTU"),o=!1;var a=function(t){o||r("zFvC")},s=r("VU/8")(n.a,i.a,!1,a,null,null);s.options.__file="components\\collapsibleCard.vue",e.a=s.exports},TQ3y:function(t,e,r){var n=r("blYT"),i="object"==typeof self&&self&&self.Object===Object&&self,o=n||i||Function("return this")();t.exports=o},TlPD:function(t,e,r){var n=r("tv3T"),i=r("t8rQ");t.exports=function(t){return n(t,i(t))}},TmV0:function(t,e,r){r("fZOM"),t.exports=r("FeBl").Object.values},U7Aq:function(t,e){t.exports=function(t,e){return t.set(e[0],e[1]),t}},Ubhr:function(t,e,r){var n=r("6MiT"),i=1/0;t.exports=function(t){if("string"==typeof t||n(t))return t;var e=t+"";return"0"==e&&1/t==-i?"-0":e}},UfSK:function(t,e){var r=Object.prototype.hasOwnProperty;t.exports=function(t){var e=t.length,n=t.constructor(e);return e&&"string"==typeof t[0]&&r.call(t,"index")&&(n.index=t.index,n.input=t.input),n}},UnEC:function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},UnLw:function(t,e,r){var n=/^\./,i=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,o=/\\(\\)?/g,a=r("fMqj")(function(t){var e=[];return n.test(t)&&e.push(""),t.replace(i,function(t,r,n,i){e.push(n?i.replace(o,"$1"):r||t)}),e});t.exports=a},VORN:function(t,e,r){var n=r("yCNF"),i=Object.create,o=function(){function t(){}return function(e){if(!n(e))return{};if(i)return i(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}();t.exports=o},Vi3P:function(t,e,r){var n=r("bIjD"),i=r("oqL2"),o=r("Cf65"),a=r("Ubhr");t.exports=function(t,e){return e=n(e,t),null==(t=o(t,e))||delete t[a(i(e))]}},W3Iv:function(t,e,r){t.exports={default:r("wEtr"),__esModule:!0}},W529:function(t,e,r){var n=r("f931")(Object.keys,Object);t.exports=n},WFiI:function(t,e){t.exports=function(t){var e=-1,r=Array(t.size);return t.forEach(function(t,n){r[++e]=[n,t]}),r}},WHce:function(t,e,r){var n=r("037f"),i=r("Zk5a")(n);t.exports=i},WQFf:function(t,e,r){var n=r("VORN"),i=r("vi0E"),o=r("HT7L");t.exports=function(t){return"function"!=typeof t.constructor||o(t)?{}:n(i(t))}},WxI4:function(t,e){t.exports=function(){this.__data__=[],this.size=0}},WyC4:function(t,e){var r=/\w*$/;t.exports=function(t){var e=new t.constructor(t.source,r.exec(t));return e.lastIndex=t.lastIndex,e}},XUIS:function(t,e,r){(t.exports=r("YHym")(!1)).push([t.i,"@keyframes spinAround{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}",""])},Xd32:function(t,e,r){r("+tPU"),r("zQR9"),t.exports=r("5PlU")},YeCl:function(t,e,r){var n=r("CW5P"),i=r("A9mX"),o=r("v8Dt"),a=r("agim"),s=r("Dv2r");function c(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}c.prototype.clear=n,c.prototype.delete=i,c.prototype.get=o,c.prototype.has=a,c.prototype.set=s,t.exports=c},YkxI:function(t,e,r){var n=r("wSKX"),i=r("Q2wK"),o=r("WHce");t.exports=function(t,e){return o(i(t,e,n),t+"")}},YsVG:function(t,e,r){var n=r("z4hc"),i=r("S7p9"),o=r("Dc0G"),a=o&&o.isTypedArray,s=a?i(a):n;t.exports=s},Z2pD:function(t,e,r){var n=r("dCZQ"),i="__lodash_hash_undefined__";t.exports=function(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=n&&void 0===e?i:e,this}},ZGh9:function(t,e){var r=9007199254740991,n=/^(?:0|[1-9]\d*)$/;t.exports=function(t,e){return!!(e=null==e?r:e)&&("number"==typeof t||n.test(t))&&t>-1&&t%1==0&&t<e}},ZT2e:function(t,e,r){var n=r("o2mx");t.exports=function(t){return null==t?"":n(t)}},Zk5a:function(t,e){var r=800,n=16,i=Date.now;t.exports=function(t){var e=0,o=0;return function(){var a=i(),s=n-(a-o);if(o=a,s>0){if(++e>=r)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}},Zrlr:function(t,e,r){"use strict";e.__esModule=!0,e.default=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}},aCM0:function(t,e,r){var n=r("NkRn"),i=r("uLhX"),o=r("+66z"),a="[object Null]",s="[object Undefined]",c=n?n.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?s:a:c&&c in Object(t)?i(t):o(t)}},agim:function(t,e,r){var n=r("pTUa");t.exports=function(t){return n(this,t).has(t)}},bGc4:function(t,e,r){var n=r("gGqR"),i=r("Rh28");t.exports=function(t){return null!=t&&i(t.length)&&!n(t)}},bIbi:function(t,e,r){var n=r("ICSD")(r("TQ3y"),"WeakMap");t.exports=n},bIjD:function(t,e,r){var n=r("NGEn"),i=r("hIPy"),o=r("UnLw"),a=r("ZT2e");t.exports=function(t,e){return n(t)?t:i(t,e)?[t]:o(a(t))}},bJWQ:function(t,e,r){var n=r("duB3"),i=r("KmWZ"),o=r("NqZt"),a=r("E4Hj"),s=r("G2xm"),c=r("zpVT");function u(t){var e=this.__data__=new n(t);this.size=e.size}u.prototype.clear=i,u.prototype.delete=o,u.prototype.get=a,u.prototype.has=s,u.prototype.set=c,t.exports=u},bO0Y:function(t,e,r){var n=r("ICSD")(r("TQ3y"),"Promise");t.exports=n},"bXX+":function(t,e,r){"use strict";var n=r("jhkR"),i=r("fvMW"),o=r("VU/8")(n.a,i.a,!1,null,null,null);o.options.__file="components\\schemaLink.vue",e.a=o.exports},bklM:function(t,e,r){var n=r("Fkvj"),i=1,o=4;t.exports=function(t){return n(t,i|o)}},blYT:function(t,e,r){(function(e){var r="object"==typeof e&&e&&e.Object===Object&&e;t.exports=r}).call(e,r("DuR2"))},"c/Tr":function(t,e,r){t.exports={default:r("5zde"),__esModule:!0}},cER1:function(t,e,r){"use strict";var n=r("mvHQ"),i=r.n(n),o=r("fZjL"),a=r.n(o),s=r("Gu7T"),c=r.n(s),u=r("gRE1"),l=r.n(u),f=r("d7EF"),p=r.n(f),d=r("W3Iv"),v=r.n(d),h=r("T9Hf"),m=r("rVUV"),b=(r.n(m),r("Q7hp")),y=r.n(b),_=r("HN2V"),g=r.n(_),x=r("LJry"),j=r.n(x),O=r("lOo0"),C=r("bXX+"),w=r("mQxp"),k=r("4yG7"),P=r.n(k);e.a={props:{type:{type:String,required:!0},examples:{type:Object,required:!1,default:function(){return{}}}},data:function(){return{masterSchema:null,loading:!0}},created:function(){var t=this,e={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"}};r("+99L")("./"+this.type+"_schema.json").then(function(e){return t.masterSchema=new O.a("$",null,e),v()(t.examples).forEach(function(e){var r=p()(e,2),n=r[0],i=r[1];y()(t.masterSchema,n)?P()(t.masterSchema,n+".examples",i):console.error("schema path not found in "+t.type+": "+n)}),t.loading=!1,e}).catch(function(t){throw t}),this.$static={formats:{"date-time":e.date,date:e.date,time:e.date,email:e.email}}},methods:{traverse:function(t,e){var r=this;t instanceof O.a?(e(t),v()(t).filter(function(t){var e=p()(t,2),r=e[0];e[1];return"$parent"!==r}).forEach(function(t){var n=p()(t,2),i=(n[0],n[1]);return r.traverse(i,e)})):t instanceof Array?t.forEach(function(t){return r.traverse(t,e)}):t instanceof Object&&l()(t).forEach(function(t){return r.traverse(t,e)})},simplifySchema:function(t){var e=function(t){return t.anyOf&&t.anyOf.indexOf(!0)>=0?[t,!0]:t.allOf&&t.allOf.indexOf(!1)>=0?[t,!1]:t.allOf&&t.allOf.length?[t,new O.a(t.$step,t.$parent,g.a.apply(void 0,[{}].concat(c()(t.allOf.map(function(t){return t.toJSON()})))))]:!0===t.not?[t,!1]:0===a()(t).filter(function(t){return"$"!==t[0]}).length?[t,!0]:null};return this.traverse(t,function(t){!function t(r){if(r){var n=p()(r,2),i=n[0],o=n[1],a=i.$parent;a&&P()(a.schema,a.path,o),i.$parent=null,t(e(a.schema))}}(e(t))}),t}},computed:{schemas:function(){if(!this.masterSchema)return null;var t={};return this.traverse(this.simplifySchema(this.masterSchema),function(e){t[e.$id]=e}),t}},filters:{stringify:function(t){return i()(t," ",2)},capitalize:function(t,e){return t?(t instanceof Array||(t=[t]),t.map(function(t){return""+t[0].toUpperCase()+t.slice(1)}).join(", ")):""}},components:{card:h.a,prism:j.a,schemaToc:w.a,schemaLink:C.a}}},d4US:function(t,e,r){var n=r("ICSD")(r("TQ3y"),"DataView");t.exports=n},d7EF:function(t,e,r){"use strict";e.__esModule=!0;var n=o(r("us/S")),i=o(r("BO1k"));function o(t){return t&&t.__esModule?t:{default:t}}e.default=function(){return function(t,e){if(Array.isArray(t))return t;if((0,n.default)(Object(t)))return function(t,e){var r=[],n=!0,o=!1,a=void 0;try{for(var s,c=(0,i.default)(t);!(n=(s=c.next()).done)&&(r.push(s.value),!e||r.length!==e);n=!0);}catch(t){o=!0,a=t}finally{try{!n&&c.return&&c.return()}finally{if(o)throw a}}return r}(t,e);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()},dCZQ:function(t,e,r){var n=r("ICSD")(Object,"create");t.exports=n},dFpP:function(t,e,r){var n=r("imBK"),i=Array.prototype.splice;t.exports=function(t){var e=this.__data__,r=n(e,t);return!(r<0||(r==e.length-1?e.pop():i.call(e,r,1),--this.size,0))}},dYhQ:function(t,e,r){var n=r("9UkZ");t.exports=function(t){return n(t)?void 0:t}},deUO:function(t,e,r){var n=r("imBK");t.exports=function(t,e){var r=this.__data__,i=n(r,t);return i<0?(++this.size,r.push([t,e])):r[i][1]=e,this}},duB3:function(t,e,r){var n=r("WxI4"),i=r("dFpP"),o=r("JBvZ"),a=r("2Hvv"),s=r("deUO");function c(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}c.prototype.clear=n,c.prototype.delete=i,c.prototype.get=o,c.prototype.has=a,c.prototype.set=s,t.exports=c},eFps:function(t,e,r){var n,i=r("+gg+"),o=(n=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"";t.exports=function(t){return!!o&&o in t}},eVIm:function(t,e,r){var n=r("dCZQ"),i="__lodash_hash_undefined__",o=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;if(n){var r=e[t];return r===i?void 0:r}return o.call(e,t)?e[t]:void 0}},f931:function(t,e){t.exports=function(t,e){return function(r){return t(e(r))}}},fBQ2:function(t,e,r){"use strict";var n=r("evD5"),i=r("X8DO");t.exports=function(t,e,r){e in t?n.f(t,e,i(0,r)):t[e]=r}},fMqj:function(t,e,r){var n=r("zGZ6"),i=500;t.exports=function(t){var e=n(t,function(t){return r.size===i&&r.clear(),t}),r=e.cache;return e}},fZOM:function(t,e,r){var n=r("kM2E"),i=r("mbce")(!1);n(n.S,"Object",{values:function(t){return i(t)}})},fvMW:function(t,e,r){"use strict";var n=function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("div",[t._t("default"),!0===t.link?[t._v("\n    yes \n  ")]:!1===t.link?[t._v("\n    no \n  ")]:t.isSchema(t.link)?[r("nuxt-link",{attrs:{to:"#p-"+t.link.$id}},[r("span",{domProps:{innerHTML:t._s(t.link.getPath())}})])]:t.link instanceof Array?r("ul",t._l(t.link,function(e){return r("li",{key:e.$id},[r("nuxt-link",{attrs:{to:"#p-"+e.$id}},[r("span",{domProps:{innerHTML:t._s(e.getPath())}})])],1)})):t.link instanceof Object?r("ul",t._l(t.link,function(e,n){return r("li",[r("nuxt-link",{attrs:{to:"#p-"+e.$id}},[t._v("\n        "+t._s(n)+"\n      ")])],1)})):t._e()],2)};n._withStripped=!0;var i={render:n,staticRenderFns:[]};e.a=i},gGqR:function(t,e,r){var n=r("aCM0"),i=r("yCNF"),o="[object AsyncFunction]",a="[object Function]",s="[object GeneratorFunction]",c="[object Proxy]";t.exports=function(t){if(!i(t))return!1;var e=n(t);return e==a||e==s||e==o||e==c}},gHOb:function(t,e,r){var n=r("d4US"),i=r("POb3"),o=r("bO0Y"),a=r("5N57"),s=r("bIbi"),c=r("aCM0"),u=r("Ai/T"),l="[object Promise]",f="[object WeakMap]",p="[object DataView]",d=u(n),v=u(i),h=u(o),m=u(a),b=u(s),y=c;(n&&y(new n(new ArrayBuffer(1)))!=p||i&&"[object Map]"!=y(new i)||o&&y(o.resolve())!=l||a&&"[object Set]"!=y(new a)||s&&y(new s)!=f)&&(y=function(t){var e=c(t),r="[object Object]"==e?t.constructor:void 0,n=r?u(r):"";if(n)switch(n){case d:return p;case v:return"[object Map]";case h:return l;case m:return"[object Set]";case b:return f}return e}),t.exports=y},gRE1:function(t,e,r){t.exports={default:r("TmV0"),__esModule:!0}},gSvA:function(t,e,r){var n=r("kM2E"),i=r("mbce")(!0);n(n.S,"Object",{entries:function(t){return i(t)}})},ggOT:function(t,e,r){(function(t){var n=r("TQ3y"),i=r("gwcX"),o="object"==typeof e&&e&&!e.nodeType&&e,a=o&&"object"==typeof t&&t&&!t.nodeType&&t,s=a&&a.exports===o?n.Buffer:void 0,c=(s?s.isBuffer:void 0)||i;t.exports=c}).call(e,r("3IRH")(t))},gwcX:function(t,e){t.exports=function(){return!1}},hEik:function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=r("xG/K"),i=r("Oey6"),o=r("VU/8")(n.a,i.a,!1,null,null,null);o.options.__file="pages\\specification\\v3\\process-message.vue",e.default=o.exports},hIPy:function(t,e,r){var n=r("NGEn"),i=r("6MiT"),o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/;t.exports=function(t,e){if(n(t))return!1;var r=typeof t;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=t&&!i(t))||a.test(t)||!o.test(t)||null!=e&&t in Object(e)}},hrPF:function(t,e){t.exports=function(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r<n;)e[r]=t[r];return e}},hvFG:function(t,e,r){"use strict";var n=function(){var t=this.$createElement,e=this._self._c||t;return e(this.tag,{tag:"component"},[e("nuxt-link",{attrs:{to:"#p-"+this.schema.$id}},[e("span",{domProps:{innerHTML:this._s(this.schema.$step)}})]),this.schema.properties||this.schema.patternProperties||this.schema.items?e("ul",[this._l(this.schema.properties,function(t,r){return e("schemaToc",{key:r,attrs:{schema:t}})}),this._l(this.schema.patternProperties,function(t,r){return e("schemaToc",{key:r,attrs:{schema:t}})}),this.schema.items?[this.schema.items instanceof Array?this._l(this.schema.items,function(t,r){return e("schemaToc",{key:r,attrs:{schema:t}})}):e("schemaToc",{attrs:{schema:this.schema.items}})]:this._e()],2):this._e()],1)};n._withStripped=!0;var i={render:n,staticRenderFns:[]};e.a=i},i4ON:function(t,e,r){var n=r("nw3t"),i=r("22B7"),o=Object.prototype.hasOwnProperty;t.exports=function(t,e,r){var a=t[e];o.call(t,e)&&i(a,r)&&(void 0!==r||e in t)||n(t,e,r)}},imBK:function(t,e,r){var n=r("22B7");t.exports=function(t,e){for(var r=t.length;r--;)if(n(t[r][0],e))return r;return-1}},jD7S:function(t,e,r){var n=r("tv3T"),i=r("ktak");t.exports=function(t,e){return t&&n(e,i(e),t)}},jMi8:function(t,e,r){var n=r("O1jc"),i=r("mKB/"),o=r("Ilb/"),a=r("hrPF"),s=r("WQFf"),c=r("1Yb9"),u=r("NGEn"),l=r("Fp5l"),f=r("ggOT"),p=r("gGqR"),d=r("yCNF"),v=r("9UkZ"),h=r("YsVG"),m=r("TlPD");t.exports=function(t,e,r,b,y,_,g){var x=t[r],j=e[r],O=g.get(j);if(O)n(t,r,O);else{var C=_?_(x,j,r+"",t,e,g):void 0,w=void 0===C;if(w){var k=u(j),P=!k&&f(j),T=!k&&!P&&h(j);C=j,k||P||T?u(x)?C=x:l(x)?C=a(x):P?(w=!1,C=i(j,!0)):T?(w=!1,C=o(j,!0)):C=[]:v(j)||c(j)?(C=x,c(x)?C=m(x):(!d(x)||b&&p(x))&&(C=s(j))):w=!1}w&&(g.set(j,C),y(C,j,b,_,g),g.delete(j)),n(t,r,C)}}},jhkR:function(t,e,r){"use strict";var n=r("lOo0");e.a={props:{link:{required:!0}},methods:{isSchema:function(t){return t instanceof n.a}}}},ktak:function(t,e,r){var n=r("7e4z"),i=r("/GnY"),o=r("bGc4");t.exports=function(t){return o(t)?n(t):i(t)}},l9Lx:function(t,e,r){var n=r("lb6C"),i=r("C0hh"),o=Object.prototype.propertyIsEnumerable,a=Object.getOwnPropertySymbols,s=a?function(t){return null==t?[]:(t=Object(t),n(a(t),function(e){return o.call(t,e)}))}:i;t.exports=s},lOo0:function(t,e,r){"use strict";var n=r("woOf"),i=r.n(n),o=r("d7EF"),a=r.n(o),s=r("W3Iv"),c=r.n(s),u=r("Zrlr"),l=r.n(u),f=r("wxAW"),p=r.n(f),d=r("bklM"),v=r.n(d),h=r("rVUV"),m=r.n(h),b=r("Dc7M"),y=r.n(b),_=function(){function t(e,r,n){l()(this,t),this.$id=t.idx++,this.$step=e+"&#8203",this.$parent=r,n&&this.parseFrom(n)}return p()(t,[{key:"toJSON",value:function(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this;return m()(r,function(r,n,i,o){if(r instanceof t)return c()(r).filter(function(t){var e=a()(t,2),r=e[0];e[1];return["$id","$step","$parent"].indexOf(r)<0}).reduce(function(t,r){var n=a()(r,2),i=n[0],o=n[1];return t[i]=e.toJSON(o),t},{})})}},{key:"getPath",value:function(){var t="";return this.$parent&&(t+=this.$parent.schema.getPath(),"object"===this.$parent.schema.type&&(t+=".")),t+=this.$step,this.getPath=function(){return t},t}},{key:"parseFrom",value:function(e){var r=this;return!0===e?e={}:!1===e&&(e={not:!0}),i()(this,y()(v()(e),["$step","$id","$parent","items","properties","patternProperties","additionalItems","additionalProperties","contains","propertyNames","not","allOf","anyOf","oneOf"])),e.items&&(e.items instanceof Array?this.items=e.items.map(function(n,i){return new t("["+i+"]",{schema:r,path:"items["+i+"]"},e.items[i])}):this.items=new t("[*]",{schema:this,path:"items"},e.items)),["properties","patternProperties"].filter(function(t){return e.hasOwnProperty(t)}).forEach(function(n){return c()(e[n]).forEach(function(e,i){var o=a()(e,2),s=o[0],c=o[1];r[n]=r[n]||{},r[n][s]=new t("patternProperties"===n?"&lt;field&gt;":s,{schema:r,path:n+'["'+s+'"]'},c)})}),["additionalItems","additionalProperties","contains","propertyNames","not"].filter(function(t){return e.hasOwnProperty(t)}).forEach(function(n){r[n]=new t("+",{schema:r,path:n},e[n])}),["allOf","anyOf","oneOf"].filter(function(t){return e.hasOwnProperty(t)}).forEach(function(n){return e[n].forEach(function(e,i){r[n]=r[n]||[],r[n].push(new t("("+i+")"+("anyOf"===n?"?":"+"),{schema:r,path:n+"["+i+"]"},e))})}),this}}]),t}();_.idx=0,e.a=_},lb6C:function(t,e){t.exports=function(t,e){for(var r=-1,n=null==t?0:t.length,i=0,o=[];++r<n;){var a=t[r];e(a,r,t)&&(o[i++]=a)}return o}},"mKB/":function(t,e,r){(function(t){var n=r("TQ3y"),i="object"==typeof e&&e&&!e.nodeType&&e,o=i&&"object"==typeof t&&t&&!t.nodeType&&t,a=o&&o.exports===i?n.Buffer:void 0,s=a?a.allocUnsafe:void 0;t.exports=function(t,e){if(e)return t.slice();var r=t.length,n=s?s(r):new t.constructor(r);return t.copy(n),n}}).call(e,r("3IRH")(t))},mQxp:function(t,e,r){"use strict";var n=r("Gs0Q"),i=r("hvFG"),o=!1;var a=function(t){o||r("GACb")},s=r("VU/8")(n.a,i.a,!1,a,null,null);s.options.__file="components\\schemaToc.vue",e.a=s.exports},mTAn:function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},mbce:function(t,e,r){var n=r("lktj"),i=r("TcQ7"),o=r("NpIQ").f;t.exports=function(t){return function(e){for(var r,a=i(e),s=n(a),c=s.length,u=0,l=[];c>u;)o.call(a,r=s[u++])&&l.push(t?[r,a[r]]:a[r]);return l}}},mgnk:function(t,e,r){var n=r("aCM0"),i=r("UnEC"),o="[object Arguments]";t.exports=function(t){return i(t)&&n(t)==o}},"mn+f":function(t,e,r){(t.exports=r("YHym")(!1)).push([t.i,".schemaDetail a{text-decoration:none}.schemaDetail .property ul{list-style-type:disc;padding-left:1em;margin-left:0;margin-top:0}",""])},nWuj:function(t,e){t.exports=function(t,e){return t.add(e),t}},nw3t:function(t,e,r){var n=r("p0bc");t.exports=function(t,e,r){"__proto__"==e&&n?n(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}},o2mx:function(t,e,r){var n=r("NkRn"),i=r("Hxdr"),o=r("NGEn"),a=r("6MiT"),s=1/0,c=n?n.prototype:void 0,u=c?c.toString:void 0;t.exports=function t(e){if("string"==typeof e)return e;if(o(e))return i(e,t)+"";if(a(e))return u?u.call(e):"";var r=e+"";return"0"==r&&1/e==-s?"-0":r}},octw:function(t,e){t.exports=function(t){var e=-1,r=Array(t.size);return t.forEach(function(t){r[++e]=t}),r}},oqL2:function(t,e){t.exports=function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0}},p0bc:function(t,e,r){var n=r("ICSD"),i=function(){try{var t=n(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=i},pTUa:function(t,e,r){var n=r("/I3N");t.exports=function(t,e){var r=t.__data__;return n(e)?r["string"==typeof e?"string":"hash"]:r.map}},pv7p:function(t,e,r){var n=r("mn+f");"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);r("rjj0")("08e7f25c",n,!1)},py9u:function(t,e,r){var n=r("tv3T"),i=r("t8rQ");t.exports=function(t,e){return t&&n(e,i(e),t)}},qwTf:function(t,e,r){var n=r("TQ3y").Uint8Array;t.exports=n},qyJz:function(t,e,r){"use strict";var n=r("+ZMJ"),i=r("kM2E"),o=r("sB3e"),a=r("msXi"),s=r("Mhyx"),c=r("QRG4"),u=r("fBQ2"),l=r("3fs2");i(i.S+i.F*!r("dY0y")(function(t){Array.from(t)}),"Array",{from:function(t){var e,r,i,f,p=o(t),d="function"==typeof this?this:Array,v=arguments.length,h=v>1?arguments[1]:void 0,m=void 0!==h,b=0,y=l(p);if(m&&(h=n(h,v>2?arguments[2]:void 0,2)),void 0==y||d==Array&&s(y))for(r=new d(e=c(p.length));e>b;b++)u(r,b,m?h(p[b],b):p[b]);else for(f=y.call(p),r=new d;!(i=f.next()).done;b++)u(r,b,m?a(f,h,[i.value,b],!0):i.value);return r.length=b,r}})},rCVp:function(t,e,r){var n=r("1C79");t.exports=function(t){return null!=t&&t.length?n(t,1):[]}},rVUV:function(t,e,r){var n=r("Fkvj"),i=1,o=4;t.exports=function(t,e){return n(t,i|o,e="function"==typeof e?e:void 0)}},rpnb:function(t,e,r){var n=r("tHks")();t.exports=n},s8mu:function(t,e,r){"use strict";var n=r("cER1"),i=r("D9sP"),o=!1;var a=function(t){o||r("pv7p")},s=r("VU/8")(n.a,i.a,!1,a,null,null);s.options.__file="components\\schemaDetail.vue",e.a=s.exports},t8rQ:function(t,e,r){var n=r("7e4z"),i=r("G0Wc"),o=r("bGc4");t.exports=function(t){return o(t)?n(t,!0):i(t)}},tHks:function(t,e){t.exports=function(t){return function(e,r,n){for(var i=-1,o=Object(e),a=n(e),s=a.length;s--;){var c=a[t?s:++i];if(!1===r(o[c],c,o))break}return e}}},tv3T:function(t,e,r){var n=r("i4ON"),i=r("nw3t");t.exports=function(t,e,r,o){var a=!r;r||(r={});for(var s=-1,c=e.length;++s<c;){var u=e[s],l=o?o(r[u],t[u],u,r,t):void 0;void 0===l&&(l=t[u]),a?i(r,u,l):n(r,u,l)}return r}},uCi2:function(t,e,r){var n=r("bIjD"),i=r("Ubhr");t.exports=function(t,e){for(var r=0,o=(e=n(e,t)).length;null!=t&&r<o;)t=t[i(e[r++])];return r&&r==o?t:void 0}},uIr7:function(t,e){t.exports=function(t,e){for(var r=-1,n=e.length,i=t.length;++r<n;)t[i+r]=e[r];return t}},uLhX:function(t,e,r){var n=r("NkRn"),i=Object.prototype,o=i.hasOwnProperty,a=i.toString,s=n?n.toStringTag:void 0;t.exports=function(t){var e=o.call(t,s),r=t[s];try{t[s]=void 0;var n=!0}catch(t){}var i=a.call(t);return n&&(e?t[s]=r:delete t[s]),i}},"ue/d":function(t,e){t.exports=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}},uieL:function(t,e){t.exports=function(t,e){for(var r=-1,n=Array(t);++r<t;)n[r]=e(r);return n}},"us/S":function(t,e,r){t.exports={default:r("Xd32"),__esModule:!0}},v8Dt:function(t,e,r){var n=r("pTUa");t.exports=function(t){return n(this,t).get(t)}},vi0E:function(t,e,r){var n=r("f931")(Object.getPrototypeOf,Object);t.exports=n},wEtr:function(t,e,r){r("gSvA"),t.exports=r("FeBl").Object.entries},wSKX:function(t,e){t.exports=function(t){return t}},wxAW:function(t,e,r){"use strict";e.__esModule=!0;var n,i=r("C4MV"),o=(n=i)&&n.__esModule?n:{default:n};e.default=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),(0,o.default)(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}()},"xG/K":function(t,e,r){"use strict";var n=r("mvHQ"),i=r.n(n),o=r("d7EF"),a=r.n(o),s=r("Dd8w"),c=r.n(s),u=r("W3Iv"),l=r.n(u),f=r("LJry"),p=r.n(f),d=r("T9Hf"),v=r("Q7hp"),h=r.n(v),m=r("s8mu");e.a={head:function(){return{title:"Specification for process messages"}},created:function(){var t=this,e=new Date,r="a4927dad-58d4-4580-b460-79cefd56775b";this.$static={message:{"content-spec":"urn:spec://eclipse.org/unide/process-message#v2",device:{id:r},process:{ts:e.toISOString()},measurements:[{ts:new Date(e.valueOf()+100).toISOString(),series:{time:[0,23,24],force:[26,23,24],pressure:[52.4,46.32,44.2432]}}]},complexMessage:{"content-spec":"urn:spec://eclipse.org/unide/process-message#v2",device:{id:r,mode:"auto",state:"OK",swVersion:"2.0.3.13",swBuildId:"41535"},part:{code:"HUH289",id:"420003844",result:"NOK",toolId:"32324-432143",type:"SINGLE",typeId:"F00VH07328"},process:{externalId:"b4927dad-58d4-4580-b460-79cefd56775b",program:{id:"1",lastChangedDate:"2002-05-30T09:30:10.123+02:00",name:"Programm 1"},result:"NOK",shutoffPhase:"phase 2",ts:e.toISOString(),escalation:"shift leader",maxDuration:"30min"},measurements:[{code:"0000 EE01",name:"heating up",phase:"phase 1",result:"OK",ts:new Date(e.valueOf()+100).toISOString(),context:{pressure:{limits:{upperError:4444,lowerError:44,upperWarn:2222,lowerWarn:46,target:35}},force:{limits:{upperError:[29,27,26],lowerError:[23,21,20],upperWarn:[28.5,26.5,25.5],lowerWarn:[23.5,21.5,20.5],target:[26,24,23]}}},specialValues:[{time:12,name:"turning point",value:{pressure:24,force:50}},{time:50,name:"shutoffForce",value:{force:24,upperError:26,lowerError:22,upperWarn:25,lowerWarn:23,target:24}},{time:50,name:"shutoffPressure",value:{pressure:50,upperError:52,lowerError:48}}],series:{time:[30,36,42],force:[26,23,24],pressure:[52.4,46.32,44.2432],temperature:[45.4243,46.42342,44.2432]}},{ts:new Date(e.valueOf()+430).toISOString(),phase:"phase 2",name:"processing",result:"OK",series:{time:[0,23,24],temperature:[49.2,48.8,50]}}]}},this.$static.examples=l()(c()({},["content-spec","device","device.id","device.mode","measurements","part","part.code","part.id","part.result","part.type","part.typeId","process","process.externalId","process.program","process.program.id","process.program.lastChangedDate","process.program.name","process.result","process.shutoffPhase","process.ts"].reduce(function(e,r){return e[t.schemafy(r)]=r,e},{'properties.measurements.allOf[0].items.properties.context.patternProperties["^[^$]+"].properties.limits.oneOf[0]':"measurements[0].context.pressure.limits",'properties.measurements.allOf[0].items.properties.context.patternProperties["^[^$]+"].properties.limits.oneOf[1]':"measurements[0].context.force.limits",'properties.measurements.allOf[0].items.properties.series.patternProperties["^[^$]+"]':"measurements[0].series.force"}),["code","result","series","series.time","ts"].reduce(function(e,r){return e["properties.measurements.allOf[0].items."+t.schemafy(r)]="measurements[0]."+r,e},{}),["name","phase","specialValues","specialValues[1].time","specialValues[1].name","specialValues[1].value"].reduce(function(e,r){return e["properties.measurements.allOf[1].items."+t.schemafy(r)]="measurements[0]."+r,e},{}),["lowerError","lowerWarn","target","upperError","upperWarn"].reduce(function(t,e){return t['properties.measurements.allOf[0].items.properties.context.patternProperties["^[^$]+"].properties.limits.oneOf[0].properties.'+e]="measurements[0].context.pressure.limits."+e,t['properties.measurements.allOf[0].items.properties.context.patternProperties["^[^$]+"].properties.limits.oneOf[1].properties.'+e]="measurements[0].context.force.limits."+e,t},{}))).reduce(function(e,r){var n=a()(r,2),i=n[0],o=n[1],s=h()(t.$static.message,o)||h()(t.$static.complexMessage,o);return s?e[i]=[s]:console.error('no example provided in process-message for:\n"'+i+'": "'+o+'"'),e},{})},filters:{stringify:function(t){return i()(t," ",2)}},methods:{schemafy:function(t){return t.replace(/(^|\.)/g,"$1properties.").replace(/\[[^]]*]/g,".items")}},components:{card:d.a,prism:p.a,schemaDetail:m.a}}},xond:function(t,e,r){var n=r("FCuZ"),i=r("09Qt"),o=r("t8rQ");t.exports=function(t){return n(t,o,i)}},yCNF:function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},z4hc:function(t,e,r){var n=r("aCM0"),i=r("Rh28"),o=r("UnEC"),a={};a["[object Float32Array]"]=a["[object Float64Array]"]=a["[object Int8Array]"]=a["[object Int16Array]"]=a["[object Int32Array]"]=a["[object Uint8Array]"]=a["[object Uint8ClampedArray]"]=a["[object Uint16Array]"]=a["[object Uint32Array]"]=!0,a["[object Arguments]"]=a["[object Array]"]=a["[object ArrayBuffer]"]=a["[object Boolean]"]=a["[object DataView]"]=a["[object Date]"]=a["[object Error]"]=a["[object Function]"]=a["[object Map]"]=a["[object Number]"]=a["[object Object]"]=a["[object RegExp]"]=a["[object Set]"]=a["[object String]"]=a["[object WeakMap]"]=!1,t.exports=function(t){return o(t)&&i(t.length)&&!!a[n(t)]}},zBOP:function(t,e,r){var n=r("22B7"),i=r("bGc4"),o=r("ZGh9"),a=r("yCNF");t.exports=function(t,e,r){if(!a(r))return!1;var s=typeof e;return!!("number"==s?i(r)&&o(e,r.length):"string"==s&&e in r)&&n(r[e],t)}},zFvC:function(t,e,r){var n=r("T7jo");"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);r("rjj0")("3cbcaf44",n,!1)},zGZ6:function(t,e,r){var n=r("YeCl"),i="Expected a function";function o(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError(i);var r=function(){var n=arguments,i=e?e.apply(this,n):n[0],o=r.cache;if(o.has(i))return o.get(i);var a=t.apply(this,n);return r.cache=o.set(i,a)||o,a};return r.cache=new(o.Cache||n),r}o.Cache=n,t.exports=o},zpVT:function(t,e,r){var n=r("duB3"),i=r("POb3"),o=r("YeCl"),a=200;t.exports=function(t,e){var r=this.__data__;if(r instanceof n){var s=r.__data__;if(!i||s.length<a-1)return s.push([t,e]),this.size=++r.size,this;r=this.__data__=new o(s)}return r.set(t,e),this.size=r.size,this}}});