webpackJsonp([2],{"+66z":function(t,e){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},"+99L":function(t,e,n){var r={"./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=r[t];return e?n.e(e[1]).then(function(){return n(e[0])}):Promise.reject(new Error("Cannot find module '"+t+"'."))}i.keys=function(){return Object.keys(r)},i.id="+99L",t.exports=i},"+gg+":function(t,e,n){var r=n("TQ3y")["__core-js_shared__"];t.exports=r},"/GnY":function(t,e,n){var r=n("HT7L"),i=n("W529"),a=Object.prototype.hasOwnProperty;t.exports=function(t){if(!r(t))return i(t);var e=[];for(var n in Object(t))a.call(t,n)&&"constructor"!=n&&e.push(n);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,n){var r=n("1oyr"),i=n("p0bc"),a=n("wSKX"),o=i?function(t,e){return i(t,"toString",{configurable:!0,enumerable:!1,value:r(e),writable:!0})}:a;t.exports=o},"09Qt":function(t,e,n){var r=n("uIr7"),i=n("vi0E"),a=n("l9Lx"),o=n("C0hh"),s=Object.getOwnPropertySymbols?function(t){for(var e=[];t;)r(e,a(t)),t=i(t);return e}:o;t.exports=s},"0DSl":function(t,e,n){var r=n("YkxI"),i=n("zBOP");t.exports=function(t){return r(function(e,n){var r=-1,a=n.length,o=a>1?n[a-1]:void 0,s=a>2?n[2]:void 0;for(o=t.length>3&&"function"==typeof o?(a--,o):void 0,s&&i(n[0],n[1],s)&&(o=a<3?void 0:o,a=1),e=Object(e);++r<a;){var c=n[r];c&&t(e,c,r,o)}return e})}},"0uX4":function(t,e,n){var r=n("NkRn"),i=r?r.prototype:void 0,a=i?i.valueOf:void 0;t.exports=function(t){return a?Object(a.call(t)):{}}},"1C79":function(t,e,n){var r=n("uIr7"),i=n("Qp3N");t.exports=function t(e,n,a,o,s){var c=-1,u=e.length;for(a||(a=i),s||(s=[]);++c<u;){var l=e[c];n>0&&a(l)?n>1?t(l,n-1,a,o,s):r(s,l):o||(s[s.length]=l)}return s}},"1QDk":function(t,e,n){var r=n("tv3T"),i=n("09Qt");t.exports=function(t,e){return r(t,i(t),e)}},"1Yb9":function(t,e,n){var r=n("mgnk"),i=n("UnEC"),a=Object.prototype,o=a.hasOwnProperty,s=a.propertyIsEnumerable,c=r(function(){return arguments}())?r:function(t){return i(t)&&o.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,n){var r=n("imBK");t.exports=function(t){return r(this.__data__,t)>-1}},"2N6f":function(t,e,n){var r=n("rCVp"),i=n("Q2wK"),a=n("WHce");t.exports=function(t){return a(i(t,void 0,r),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,n,r){var i=-1,a=null==t?0:t.length;for(r&&a&&(n=t[++i]);++i<a;)n=e(n,t[i],i,t);return n}},"4yG7":function(t,e,n){var r=n("HAGj");t.exports=function(t,e,n){return null==t?t:r(t,e,n)}},"5/Qr":function(t,e,n){var r=n("Kzd6"),i=n("6Git"),a=n("Jqj6"),o=n("WyC4"),s=n("7jYp"),c=n("0uX4"),u=n("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]",C="[object Int16Array]",O="[object Int32Array]",w="[object Uint8Array]",k="[object Uint8ClampedArray]",T="[object Uint16Array]",P="[object Uint32Array]";t.exports=function(t,e,n,A){var E=t.constructor;switch(e){case y:return r(t);case l:case f:return new E(+t);case _:return i(t,A);case g:case x:case j:case C:case O:case w:case k:case T:case P:return u(t,A);case p:return a(t,A,n);case d:case m:return new E(t);case v:return o(t);case h:return s(t,A,n);case b:return c(t)}}},"5N57":function(t,e,n){var r=n("ICSD")(n("TQ3y"),"Set");t.exports=r},"5PlU":function(t,e,n){var r=n("RY/4"),i=n("dSzd")("iterator"),a=n("/bQp");t.exports=n("FeBl").isIterable=function(t){var e=Object(t);return void 0!==e[i]||"@@iterator"in e||a.hasOwnProperty(r(e))}},"5pwE":function(t,e,n){(t.exports=n("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}",""])},"5zde":function(t,e,n){n("zQR9"),n("qyJz"),t.exports=n("FeBl").Array.from},"6Git":function(t,e,n){var r=n("Kzd6");t.exports=function(t,e){var n=e?r(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}},"6MiT":function(t,e,n){var r=n("aCM0"),i=n("UnEC"),a="[object Symbol]";t.exports=function(t){return"symbol"==typeof t||i(t)&&r(t)==a}},"77aO":function(t,e,n){"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,n){var r=n("uieL"),i=n("1Yb9"),a=n("NGEn"),o=n("ggOT"),s=n("ZGh9"),c=n("YsVG"),u=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=a(t),l=!n&&i(t),f=!n&&!l&&o(t),p=!n&&!l&&!f&&c(t),d=n||l||f||p,v=d?r(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,n){var r=n("nWuj"),i=n("3rZI"),a=n("octw"),o=1;t.exports=function(t,e,n){var s=e?n(a(t),o):a(t);return i(s,r,new t.constructor)}},"8AZL":function(t,e){t.exports=function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}},"8gK5":function(t,e){t.exports=function(t){var e=[];if(null!=t)for(var n in Object(t))e.push(n);return e}},"94sX":function(t,e,n){var r=n("dCZQ");t.exports=function(){this.__data__=r?r(null):{},this.size=0}},"9UkZ":function(t,e,n){var r=n("aCM0"),i=n("vi0E"),a=n("UnEC"),o="[object Object]",s=Function.prototype,c=Object.prototype,u=s.toString,l=c.hasOwnProperty,f=u.call(Object);t.exports=function(t){if(!a(t)||r(t)!=o)return!1;var e=i(t);if(null===e)return!0;var n=l.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&u.call(n)==f}},A51D:function(t,e,n){var r=n("5pwE");"string"==typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);n("rjj0")("188b52d2",r,!1)},A9mX:function(t,e,n){var r=n("pTUa");t.exports=function(t){var e=r(this,t).delete(t);return this.size-=e?1:0,e}},"Ai/T":function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},AxiT:function(t,e,n){var r=n("Lw7C");"string"==typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);n("rjj0")("0868896c",r,!1)},C0hh:function(t,e){t.exports=function(){return[]}},CW5P:function(t,e,n){var r=n("T/bE"),i=n("duB3"),a=n("POb3");t.exports=function(){this.size=0,this.__data__={hash:new r,map:new(a||i),string:new r}}},Cf65:function(t,e,n){var r=n("uCi2"),i=n("M1c9");t.exports=function(t,e){return e.length<2?t:r(t,i(e,0,-1))}},D9sP:function(t,e,n){"use strict";var r=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"schemaDetail",class:{"is-loading":t.loading},attrs:{id:"schema-detail"}},[n("div",{staticClass:"accordion"},[null!==t.masterSchema?n("card",{attrs:{collapsed:!0}},[n("template",{slot:"header"},[t._v("\n        Structure of the payload\n      ")]),n("ul",t._l(t.masterSchema.properties,function(t,e){return n("schemaToc",{key:e,attrs:{schema:t}})}))],2):t._e(),t._t("default")],2),n("h1",[n("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 n("div",{key:e.$id,staticClass:"card property"},[n("header",{staticClass:"card-header"},[n("a",{attrs:{id:"p-"+e.$id}}),n("p",{staticClass:"card-header-title"},[n("span",{domProps:{innerHTML:t._s(e.getPath())}})]),n("nuxt-link",{staticClass:"card-header-icon",attrs:{to:"#schema-detail",title:"go up"}},[n("span",{staticClass:"icon"},[n("i",{staticClass:"fa fa-angle-up"})])])],1),n("div",{staticClass:"card-content"},[e.description||e.type?n("div",{staticClass:"field is-horizontal"},[t._m(0,!0),e.description?n("div",{staticClass:"field-body"},[t._v("\n          "+t._s(e.description)+"\n        ")]):e.type?n("div",{staticClass:"field-body"},[t._v("\n          A simple "+t._s(t._f("capitalize")(e.type))+"\n        ")]):t._e()]):t._e(),e.$parent?n("div",{staticClass:"field is-horizontal"},[t._m(1,!0),n("div",{staticClass:"field-body"},[n("nuxt-link",{attrs:{to:"#p-"+e.$parent.schema.$id}},[n("span",{domProps:{innerHTML:t._s(e.$parent.schema.getPath())}})])],1)]):t._e(),e.type?n("div",{staticClass:"field is-horizontal"},[t._m(2,!0),n("div",{staticClass:"field-body"},[t._v("\n          "+t._s(t._f("capitalize")(e.type,e))+"\n        ")])]):t._e(),e.format?n("div",{staticClass:"field is-horizontal"},[t._m(3,!0),n("div",{staticClass:"field-body"},[t._v("\n          "+t._s(e.format)+"\n          "),t.$static.formats[e.format]?n("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?n("div",{staticClass:"field is-horizontal"},[t._m(4,!0),n("div",{staticClass:"field-body"},[n("div",[t._v("\n            "+t._s(e.enum.join(", "))+"\n          ")])])]):t._e(),e.hasOwnProperty("default")?n("div",{staticClass:"field is-horizontal"},[t._m(5,!0),n("div",{staticClass:"field-body"},[n("div",[t._v("\n            "+t._s(e.default)+"\n          ")])])]):t._e(),e.maxLength?n("div",{staticClass:"field is-horizontal"},[t._m(6,!0),n("div",{staticClass:"field-body"},[n("div",[t._v("\n            "+t._s(e.maxLength)+"\n          ")])])]):t._e(),e.properties||e.patternProperties||e.items?n("div",{staticClass:"field is-horizontal"},[t._m(7,!0),n("div",{staticClass:"field-body"},[Object.keys(e.properties||{}).length>0?n("schemaLink",{attrs:{link:e.properties}}):t._e(),Object.keys(e.patternProperties||{}).length>0?n("schemaLink",{attrs:{link:e.patternProperties}},[n("div",[t._v("Matching regular expressions:")])]):t._e(),!e.items||e.items instanceof Array?e.items?n("schemaLink",{attrs:{link:e.items}},[n("div",[t._v("Ordered items of type:")])]):t._e():n("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?n("div",{staticClass:"field is-horizontal"},[t._m(8,!0),n("div",{staticClass:"field-body"},[n("div",[t._v("\n            "+t._s(e.minProperties)+"\n          ")])])]):t._e(),e.minItems?n("div",{staticClass:"field is-horizontal"},[t._m(9,!0),n("div",{staticClass:"field-body"},[n("div",[t._v("\n            "+t._s(e.minItems)+"\n          ")])])]):t._e(),e.hasOwnProperty("additionalProperties")?n("div",{staticClass:"field is-horizontal"},[t._m(10,!0),"boolean"==typeof e.additionalProperties?n("schemaLink",{staticClass:"field-body",attrs:{link:e.additionalProperties}}):n("div",{staticClass:"field-body"},[t._v("\n          if fulfilling "),n("schemaLink",{staticClass:"field-body",attrs:{link:e.additionalProperties}})],1)],1):t._e(),e.not||e.oneOf||e.allOf||e.anyOf?n("div",{staticClass:"field is-horizontal"},[t._m(11,!0),n("div",{staticClass:"field-body"},[e.not?n("schemaLink",{attrs:{link:e.not}},[t._v("\n            Not fulfilling \n          ")]):t._e(),e.oneOf?n("schemaLink",{attrs:{link:e.oneOf}},[n("div",[t._v("Fulfilling exactly one of:")])]):t._e(),e.allOf?n("schemaLink",{attrs:{link:e.allOf}},[n("div",[t._v("Fulfilling all of:")])]):t._e(),e.anyOf?n("schemaLink",{attrs:{link:e.anyOf}},[n("div",[t._v("Fulfilling one of:")])]):t._e()],1)]):t._e(),e.required&&e.required.length?n("div",{staticClass:"field is-horizontal"},[t._m(12,!0),n("div",{staticClass:"field-body"},[t._v("\n          "+t._s(e.required.join(", "))+"\n        ")])]):t._e(),e.examples?n("div",{staticClass:"field is-horizontal"},[t._m(13,!0),n("div",{staticClass:"field-body"},t._l(e.examples,function(e,r){return n("prism",{key:r,attrs:{language:"json"}},[t._v(t._s(t._f("stringify")(e)))])}))]):t._e()])])})],2)};r._withStripped=!0;var i={render:r,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,n){(function(t){var r=n("blYT"),i="object"==typeof e&&e&&!e.nodeType&&e,a=i&&"object"==typeof t&&t&&!t.nodeType&&t,o=a&&a.exports===i&&r.process,s=function(){try{return o&&o.binding&&o.binding("util")}catch(t){}}();t.exports=s}).call(e,n("3IRH")(t))},Dc7M:function(t,e,n){var r=n("Hxdr"),i=n("Fkvj"),a=n("Vi3P"),o=n("bIjD"),s=n("tv3T"),c=n("dYhQ"),u=n("2N6f"),l=n("xond"),f=u(function(t,e){var n={};if(null==t)return n;var u=!1;e=r(e,function(e){return e=o(e,t),u||(u=e.length>1),e}),s(t,l(t),n),u&&(n=i(n,7,c));for(var f=e.length;f--;)a(n,e[f]);return n});t.exports=f},Dv2r:function(t,e,n){var r=n("pTUa");t.exports=function(t,e){var n=r(this,t),i=n.size;return n.set(t,e),this.size+=n.size==i?0:1,this}},E4Hj:function(t,e){t.exports=function(t){return this.__data__.get(t)}},FCuZ:function(t,e,n){var r=n("uIr7"),i=n("NGEn");t.exports=function(t,e,n){var a=e(t);return i(t)?a:r(a,n(t))}},Fkvj:function(t,e,n){var r=n("bJWQ"),i=n("PqYH"),a=n("i4ON"),o=n("jD7S"),s=n("py9u"),c=n("mKB/"),u=n("hrPF"),l=n("Nkkh"),f=n("1QDk"),p=n("MoMe"),d=n("xond"),v=n("gHOb"),h=n("UfSK"),m=n("5/Qr"),b=n("WQFf"),y=n("NGEn"),_=n("ggOT"),g=n("yCNF"),x=n("ktak"),j=1,C=2,O=4,w="[object Arguments]",k="[object Function]",T="[object GeneratorFunction]",P="[object Object]",A={};A[w]=A["[object Array]"]=A["[object ArrayBuffer]"]=A["[object DataView]"]=A["[object Boolean]"]=A["[object Date]"]=A["[object Float32Array]"]=A["[object Float64Array]"]=A["[object Int8Array]"]=A["[object Int16Array]"]=A["[object Int32Array]"]=A["[object Map]"]=A["[object Number]"]=A[P]=A["[object RegExp]"]=A["[object Set]"]=A["[object String]"]=A["[object Symbol]"]=A["[object Uint8Array]"]=A["[object Uint8ClampedArray]"]=A["[object Uint16Array]"]=A["[object Uint32Array]"]=!0,A["[object Error]"]=A[k]=A["[object WeakMap]"]=!1,t.exports=function t(e,n,E,S,I,M){var F,$=n&j,D=n&C,z=n&O;if(E&&(F=I?E(e,S,I,M):E(e)),void 0!==F)return F;if(!g(e))return e;var N=y(e);if(N){if(F=h(e),!$)return u(e,F)}else{var U=v(e),Q=U==k||U==T;if(_(e))return c(e,$);if(U==P||U==w||Q&&!I){if(F=D||Q?{}:b(e),!$)return D?f(e,s(F,e)):l(e,o(F,e))}else{if(!A[U])return I?e:{};F=m(e,U,t,$)}}M||(M=new r);var G=M.get(e);if(G)return G;M.set(e,F);var H=z?D?d:p:D?keysIn:x,L=N?void 0:H(e);return i(L||e,function(r,i){L&&(r=e[i=r]),a(F,i,t(r,n,E,i,e,M))}),F}},Fp5l:function(t,e,n){var r=n("bGc4"),i=n("UnEC");t.exports=function(t){return i(t)&&r(t)}},G0Wc:function(t,e,n){var r=n("yCNF"),i=n("HT7L"),a=n("8gK5"),o=Object.prototype.hasOwnProperty;t.exports=function(t){if(!r(t))return a(t);var e=i(t),n=[];for(var s in t)("constructor"!=s||!e&&o.call(t,s))&&n.push(s);return n}},G2xm:function(t,e){t.exports=function(t){return this.__data__.has(t)}},Gs0Q:function(t,e,n){"use strict";e.a={name:"schemaToc",props:{tag:{type:String,default:"li"},schema:{type:Object,required:!0}}}},Gu7T:function(t,e,n){"use strict";e.__esModule=!0;var r,i=n("c/Tr"),a=(r=i)&&r.__esModule?r:{default:r};e.default=function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e<t.length;e++)n[e]=t[e];return n}return(0,a.default)(t)}},HAGj:function(t,e,n){var r=n("i4ON"),i=n("bIjD"),a=n("ZGh9"),o=n("yCNF"),s=n("Ubhr");t.exports=function(t,e,n,c){if(!o(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=n;if(u!=f){var h=p[d];void 0===(v=c?c(h,d,p):void 0)&&(v=o(h)?h:a(e[u+1])?[]:{})}r(p,d,v),p=p[d]}return t}},HN2V:function(t,e,n){var r=n("HbnZ"),i=n("0DSl")(function(t,e,n){r(t,e,n)});t.exports=i},HT7L:function(t,e){var n=Object.prototype;t.exports=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||n)}},HbnZ:function(t,e,n){var r=n("bJWQ"),i=n("O1jc"),a=n("rpnb"),o=n("jMi8"),s=n("yCNF"),c=n("t8rQ");t.exports=function t(e,n,u,l,f){e!==n&&a(n,function(a,c){if(s(a))f||(f=new r),o(e,n,c,u,t,l,f);else{var p=l?l(e[c],a,c+"",e,n,f):void 0;void 0===p&&(p=a),i(e,c,p)}},c)}},Hxdr:function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}},ICSD:function(t,e,n){var r=n("ITwD"),i=n("mTAn");t.exports=function(t,e){var n=i(t,e);return r(n)?n:void 0}},ITwD:function(t,e,n){var r=n("gGqR"),i=n("eFps"),a=n("yCNF"),o=n("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!(!a(t)||i(t))&&(r(t)?p:s).test(o(t))}},"Ilb/":function(t,e,n){var r=n("Kzd6");t.exports=function(t,e){var n=e?r(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}},JBvZ:function(t,e,n){var r=n("imBK");t.exports=function(t){var e=this.__data__,n=r(e,t);return n<0?void 0:e[n][1]}},Jqj6:function(t,e,n){var r=n("U7Aq"),i=n("3rZI"),a=n("WFiI"),o=1;t.exports=function(t,e,n){var s=e?n(a(t),o):a(t);return i(s,r,new t.constructor)}},KmWZ:function(t,e,n){var r=n("duB3");t.exports=function(){this.__data__=new r,this.size=0}},Kzd6:function(t,e,n){var r=n("qwTf");t.exports=function(t){var e=new t.constructor(t.byteLength);return new r(e).set(new r(t)),e}},LJry:function(t,e,n){"use strict";var r={functional:!0,props:{code:{type:String},language:{type:String,default:"markup"}},render:function(t,e){var n=e.props.code||e.children[0].text,r=e.props.language,i=Prism.languages[r],a="language-"+r;return t("pre",function(t){for(var e=arguments,n=1;n<arguments.length;n++)for(var r in arguments[n])t[r]=e[n][r];return t}({},e.data,{class:[e.data.class,a]}),[t("code",{class:a,domProps:{innerHTML:Prism.highlight(n,i)}})])}};t.exports=r},Lw7C:function(t,e,n){(t.exports=n("YHym")(!1)).push([t.i,"@keyframes spinAround{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}",""])},M1c9:function(t,e){t.exports=function(t,e,n){var r=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(n=n>i?i:n)<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var a=Array(i);++r<i;)a[r]=t[r+e];return a}},MoMe:function(t,e,n){var r=n("FCuZ"),i=n("l9Lx"),a=n("ktak");t.exports=function(t){return r(t,a,i)}},NGEn:function(t,e){var n=Array.isArray;t.exports=n},NVTU:function(t,e,n){"use strict";var r=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"card collapsibleCard",class:{collapsed:!t.expanded}},[t.$slots.header?n("header",{staticClass:"card-header",on:{click:function(e){e.preventDefault(),t.toggle()}}},[n("p",{staticClass:"card-header-title"},[!t.$slots.headerCollapsed||t.expanded?t._t("header"):t._t("headerCollapsed")],2),n("a",{staticClass:"card-header-icon"},[n("span",{staticClass:"icon"},[n("i",{staticClass:"fa",class:{"fa-angle-down":t.expanded,"fa-angle-up":!t.expanded}})])])]):t._e(),n("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}},[n("div",{directives:[{name:"show",rawName:"v-show",value:t.expanded,expression:"expanded"}]},[n("div",{staticClass:"card-content"},[t._t("default")],2)])])],1)};r._withStripped=!0;var i={render:r,staticRenderFns:[]};e.a=i},NkRn:function(t,e,n){var r=n("TQ3y").Symbol;t.exports=r},Nkkh:function(t,e,n){var r=n("tv3T"),i=n("l9Lx");t.exports=function(t,e){return r(t,i(t),e)}},NqZt:function(t,e){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},O1jc:function(t,e,n){var r=n("nw3t"),i=n("22B7");t.exports=function(t,e,n){(void 0===n||i(t[e],n))&&(void 0!==n||e in t)||r(t,e,n)}},POb3:function(t,e,n){var r=n("ICSD")(n("TQ3y"),"Map");t.exports=r},PqYH:function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}},Q2wK:function(t,e,n){var r=n("8AZL"),i=Math.max;t.exports=function(t,e,n){return e=i(void 0===e?t.length-1:e,0),function(){for(var a=arguments,o=-1,s=i(a.length-e,0),c=Array(s);++o<s;)c[o]=a[e+o];o=-1;for(var u=Array(e+1);++o<e;)u[o]=a[o];return u[e]=n(c),r(t,this,u)}}},Q7hp:function(t,e,n){var r=n("uCi2");t.exports=function(t,e,n){var i=null==t?void 0:r(t,e);return void 0===i?n:i}},Qp3N:function(t,e,n){var r=n("NkRn"),i=n("1Yb9"),a=n("NGEn"),o=r?r.isConcatSpreadable:void 0;t.exports=function(t){return a(t)||i(t)||!!(o&&t&&t[o])}},RGrk:function(t,e,n){var r=n("dCZQ"),i=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;return r?void 0!==e[t]:i.call(e,t)}},Rh28:function(t,e){var n=9007199254740991;t.exports=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=n}},S7p9:function(t,e){t.exports=function(t){return function(e){return t(e)}}},"T/bE":function(t,e,n){var r=n("94sX"),i=n("ue/d"),a=n("eVIm"),o=n("RGrk"),s=n("Z2pD");function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=a,c.prototype.has=o,c.prototype.set=s,t.exports=c},T9Hf:function(t,e,n){"use strict";var r=n("77aO"),i=n("NVTU"),a=!1;var o=function(t){a||n("WVEp")},s=n("VU/8")(r.a,i.a,!1,o,null,null);s.options.__file="components\\collapsibleCard.vue",e.a=s.exports},TQ3y:function(t,e,n){var r=n("blYT"),i="object"==typeof self&&self&&self.Object===Object&&self,a=r||i||Function("return this")();t.exports=a},TlPD:function(t,e,n){var r=n("tv3T"),i=n("t8rQ");t.exports=function(t){return r(t,i(t))}},TmV0:function(t,e,n){n("fZOM"),t.exports=n("FeBl").Object.values},U7Aq:function(t,e){t.exports=function(t,e){return t.set(e[0],e[1]),t}},Ubhr:function(t,e,n){var r=n("6MiT"),i=1/0;t.exports=function(t){if("string"==typeof t||r(t))return t;var e=t+"";return"0"==e&&1/t==-i?"-0":e}},UfSK:function(t,e){var n=Object.prototype.hasOwnProperty;t.exports=function(t){var e=t.length,r=t.constructor(e);return e&&"string"==typeof t[0]&&n.call(t,"index")&&(r.index=t.index,r.input=t.input),r}},UnEC:function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},UnLw:function(t,e,n){var r=/^\./,i=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,a=/\\(\\)?/g,o=n("fMqj")(function(t){var e=[];return r.test(t)&&e.push(""),t.replace(i,function(t,n,r,i){e.push(r?i.replace(a,"$1"):n||t)}),e});t.exports=o},VORN:function(t,e,n){var r=n("yCNF"),i=Object.create,a=function(){function t(){}return function(e){if(!r(e))return{};if(i)return i(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();t.exports=a},Vi3P:function(t,e,n){var r=n("bIjD"),i=n("oqL2"),a=n("Cf65"),o=n("Ubhr");t.exports=function(t,e){return e=r(e,t),null==(t=a(t,e))||delete t[o(i(e))]}},W3Iv:function(t,e,n){t.exports={default:n("wEtr"),__esModule:!0}},W529:function(t,e,n){var r=n("f931")(Object.keys,Object);t.exports=r},WFiI:function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}},WHce:function(t,e,n){var r=n("037f"),i=n("Zk5a")(r);t.exports=i},WQFf:function(t,e,n){var r=n("VORN"),i=n("vi0E"),a=n("HT7L");t.exports=function(t){return"function"!=typeof t.constructor||a(t)?{}:r(i(t))}},WVEp:function(t,e,n){var r=n("a3hs");"string"==typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);n("rjj0")("52cedc5e",r,!1)},Wce4:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n("tN9E"),i=n("pfrz"),a=n("VU/8")(r.a,i.a,!1,null,null,null);a.options.__file="pages\\specification\\v3\\machine-message.vue",e.default=a.exports},WxI4:function(t,e){t.exports=function(){this.__data__=[],this.size=0}},WyC4:function(t,e){var n=/\w*$/;t.exports=function(t){var e=new t.constructor(t.source,n.exec(t));return e.lastIndex=t.lastIndex,e}},Xd32:function(t,e,n){n("+tPU"),n("zQR9"),t.exports=n("5PlU")},YeCl:function(t,e,n){var r=n("CW5P"),i=n("A9mX"),a=n("v8Dt"),o=n("agim"),s=n("Dv2r");function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=a,c.prototype.has=o,c.prototype.set=s,t.exports=c},YkxI:function(t,e,n){var r=n("wSKX"),i=n("Q2wK"),a=n("WHce");t.exports=function(t,e){return a(i(t,e,r),t+"")}},YsVG:function(t,e,n){var r=n("z4hc"),i=n("S7p9"),a=n("Dc0G"),o=a&&a.isTypedArray,s=o?i(o):r;t.exports=s},Z2pD:function(t,e,n){var r=n("dCZQ"),i="__lodash_hash_undefined__";t.exports=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=r&&void 0===e?i:e,this}},ZGh9:function(t,e){var n=9007199254740991,r=/^(?:0|[1-9]\d*)$/;t.exports=function(t,e){return!!(e=null==e?n:e)&&("number"==typeof t||r.test(t))&&t>-1&&t%1==0&&t<e}},ZT2e:function(t,e,n){var r=n("o2mx");t.exports=function(t){return null==t?"":r(t)}},Zk5a:function(t,e){var n=800,r=16,i=Date.now;t.exports=function(t){var e=0,a=0;return function(){var o=i(),s=r-(o-a);if(a=o,s>0){if(++e>=n)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}},Zrlr:function(t,e,n){"use strict";e.__esModule=!0,e.default=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}},a3hs:function(t,e,n){(t.exports=n("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}",""])},aCM0:function(t,e,n){var r=n("NkRn"),i=n("uLhX"),a=n("+66z"),o="[object Null]",s="[object Undefined]",c=r?r.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?s:o:c&&c in Object(t)?i(t):a(t)}},agim:function(t,e,n){var r=n("pTUa");t.exports=function(t){return r(this,t).has(t)}},bGc4:function(t,e,n){var r=n("gGqR"),i=n("Rh28");t.exports=function(t){return null!=t&&i(t.length)&&!r(t)}},bIbi:function(t,e,n){var r=n("ICSD")(n("TQ3y"),"WeakMap");t.exports=r},bIjD:function(t,e,n){var r=n("NGEn"),i=n("hIPy"),a=n("UnLw"),o=n("ZT2e");t.exports=function(t,e){return r(t)?t:i(t,e)?[t]:a(o(t))}},bJWQ:function(t,e,n){var r=n("duB3"),i=n("KmWZ"),a=n("NqZt"),o=n("E4Hj"),s=n("G2xm"),c=n("zpVT");function u(t){var e=this.__data__=new r(t);this.size=e.size}u.prototype.clear=i,u.prototype.delete=a,u.prototype.get=o,u.prototype.has=s,u.prototype.set=c,t.exports=u},bO0Y:function(t,e,n){var r=n("ICSD")(n("TQ3y"),"Promise");t.exports=r},"bXX+":function(t,e,n){"use strict";var r=n("jhkR"),i=n("fvMW"),a=n("VU/8")(r.a,i.a,!1,null,null,null);a.options.__file="components\\schemaLink.vue",e.a=a.exports},bklM:function(t,e,n){var r=n("Fkvj"),i=1,a=4;t.exports=function(t){return r(t,i|a)}},blYT:function(t,e,n){(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(e,n("DuR2"))},"c/Tr":function(t,e,n){t.exports={default:n("5zde"),__esModule:!0}},cER1:function(t,e,n){"use strict";var r=n("mvHQ"),i=n.n(r),a=n("fZjL"),o=n.n(a),s=n("Gu7T"),c=n.n(s),u=n("gRE1"),l=n.n(u),f=n("d7EF"),p=n.n(f),d=n("W3Iv"),v=n.n(d),h=n("T9Hf"),m=n("rVUV"),b=(n.n(m),n("Q7hp")),y=n.n(b),_=n("HN2V"),g=n.n(_),x=n("LJry"),j=n.n(x),C=n("lOo0"),O=n("bXX+"),w=n("mQxp"),k=n("4yG7"),T=n.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"}};n("+99L")("./"+this.type+"_schema.json").then(function(e){return console.time("parsing Schema"),t.masterSchema=new C.a("$",null,e),v()(t.examples).forEach(function(e){var n=p()(e,2),r=n[0],i=n[1];y()(t.masterSchema,r)&&T()(t.masterSchema,r+".examples",i)}),console.timeEnd("parsing Schema"),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 n=this;t instanceof C.a?(e(t),v()(t).filter(function(t){var e=p()(t,2),n=e[0];e[1];return"$parent"!==n}).forEach(function(t){var r=p()(t,2),i=(r[0],r[1]);return n.traverse(i,e)})):t instanceof Array?t.forEach(function(t){return n.traverse(t,e)}):t instanceof Object&&l()(t).forEach(function(t){return n.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 C.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===o()(t).filter(function(t){return"$"!==t[0]}).length?[t,!0]:null};return this.traverse(t,function(t){!function t(n){if(n){var r=p()(n,2),i=r[0],a=r[1],o=i.$parent;o&&T()(o.schema,o.path,a),i.$parent=null,t(e(o.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:O.a}}},d4US:function(t,e,n){var r=n("ICSD")(n("TQ3y"),"DataView");t.exports=r},d7EF:function(t,e,n){"use strict";e.__esModule=!0;var r=a(n("us/S")),i=a(n("BO1k"));function a(t){return t&&t.__esModule?t:{default:t}}e.default=function(){return function(t,e){if(Array.isArray(t))return t;if((0,r.default)(Object(t)))return function(t,e){var n=[],r=!0,a=!1,o=void 0;try{for(var s,c=(0,i.default)(t);!(r=(s=c.next()).done)&&(n.push(s.value),!e||n.length!==e);r=!0);}catch(t){a=!0,o=t}finally{try{!r&&c.return&&c.return()}finally{if(a)throw o}}return n}(t,e);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()},dCZQ:function(t,e,n){var r=n("ICSD")(Object,"create");t.exports=r},dFpP:function(t,e,n){var r=n("imBK"),i=Array.prototype.splice;t.exports=function(t){var e=this.__data__,n=r(e,t);return!(n<0||(n==e.length-1?e.pop():i.call(e,n,1),--this.size,0))}},dYhQ:function(t,e,n){var r=n("9UkZ");t.exports=function(t){return r(t)?void 0:t}},deUO:function(t,e,n){var r=n("imBK");t.exports=function(t,e){var n=this.__data__,i=r(n,t);return i<0?(++this.size,n.push([t,e])):n[i][1]=e,this}},duB3:function(t,e,n){var r=n("WxI4"),i=n("dFpP"),a=n("JBvZ"),o=n("2Hvv"),s=n("deUO");function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=a,c.prototype.has=o,c.prototype.set=s,t.exports=c},eFps:function(t,e,n){var r,i=n("+gg+"),a=(r=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";t.exports=function(t){return!!a&&a in t}},eVIm:function(t,e,n){var r=n("dCZQ"),i="__lodash_hash_undefined__",a=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;if(r){var n=e[t];return n===i?void 0:n}return a.call(e,t)?e[t]:void 0}},f931:function(t,e){t.exports=function(t,e){return function(n){return t(e(n))}}},fBQ2:function(t,e,n){"use strict";var r=n("evD5"),i=n("X8DO");t.exports=function(t,e,n){e in t?r.f(t,e,i(0,n)):t[e]=n}},fMqj:function(t,e,n){var r=n("zGZ6"),i=500;t.exports=function(t){var e=r(t,function(t){return n.size===i&&n.clear(),t}),n=e.cache;return e}},fZOM:function(t,e,n){var r=n("kM2E"),i=n("mbce")(!1);r(r.S,"Object",{values:function(t){return i(t)}})},fvMW:function(t,e,n){"use strict";var r=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[t._t("default"),!0===t.link?[t._v("\n    yes \n  ")]:!1===t.link?[t._v("\n    no \n  ")]:t.isSchema(t.link)?[n("nuxt-link",{attrs:{to:"#p-"+t.link.$id}},[n("span",{domProps:{innerHTML:t._s(t.link.getPath())}})])]:t.link instanceof Array?n("ul",t._l(t.link,function(e){return n("li",{key:e.$id},[n("nuxt-link",{attrs:{to:"#p-"+e.$id}},[n("span",{domProps:{innerHTML:t._s(e.getPath())}})])],1)})):t.link instanceof Object?n("ul",t._l(t.link,function(e,r){return n("li",[n("nuxt-link",{attrs:{to:"#p-"+e.$id}},[t._v("\n        "+t._s(r)+"\n      ")])],1)})):t._e()],2)};r._withStripped=!0;var i={render:r,staticRenderFns:[]};e.a=i},gGqR:function(t,e,n){var r=n("aCM0"),i=n("yCNF"),a="[object AsyncFunction]",o="[object Function]",s="[object GeneratorFunction]",c="[object Proxy]";t.exports=function(t){if(!i(t))return!1;var e=r(t);return e==o||e==s||e==a||e==c}},gHOb:function(t,e,n){var r=n("d4US"),i=n("POb3"),a=n("bO0Y"),o=n("5N57"),s=n("bIbi"),c=n("aCM0"),u=n("Ai/T"),l="[object Promise]",f="[object WeakMap]",p="[object DataView]",d=u(r),v=u(i),h=u(a),m=u(o),b=u(s),y=c;(r&&y(new r(new ArrayBuffer(1)))!=p||i&&"[object Map]"!=y(new i)||a&&y(a.resolve())!=l||o&&"[object Set]"!=y(new o)||s&&y(new s)!=f)&&(y=function(t){var e=c(t),n="[object Object]"==e?t.constructor:void 0,r=n?u(n):"";if(r)switch(r){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,n){t.exports={default:n("TmV0"),__esModule:!0}},gSvA:function(t,e,n){var r=n("kM2E"),i=n("mbce")(!0);r(r.S,"Object",{entries:function(t){return i(t)}})},ggOT:function(t,e,n){(function(t){var r=n("TQ3y"),i=n("gwcX"),a="object"==typeof e&&e&&!e.nodeType&&e,o=a&&"object"==typeof t&&t&&!t.nodeType&&t,s=o&&o.exports===a?r.Buffer:void 0,c=(s?s.isBuffer:void 0)||i;t.exports=c}).call(e,n("3IRH")(t))},gwcX:function(t,e){t.exports=function(){return!1}},hIPy:function(t,e,n){var r=n("NGEn"),i=n("6MiT"),a=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,o=/^\w*$/;t.exports=function(t,e){if(r(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!i(t))||o.test(t)||!a.test(t)||null!=e&&t in Object(e)}},hrPF:function(t,e){t.exports=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n<r;)e[n]=t[n];return e}},hvFG:function(t,e,n){"use strict";var r=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,n){return e("schemaToc",{key:n,attrs:{schema:t}})}),this._l(this.schema.patternProperties,function(t,n){return e("schemaToc",{key:n,attrs:{schema:t}})}),this.schema.items?[this.schema.items instanceof Array?this._l(this.schema.items,function(t,n){return e("schemaToc",{key:n,attrs:{schema:t}})}):e("schemaToc",{attrs:{schema:this.schema.items}})]:this._e()],2):this._e()],1)};r._withStripped=!0;var i={render:r,staticRenderFns:[]};e.a=i},i4ON:function(t,e,n){var r=n("nw3t"),i=n("22B7"),a=Object.prototype.hasOwnProperty;t.exports=function(t,e,n){var o=t[e];a.call(t,e)&&i(o,n)&&(void 0!==n||e in t)||r(t,e,n)}},imBK:function(t,e,n){var r=n("22B7");t.exports=function(t,e){for(var n=t.length;n--;)if(r(t[n][0],e))return n;return-1}},jD7S:function(t,e,n){var r=n("tv3T"),i=n("ktak");t.exports=function(t,e){return t&&r(e,i(e),t)}},jMi8:function(t,e,n){var r=n("O1jc"),i=n("mKB/"),a=n("Ilb/"),o=n("hrPF"),s=n("WQFf"),c=n("1Yb9"),u=n("NGEn"),l=n("Fp5l"),f=n("ggOT"),p=n("gGqR"),d=n("yCNF"),v=n("9UkZ"),h=n("YsVG"),m=n("TlPD");t.exports=function(t,e,n,b,y,_,g){var x=t[n],j=e[n],C=g.get(j);if(C)r(t,n,C);else{var O=_?_(x,j,n+"",t,e,g):void 0,w=void 0===O;if(w){var k=u(j),T=!k&&f(j),P=!k&&!T&&h(j);O=j,k||T||P?u(x)?O=x:l(x)?O=o(x):T?(w=!1,O=i(j,!0)):P?(w=!1,O=a(j,!0)):O=[]:v(j)||c(j)?(O=x,c(x)?O=m(x):(!d(x)||b&&p(x))&&(O=s(j))):w=!1}w&&(g.set(j,O),y(O,j,b,_,g),g.delete(j)),r(t,n,O)}}},jhkR:function(t,e,n){"use strict";var r=n("lOo0");e.a={props:{link:{required:!0}},methods:{isSchema:function(t){return t instanceof r.a}}}},ktak:function(t,e,n){var r=n("7e4z"),i=n("/GnY"),a=n("bGc4");t.exports=function(t){return a(t)?r(t):i(t)}},l9Lx:function(t,e,n){var r=n("lb6C"),i=n("C0hh"),a=Object.prototype.propertyIsEnumerable,o=Object.getOwnPropertySymbols,s=o?function(t){return null==t?[]:(t=Object(t),r(o(t),function(e){return a.call(t,e)}))}:i;t.exports=s},lOo0:function(t,e,n){"use strict";var r=n("woOf"),i=n.n(r),a=n("d7EF"),o=n.n(a),s=n("W3Iv"),c=n.n(s),u=n("Zrlr"),l=n.n(u),f=n("wxAW"),p=n.n(f),d=n("bklM"),v=n.n(d),h=n("rVUV"),m=n.n(h),b=n("Dc7M"),y=n.n(b),_=function(){function t(e,n,r){l()(this,t),this.$id=t.idx++,this.$step=e,this.$parent=n,r&&this.parseFrom(r)}return p()(t,[{key:"toJSON",value:function(){var e=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this;return m()(n,function(n,r,i,a){if(n instanceof t)return c()(n).filter(function(t){var e=o()(t,2),n=e[0];e[1];return["$id","$step","$parent"].indexOf(n)<0}).reduce(function(t,n){var r=o()(n,2),i=r[0],a=r[1];return t[i]=e.toJSON(a),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 n=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(r,i){return new t("["+i+"]",{schema:n,path:"items["+i+"]"}).parseFrom(e.items[i])}):this.items=new t("[*]",{schema:this,path:"items"}).parseFrom(e.items)),["properties","patternProperties"].filter(function(t){return e.hasOwnProperty(t)}).forEach(function(r){return c()(e[r]).forEach(function(e,i){var a=o()(e,2),s=a[0],c=a[1];n[r]=n[r]||{},n[r][s]=new t(""+("patternProperties"===r?"&lt;field&gt;":s),{schema:n,path:r+'["'+s+'"]'}).parseFrom(c)})}),["additionalItems","additionalProperties","contains","propertyNames","not"].filter(function(t){return e.hasOwnProperty(t)}).forEach(function(r){n[r]=new t("+",{schema:n,path:r}).parseFrom(e[r])}),["allOf","anyOf","oneOf"].filter(function(t){return e.hasOwnProperty(t)}).forEach(function(r){return e[r].forEach(function(e,i){n[r]=n[r]||[],n[r].push(new t("("+i+")"+("anyOf"===r?"?":"+"),{schema:n,path:r+"["+i+"]"}).parseFrom(e))})}),this}}]),t}();_.idx=0,e.a=_},lb6C:function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length,i=0,a=[];++n<r;){var o=t[n];e(o,n,t)&&(a[i++]=o)}return a}},"mKB/":function(t,e,n){(function(t){var r=n("TQ3y"),i="object"==typeof e&&e&&!e.nodeType&&e,a=i&&"object"==typeof t&&t&&!t.nodeType&&t,o=a&&a.exports===i?r.Buffer:void 0,s=o?o.allocUnsafe:void 0;t.exports=function(t,e){if(e)return t.slice();var n=t.length,r=s?s(n):new t.constructor(n);return t.copy(r),r}}).call(e,n("3IRH")(t))},mQxp:function(t,e,n){"use strict";var r=n("Gs0Q"),i=n("hvFG"),a=!1;var o=function(t){a||n("AxiT")},s=n("VU/8")(r.a,i.a,!1,o,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,n){var r=n("lktj"),i=n("TcQ7"),a=n("NpIQ").f;t.exports=function(t){return function(e){for(var n,o=i(e),s=r(o),c=s.length,u=0,l=[];c>u;)a.call(o,n=s[u++])&&l.push(t?[n,o[n]]:o[n]);return l}}},mgnk:function(t,e,n){var r=n("aCM0"),i=n("UnEC"),a="[object Arguments]";t.exports=function(t){return i(t)&&r(t)==a}},nWuj:function(t,e){t.exports=function(t,e){return t.add(e),t}},nw3t:function(t,e,n){var r=n("p0bc");t.exports=function(t,e,n){"__proto__"==e&&r?r(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}},o2mx:function(t,e,n){var r=n("NkRn"),i=n("Hxdr"),a=n("NGEn"),o=n("6MiT"),s=1/0,c=r?r.prototype:void 0,u=c?c.toString:void 0;t.exports=function t(e){if("string"==typeof e)return e;if(a(e))return i(e,t)+"";if(o(e))return u?u.call(e):"";var n=e+"";return"0"==n&&1/e==-s?"-0":n}},octw:function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}},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,n){var r=n("ICSD"),i=function(){try{var t=r(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=i},pTUa:function(t,e,n){var r=n("/I3N");t.exports=function(t,e){var n=t.__data__;return r(e)?n["string"==typeof e?"string":"hash"]:n.map}},pfrz:function(t,e,n){"use strict";var r=function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"machine-message content"},[this._m(0),e("p",[this._v("The main purpose of the machine message format is to allow devices and integrators to send messages containing an interpretation of measurement data or status.")]),e("img",{staticClass:"is-centered",attrs:{src:"images/specification/v3/messagePayload.svg",alt:"Class diagram of the message payload",title:"Class diagram of the message payload"}}),e("schemaDetail",{attrs:{type:"v3/message",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        Multiple message example\n      ")]),e("prism",{attrs:{language:"json"}},[this._v(this._s(this._f("stringify")(this.$static.multipleMachineMessages)))])],2)],1)],1)};r._withStripped=!0;var i={render:r,staticRenderFns:[function(){var t=this.$createElement,e=this._self._c||t;return e("h1",[e("a",{attrs:{id:"Message-Payload",title:"Machine Message Payload"}}),this._v("\n    Machine Message Payload\n  ")])}]};e.a=i},py9u:function(t,e,n){var r=n("tv3T"),i=n("t8rQ");t.exports=function(t,e){return t&&r(e,i(e),t)}},qwTf:function(t,e,n){var r=n("TQ3y").Uint8Array;t.exports=r},qyJz:function(t,e,n){"use strict";var r=n("+ZMJ"),i=n("kM2E"),a=n("sB3e"),o=n("msXi"),s=n("Mhyx"),c=n("QRG4"),u=n("fBQ2"),l=n("3fs2");i(i.S+i.F*!n("dY0y")(function(t){Array.from(t)}),"Array",{from:function(t){var e,n,i,f,p=a(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=r(h,v>2?arguments[2]:void 0,2)),void 0==y||d==Array&&s(y))for(n=new d(e=c(p.length));e>b;b++)u(n,b,m?h(p[b],b):p[b]);else for(f=y.call(p),n=new d;!(i=f.next()).done;b++)u(n,b,m?o(f,h,[i.value,b],!0):i.value);return n.length=b,n}})},rCVp:function(t,e,n){var r=n("1C79");t.exports=function(t){return null!=t&&t.length?r(t,1):[]}},rVUV:function(t,e,n){var r=n("Fkvj"),i=1,a=4;t.exports=function(t,e){return r(t,i|a,e="function"==typeof e?e:void 0)}},rpnb:function(t,e,n){var r=n("tHks")();t.exports=r},s8mu:function(t,e,n){"use strict";var r=n("cER1"),i=n("D9sP"),a=!1;var o=function(t){a||n("A51D")},s=n("VU/8")(r.a,i.a,!1,o,null,null);s.options.__file="components\\schemaDetail.vue",e.a=s.exports},t8rQ:function(t,e,n){var r=n("7e4z"),i=n("G0Wc"),a=n("bGc4");t.exports=function(t){return a(t)?r(t,!0):i(t)}},tHks:function(t,e){t.exports=function(t){return function(e,n,r){for(var i=-1,a=Object(e),o=r(e),s=o.length;s--;){var c=o[t?s:++i];if(!1===n(a[c],c,a))break}return e}}},tN9E:function(t,e,n){"use strict";var r=n("mvHQ"),i=n.n(r),a=n("d7EF"),o=n.n(a),s=n("Dd8w"),c=n.n(s),u=n("W3Iv"),l=n.n(u),f=n("LJry"),p=n.n(f),d=n("T9Hf"),v=n("Q7hp"),h=n.n(v),m=n("s8mu");e.a={head:function(){return{title:"Specification for machine messages"}},created:function(){var t=this,e=new Date,n="a4927dad-58d4-4580-b460-79cefd56775b";this.$static={message:{"content-spec":"urn:spec://eclipse.org/unide/machine-message#v3",device:{deviceID:n},messages:[{ts:e.toISOString(),code:"190ABT"}]},multipleMachineMessages:{"content-spec":"urn:spec://eclipse.org/unide/machine-message#v3",device:{deviceID:n,operationalStatus:"normal",metaData:{swVersion:"2.0.3.13",swBuildID:"41535"}},messages:[{origin:"sensor-id-992.2393.22",ts:e.toISOString(),type:"DEVICE",severity:"HIGH",code:"190ABT",title:"control board damaged",description:"Electronic control board or its electrical connections are damaged",hint:"Check the control board",metaData:{firmware:"20130304_22.020"}},{ts:new Date(e.valueOf()+100).toISOString(),type:"TECHNICAL_INFO",severity:"HIGH",code:"33-02",title:"Disk size limit reached",description:"Disk size has reached limit. Unable to write log files."}]}},this.$static.examples=l()(c()({},["content-spec","device","device.deviceID","device.metaData","device.operationalStatus","messages","messages[0].ts","messages[0].origin","messages[0].type","messages[0].severity","messages[0].code","messages[0].title","messages[0].description","messages[0].hint","messages[0].metaData"].reduce(function(t,e){return t[e.replace(/(^|\.)/g,"$1properties.").replace(/\[[^]]*]/g,".items")]=e,t},{}))).reduce(function(e,n){var r=o()(n,2),i=r[0],a=r[1],s=h()(t.$static.message,a)||h()(t.$static.multipleMachineMessages,a);return s&&(e[i]=[s]),e},{})},filters:{stringify:function(t){return i()(t," ",2)}},components:{card:d.a,prism:p.a,schemaDetail:m.a}}},tv3T:function(t,e,n){var r=n("i4ON"),i=n("nw3t");t.exports=function(t,e,n,a){var o=!n;n||(n={});for(var s=-1,c=e.length;++s<c;){var u=e[s],l=a?a(n[u],t[u],u,n,t):void 0;void 0===l&&(l=t[u]),o?i(n,u,l):r(n,u,l)}return n}},uCi2:function(t,e,n){var r=n("bIjD"),i=n("Ubhr");t.exports=function(t,e){for(var n=0,a=(e=r(e,t)).length;null!=t&&n<a;)t=t[i(e[n++])];return n&&n==a?t:void 0}},uIr7:function(t,e){t.exports=function(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}},uLhX:function(t,e,n){var r=n("NkRn"),i=Object.prototype,a=i.hasOwnProperty,o=i.toString,s=r?r.toStringTag:void 0;t.exports=function(t){var e=a.call(t,s),n=t[s];try{t[s]=void 0;var r=!0}catch(t){}var i=o.call(t);return r&&(e?t[s]=n: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 n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}},"us/S":function(t,e,n){t.exports={default:n("Xd32"),__esModule:!0}},v8Dt:function(t,e,n){var r=n("pTUa");t.exports=function(t){return r(this,t).get(t)}},vi0E:function(t,e,n){var r=n("f931")(Object.getPrototypeOf,Object);t.exports=r},wEtr:function(t,e,n){n("gSvA"),t.exports=n("FeBl").Object.entries},wSKX:function(t,e){t.exports=function(t){return t}},wxAW:function(t,e,n){"use strict";e.__esModule=!0;var r,i=n("C4MV"),a=(r=i)&&r.__esModule?r:{default:r};e.default=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),(0,a.default)(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}()},xond:function(t,e,n){var r=n("FCuZ"),i=n("09Qt"),a=n("t8rQ");t.exports=function(t){return r(t,a,i)}},yCNF:function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},z4hc:function(t,e,n){var r=n("aCM0"),i=n("Rh28"),a=n("UnEC"),o={};o["[object Float32Array]"]=o["[object Float64Array]"]=o["[object Int8Array]"]=o["[object Int16Array]"]=o["[object Int32Array]"]=o["[object Uint8Array]"]=o["[object Uint8ClampedArray]"]=o["[object Uint16Array]"]=o["[object Uint32Array]"]=!0,o["[object Arguments]"]=o["[object Array]"]=o["[object ArrayBuffer]"]=o["[object Boolean]"]=o["[object DataView]"]=o["[object Date]"]=o["[object Error]"]=o["[object Function]"]=o["[object Map]"]=o["[object Number]"]=o["[object Object]"]=o["[object RegExp]"]=o["[object Set]"]=o["[object String]"]=o["[object WeakMap]"]=!1,t.exports=function(t){return a(t)&&i(t.length)&&!!o[r(t)]}},zBOP:function(t,e,n){var r=n("22B7"),i=n("bGc4"),a=n("ZGh9"),o=n("yCNF");t.exports=function(t,e,n){if(!o(n))return!1;var s=typeof e;return!!("number"==s?i(n)&&a(e,n.length):"string"==s&&e in n)&&r(n[e],t)}},zGZ6:function(t,e,n){var r=n("YeCl"),i="Expected a function";function a(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError(i);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],a=n.cache;if(a.has(i))return a.get(i);var o=t.apply(this,r);return n.cache=a.set(i,o)||a,o};return n.cache=new(a.Cache||r),n}a.Cache=r,t.exports=a},zpVT:function(t,e,n){var r=n("duB3"),i=n("POb3"),a=n("YeCl"),o=200;t.exports=function(t,e){var n=this.__data__;if(n instanceof r){var s=n.__data__;if(!i||s.length<o-1)return s.push([t,e]),this.size=++n.size,this;n=this.__data__=new a(s)}return n.set(t,e),this.size=n.size,this}}});