(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-ce1e7860","chunk-6a296bb7"],{"1e36":function(t,e,r){"use strict";r.d(e,"d",(function(){return a})),r.d(e,"e",(function(){return n})),r.d(e,"c",(function(){return i})),r.d(e,"a",(function(){return c})),r.d(e,"f",(function(){return s})),r.d(e,"b",(function(){return l}));var o=r("b775");function a(t){return Object(o["a"])({url:"/iot/category/list",method:"get",params:t})}function n(){return Object(o["a"])({url:"/iot/category/shortlist",method:"get"})}function i(t){return Object(o["a"])({url:"/iot/category/"+t,method:"get"})}function c(t){return Object(o["a"])({url:"/iot/category",method:"post",data:t})}function s(t){return Object(o["a"])({url:"/iot/category",method:"put",data:t})}function l(t){return Object(o["a"])({url:"/iot/category/"+t,method:"delete"})}},"24c5":function(t,e,r){"use strict";r.r(e);var o=r("c4dc"),a=r("d17d");for(var n in a)["default"].indexOf(n)<0&&function(t){r.d(e,t,(function(){return a[t]}))}(n);var i=r("2877"),c=Object(i["a"])(a["default"],o["a"],o["b"],!1,null,"7c982f02",null);e["default"]=c.exports},"3c10":function(t,e,r){},"4efc":function(t,e,r){t.exports=r.p+"static/img/gateway.5a51e30f.png"},"52bb":function(t,e,r){t.exports=r.p+"static/img/product.66c3c4d5.png"},7252:function(t,e){},"9b9c":function(t,e,r){"use strict";r.d(e,"f",(function(){return a})),r.d(e,"e",(function(){return n})),r.d(e,"a",(function(){return i})),r.d(e,"g",(function(){return c})),r.d(e,"d",(function(){return s})),r.d(e,"b",(function(){return l})),r.d(e,"c",(function(){return u}));var o=r("b775");function a(t){return Object(o["a"])({url:"/iot/product/list",method:"get",params:t})}function n(t){return Object(o["a"])({url:"/iot/product/"+t,method:"get"})}function i(t){return Object(o["a"])({url:"/iot/product",method:"post",data:t})}function c(t){return Object(o["a"])({url:"/iot/product",method:"put",data:t})}function s(t){return Object(o["a"])({url:"/iot/product/deviceCount/"+t,method:"get"})}function l(t){return Object(o["a"])({url:"/iot/product/status/",method:"put",data:t})}function u(t){return Object(o["a"])({url:"/iot/product/"+t,method:"delete"})}},b213:function(t,e,r){"use strict";r.d(e,"d",(function(){return a})),r.d(e,"c",(function(){return n})),r.d(e,"a",(function(){return i})),r.d(e,"e",(function(){return c})),r.d(e,"b",(function(){return s}));var o=r("b775");function a(t){return Object(o["a"])({url:"/iot/protocol/list",method:"get",params:t})}function n(t){return Object(o["a"])({url:"/iot/protocol/"+t,method:"get"})}function i(t){return Object(o["a"])({url:"/iot/protocol",method:"post",data:t})}function c(t){return Object(o["a"])({url:"/iot/protocol",method:"put",data:t})}function s(t){return Object(o["a"])({url:"/iot/protocol/"+t,method:"delete"})}},bbfb:function(t,e,r){"use strict";r.r(e);var o=function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("div",{staticStyle:{"padding-left":"20px"}},[r("el-row",{attrs:{gutter:10}},[r("el-col",{attrs:{span:14}},[r("el-row",{staticClass:"mb8",attrs:{gutter:10}},[r("el-col",{attrs:{span:1.5}},[r("el-button",{attrs:{type:"warning",plain:"",icon:"el-icon-refresh",size:"mini"},on:{click:t.getList}},[t._v("刷新")])],1),r("el-tag",{staticStyle:{"margin-left":"15px"},attrs:{type:"danger"}},[t._v("该功能暂不可用,后面版本发布")])],1),r("el-table",{directives:[{name:"loading",rawName:"v-loading",value:t.loading,expression:"loading"}],staticStyle:{"margin-bottom":"60px","margin-top":"20px"},attrs:{data:t.modelList,border:"",size:"small"}},[r("el-table-column",{attrs:{label:"名称",align:"center",prop:"modelName"}}),r("el-table-column",{attrs:{label:"标识符",align:"center",prop:"identifier"}}),r("el-table-column",{attrs:{label:"物模型类别",align:"center",prop:"type"},scopedSlots:t._u([{key:"default",fn:function(e){return[r("dict-tag",{attrs:{options:t.dict.type.iot_things_type,value:e.row.type}})]}}])}),r("el-table-column",{attrs:{label:"数据类型",align:"center",prop:"datatype"},scopedSlots:t._u([{key:"default",fn:function(e){return[r("dict-tag",{attrs:{options:t.dict.type.iot_data_type,value:e.row.datatype}})]}}])}),r("el-table-column",{attrs:{label:"部件",align:"center",prop:"part"},scopedSlots:t._u([{key:"default",fn:function(e){return[t._v(" "+t._s(e.row.part)+" 系统定义的部件 ")]}}])})],1),r("el-divider",[t._v("高级功能")]),r("el-form",{ref:"form",attrs:{model:t.form,"label-width":"100px"}},[r("el-form-item",{attrs:{label:"自定义页面",prop:"page"}},[r("el-input",{attrs:{placeholder:"请输入自定义页面"},model:{value:t.form.page,callback:function(e){t.$set(t.form,"page",e)},expression:"form.page"}})],1)],1)],1),r("el-col",{attrs:{span:8,offset:2}},[r("div",{staticClass:"phone"},[r("div",{staticClass:"phone-container"})]),r("div",{staticStyle:{"text-align":"center","margin-top":"15px",width:"370px"}},[t._v("界面展示")])])],1)],1)},a=[],n=r("01ca"),i={name:"device-log",dicts:["iot_things_type","iot_data_type","iot_yes_no"],props:{product:{type:Object,default:null}},data:function(){return{loading:!1,modelList:[],title:"",queryParams:{productId:0,type:4},form:{},productInfo:{}}},watch:{product:function(t,e){this.productInfo=t,this.productInfo&&0!=this.productInfo.productId&&(this.queryParams.productId=this.productInfo.productId,this.getList())}},created:function(){},methods:{getList:function(){var t=this;this.loading=!0,Object(n["f"])(this.queryParams).then((function(e){t.modelList=e.rows,t.total=e.total,t.loading=!1}))}}},c=i,s=(r("ca7c"),r("2877")),l=Object(s["a"])(c,o,a,!1,null,"acd2e2f8",null);e["default"]=l.exports},c4dc:function(t,e,r){"use strict";r.d(e,"a",(function(){return o})),r.d(e,"b",(function(){return a}));var o=function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("div",{staticStyle:{"padding-left":"20px"}},[r("el-row",{attrs:{gutter:10}},[r("el-col",{attrs:{span:14}},[r("el-row",{staticClass:"mb8",attrs:{gutter:10}},[r("el-col",{attrs:{span:1.5}},[r("el-tag",{staticStyle:{"margin-left":"15px"},attrs:{type:"danger"}},[t._v("开源版本不支持该功能,请前往购买商业版本")])],1)],1)],1)],1)],1)},a=[]},c4f2:function(t,e,r){"use strict";r("cbcc")},c59e:function(t,e,r){t.exports=r.p+"static/img/video.fb1e1b71.png"},ca7c:function(t,e,r){"use strict";r("3c10")},cbcc:function(t,e,r){},d17d:function(t,e,r){"use strict";r.r(e);var o=r("7252"),a=r.n(o);for(var n in o)["default"].indexOf(n)<0&&function(t){r.d(e,t,(function(){return o[t]}))}(n);e["default"]=a.a},ffab:function(t,e,r){"use strict";r.r(e);var o=function(){var t=this,e=t.$createElement,o=t._self._c||e;return o("el-card",{staticStyle:{margin:"6px","padding-bottom":"100px"}},[o("el-tabs",{staticStyle:{padding:"10px","min-height":"400px"},attrs:{"tab-position":"left"},on:{"tab-click":t.tabChange},model:{value:t.activeName,callback:function(e){t.activeName=e},expression:"activeName"}},[o("el-tab-pane",{attrs:{name:"basic"}},[o("span",{attrs:{slot:"label"},slot:"label"},[o("span",{staticStyle:{color:"red"}},[t._v("* ")]),t._v("基本信息")]),o("el-form",{ref:"form",attrs:{model:t.form,rules:t.rules,"label-width":"100px"}},[o("el-row",{attrs:{gutter:100}},[o("el-col",{attrs:{xs:24,sm:24,md:24,lg:12,xl:8}},[o("el-form-item",{attrs:{label:"产品名称",prop:"productName"}},[o("el-input",{attrs:{placeholder:"请输入产品名称",readonly:2==t.form.status},model:{value:t.form.productName,callback:function(e){t.$set(t.form,"productName",e)},expression:"form.productName"}})],1),o("el-form-item",{attrs:{label:"产品分类",prop:"categoryId"}},[o("el-select",{staticStyle:{width:"100%"},attrs:{placeholder:"请选择分类",disabled:2==t.form.status},on:{change:t.selectCategory},model:{value:t.form.categoryId,callback:function(e){t.$set(t.form,"categoryId",e)},expression:"form.categoryId"}},t._l(t.categoryShortList,(function(t){return o("el-option",{key:t.id,attrs:{label:t.name,value:t.id}})})),1)],1),o("el-form-item",{attrs:{label:"设备类型",prop:"deviceType"}},[o("el-select",{staticStyle:{width:"100%"},attrs:{placeholder:"请选择设备类型",disabled:2==t.form.status},model:{value:t.form.deviceType,callback:function(e){t.$set(t.form,"deviceType",e)},expression:"form.deviceType"}},t._l(t.dict.type.iot_device_type,(function(t){return o("el-option",{key:t.value,attrs:{label:t.label,value:parseInt(t.value)}})})),1)],1),o("el-form-item",{attrs:{label:"传输协议",prop:"transport"}},[o("el-select",{staticStyle:{width:"100%"},attrs:{placeholder:"请选择传输协议",disabled:2==t.form.status},model:{value:t.form.transport,callback:function(e){t.$set(t.form,"transport",e)},expression:"form.transport"}},t._l(t.dict.type.iot_transport_type,(function(t){return o("el-option",{key:t.value,attrs:{label:t.label,value:t.value}})})),1)],1),3!==t.form.deviceType?o("el-form-item",{attrs:{label:"编码协议",prop:"protocolCode"}},[o("el-select",{staticStyle:{width:"100%"},attrs:{placeholder:"请选择编码协议",disabled:2==t.form.status},on:{change:t.changeProductCode},model:{value:t.form.protocolCode,callback:function(e){t.$set(t.form,"protocolCode",e)},expression:"form.protocolCode"}},t._l(t.protocolList,(function(t){return o("el-option",{key:t.protocolCode,attrs:{label:t.protocolName,value:t.protocolCode}})})),1)],1):t._e(),o("el-form-item",{attrs:{label:"联网方式",prop:"networkMethod"}},[o("el-select",{staticStyle:{width:"100%"},attrs:{placeholder:"请选择联网方式",disabled:2==t.form.status},model:{value:t.form.networkMethod,callback:function(e){t.$set(t.form,"networkMethod",e)},expression:"form.networkMethod"}},t._l(t.dict.type.iot_network_method,(function(t){return o("el-option",{key:t.value,attrs:{label:t.label,value:parseInt(t.value)}})})),1)],1),o("el-form-item",{attrs:{label:"备注信息",prop:"remark"}},[o("el-input",{attrs:{type:"textarea",placeholder:"请输入内容",rows:"3",readonly:2==t.form.status},model:{value:t.form.remark,callback:function(e){t.$set(t.form,"remark",e)},expression:"form.remark"}})],1)],1),o("el-col",{attrs:{xs:24,sm:24,md:24,lg:12,xl:8}},[o("el-form-item",{attrs:{label:"启用授权",prop:"networkMethod"}},[o("el-switch",{attrs:{"active-value":1,"inactive-value":0,disabled:2==t.form.status||3==t.form.deviceType},on:{change:function(e){return t.changeIsAuthorize(t.form.isAuthorize)}},model:{value:t.form.isAuthorize,callback:function(e){t.$set(t.form,"isAuthorize",e)},expression:"form.isAuthorize"}})],1),o("el-form-item",{attrs:{label:"认证方式",prop:"vertificateMethod"}},[o("el-select",{staticStyle:{width:"100%"},attrs:{placeholder:"请选择认证方式",disabled:2==t.form.status||3==t.form.deviceType},model:{value:t.form.vertificateMethod,callback:function(e){t.$set(t.form,"vertificateMethod",e)},expression:"form.vertificateMethod"}},t._l(t.dict.type.iot_vertificate_method,(function(t){return o("el-option",{key:t.value,attrs:{label:t.label,value:parseInt(t.value)}})})),1)],1),o("el-form-item",{attrs:{label:"产品编号",prop:"productId"}},[o("el-input",{attrs:{placeholder:"自动生成",disabled:!t.form.mqttAccount||3==t.form.deviceType,readonly:""},model:{value:t.form.productId,callback:function(e){t.$set(t.form,"productId",e)},expression:"form.productId"}})],1),o("el-form-item",{attrs:{label:"Mqtt账号",prop:"mqttAccount"}},[o("el-input",{attrs:{placeholder:"不填自动生成",disabled:3==t.form.deviceType,readonly:"password"==t.accountInputType,type:t.accountInputType},model:{value:t.form.mqttAccount,callback:function(e){t.$set(t.form,"mqttAccount",e)},expression:"form.mqttAccount"}},[o("el-button",{staticStyle:{"font-size":"18px"},attrs:{slot:"append",icon:"el-icon-view"},on:{click:function(e){return t.changeInputType("account")}},slot:"append"})],1)],1),o("el-form-item",{attrs:{label:"Mqtt密码",prop:"mqttPassword"}},[o("el-input",{attrs:{placeholder:"不填则自动生成",disabled:3==t.form.deviceType,readonly:"password"==t.passwordInputType,type:t.passwordInputType},model:{value:t.form.mqttPassword,callback:function(e){t.$set(t.form,"mqttPassword",e)},expression:"form.mqttPassword"}},[o("el-button",{staticStyle:{"font-size":"18px"},attrs:{slot:"append",icon:"el-icon-view"},on:{click:function(e){return t.changeInputType("password")}},slot:"append"})],1)],1),o("el-form-item",{attrs:{label:"产品秘钥",prop:"mqttSecret"}},[o("el-input",{attrs:{placeholder:"自动生成",disabled:!t.form.mqttAccount||3==t.form.deviceType,readonly:"",type:t.keyInputType},model:{value:t.form.mqttSecret,callback:function(e){t.$set(t.form,"mqttSecret",e)},expression:"form.mqttSecret"}},[o("el-button",{staticStyle:{"font-size":"18px"},attrs:{slot:"append",icon:"el-icon-view"},on:{click:function(e){return t.changeInputType("key")}},slot:"append"})],1)],1)],1),o("el-col",{attrs:{xs:24,sm:24,md:24,lg:12,xl:8}},[o("el-form-item",{attrs:{label:"产品图片"}},[2==t.form.status&&null==t.form.imgUrl?o("div",[2==t.form.deviceType?o("el-image",{staticStyle:{height:"145px","border-radius":"10px"},attrs:{"preview-src-list":[r("4efc")],src:r("4efc"),fit:"cover"}}):3==t.form.deviceType?o("el-image",{staticStyle:{height:"145px","border-radius":"10px"},attrs:{"preview-src-list":[r("c59e")],src:r("c59e"),fit:"cover"}}):o("el-image",{staticStyle:{height:"145px","border-radius":"10px"},attrs:{"preview-src-list":[r("52bb")],src:r("52bb"),fit:"cover"}})],1):o("div",[o("imageUpload",{ref:"image-upload",attrs:{disabled:!0,value:t.form.imgUrl,limit:2==t.form.status?0:1,fileSize:1},on:{input:function(e){return t.getImagePath(e)}}})],1),null==t.form.productId||0==t.form.productId?o("div",{staticClass:"el-upload__tip",staticStyle:{color:"#f56c6c"}},[t._v("提示:上传后需要提交保存")]):t._e()])],1)],1),o("el-col",{attrs:{span:20}},[o("el-form-item",{staticStyle:{"text-align":"center",margin:"40px 0px"}},[o("el-button",{directives:[{name:"hasPermi",rawName:"v-hasPermi",value:["iot:product:edit"],expression:"['iot:product:edit']"},{name:"show",rawName:"v-show",value:0!=t.form.productId&&2!=t.form.status,expression:"form.productId != 0 && form.status != 2"}],attrs:{type:"primary"},on:{click:t.submitForm}},[t._v("修 改")]),o("el-button",{directives:[{name:"hasPermi",rawName:"v-hasPermi",value:["iot:product:add"],expression:"['iot:product:add']"},{name:"show",rawName:"v-show",value:0==t.form.productId&&2!=t.form.status,expression:"form.productId == 0 && form.status != 2"}],attrs:{type:"primary"},on:{click:t.submitForm}},[t._v("新 增")])],1)],1)],1)],1),o("el-tab-pane",{attrs:{label:"",name:"things",disabled:0==t.form.productId}},[o("span",{attrs:{slot:"label"},slot:"label"},[o("span",{staticStyle:{color:"red"}},[t._v("* ")]),t._v("产品模型")]),o("product-things-model",{ref:"productThingsModel",attrs:{product:t.form}})],1),3!==t.form.deviceType?o("el-tab-pane",{attrs:{label:"",name:"productAuthorize",disabled:0==t.form.productId}},[o("span",{attrs:{slot:"label"},slot:"label"},[t._v("设备授权")]),o("product-authorize",{ref:"productAuthorize",attrs:{product:t.form}})],1):t._e(),3!==t.form.deviceType?o("el-tab-pane",{attrs:{label:"",name:"alert",disabled:0==t.form.productId}},[o("span",{attrs:{slot:"label"},slot:"label"},[o("span",{staticStyle:{color:"red"}},[t._v("¥ ")]),t._v("告警配置")]),o("business",{ref:"business"})],1):t._e(),o("div",{staticStyle:{"margin-top":"200px"}}),o("el-tab-pane",[o("span",{attrs:{slot:"label"},slot:"label"},[o("div",{staticStyle:{"margin-top":"200px"}})])]),1==t.form.status?o("el-tab-pane",{attrs:{name:"product04",disabled:""}},[o("span",{attrs:{slot:"label"},slot:"label"},[o("el-button",{directives:[{name:"hasPermi",rawName:"v-hasPermi",value:["iot:product:add"],expression:"['iot:product:add']"}],attrs:{type:"success",size:"mini"},on:{click:function(e){return t.changeProductStatus(2)}}},[t._v("发布产品")])],1)]):t._e(),2==t.form.status?o("el-tab-pane",{attrs:{name:"product05",disabled:""}},[o("span",{attrs:{slot:"label"},slot:"label"},[o("el-button",{directives:[{name:"hasPermi",rawName:"v-hasPermi",value:["iot:product:edit"],expression:"['iot:product:edit']"}],attrs:{type:"danger",size:"mini"},on:{click:function(e){return t.changeProductStatus(1)}}},[t._v("取消发布")])],1)]):t._e(),o("el-tab-pane",{attrs:{name:"product06",disabled:""}},[o("span",{attrs:{slot:"label"},slot:"label"},[o("el-button",{attrs:{type:"info",size:"mini"},on:{click:function(e){return t.goBack()}}},[t._v("返回列表")])],1)])],1)],1)},a=[],n=r("c7eb"),i=r("1da1"),c=(r("b0c0"),r("a9e3"),r("d3b7"),r("2ca0"),r("416d")),s=r("bbfb"),l=r("ddac"),u=r("0835"),d=r("24c5"),p=r("b213"),m=r("1e36"),f=r("9b9c"),h=r("cec4"),b={name:"ProductEdit",dicts:["iot_device_type","iot_network_method","iot_vertificate_method","iot_transport_type","data_collect_type"],components:{productThingsModel:c["default"],productApp:s["default"],productAuthorize:l["default"],imageUpload:u["a"],business:d["default"]},data:function(){return{keyInputType:"password",accountInputType:"password",passwordInputType:"password",activeName:"basic",categoryShortList:[],protocolList:[],form:{networkMethod:1,deviceType:1,vertificateMethod:3,transport:"MQTT",imgUrl:""},rules:{productName:[{required:!0,message:"产品名称不能为空",trigger:"blur"},{min:1,max:64,message:"产品名称不能少于1个字符和超过64字符",trigger:"blur"}],categoryId:[{required:!0,message:"产品分类ID不能为空",trigger:"blur"}],deviceType:[{required:!0,message:"请选择设备类型",trigger:"blur"}],protocolCode:[{required:!0,message:"设备协议不能为空",trigger:"blur"}],transport:[{required:!0,message:"传输协议不能为空",trigger:"blur"}]},queryParams:{tenantName:null},pointList:[],open:!1,title:"",loading:!0,tempList:[],total:0,tempTotal:0,pointsParams:{pageNum:1,pageSize:8,templateId:0},tempParams:{pageNum:1,pageSize:10},currentRow:{},selectRowData:{},isModbus:!1}},created:function(){var t=this.$route.query&&this.$route.query.productId;this.form.productId=t,0!=this.form.productId&&null!=this.form.productId&&this.getProduct();var e=this.$route.query&&this.$route.query.tabPanelName;null!=e&&""!=e&&(this.activeName=e),this.getShortCategory(),this.form.productId&&0!=this.form.productId||(this.accountInputType="text",this.passwordInputType="text"),this.getProtocol()},activated:function(){var t=this.$route.query.t;null!=t&&t!=this.uniqueId&&(this.uniqueId=t);var e=this.$route.query.productId;null!=e&&0!=e&&(this.form.productId=Number(e),this.getProduct(),this.getShortCategory());var r=this.$route.query&&this.$route.query.tabPanelName;null!=r&&""!=r&&(this.activeName=r)},methods:{getShortCategory:function(){var t=this;Object(m["e"])().then((function(e){t.categoryShortList=e.data}))},goBack:function(){var t={path:"/iot/product",query:{t:Date.now(),pageNum:this.$route.query.pageNum}};this.$tab.closeOpenPage(t),this.reset()},getProduct:function(){var t=this;Object(f["e"])(this.form.productId).then((function(e){t.form=e.data,t.changeProductCode(t.form.protocolCode)}))},reset:function(){this.form={productId:0,productName:null,categoryId:null,categoryName:null,status:0,tslJson:null,isAuthorize:0,deviceType:1,networkMethod:1,vertificateMethod:3,mqttAccount:null,mqttPassword:null,mqttSecret:null,remark:null,imgUrl:""},this.resetForm("form")},submitForm:function(){var t=this;this.$refs["form"].validate((function(e){e&&(null!=t.form.productId&&0!=t.form.productId?Object(f["g"])(t.form).then((function(e){t.changeProductCode(t.form.protocolCode),t.$modal.alertSuccess("修改成功")})):Object(f["a"])(t.form).then((function(e){t.form.isModbus?t.$modal.alertSuccess("物模型已经从采集点模板同步至产品"):t.$modal.alertSuccess("添加成功,可以开始定义物模型或配置"),t.form=e.data,t.changeProductCode(t.form.protocolCode)})))}))},getDeviceCountByProductId:function(t){return new Promise((function(e,r){Object(f["d"])(t).then((function(t){e(t)})).catch((function(t){r(t)}))}))},changeProductStatus:function(t){var e=this;return Object(i["a"])(Object(n["a"])().mark((function r(){var o,a;return Object(n["a"])().wrap((function(r){while(1)switch(r.prev=r.next){case 0:if(o="确定取消发布?",2!=t){r.next=5;break}o="产品发布后,可以创建对应的设备",r.next=10;break;case 5:if(1!=t){r.next=10;break}return r.next=8,e.getDeviceCountByProductId(e.form.productId);case 8:a=r.sent,a.data>0&&(o="重要提示:产品下已有 "+a.data+" 个设备,取消发布可以修改产品信息和模型,重新发布后对应设备状态将会被重置!");case 10:e.$confirm(o,"提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then((function(){var r={};r.productId=e.form.productId,r.status=t,r.deviceType=e.form.deviceType,Object(f["b"])(r).then((function(t){e.$modal.alertSuccess(t.msg),e.activeName="basic",e.getProduct()})).catch((function(){2==t?e.activeName="basic":e.goBack()}))})).catch((function(){e.activeName="basic"}));case 11:case"end":return r.stop()}}),r)})))()},selectCategory:function(t){for(var e=0;e