From 45d08abd366d637057d66f84309bb8c7fe05d633 Mon Sep 17 00:00:00 2001 From: fhysy <1149505133@qq.com> Date: Tue, 11 Feb 2025 09:22:05 +0800 Subject: [PATCH] =?UTF-8?q?=20chore(=E4=BB=A3=E7=A0=81=E5=A4=8D=E5=88=B6):?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E9=A1=B5=E9=9D=A2=E3=80=81=E5=AF=B9=E6=8E=A5?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E3=80=81=E6=88=91=E7=9A=84=E3=80=81=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E5=AF=86=E7=A0=81=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App.vue | 2 +- common/api/config.js | 11 +- common/api/request.js | 3 +- pages.json | 136 ++++------- pages/auth/passwordLogin.vue | 86 +++++-- pages/my/passwordModify.vue | 169 +++++++++++++ pages/tabBar/my.vue | 158 ++++++++---- pages/tabBar/new.vue | 319 +++++++++++++++++++++++++ static/images/toolbar/new-active.png | Bin 0 -> 992 bytes static/images/toolbar/new.png | Bin 0 -> 1009 bytes static/images/toolbar/order-active.png | Bin 0 -> 1366 bytes static/images/toolbar/order.png | Bin 0 -> 1396 bytes 12 files changed, 721 insertions(+), 163 deletions(-) create mode 100644 pages/my/passwordModify.vue create mode 100644 pages/tabBar/new.vue create mode 100644 static/images/toolbar/new-active.png create mode 100644 static/images/toolbar/new.png create mode 100644 static/images/toolbar/order-active.png create mode 100644 static/images/toolbar/order.png diff --git a/App.vue b/App.vue index 8804d6c..28b9659 100644 --- a/App.vue +++ b/App.vue @@ -49,7 +49,7 @@ @import url("static/fonts/iconfont.css"); page>view { - background: linear-gradient(to bottom,#CEDCFF,#F0F0F0 554rpx); + /* background: linear-gradient(to bottom,#CEDCFF,#F0F0F0 554rpx); */ min-height: 100%; } diff --git a/common/api/config.js b/common/api/config.js index fbe524c..908c9d8 100644 --- a/common/api/config.js +++ b/common/api/config.js @@ -11,8 +11,13 @@ export default{ // imgUrl: 'https://digital-core.dieruen-iot.com', // wsUrl: 'wss://digital-core.dieruen-iot.com', // 谷云正式 - baseUrl: 'https://digital-core.drgyen.com', - imgUrl: 'https://digital-core.drgyen.com', + // baseUrl: 'https://digital-core.drgyen.com', + // imgUrl: 'https://digital-core.drgyen.com', + // wsUrl: 'wss://digital-core.drgyen.com', + + // 商城本地测试环境 + baseUrl: 'http://192.168.1.17:8080', + imgUrl: 'http://192.168.1.17:8080', wsUrl: 'wss://digital-core.drgyen.com', // 长城 // baseUrl: 'https://zhny.snc.cn/prod-api/', @@ -41,4 +46,6 @@ export default{ // mqttUrl:'ws://192.168.18.139:8083/mqtt', // mqttUrl:'wx://iot.gkiiot.com:8083/mqtt', // #endif + // 客户端id + clientId: 'e5cd7e4891bf95d1d19206ce24a7b32e', } \ No newline at end of file diff --git a/common/api/request.js b/common/api/request.js index 6501a19..3326403 100644 --- a/common/api/request.js +++ b/common/api/request.js @@ -20,7 +20,8 @@ request.interceptors.request.use((request) => { request.baseURL = config.baseUrl; const userToken = uni.getStorageSync('userToken'); if(userToken){ - request.headers["Authorization"] = userToken; + request.headers["Authorization"] = 'Bearer ' + userToken; + request.headers["Clientid"] = config.clientId; } // 防止缓存 if (request.method === 'POST' && request.headers['Content-Type'] !== 'multipart/form-data') { diff --git a/pages.json b/pages.json index 8d31b95..a8324ba 100644 --- a/pages.json +++ b/pages.json @@ -3,7 +3,13 @@ // 下载安装方式 "^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue" }, - "pages": [ + "pages": [{ + "path": "pages/auth/passwordLogin", + "style": { + "navigationBarTitleText": "密码登录", + "navigationBarBackgroundColor": "#1890ff" + } + }, { "path": "pages/auth/login", "style": { @@ -12,36 +18,13 @@ } }, { - "path": "pages/auth/defalut", + "path": "pages/tabBar/new", "style": { - "navigationBarTitleText": "项目" + "navigationBarTitleText": "消息", + "enablePullDownRefresh": true + // "navigationStyle": "custom" } }, - { - "path": "pages/auth/passwordLogin", - "style": { - "navigationBarTitleText": "密码登录", - "navigationBarBackgroundColor": "#1890ff" - } - }, - { - "path": "pages/auth/companyRegister", - "style": { - "navigationBarTitleText": "企业注册" - } - }, - // { - // "path": "pages/index/enter", - // "style": { - // "navigationBarTitleText": "综合能源管理" - // } - // }, - // { - // "path": "pages/index/guidePage", - // "style": { - // "navigationBarTitleText": "综合能源管理" - // } - // }, { "path": "pages/tabBar/order", "style": { @@ -73,21 +56,8 @@ "navigationBarTitleText": "我的" // "navigationStyle": "custom", } - }, { - "path": "pages/tabBar/scan", - "style": { - "navigationBarTitleText": "添加设备" - // "navigationStyle": "custom", - } } - // , { - // "path": "pages/oneselfUser/index", - // "style": { - // "navigationBarTitleText": "个人用户", - // "enablePullDownRefresh": true - // // "navigationStyle": "custom" - // } - // } + ], "subPackages": [ // { @@ -154,11 +124,6 @@ "navigationBarTitleText": "设置" // "navigationStyle": "custom" } - }, { - "path": "passwordModify", - "style": { - "navigationBarTitleText": "修改密码" - } }, { "path": "maintenanceRecord", "style": { @@ -606,7 +571,7 @@ } }] }, - { + { "root": "pages/user/", "pages": [{ "path": "renew", @@ -640,6 +605,11 @@ "navigationBarTitleText": "帮助中心", "navigationBarBackgroundColor": "#fff" } + }, { + "path": "passwordModify", + "style": { + "navigationBarTitleText": "修改密码" + } }] } ], @@ -648,44 +618,32 @@ "selectedColor": "#0066cc", "backgroundColor": "#FFFFFF", "list": [{ - "pagePath": "pages/tabBar/home", - "text": "首页", - "iconPath": "static/images/toolbar/home.png", - "selectedIconPath": "static/images/toolbar/home-active.png" - }, { - "pagePath": "pages/tabBar/project", - "text": "项目", - "iconPath": "static/images/toolbar/project.png", - "selectedIconPath": "static/images/toolbar/project-active.png" - }, { - "pagePath": "pages/tabBar/scan", - "text": "扫一扫", - "iconPath": "static/images/toolbar/scan.png", - "selectedIconPath": "static/images/toolbar/scan-active.png" - }, { - "pagePath": "pages/tabBar/alarm", - "text": "报警", - "iconPath": "static/images/toolbar/alarm.png", - "selectedIconPath": "static/images/toolbar/alarm-active.png" - }, { - "pagePath": "pages/tabBar/my", - "text": "我的", - "iconPath": "static/images/toolbar/my.png", - "selectedIconPath": "static/images/toolbar/my-active.png" - } - ] + "pagePath": "pages/tabBar/new", + "text": "消息", + "iconPath": "static/images/toolbar/new.png", + "selectedIconPath": "static/images/toolbar/new-active.png" + }, { + "pagePath": "pages/tabBar/order", + "text": "订单", + "iconPath": "static/images/toolbar/order.png", + "selectedIconPath": "static/images/toolbar/order-active.png" + }, { + "pagePath": "pages/tabBar/my", + "text": "我的", + "iconPath": "static/images/toolbar/my.png", + "selectedIconPath": "static/images/toolbar/my-active.png" + }] }, "globalStyle": { "navigationBarTextStyle": "black", "navigationBarTitleText": "uni-app", - "navigationBarBackgroundColor": "#CEDCFF", + "navigationBarBackgroundColor": "#f5f5f5", // "navigationBarBackgroundColor": "#11BF96", "backgroundColor": "#F0F0F0" }, "condition": { //模式配置,仅开发期间生效 "current": 0, //当前激活的模式(list 的索引项) - "list": [ - { + "list": [{ "path": "pages/auth/passwordLogin", "name": "默认页面" //模式名称 }, @@ -699,44 +657,44 @@ }, { "path": "pages/auth/passwordLogin", - "name": "密码登录" ,//模式名称 + "name": "密码登录", //模式名称 "query": "mode=1&user=17859911022&pwd=888888" }, { "path": "pages/home/wisdomElectricity/realTime/parameterSetup", - "name": "设备参数调整" ,//模式名称 + "name": "设备参数调整", //模式名称 "query": "deviceId=ed41e7462f5041aa98780ce3062765d0&deviceKey=1267240812100022" }, { "path": "pages/project/space/index", - "name": "标签管理" ,//模式名称 + "name": "标签管理", //模式名称 // "query": "projectId=62&projectRole=root&typeName=设备组" "query": "projectId=62&projectRole=root&typeName=空间" }, { "path": "pages/project/space/deviceList", - "name": "空间设备管理" ,//模式名称 + "name": "空间设备管理", //模式名称 "query": "labelCode=16&projectId=63&projectRole=root&tagType=57135cfcdfa74d39b05aa04237893121&isDefault=Y" }, { "path": "pages/project/deviceGroup/index", - "name": "设备分组" ,//模式名称 + "name": "设备分组", //模式名称 "query": "projectId=62" }, { "path": "pages/project/space/addDeviceList", - "name": "空间设备添加" ,//模式名称 + "name": "空间设备添加", //模式名称 "query": "labelCode=16" }, { "path": "pages/home/wisdomElectricity/realTime/alarmConfig", - "name": "告警配置" ,//模式名称 + "name": "告警配置", //模式名称 "query": "deviceKey=1267240812100027" }, { "path": "pages/tabBar/scan", "name": "扫码" //模式名称 - },{ + }, { "path": "pages/tabBar/home", "name": "首页" //模式名称 }, @@ -746,7 +704,7 @@ }, { "path": "pages/project/index", - "name": "项目详情" ,//模式名称 + "name": "项目详情", //模式名称 "query": "projectId=62&projectCode=bd80a3c80c394dae8a2d8138713f2bcf" }, { @@ -759,12 +717,12 @@ }, { "path": "pages/project/equipmentStatus/status", - "name": "设备列表" ,//模式名称 + "name": "设备列表", //模式名称 "query": "projectId=62&adminFlag=true&projectRole=root" }, { "path": "pages/project/projectUser", - "name": "用户列表" ,//模式名称 + "name": "用户列表", //模式名称 "query": "projectId=56" }, { @@ -810,4 +768,4 @@ } ] } -} +} \ No newline at end of file diff --git a/pages/auth/passwordLogin.vue b/pages/auth/passwordLogin.vue index 033b3d1..fe41281 100644 --- a/pages/auth/passwordLogin.vue +++ b/pages/auth/passwordLogin.vue @@ -151,6 +151,13 @@ padding-top: 500rpx; + + + {{activeTenantObj.companyName}} + + + @@ -176,14 +183,14 @@ padding-top: 500rpx; 阅读并同意以下协议《用户协议》 - @@ -191,6 +198,7 @@ padding-top: 500rpx; Copyright 2022-2024 {{appConfig.companyName}} Powered By DSservice {{appConfig.contractRecordNumber || ''}} + @@ -213,9 +221,12 @@ padding-top: 500rpx; captchaData: null, current: 0, form: { + clientId: "", + grantType: "password", + rememberMe: false, + tenantId: "", username: "", - password: "", - code: "" + password: "" }, mode:null, rules: { @@ -224,7 +235,7 @@ padding-top: 500rpx; required: true, message: '请输入手机号/账号', trigger: ['change', 'blur'], - }, ], + }], password: [{ required: true, message: '请输入密码', @@ -235,6 +246,15 @@ padding-top: 500rpx; message: '请输入验证码', trigger: ['change', 'blur'], }] + }, + tenantShow:false, + tenantList:[], + activeTenantObj:{ + tenantId: "", + companyName: "", + domain: "", + logo: null, + registerEnable: false } } }, @@ -254,6 +274,7 @@ padding-top: 500rpx; if(e.mode){ this.mode = e.mode; } + this.getTenantList(); if(e.mode == '1'){ //mode:1 带密码参数直接登录 this.form.username = e.user || ''; this.form.password = e.pwd || ''; @@ -263,7 +284,7 @@ padding-top: 500rpx; console.log("userToken", userToken) if (userToken) { uni.switchTab({ - url: "../tabBar/project" + url: "../tabBar/order" }) } else { // this.getCodeImageFn(); @@ -297,6 +318,39 @@ padding-top: 500rpx; this.$refs.uForm.setRules(this.rules); }, methods: { + getTenantList(){ + uni.request({ + url: config.baseUrl + "/auth/tenant/list", + method: "GET", + data: {}, + header: { + Clientid: config.clientId + }, + success: (res) => { + console.log("res11",res); + if(res.data.code == 200){ + + this.tenantList = res.data.data.voList || []; + + if(res.data.data.voList!=[]){ + this.activeTenantObj = res.data.data.voList[0]; + this.form.tenantId = res.data.data.voList[0].tenantId; + } + } + } + }); + }, + changeTenant(e){ + console.log("e",e) + this.tenantList.forEach((item) => { + if (item.tenantId == e[0].value) { + this.activeTenantObj = item; + this.form.tenantId = item.tenantId; + this.appConfig.logo = item.logo; + this.appConfig.name = item.companyName; + } + }); + }, GetWxMiniProgramUrlParam(url) { let theRequest = {}; if (url.indexOf("#") != -1) { @@ -347,7 +401,7 @@ padding-top: 500rpx; password: this.form.password, }, header: { - UserType: this.usetTypeValue == "普通用户" ? "PERSONAL" : "TENANT" + UserType: this.usetTypeValue == "普通用户" ? "PERSONAL" : "TENANT", }, success: (res) => { console.log(res); @@ -378,7 +432,7 @@ padding-top: 500rpx; }) } else { uni.switchTab({ - url: "../tabBar/project" + url: "../tabBar/order" }) } }, 1000) @@ -400,25 +454,23 @@ padding-top: 500rpx; this.$refs.uForm.validate(valid => { if (valid) { uni.request({ - url: config.baseUrl + "/login", + url: config.baseUrl + "/auth/login", method: "POST", data: { - username: this.form.username, - password: this.form.password, - // code: this.form.code, - // uuid: this.captchaData.uuid, + ...this.form, + clientId: config.clientId, }, header: { - UserType: this.usetTypeValue == "普通用户" ? "PERSONAL" : "TENANT" + Clientid: config.clientId }, success: (res) => { console.log(res); - if (res.data.token) { + if (res.data.code == 200 && res.data.data.access_token) { this.$refs.uToast.show({ title: '登录成功', type: 'success', }) - this.$store.dispatch('setLogin', res.data.token); + this.$store.dispatch('setLogin', res.data.data.access_token); uni.setStorage({ key: 'userType', data: this.usetTypeValue, @@ -440,7 +492,7 @@ padding-top: 500rpx; }) } else { uni.switchTab({ - url: "../tabBar/project" + url: "../tabBar/order" }) } }, 1000) diff --git a/pages/my/passwordModify.vue b/pages/my/passwordModify.vue new file mode 100644 index 0000000..9a1f03e --- /dev/null +++ b/pages/my/passwordModify.vue @@ -0,0 +1,169 @@ + + + + + diff --git a/pages/tabBar/my.vue b/pages/tabBar/my.vue index 7a95bc9..fe2dc31 100644 --- a/pages/tabBar/my.vue +++ b/pages/tabBar/my.vue @@ -1,64 +1,43 @@ @@ -152,12 +131,12 @@ // let userToken = uni.getStorageSync("userToken"); let userType = uni.getStorageSync("userType"); // let getUserInfoUrl = userType === "企业用户"?"/system/personal/profile":"/system/user/profile"; - let getUserInfoUrl = "/system/user/profile"; + let getUserInfoUrl = "/system/user/getInfo"; this.$get(getUserInfoUrl).then((res) => { console.log(res, "res"); if (!res.data) return; - this.userInfo = res.data; + this.userInfo = res.data.user; this.tenantInfo = res.data.tenant; uni.setStorageSync("tenantInfo", res.data.tenant) uni.setStorageSync("userInfo", this.userInfo) @@ -181,20 +160,91 @@ // uni.clearStorageSync(); uni.removeStorageSync('userToken'); uni.reLaunch({ - url:"../auth/login" + url:"../auth/passwordLogin" }) }, } } diff --git a/static/images/toolbar/new-active.png b/static/images/toolbar/new-active.png new file mode 100644 index 0000000000000000000000000000000000000000..e696a489aafc52d4c75ad0994c29a726aff8b479 GIT binary patch literal 992 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51|<6gKdl8)jKx9jP7LeL$-HD>V4mga;uum9 z_jXQf(Jcd!)_xzcM>-3GKgC3N9(KO;X3ub5?e@bdHL>-OE0t=Mhg zUA{f2Khl%ADW~*n$;LTv*P0!#h-LU1x1G!O+s&Ah50^~b{{Fk@vcsnf*uSmNIlDr6 z`>k!yqkS&FJ+SSs|3gXpw#g@A&#ks%^f-5X`%xaL>(*N%@>Cuj=- zJTU3;E7kXc3a(*%XOt%;*NWbrJtK#q%)O{;W~Wf=p8e^}2FpL}S610-Ychsh=eQKM7ODzyI|%Jz5NS|h4ASF6rshp$ ze!S=0+RX|~M$0r>ZZgEAm+TE_zA4tu!ZO2cGo!@u+GveKpT1QYpJ7{Iu|d^X+r(J0 zk6SzAYr^RXuikDmOElx_v09}ZrpDlTgDHSv5{t)93uLO&gnipy&pFv`|I9vDFhu)n zv@Z3WkmjM3Z+$EA=ejpm&n^`C9jW`Ea&kek>8+`KMzUo^o0xO_`KwWdhMO=JbYkqy$H{106?Rn*vU$=f%S*6VP(k@3rebJ|S z4MoAZHxv!?7x+4s^IYQH@R}#GAblIlG~3i*ElZnusY@;E^IL2AUFOGT zPQC|@Zj1}8m*2{^w+h*w^R-R)q4T#7EDt4RDjBvM{QRf-nBsG@eD+)OjQhVD&RsD7 zTH`kBcbo^j_qXhx_uY>rj*TH)(Ri}`=C2x0{tI}o*^_Z;i}#Mo(~ xWOS4ASe3=1;2FojU|#L%;uum9 z_jXQf*)0QsR^82lng=lUV<2UXSRnM@Xaz&5SDC^^j+v;jWvmfy2@5x9x zyIea`DlK4UjRF(bCb7pp3{6S`4NL+m470kKSQR`NOvG8a940Vi$gMf>w{Cyj+A!(l zGf|pfd-okQR51f*!Fz0P}TO2v<$@1&R zxgXT+zyGAN4k*6t>ND3T^~ym{ueta7HEc=wZ1Z3C!-wijF9G@0tFm(WEE&ywKPUCv zyu&?Jz4qo z>6~s)U_JLT$1#5Yo51AieZD4>xnyqt*K2=vIdA*zx|=T~OLQ0xdRoZv9Y6i{N#>2- zx2{TDdzkbXTpJY_FT{vwFgP+T*s1a19>X`rhzsi@pA|DLStD{nWm59quGsTD(hbu* z&gqycx+#7yH)F7D{U58i^5K&Wj3+cFt=(Ez;5x0kBZuKq1IMBut(*M;;!poxjGABb z@ZyX}Mwf4EL$(29K%W6Q{Pnm*8i4lBnaZRb`}|+3V@ryUBF{~RH%7bS1k&5KDKauX znVG}j7Ic4tYrwsGF+jt+nB0vvI~fZrt=tgmWqaFb$+K0tXZm`XlC8F;#4`yj(Zy!I z%`B$lc|z-YN(N9vwhA>x*hz>jpsq-UW2&| zCl?+x>YAkSRu9$g}qL+j_muw41~qImf2VuEdtb})bJg3K`k5WLW(NK{^FiZD zZAb4`o{4pn^dA13c3Jiu=cA;^2#zfabBh`_%6MMwXJ9$W?ZC((#BkQN5j8V4G5lwm Y!+5doy7AuAz&y<0>FVdQ&MBb@076Z=cmMzZ literal 0 HcmV?d00001 diff --git a/static/images/toolbar/order-active.png b/static/images/toolbar/order-active.png new file mode 100644 index 0000000000000000000000000000000000000000..759e57b62e3473c893187f7c1713c0b7ae7d287c GIT binary patch literal 1366 zcmV-c1*!UpP)Px)5J^NqRCr$PoK0*SMHI*XZ(UA3Riy_iK2lByArnfPKq0(srodFy#?Lv)?fv~I76C0%ym_a5p+6hQ~fceq{K*x*%uxiPO zNd(@6&Tx7FrSoDsqjQ3uixo7AFndZhZ*_p<=LQhheo!5_hvO=6GQ+CNSsh@jrAs&k zA%5&VXmlTdi(M$JA7pEQHB5nery$HPzT03}lD@5jtCJsK1(0$ZwfQP=?fZCEQa%jax{4fIVM9bnEf6SL&0qC9; z`lk?h4=L&W=n)7!u|oeb3ho{dC7WWVgDpVj1XzF;Ad>)7ZXIX= zG6^u{)`1ovlK@k09oTOG^U}IHLf{?EU$z5VaA&Nxpm2u1-}Df2aJuapjQ40aUHolsF5JITIG31;`}8lv@W{ zfJ_2Rxpklg$Rxm&TL<Yo?90nRf8A>gK%zxd*B9~pH4En7M2w-Pk%(~))X3e4Pz#Vb z4HlpU$Rxm&TL)TzOae^#8aXiegLz+k@}Js`f20Q3oia z`?_z|#mRBRFs8g2)v3}0_%Fotjz6krH8xIt={8Ex2Pl;nn$^fXc>S@Q>+SEvq>l4= z02^v~T|{*NagX*96ix*hXNL1%L}v~(b_uS1Viq8ixdmteG6^u{)`1ovlK@k09moXu YH~6uDZ)t!B)Bpeg07*qoM6N<$f~{+6q5uE@ literal 0 HcmV?d00001 diff --git a/static/images/toolbar/order.png b/static/images/toolbar/order.png new file mode 100644 index 0000000000000000000000000000000000000000..bb6bf903203cbda0bb0e1bd5d93d19f3e65b2fa7 GIT binary patch literal 1396 zcmV-)1&jKLP)Px)E=fc|RCr$PoK1)vMHI*1>se2pLd+%jk$4nA4@v|jCJ>?~qM`>6hM09T^{Uw@ z=*6gq?1Gq^A7FO6YBHOs2%>`Dicv^J@av)w(UZD&#BS23Ao^o#oYON12^A^uM zMj|)HoB@EPG)X4gijX1YjL= znI|G!pYx~$&^j+klGDz!k6|DpP75JUx~A?7u+eC2Ns{Cz*NMkCZpj$4)Ae$82DsLx z+r5dL?4G%w#}L~60MK^>tl~mvfLiO*`J09XC#9SoLva76oMqVwL_BbQ4OQxL2B?(c zJSbz#R#&Ts3c2KaeTj&+y5#Hykcgc1F3F54rpO$wwK)UuImoEMxE|N1wg?aaB0yKG zmBdAWlLk<0eLXWj1OPW8;<7R3H7VtDu64Frt2UY?(uoBPLg z4z2a00B|=mZ?w<4#+aw2l;0KUgK}V&W!n+)lYF9x*b+h<90Xu-adA_--TndquFU;5 z`&3G~eURRMu9SKm0Pe}f{%ubv5uMG?5fs3#``%;bJw=5YW45Jf`qf$xlu}0l;BZMy zorsRFrPo^D#?0>*#USEKLWuoA15`?#1AvQ4ihP)eo*e+-b7sDw1i*_z2>bX|I+RjR z0>Bd`0lyQ`=FkED2>_dl3P_UVV7*>%4FK>V0PHS_IYvZ>2I#GOt&5As_e6A6=m0YS zpb~(W)$8@&1^}1^fagmbxJL-_!CLw(%dSDhZ;E1=`KXlg@t^@NEG%rO)oQlLZMj4b z5z(==ieLRqDfJ2f+?$JihKL?<(QBXI+)#i1?!r;_XVJUT{zj zR7%|h0B-`o#$k%_(J=GNQp(CFE;N94H95bK;KQYomYE-rQl6+H3Jsv$fHcYtmk$zA z;d0nmEG8(W?gD@}syJXBV^0y$Emh|W%7Hfd-lC@6u+z8pR<*ba@jtk(H|FOI4q%0% zg9wcPJx@af7y)_`@RUafMu46KJmt}W5uhglPkD6UqycO+8doPtvL6wRXKm{xUun17 z$7g3}e=V9YCm`GTAKCpep#%K7 zyP$e)hyVfL9U{6TXny(2 zRBL8t#_p5u8^Hk#1)OUh5uhunlDG&k0`w%{DUS|}06htK%A*6v1YqAE<`eSDe^ED* z^?&8RtT_WS&yRE8grd6a+nwFlDt5XUyUH8uWgUxb->DZ|4i-`jGhfjKWm{JjZ9{SH zVB`$2*LcTvEgI#%mkV(YoG)LSj59zRJmGz_{yRCnu0^)1o71QS@H~ix9e~uVv;0d*+;P3@@c8l>74QT6)}_p z!@deHY<3Z#C+`R_0`w%{DUS|}06htK%A*540sad&MMQpDk)mDz0000- literal 0 HcmV?d00001