From cc045787ca0da3a51c495824b6ff299d82c96f1c Mon Sep 17 00:00:00 2001 From: tsf <460834639@qq.com> Date: Fri, 14 Jun 2024 17:58:50 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E7=89=88=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/admin/controller/Card.php | 200 +++++++++- application/admin/controller/Device.php | 207 ++++++++++ application/admin/controller/Login.php | 16 +- .../admin/view/appversion/app_add.html | 90 ++--- application/admin/view/card/card_add.html | 218 +++++++++++ application/admin/view/card/card_edit.html | 232 +++++++++++ application/admin/view/card/index.html | 360 ++++++++++++++++++ application/admin/view/device/device_add.html | 223 +++++++++++ .../admin/view/device/device_edit.html | 238 ++++++++++++ application/admin/view/device/index.html | 360 ++++++++++++++++++ application/admin/view/index/index.html | 50 +-- application/admin/view/login/login.html | 6 +- .../admin/view/member/member_list.html | 2 +- application/admin/view/member/user_list.html | 6 +- application/app/controller/Card.php | 54 +-- application/app/controller/Cardparts.php | 20 +- application/app/controller/Index.php | 51 ++- application/app/controller/Login.php | 2 +- application/route.php | 19 + public/card/1_1718264230.jpg | Bin 0 -> 25803 bytes public/device/TYP999ASDFGTR56_1718357969.jpg | Bin 0 -> 29143 bytes 21 files changed, 2202 insertions(+), 152 deletions(-) create mode 100644 application/admin/controller/Device.php create mode 100644 application/admin/view/card/card_add.html create mode 100644 application/admin/view/card/card_edit.html create mode 100644 application/admin/view/card/index.html create mode 100644 application/admin/view/device/device_add.html create mode 100644 application/admin/view/device/device_edit.html create mode 100644 application/admin/view/device/index.html create mode 100644 public/card/1_1718264230.jpg create mode 100644 public/device/TYP999ASDFGTR56_1718357969.jpg diff --git a/application/admin/controller/Card.php b/application/admin/controller/Card.php index 90ec5bf..f5bb5a6 100644 --- a/application/admin/controller/Card.php +++ b/application/admin/controller/Card.php @@ -8,8 +8,202 @@ use app\bj\controller\Common; use think\Log; use \think\Validate; -class Card extends Controller{ - public function demo(){ - echo '你好'; +class Card extends Base{ + protected $page_num = 10; + protected $file_max = 1024*1024*5;//xxxMB + public function index($page = 1){ + $data = input(); + $pd = true; + $parameter = []; + // $parameter['is_del'] = 0; + if(array_key_exists('tt', $data)){ + $page = $data['page_num']; + unset($data['page_num']); + unset($data['tt']); + $pd = false; + // if($data['status_num'] === "0" || $data['status_num'] === "1"){ + // $parameter['is_del'] = $data['status_num']; + // } + + // if($data['tel']){ + // $parameter['tel'] = $data['tel']; + // } + // if($data['email']){ + // $parameter['email'] = $data['email']; + // } + // if($data['s_time']){ + // $parameter['create_time'] = ['>=',$data['s_time']]; + // } + // if($data['e_time']){ + // $parameter['create_time'] = ['<=',$data['e_time']]; + // } + } + $num = Db::table('app_card_data')->where($parameter)->count(); + $result = Db::table('app_card_data')->where($parameter)->order('is_del,id desc')->page($page,$this->page_num)->select(); + if(!$pd){ + $result['num'] = $num; + $result['data'] = $result; + return $this->msg(0,'success',$result); + } + $this->assign([ + 'result' => $result, + 'num' => $num, + ]); + return $this->fetch(); + } + public function card_add(){ + return $this->fetch(); + } + public function card_add_action(){ + $file = request()->file('upload_file_app'); + $data = request()->param(); + $num = Db::table('app_card_data')->where(['name'=>$data['card_name']])->count(); + + if($num > 0){ + return $this->msg(10001,'卡片已存在'); + } + if($file){ + // 移动到框架应用根目录/public/uploads/ 目录下 + $file_name_new = $data['card_name'].'_'.time().'.'.$data['file_extension']; + $info = $file->validate(['size'=>$this->file_max,'ext'=>'jpg,png,gif'])->move(ROOT_PATH . 'public' . DS . 'card',$file_name_new); + if($info){ + $result = Db::table('app_card_data')->insert([ + 'name'=>$data['card_name'], + 'content'=>$data['content'], + 'create_time'=>date('Y-m-d H:i:s'), + 'pic'=>'http://tc.pcxbc.com/card/'.$file_name_new, + 'page_url_record'=>$data['page_url_record'], + 'page_url_report'=>$data['page_url_report'], + 'page_url_bluetooth'=>$data['page_url_bluetooth'], + + ]); + if($result){ + return $this->msg([]); + }else{ + return $this->msg(10002); + } + // 成功上传后 获取上传信息 + // 输出 jpg + // echo $info->getExtension(); + // // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg + // echo $info->getSaveName(); + // // 输出 42a79759f284b767dfcb2a0197904287.jpg + // echo $info->getFilename(); + }else{ + // 上传失败获取错误信息 + return $this->msg(10001, $file->getError()); + // echo $file->getError(); + } + }else{ + return $this->msg(10001, '文件缺失'); + } + + } + public function card_edit(){ + $data = input(); + + $result = Db::table('app_card_data')->where(['id'=>$data['id']])->find(); + // dump($result); + // die; + $this->assign([ + 'result' => $result + ]); + return $this->fetch(); + } + public function card_edit_action(){ + $file = request()->file('upload_file_app'); + $data = request()->param(); + $check_data = Db::table('app_card_data')->where(['id'=>$data['id']])->find(); + // dump($check_data); + // dump($data); + // die; + if(!$check_data){ + return $this->msg(10001,'修改数据不存在'); + } + if($file){ + // 移动到框架应用根目录/public/uploads/ 目录下 + $file_name_new = $data['card_name'].'_'.time().'.'.$data['file_extension']; + $info = $file->validate(['size'=>$this->file_max,'ext'=>'jpg,png,gif'])->move(ROOT_PATH . 'public' . DS . 'card',$file_name_new); + if($info){ + $result = Db::table('app_card_data')->where(['id'=>$data['id']])->update([ + 'name'=>$data['card_name'], + 'content'=>$data['content'], + 'pic'=>'http://tc.pcxbc.com/card/'.$file_name_new, + 'page_url_record'=>$data['page_url_record'], + 'page_url_report'=>$data['page_url_report'], + 'page_url_bluetooth'=>$data['page_url_bluetooth'], + + ]); + + if($result){ + $file_name = basename($check_data['pic']); + $filePath = ROOT_PATH . 'public' . DS . 'card' . DS . $file_name; // ROOT_PATH 是框架定义的根目录路径常量 + if (file_exists($filePath)) { + if (unlink($filePath)) { + // 删除成功 + // echo '文件删除成功!'; + } else { + // 删除失败 + // echo '文件删除失败!'; + } + } else { + // 文件不存在 + // echo '文件不存在!'; + } + return $this->msg([]); + }else{ + return $this->msg(10002); + } + // 成功上传后 获取上传信息 + // 输出 jpg + // echo $info->getExtension(); + // // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg + // echo $info->getSaveName(); + // // 输出 42a79759f284b767dfcb2a0197904287.jpg + // echo $info->getFilename(); + }else{ + // 上传失败获取错误信息 + return $this->msg(10001, $file->getError()); + // echo $file->getError(); + } + }else{ + $result = Db::table('app_card_data')->where(['id'=>$data['id']])->update([ + 'name'=>$data['card_name'], + 'content'=>$data['content'], + 'page_url_record'=>$data['page_url_record'], + 'page_url_report'=>$data['page_url_report'], + 'page_url_bluetooth'=>$data['page_url_bluetooth'], + ]); + + if($result){ + return $this->msg([]); + }else{ + return $this->msg(10002); + } + } + + } + + public function card_del(){ + $data = input(); + if(is_array($data['id'])){ + $data['id'] = implode(',',$data['id']); + $result = Db::table('app_card_data')->where("id in (".$data['id'].")")->update(['is_del'=>$data['is_del']]); + }else{ + $result = Db::table('app_card_data')->where(['id'=>$data['id']])->update(['is_del'=>$data['is_del']]); + } + + if($result){ + return $this->msg(0,'success'); + }else{ + return $this->msg(10001,'success'); + } + + // $num = Db::table('app_version_log')->where(['id'=>$data['id']])->update(['is_del'=>1]); + // if($num){ + // return $this->msg([]); + // }else{ + // return $this->msg(10002); + // } } } \ No newline at end of file diff --git a/application/admin/controller/Device.php b/application/admin/controller/Device.php new file mode 100644 index 0000000..54afd02 --- /dev/null +++ b/application/admin/controller/Device.php @@ -0,0 +1,207 @@ +=',$data['s_time']]; + // } + // if($data['e_time']){ + // $parameter['create_time'] = ['<=',$data['e_time']]; + // } + } + $num = Db::table('app_device_data')->where($parameter)->count(); + $result = Db::table('app_device_data')->where($parameter)->order('is_del,id desc')->page($page,$this->page_num)->select(); + if(!$pd){ + $result['num'] = $num; + $result['data'] = $result; + return $this->msg(0,'success',$result); + } + $this->assign([ + 'result' => $result, + 'num' => $num, + ]); + return $this->fetch(); + } + public function device_add(){ + return $this->fetch(); + } + public function device_add_action(){ + $file = request()->file('upload_file_app'); + $data = request()->param(); + $num = Db::table('app_device_data')->where(['name'=>$data['device_name'],'bluetooth_type'=>$data['bluetooth_type'],'device_model'=>$data['device_model']])->count(); + if($num > 0){ + return $this->msg(10001,'设备已存在'); + } + if($file){ + // 移动到框架应用根目录/public/uploads/ 目录下 + $file_name_new = $data['device_model'].$data['bluetooth_type'].'_'.time().'.'.$data['file_extension']; + $info = $file->validate(['size'=>$this->file_max,'ext'=>'jpg,png,gif'])->move(ROOT_PATH . 'public' . DS . 'device',$file_name_new); + if($info){ + $result = Db::table('app_device_data')->insert([ + 'name'=>$data['device_name'], + 'content'=>$data['content'], + 'create_time'=>date('Y-m-d H:i:s'), + 'pic'=>'http://tc.pcxbc.com/device/'.$file_name_new, + 'bluetooth_type'=>$data['bluetooth_type'], + 'device_model'=>$data['device_model'], + 'page_measure'=>$data['page_measure'], + + ]); + if($result){ + return $this->msg([]); + }else{ + return $this->msg(10002); + } + // 成功上传后 获取上传信息 + // 输出 jpg + // echo $info->getExtension(); + // // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg + // echo $info->getSaveName(); + // // 输出 42a79759f284b767dfcb2a0197904287.jpg + // echo $info->getFilename(); + }else{ + // 上传失败获取错误信息 + return $this->msg(10001, $file->getError()); + // echo $file->getError(); + } + }else{ + return $this->msg(10001, '文件缺失'); + } + + } + public function device_edit(){ + $data = input(); + + $result = Db::table('app_device_data')->where(['id'=>$data['id']])->find(); + // dump($result); + // die; + $this->assign([ + 'result' => $result + ]); + return $this->fetch(); + } + public function device_edit_action(){ + $file = request()->file('upload_file_app'); + $data = request()->param(); + $check_data = Db::table('app_device_data')->where(['id'=>$data['id']])->find(); + // dump($check_data); + // dump($data); + // die; + if(!$check_data){ + return $this->msg(10001,'修改数据不存在'); + } + if($file){ + // 移动到框架应用根目录/public/uploads/ 目录下 + $file_name_new = $data['device_model'].$data['bluetooth_type'].'_'.time().'.'.$data['file_extension']; + $info = $file->validate(['size'=>$this->file_max,'ext'=>'jpg,png,gif'])->move(ROOT_PATH . 'public' . DS . 'device',$file_name_new); + if($info){ + $result = Db::table('app_device_data')->where(['id'=>$data['id']])->update([ + 'name'=>$data['device_name'], + 'content'=>$data['content'], + 'pic'=>'http://tc.pcxbc.com/device/'.$file_name_new, + 'bluetooth_type'=>$data['bluetooth_type'], + 'device_model'=>$data['device_model'], + 'page_measure'=>$data['page_measure'], + ]); + + if($result){ + $file_name = basename($check_data['pic']); + $filePath = ROOT_PATH . 'public' . DS . 'device' . DS . $file_name; // ROOT_PATH 是框架定义的根目录路径常量 + if (file_exists($filePath)) { + if (unlink($filePath)) { + // 删除成功 + // echo '文件删除成功!'; + } else { + // 删除失败 + // echo '文件删除失败!'; + } + } else { + // 文件不存在 + // echo '文件不存在!'; + } + return $this->msg([]); + }else{ + return $this->msg(10002); + } + // 成功上传后 获取上传信息 + // 输出 jpg + // echo $info->getExtension(); + // // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg + // echo $info->getSaveName(); + // // 输出 42a79759f284b767dfcb2a0197904287.jpg + // echo $info->getFilename(); + }else{ + // 上传失败获取错误信息 + return $this->msg(10001, $file->getError()); + // echo $file->getError(); + } + }else{ + $result = Db::table('app_device_data')->where(['id'=>$data['id']])->update([ + 'name'=>$data['device_name'], + 'content'=>$data['content'], + 'bluetooth_type'=>$data['bluetooth_type'], + 'device_model'=>$data['device_model'], + 'page_measure'=>$data['page_measure'], + ]); + + if($result){ + return $this->msg([]); + }else{ + return $this->msg(10002); + } + } + + } + + public function device_del(){ + $data = input(); + if(is_array($data['id'])){ + $data['id'] = implode(',',$data['id']); + $result = Db::table('app_device_data')->where("id in (".$data['id'].")")->update(['is_del'=>$data['is_del']]); + }else{ + $result = Db::table('app_device_data')->where(['id'=>$data['id']])->update(['is_del'=>$data['is_del']]); + } + + if($result){ + return $this->msg(0,'success'); + }else{ + return $this->msg(10001,'success'); + } + + // $num = Db::table('app_version_log')->where(['id'=>$data['id']])->update(['is_del'=>1]); + // if($num){ + // return $this->msg([]); + // }else{ + // return $this->msg(10002); + // } + } +} \ No newline at end of file diff --git a/application/admin/controller/Login.php b/application/admin/controller/Login.php index dcadaa4..c10ed9d 100644 --- a/application/admin/controller/Login.php +++ b/application/admin/controller/Login.php @@ -19,15 +19,23 @@ class Login extends Controller{ public function login_action(){ $data = input(); - $key_word1='教育'; - $key_word2='体测'; + // $key_word1='教育'; + // $key_word2='体测'; // $data['name'] = md5($key_word1.$data['name'].$key_word2) + // dump($data); + // die; + $result = Db::table('admin_user')->where(['user_name'=>$data['username'],'pass_word'=>$data['password']])->count(); - if($data['name'] == 'a' && md5($key_word1.$data['password'].$key_word2) == '871365cc2db43a8f2c7544798b36ed78'){ - return $this->msg(10000,'success'); + if($result>0){ + return $this->msg(0,'success'); }else{ return $this->msg(10001,'error'); } + // if($data['name'] == 'a' && md5($key_word1.$data['password'].$key_word2) == '871365cc2db43a8f2c7544798b36ed78'){ + // return $this->msg(10000,'success'); + // }else{ + // return $this->msg(10001,'error'); + // } } diff --git a/application/admin/view/appversion/app_add.html b/application/admin/view/appversion/app_add.html index 2356295..6316f1f 100644 --- a/application/admin/view/appversion/app_add.html +++ b/application/admin/view/appversion/app_add.html @@ -56,9 +56,9 @@
-
增加
- + + +
@@ -105,54 +105,54 @@ } }); - $('#add').click(function(){ + function add_data(){ + if(pd === false){ + return + } var formdata = new FormData(); formdata.append('apk',$('#upload_file_app')[0].files[0]) formdata.append('file_name',$('#file_name').val()) formdata.append('version_num','V'+$('#version_num').val()) formdata.append('version_num_original',$('#version_num').val()) formdata.append('content',$('#content').val()) - // return - if(pd){ - load() - pd = false - console.log('进来了') - $.ajax({ - url:"/appversion/app_add_action", //请求的url地址 - contentType:false, - processData:false, - async:true,//请求是否异步,默认为异步,这也是ajax重要特性 - data:formdata, //参数值 - type:"POST", //请求方式 - success:function(req){ - c_load() - pd = true - if(req.code == 0){ - layer.alert("增加成功", {icon: 6},function() { - //关闭当前frame - xadmin.close(); - // 可以对父窗口进行刷新 - xadmin.father_reload(); - }); - }else{ - layer.alert("增加失败", {icon: 6},function() { - //关闭当前frame - xadmin.close(); - // 可以对父窗口进行刷新 - xadmin.father_reload(); - }); - } - //请求成功时处理 - - console.log(req) - }, - error:function(){ - //请求出错处理 - pd = true + load() + pd = false + console.log('进来了') + $.ajax({ + url:"/appversion/app_add_action", //请求的url地址 + contentType:false, + processData:false, + async:true,//请求是否异步,默认为异步,这也是ajax重要特性 + data:formdata, //参数值 + type:"POST", //请求方式 + success:function(req){ + c_load() + pd = true + if(req.code == 0){ + layer.alert("增加成功", {icon: 6},function() { + //关闭当前frame + xadmin.close(); + // 可以对父窗口进行刷新 + xadmin.father_reload(); + }); + }else{ + layer.alert("增加失败"+req.msg, {icon: 6},function() { + //关闭当前frame + xadmin.close(); + // 可以对父窗口进行刷新 + xadmin.father_reload(); + }); } - }); - } - }) + //请求成功时处理 + + console.log(req) + }, + error:function(){ + //请求出错处理 + pd = true + } + }); + } layui.use(['form', 'layer','jquery'],function() { @@ -185,6 +185,8 @@ //监听提交 form.on('submit(add)',function(data) { //发异步,把数据提交给php + console.log(5689); + add_data() return false; }); diff --git a/application/admin/view/card/card_add.html b/application/admin/view/card/card_add.html new file mode 100644 index 0000000..7de2f3d --- /dev/null +++ b/application/admin/view/card/card_add.html @@ -0,0 +1,218 @@ + + + + + + app版本管理 + + + + + + + + + + + + +
+
+
+
+ + +
+ + +
+ +
+
+ +
+ +
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+ + + +
+
+
+
+ + + + + \ No newline at end of file diff --git a/application/admin/view/card/card_edit.html b/application/admin/view/card/card_edit.html new file mode 100644 index 0000000..d448a5c --- /dev/null +++ b/application/admin/view/card/card_edit.html @@ -0,0 +1,232 @@ + + + + + + app版本管理 + + + + + + + + + + + + +
+
+
+
+ + +
+ + +
+ +
+
+ +
+ +
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+ + + +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/application/admin/view/card/index.html b/application/admin/view/card/index.html new file mode 100644 index 0000000..a50c68b --- /dev/null +++ b/application/admin/view/card/index.html @@ -0,0 +1,360 @@ + + + + + 所有卡片管理 + + + + + + + + + + +
+ + 首页 + 演示 + + 导航元素 + + + +
+
+
+
+
+ +
+ + + +
+
+ + + + + + + + + + + + + + + {volist name="result" id="vo"} + + + + + + + + + + + {/volist} + +
ID卡片名称卡片图标卡片描述创建时间状态操作
{$vo.id}{$vo.name}{$vo.content}{$vo.create_time} + {if condition="$vo.is_del == 1"} + 已停用 + {else /} + 已启用 + {/if} + + + +
+
+
+
+
+
+ +
+
+
+
+ + + \ No newline at end of file diff --git a/application/admin/view/device/device_add.html b/application/admin/view/device/device_add.html new file mode 100644 index 0000000..05dbb72 --- /dev/null +++ b/application/admin/view/device/device_add.html @@ -0,0 +1,223 @@ + + + + + + 设备管理_add + + + + + + + + + + + + +
+
+
+
+ + +
+ + +
+ +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+
+
+
+ +
+
+
+
+ + + +
+
+
+
+ + + + + \ No newline at end of file diff --git a/application/admin/view/device/device_edit.html b/application/admin/view/device/device_edit.html new file mode 100644 index 0000000..d80b175 --- /dev/null +++ b/application/admin/view/device/device_edit.html @@ -0,0 +1,238 @@ + + + + + + 设备管理_edit + + + + + + + + + + + + +
+
+
+
+ + +
+ + +
+ +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+
+
+
+ + + +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/application/admin/view/device/index.html b/application/admin/view/device/index.html new file mode 100644 index 0000000..9f20b3c --- /dev/null +++ b/application/admin/view/device/index.html @@ -0,0 +1,360 @@ + + + + + 所有设备管理 + + + + + + + + + + +
+ + 首页 + 演示 + + 导航元素 + + + +
+
+
+
+
+ +
+ + + +
+
+ + + + + + + + + + + + + + + {volist name="result" id="vo"} + + + + + + + + + + + {/volist} + +
ID设备名称设备图标设备描述创建时间状态操作
{$vo.id}{$vo.name}{$vo.content}{$vo.create_time} + {if condition="$vo.is_del == 1"} + 已停用 + {else /} + 已启用 + {/if} + + + +
+
+
+
+
+
+ +
+
+
+
+ + + \ No newline at end of file diff --git a/application/admin/view/index/index.html b/application/admin/view/index/index.html index 8362e03..affc984 100644 --- a/application/admin/view/index/index.html +++ b/application/admin/view/index/index.html @@ -52,14 +52,12 @@ -
  • + + + + + + diff --git a/application/admin/view/login/login.html b/application/admin/view/login/login.html index b3f98cf..330faa7 100644 --- a/application/admin/view/login/login.html +++ b/application/admin/view/login/login.html @@ -46,15 +46,15 @@ url:"/admin/login_action", //请求的url地址 dataType:"json", //返回格式为json async:true,//请求是否异步,默认为异步,这也是ajax重要特性 - data:{"name":data.field.username,"password":data.field.password}, //参数值 + data:{"username":data.field.username,"password":data.field.password}, //参数值 type:"POST", //请求方式 success:function(req){ //请求成功时处理 - if(req.code == 10000){ + if(req.code == 0){ layer.msg('登录成功,准备跳转',function(){ location.href='/admin/index' - }); + },500); }else{ layer.msg('登录失败',function(){ pd = true diff --git a/application/admin/view/member/member_list.html b/application/admin/view/member/member_list.html index 6dd9d20..f4a9eba 100644 --- a/application/admin/view/member/member_list.html +++ b/application/admin/view/member/member_list.html @@ -66,7 +66,7 @@ - ID + 账号ID 唯一token 手机 邮箱 diff --git a/application/admin/view/member/user_list.html b/application/admin/view/member/user_list.html index 4532186..6689ebb 100644 --- a/application/admin/view/member/user_list.html +++ b/application/admin/view/member/user_list.html @@ -40,7 +40,7 @@ -->
    - +
    @@ -74,8 +74,8 @@ - ID - Aan_ID + 角色ID + 账号ID 昵称 生日 性别 diff --git a/application/app/controller/Card.php b/application/app/controller/Card.php index 6989e33..f810b6b 100644 --- a/application/app/controller/Card.php +++ b/application/app/controller/Card.php @@ -14,48 +14,44 @@ use app\app\controller\Skip; class Card extends Base{ protected $color = ['#FF5656','#FFAB00','#5AD06D','#6492F6','#3967D6']; - // protected $db_name = ['2'=>'app_card_body_data','6'=>'app_card_skip_data']; - // protected $db_content = [ - // '2'=>'height as v1,weight as v2,bmi as v3', - // '6'=>'jump_num as v1,jump_time as v2,jump_kcal as v3' - // ]; + protected $age_limit = 16; protected $unit_symbol = ['score'=>'分','height'=>'CM','weight'=>'公斤','bmi'=>'','fat_r'=>'%','fat_w'=>'kg','muscle'=>'%','muscleval'=>'kg','water'=>'kg','bone'=>'kg','protein'=>'%','proteinval'=>'kg','kcal'=>'kcal','visceral'=>'','sfr'=>'%',]; protected $unit_name = ['score'=>'身体得分','height'=>'身高','weight'=>'体重','bmi'=>'BMI','fat_r'=>'脂肪率','fat_w'=>'脂肪量','muscle'=>'肌肉率','muscleval'=>'肌肉量','water'=>'水分','bone'=>'骨重','protein'=>'蛋白率','proteinval'=>'蛋白量','kcal'=>'基础代谢','visceral'=>'内脏指数','sfr'=>'皮下脂肪','body_level'=>'肥胖等级','body_type'=>'身体类型']; protected $bhw_list = [ 'bmi'=>[ - ['min_val'=>'0','max_val'=>'','text'=>'消瘦','color'=>'#ffda69'], - ['min_val'=>'','max_val'=>'','text'=>'正常','color'=>'#5ad06d'], - ['min_val'=>'','max_val'=>'','text'=>'偏重','color'=>'#ffab00'], - ['min_val'=>'','max_val'=>'50','text'=>'肥胖','color'=>'#ff5656'], + ['min_val'=>'0','max_val'=>'','text'=>'消瘦','color'=>'#FF5656'], + ['min_val'=>'','max_val'=>'','text'=>'正常','color'=>'#FFAB00'], + ['min_val'=>'','max_val'=>'','text'=>'偏重','color'=>'#5AD06D'], + ['min_val'=>'','max_val'=>'50','text'=>'肥胖','color'=>'#6492F6'], ], 'height'=>[ ['min_val'=>'0','max_val'=>'','text'=>'矮','color'=>'#ff5656'], ['min_val'=>'','max_val'=>'','text'=>'偏矮','color'=>'#ffab00'], - ['min_val'=>'','max_val'=>'','text'=>'标准','color'=>'#5ad06d'], + ['min_val'=>'','max_val'=>'','text'=>'标准','color'=>'#5AD06D'], ['min_val'=>'','max_val'=>'','text'=>'偏高','color'=>'#6492f6'], ['min_val'=>'','max_val'=>'','text'=>'高','color'=>'#3967d6'], ], 'weight'=>[ ['min_val'=>'0','max_val'=>'','text'=>'低','color'=>'#ff5656'], ['min_val'=>'','max_val'=>'','text'=>'偏低','color'=>'#ffab00'], - ['min_val'=>'','max_val'=>'','text'=>'标准','color'=>'#5ad06d'], - ['min_val'=>'','max_val'=>'','text'=>'偏高','color'=>'#ffab00'], - ['min_val'=>'','max_val'=>'','text'=>'高','color'=>'#ff5656'], + ['min_val'=>'','max_val'=>'','text'=>'标准','color'=>'#5AD06D'], + ['min_val'=>'','max_val'=>'','text'=>'偏高','color'=>'#6492F6'], + ['min_val'=>'','max_val'=>'','text'=>'高','color'=>'#3967D6'], ] ]; protected $standard_color = [ - 'fat_r'=>['偏低'=>'#FFAB00','标准'=>'#5AD06D','偏高'=>'#6492F6','高'=>'#3967D6'], - 'fat_w'=>['偏低'=>'#FFAB00','标准'=>'#5AD06D','偏高'=>'#6492F6','高'=>'#3967D6'], - 'muscle'=>['不足'=>'#FF5656','标准'=>'#5AD06D','优'=>'#3967D6'], - 'muscleval'=>['不足'=>'#FF5656','标准'=>'#5AD06D','优'=>'#3967D6'], - 'water'=>['不足'=>'#FF5656','标准'=>'#5AD06D','优'=>'#3967D6'], - 'proteinval'=>['不足'=>'#FF5656','标准'=>'#5AD06D','优'=>'#3967D6'], - 'bone'=>['不足'=>'#FF5656','标准'=>'#5AD06D','优'=>'#3967D6'], - 'protein'=>['不足'=>'#FF5656','标准'=>'#5AD06D','优'=>'#3967D6'], - 'kcal'=>['偏低'=>'#FF5656','优'=>'#3967D6'], - 'visceral'=>['标准'=>'#5AD06D','警惕'=>'#FFAB00','危险'=>'#FF5656'], - 'sfr'=>['不足'=>'#FF5656','标准'=>'#5AD06D','偏高'=>'#6492F6'], + 'fat_r'=>['偏低'=>'#FF5656','标准'=>'#FFAB00','偏高'=>'#5AD06D','高'=>'#6492F6'], + 'fat_w'=>['偏低'=>'#FF5656','标准'=>'#FFAB00','偏高'=>'#5AD06D','高'=>'#6492F6'], + 'muscle'=>['不足'=>'#FF5656','标准'=>'#FFAB00','优'=>'#5AD06D'], + 'muscleval'=>['不足'=>'#FF5656','标准'=>'#FFAB00','优'=>'#5AD06D'], + 'water'=>['不足'=>'#FF5656','标准'=>'#FFAB00','优'=>'#5AD06D'], + 'proteinval'=>['不足'=>'#FF5656','标准'=>'#FFAB00','优'=>'#5AD06D'], + 'bone'=>['不足'=>'#FF5656','标准'=>'#FFAB00','优'=>'#5AD06D'], + 'protein'=>['不足'=>'#FF5656','标准'=>'#FFAB00','优'=>'#5AD06D'], + 'kcal'=>['偏低'=>'#FF5656','优'=>'#5ad06d'], + 'visceral'=>['标准'=>'#5AD06D','警惕'=>'#6492F6','危险'=>'#3967D6'], + 'sfr'=>['不足'=>'#FF5656','标准'=>'#FFAB00','偏高'=>'#5AD06D'], ]; protected $result_end_data_mould = [ 'name'=>'', @@ -79,7 +75,7 @@ class Card extends Base{ // 详细卡片信息 // $data = ['id'=>'2'] - public function card_data_detailed($data=['aud_id'=>'26','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){ + public function card_data_detailed($data=['aud_id'=>'58','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){ if(count(input('post.')) > 0){ $data = input('post.'); } @@ -87,6 +83,7 @@ class Card extends Base{ if(!array_key_exists('aud_id', $data) || !array_key_exists('token', $data)){ return $this->msg(10001); } + // cache($data['token'], time()); if($this->token_time_validate($data['token']) === false){ return $this->msg(20001); } @@ -116,7 +113,7 @@ class Card extends Base{ // 手动记录 // $data = ['id'=>'2','time'=>'1991-04-20 10:10:10','height'=>'15.1','weight'=>'75.1'] - public function card_manual_recording($data = ['aud_id'=>'61','time'=>'2024-06-06 10:10:15','height'=>'175','weight'=>'68','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){ + public function card_manual_recording($data = ['aud_id'=>'58','time'=>'2024-06-06 10:10:15','height'=>'175','weight'=>'68','token'=>'0dafb98a10995c98b5a33b7d59d986ca']){ if(count(input('post.')) > 0){ $data = input('post.'); }else{ @@ -431,10 +428,11 @@ class Card extends Base{ $result_data['adc'] = array_key_exists('impedance', $data)?$data['impedance']:550; $calculate_body_formula = new Calculatebody(); $get_body_value = $calculate_body_formula->calculate_body_data_result($result_data); + // dump($get_body_value); $get_body_value['gender'] = $user_data['gender']; $get_body_value['birthday'] = $user_data['birthday']; $get_body_value = $this->hwb_standard($get_body_value); - // dump($get_body_value); + // dump($get_body_value['脂肪率']); // dump(implode(',',$get_body_value['脂肪率'])); // die; @@ -489,6 +487,7 @@ class Card extends Base{ $linshi_data = []; $month_num = $this->calculateAgeInMonthsWithPrecision($data['birthday'])*100; + // dump($month_num); $gender_val = $data['gender']; if($data['age'] < $this->age_limit){ foreach ($data as $key => $value) { @@ -559,6 +558,7 @@ class Card extends Base{ $data['BMI2'] = $data['身高'].',无,无'; } // dump($data); + // die; return $data; // dump($data); } diff --git a/application/app/controller/Cardparts.php b/application/app/controller/Cardparts.php index d402970..ab9703f 100644 --- a/application/app/controller/Cardparts.php +++ b/application/app/controller/Cardparts.php @@ -12,7 +12,7 @@ use app\app\controller\Skip; class Cardparts extends Base{ - protected $color = ['#FF5656','#FF5656','#5AD06D','#6492F6','#3967D6']; + protected $color = ['#FF5656','#FFAB00','#5AD06D','#6492F6','#3967D6']; protected $parameter_aggregate_top = [ 'weight'=>'反映和衡量一个人健康状况的重要标志之一', 'height'=>'人体纵向部分的长度,源于人体的纵向生长,受遗传因素的影响较大', @@ -149,14 +149,14 @@ class Cardparts extends Base{ // 内脏指数 protected $visceral = [ 'man'=>[ - ['min_val'=>'0','max_val'=>'9','text'=>'标准','color'=>'#ff5656'], - ['min_val'=>'9','max_val'=>'14','text'=>'警惕','color'=>'#ffab00'], - ['min_val'=>'14','max_val'=>'50','text'=>'危险','color'=>'#5ad06d'], + ['min_val'=>'0','max_val'=>'9','text'=>'标准','color'=>'#5AD06D'], + ['min_val'=>'9','max_val'=>'14','text'=>'警惕','color'=>'#6492F6'], + ['min_val'=>'14','max_val'=>'50','text'=>'危险','color'=>'#3967D6'], ], 'woman'=>[ - ['min_val'=>'0','max_val'=>'9','text'=>'标准','color'=>'#ff5656'], - ['min_val'=>'9','max_val'=>'14','text'=>'警惕','color'=>'#ffab00'], - ['min_val'=>'14','max_val'=>'50','text'=>'危险','color'=>'#5ad06d'], + ['min_val'=>'0','max_val'=>'9','text'=>'标准','color'=>'#5AD06D'], + ['min_val'=>'9','max_val'=>'14','text'=>'警惕','color'=>'#6492F6'], + ['min_val'=>'14','max_val'=>'50','text'=>'危险','color'=>'#3967D6'], ] ]; // 皮下脂肪 @@ -181,7 +181,8 @@ class Cardparts extends Base{ // 除 bcdiv(,,20) // 计算部分内容的横线标准以及说明文字 public function conversion_interval($data){ - + // dump($data); + // die; // $data['gender'] = $data['gender']==2?'woman':'man'; $gender = $data['gender']==2?'woman':'man'; $age = $data['age']['value']; @@ -203,6 +204,7 @@ class Cardparts extends Base{ $temporary_arr['record_time'] = $date_temporary->format('Y年m月d日 H:i:s'); // dump($data); // dump($temporary_arr); + // die; // 处理格式(顶部) foreach ($this->parameter_aggregate_top as $key => $value) { $data[$key]['key_name'] = $key; @@ -220,6 +222,8 @@ class Cardparts extends Base{ array_push($temporary_arr['bottom_list'],$data[$key]); } + // dump($temporary_arr); + // die; // 处理顶部list foreach ($temporary_arr['top_list'] as $key => $value) { if(count($temporary_arr['top_list'][$key]['list']) > 0){ diff --git a/application/app/controller/Index.php b/application/app/controller/Index.php index 985dc3b..c3cd070 100644 --- a/application/app/controller/Index.php +++ b/application/app/controller/Index.php @@ -90,9 +90,9 @@ class Index extends Base{ if(!is_array($verify_result)){ return $this->msg(10001,$verify_result); } - $result = Db::table('app_user_data')->insert($verify_result); + $result = Db::table('app_user_data')->insertGetId($verify_result); if($result){ - return $this->msg([]); + return $this->msg(['aud_id'=>$result]); }else{ return $this->msg(10002); } @@ -176,7 +176,7 @@ class Index extends Base{ } // 获取指定用户详细信息 - public function get_user_data_information($data = ['aud_id'=>26,'token'=>'0dafb98a10995c98b5a33b7d59d986ca']){ + public function get_user_data_information($data = ['aud_id'=>58,'token'=>'0dafb98a10995c98b5a33b7d59d986ca']){ if(count(input('post.')) > 0){ $data = input('post.'); } @@ -247,15 +247,15 @@ class Index extends Base{ } unset($user_card_list['ROW_NUMBER']); $user_card_list['card_order'] = explode(',',$user_card_list['card_order']); - $all_card_list = Db::table('app_card_data')->field('id,name')->select(); + $all_card_list = Db::table('app_card_data')->field('id,name,pic')->select(); // dump($user_card_list); // dump($all_card_list); $result = ['user'=>[],'all'=>[]]; foreach ($all_card_list as $key => $value) { if(in_array($value['id'],$user_card_list['card_order'])){ - $result['user'][array_search($value['id'], $user_card_list['card_order'])] = ['id'=>$value['id'],'name'=>$value['name']]; + $result['user'][array_search($value['id'], $user_card_list['card_order'])] = ['id'=>$value['id'],'name'=>$value['name'],'pic'=>$value['pic']]; }else{ - array_push($result['all'],['id'=>$value['id'],'name'=>$value['name']]); + array_push($result['all'],['id'=>$value['id'],'name'=>$value['name'],'pic'=>$value['pic']]); } } ksort($result['user']); @@ -315,6 +315,18 @@ class Index extends Base{ } } + // 获取卡片路径及卡片数组处理start + $card_all_data = Db::table('app_card_data')->field('id,page_url_record,page_url_report,page_url_bluetooth')->select(); + $card_all_data_result = []; + foreach ($card_all_data as $key => $value) { + $card_all_data_result[$value['id']] = [ + 'page_url_record'=>$value['page_url_record'], + 'page_url_report'=>$value['page_url_report'], + 'page_url_bluetooth'=>$value['page_url_bluetooth'] + ]; + } + // 获取卡片路径及卡片数组处理end + // dump($db_arr); // die; // 添加目标体重于当前体重差数据 @@ -342,6 +354,9 @@ class Index extends Base{ $temporary_arr['record_time'] = ''; $temporary_arr['card_name'] = $this->card_data[$value][0]; $temporary_arr['card_key'] = $this->card_data[$value][1]; + $temporary_arr['page_url_record'] = $card_all_data_result[$value]['page_url_record']; + $temporary_arr['page_url_report'] = $card_all_data_result[$value]['page_url_report']; + $temporary_arr['page_url_bluetooth'] = $card_all_data_result[$value]['page_url_bluetooth']; $temporary_arr['inside_data'] = []; foreach ($this->card_data[$value][2] as $k => $v) { array_push($temporary_arr['inside_data'],[ @@ -363,6 +378,9 @@ class Index extends Base{ $temporary_arr['acd_id'] = $value; $temporary_arr['card_name'] = $this->card_data[$value][0]; $temporary_arr['card_key'] = $this->card_data[$value][1]; + $temporary_arr['page_url_record'] = $card_all_data_result[$value]['page_url_record']; + $temporary_arr['page_url_report'] = $card_all_data_result[$value]['page_url_report']; + $temporary_arr['page_url_bluetooth'] = $card_all_data_result[$value]['page_url_bluetooth']; $temporary_arr['inside_data'] = []; if(array_key_exists($value,$db_arr)){ $temporary_arr['id'] = $db_arr[$value]['id']; @@ -403,27 +421,6 @@ class Index extends Base{ } array_push($result,$temporary_arr); - - // $temporary_arr['acd_id'] = $value['acd_id']; - // $temporary_arr['record_time'] = $value['record_time']; - // $temporary_arr['card_name'] = $this->card_data[$value['acd_id']][0]; - // $temporary_arr['card_key'] = $this->card_data[$value['acd_id']][1]; - // $temporary_arr['inside_data'] = []; - // if(array_key_exists($value['acd_id'],$this->card_data)){ - - // foreach ($this->card_data[$value['acd_id']][2] as $k => $v) { - // $tem_arr_2 = explode(',', $db_arr[$key][$k."_data"]); - // array_push($temporary_arr['inside_data'],[ - // 'key'=>$k, - // 'name'=>$v[0], - // 'value'=>$tem_arr_2[0], - // 'unit'=>$v[1]!='无'?$v[1]:'', - // 'standard'=>$tem_arr_2[1]!='无'?$tem_arr_2[1]:'', - // 'color'=>$tem_arr_2[2]!='无'?$tem_arr_2[2]:'' - // ]); - // } - // } - // array_push($result,$temporary_arr); } } return [$result,$target_current]; diff --git a/application/app/controller/Login.php b/application/app/controller/Login.php index 75ac8f3..9d3fd44 100644 --- a/application/app/controller/Login.php +++ b/application/app/controller/Login.php @@ -304,7 +304,7 @@ class Login extends Base{ public function check_code($data = 18530934717 , $code = 123456){ // 默认验证码正确 - // return true; + return true; // dump($data); // dump(cache($data)); // die; diff --git a/application/route.php b/application/route.php index c52e4c2..8f1c9b3 100644 --- a/application/route.php +++ b/application/route.php @@ -28,6 +28,25 @@ Route::post('/admin/login_action', 'admin/login/login_action'); Route::any('/admin/index', 'admin/index/index'); Route::any('/admin/welcome', 'admin/index/welcome'); +// APP账号角色管理 +Route::any('/member/member_list', 'admin/member/member_list'); +Route::any('/member/user_list', 'admin/member/user_list'); + +// 卡片管理 +Route::any('/card/index', 'admin/card/index'); +Route::any('/card/card_add', 'admin/card/card_add'); +Route::any('/card/card_add_action', 'admin/card/card_add_action'); +Route::any('/card/card_edit', 'admin/card/card_edit'); +Route::any('/card/card_edit_action', 'admin/card/card_edit_action'); +Route::any('/card/card_del', 'admin/card/card_del'); +// Route::any('/appversion/app_add_action', 'admin/appversion/app_add_action'); +// 设备管理 +Route::any('/device/index', 'admin/device/index'); +Route::any('/device/device_add', 'admin/device/device_add'); +Route::any('/device/device_add_action', 'admin/device/device_add_action'); +Route::any('/device/device_edit', 'admin/device/device_edit'); +Route::any('/device/device_edit_action', 'admin/device/device_edit_action'); +Route::any('/device/device_del', 'admin/device/device_del'); // APP版本管理 Route::any('/appversion/index', 'admin/appversion/index'); Route::any('/appversion/app_add', 'admin/appversion/app_add'); diff --git a/public/card/1_1718264230.jpg b/public/card/1_1718264230.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cac00d1fbce24bdd45dc039940a180132d1bc28f GIT binary patch literal 25803 zcmbq)RZv|))9u0CCAho0yGw9)Ke+3`J-9<~2+qOX-Q8V+J4tXSH{W;vs{ipm+@5*Z zwP$K-s&>!n)zfSLUH`iWKv$5FmjOUP000pG8sP61ARK`BUqeDhMnXeJMMuNM#=^qJ zrNATj*C;s2sLB3yPG(*vdL~|GH8DOuF*Rcq1r=jgD=XK;sKlBCa?k=1^ zCz9f*aUJJ8pSxS}Kc?VLqiHpi&IeeQ;gInP7jPh?gsPa`Hr+-ixfu{m?&}v%TXa5_ zF@EXKVTEzZX51s~HD^A+QW7m-+XZ8b=<#SO@OoSlwzQP4X2W#vh84_X%S5N%`qgr= zZrLTYvFH$uGC;<|*lB=-&bmvNX4bxDRc1f6oYlI8!Y7DX=f6CWIPwT$_4KLQQADk1 z2W$JhciD}*I0-9HRVPgHS1c2q!p9_Fzz32@B*dP3qn^9mz*f`{#MCed#V{?WqItJ_ z%+|u#thW2WLsBr93DraXToPdQvlIu2iAfEa)0B*3e1uwdus~qU*j4Nkp_oH~{mnb1 zgrVeWn^U4Hf`ehLk=b_?d(MS5#i7MzQHdyZ7e<28G)Elnzn?=aUe9QX*}#c1%-M9T zGLc$!Qq!%$2h-KcsZri3A_2%=P8ehj+FL|Q=RLcV3(3eV>YMl_q8DYW&PYz7((xYA z?D#7xcD0hrbulB@A^!-;o#M2zlr%HflIw&~eftN_x}@eLvd)??v1E#BC3!hMb&yYLr-V!|lY*MR((KROz zn<^kvetk#`90Wh!+VyDRpxd$Vl2>oeOMO+gMa|CI)TGs;fJ*z8J9RuyErUW@y7@rF zJ;9-t+@ zeAj>Yrq$kAW}SBDYkS#4tZq0#7ek*jwE;W>iW5{dtZr}MfX@66e3_bE2KH!41&a$% zzKJR{{3Le~MW+w;esPv;^W$^%q3X^jl50VH z`wNiVKgyMM4j2u&%d#wt$@G8N_769O*|cXldHHZ45p%ik`XqudFwU|QF&vACZ|Tbx z7bot@a!DHqHB+xrL%~V`T_%lZbJ6uE>flV6YhJp1z$Oevr{{6 z`=b{>65`_=1QmxZ^x{(}Ol`Ly=|;<)of8Y8<{eT5kT_T4M*AW!eXJF-{k1I7pfPKq zUS0lPfaFxOVaIhB!*~m!_}r|Yw%avJ=Uj_S)qHK$`vob{+dU)7Y|G)9QH?q{vW|;; z_EJFk*GeQMR_ARGoK<(Hx>5G(;xWalXd3urSN5Ctg?5At4Kem^|BMc!k(E;8?YP6a z|5%~!l}D`|%@@I-6L;%@j;#)X9c)ndC65P}5hGUnR-IN8eD0t7_wSvrR|w}h3*QQy zO|k~=g>kQ3+y=%PZ#zEP^)DRt^_2R7guKf_oxG^?q_t!EzQ)moRhiS?(QUmFA|~2p z#sLG#HA+uv(qS?6HFvR^$3^vhl09PyoB@a^hSnl2yUC}VEe0p;s-yi`EpYC`w)7dJ zt*;hr@%J$3`U=L+1o90|J3)aVo`(j^k(`X8-;_}+mQD7YdnkrsJcxje8<^02l$&xB z?hUC;m#J0vFyhEW1tK*9n+DciYeVWmDZW>8B4xTu#niloSMNg^e*s?+L(*3mfYmNZ z0e*d%L*UKPEuL>uU}_na3;^!xC3jnQ+AL<{Ruj}@RjhAkD(D=)x;4`1ZRLlFu#bhg zmR#$lTzYlGmT>|k3=w?34|8hFZ@DHK@z%116PGqEYG-5ltxf8^)2`lcU;zI6j0yhu zEm0t^-|9wiM=x^u-4T~RSzS4p_!ox<0xj<*cLbA5)3U^dn}c9w$*&?c)^w_|c1KU= zlHZ)2a7?~YHt(xMiaKsNeVR;V2M-_SK5ITashnhR&Eu6o8Lf}}@Wfe@ShZBaR#IZP zny&;&cJ8eWHLh6(h;OL+?SiVm1(b-l5_zlV2(E@*&@|Rh^w7wMtUDQ)rwejqf3wV@ z&^8-JT~S|~6e#X=%`zN4T2&Lb6uzViu;(cV_;bNr_oHw5Iw(jcaK9mKe&EGwoz`j= zKjt60#b+v6b*aG^64RK814pddz`HtY8`iFk?XO0eL~hvdF# z_^E0fmG2EBrEv|fb6D_gCVC8}zhD*A#?uJby1gVs2Z=6382-$E*oPf-H`g45fLQfP zW#ldP?Kv{=_Yp@CZ@3XSi^HNVE{m@HVRuFMWcU?`aU_w zeQhgdQ&oN<>@*j{YCsJgdy1oR9*c)l2yyOiQe9iRAUz>|3d!v5=ly%BcS(r^7-*7t zO3J|0>;2BqBQut~I1Rz}^32W4w(q9JL@CQl@RhVuAK0u?U3QE}iB)~x>h*zYSi$)` z{{0v&kl^{&izUaznjakclBdF_ecvFUH|GR28-KBo)L<5 zfy2mMoyxho%RAnJPCJs5lrlyJoaL1Mr#;%fd1U3hhnBO;J$nz^yeNtNe)Bz0D(Ae> zXJxj5AFEu*9Z*_UGItYO9KRM}g3U@?e0SeFZ*ne3$I$G6r*Ui{bQ$n-hA*~c2m7@O zw#MTrst`p1O}OH?*nu9W0d7ZRw~wuf*_-F_8{!M`A{f)tIY-AgF@H7K=oQXe-+S)~ z%us>yW#)$N8ph*UE4Aaoe57-@0Y!P#F&>i+0uD#5_*5(y=6lh!W8AV@QM)*d&=dRy zZ(0M;NZZa1D}oZxysZCpiclh8qgA953_#lI{T$CTt+nG z&9!Y0t?k{v^JQY?JOWTXOCVlGjGTU-#MS79Z# zRAvxgml^iRV&Dr!E<4LynH@Tn0nl0VvLQGhFc9Mk)suaWb1CUAkokCtNxSf@2KhyQ ziWKb;^7FTK@PaI#yY(>xK*)+8fvNud${Rc%hl(mQ` z3t-9Y+M6@w954*yV6lIkG|&_98j1%1z+T<@+=K={zMh?y0HADiT6IAnbIqIpm}zN9 zJjm=kUbTbMP^ci#F59kIAp#At+@HHa*d7%#BF@hjd^9+Njme^n*W9SprbG%*Pj9dB zDid7o!fbE=d$4vTi0|$L4b9!D0qZ9nBS(u*{MFrU$7vIq(f2H7!zfxCTf*ghQO1kw z)vF2MIwy5)N0IV(v>{!Oy8zr&Dfg8rp6ccaia(cMc)#Oeo%;ds6zLImfzNyw{@sRI zM{5n|NWvDhoc2Zpu4%TNLla~4m-k)hc``hIj4RDHDk~68jx@)wtNdx0*m!~wZeL%K(eb`(n0kG_)s}-S zD2UUp1TaXj(fZE%r3TH(26eZi2Z$x^jqe7GnZ2QxBQ{#JSLI{a1-bTPi2gsl2%xQA~+s}p8KmKX_!k8w2{D9a2h=yM?aEX~@_Hv2kCvWF3SM#R@Ue>!HUtIsiH z91b!0Doc^S#m{rBTvkbBBv4!X$s$BsAt9?g#XF!J$<5{MrQ9pSX^y?7m9-zOiBc#m zGIe~%0Wp~;NI3g^M@VceChYpvBHX#Na4sDR*z?X8KXO@6dHgkJH-dI5jCx5J_4CWj zq+@~crx{HTB`t~Tk5=u4g*w5r%S7~ygc`!!m!f%W!T_jS|KpW&pFb(9zK)H2;vr(5 zPs6iB^GeEzrEz1)Y^LkTVu)>XO5&0JO)MD(Pypz~Ek6K;P?CvkR#_N8cQE z?&Es|3)xXs@ytDhRhOEC=%iPxF15ZcAjvSt;Yhh1wBn9 zw&3#|o$@sKinG&5kNgMYw3U^tk_m487aZ)7vb7Pe#d4^SV6^F#s@YQNpZCr7q$~EB zIOeEYwW~Cmgeaa^;y@#<4(>KerfxQ9pIj)$uNLOz`P)GczI7H4-qQ@Zk@$er!<-1n z;Fr7fS{!oX9duY;L?NQE?Sm?IfZBOa=`JDj*=2tKpQivywd}Gj!voVorrcTV)z3PO zrK#F-yRNlRf%!3HlfMAOiF~vOLSbJ1vx4zx*CLG^cn5+eCPFBib&sa>IEC|5^C=}f z8j!G_UXyq|Ze_KD{PkTrHB&DwT>V=+|G=!MMNo^870*p%#8#XoLYTn%HRc5cm4=H@R#X2oW9gO-@Ve%J@GI?mX9}<+Bs>KlfL7ww$lmc^l zr$#IkN}N9oX+(TbOVQ>WQO`bOGW?{4l3k$HtHJQI?gblEeyv;Bs~VuVRN*&P=IlS3 zcTiL~2jUlV#A(_Y7}#E4lFr6Q4Af-OCl;8NR#c0M=kZ_}SRiu!Uiww8+^d&{ zx|IZ6?li&E70IWl-%yc{TiC9YkO&h?<07z#pn`}f0IQlF!Unp>+R9n+ zFY!$BAFNP&p+5&iuA6_`o>UUsn(Jf6-8+oKm1r2Dy#&?gEXCpBK z>s{eeA;R{og*#?toAS5ww{uU|Ide}@iB9?XP_g3QGl4S)G0T6(?HJz&Z@L|a(#?{j z#`7gS8__f7b=j^gh+oFHiz7#bf&)%B=4^>%2|Jp4oQtx%)g+m2p%VmL#DaD6_0P~C zuk3~^H{|&Lr07wb-`X;M@YLpl_Mk0~ke)<#g>(J*uGlwJ-R7D~3cPm3(9Rw2{sNYN zpOOZ>Fe!f8ZN)pzMFk|jZwbU?=Oj+SMvu=`C)LGjw-HfwB!I3enT24*#G@k&lIvr% zGPsfjSKMyUHV^r(o7a1u^7DX^-FJP(`m#Bhwo|4OM+nu$AK`AK^);fDFkfbv_XFdc z6ZpapP%-@Ow&V7^4pGreM_&f|-!N5xfc+gPYanJs$K&LVH=N5J)>|F6}6hFM+Tg4M-2Rxi1p1fpAWO z31e-Cef;BBg04GJs;)V6fR~{$ucRS!&Tl+PA5yFcjkl8QW1d~4bEo7sSLLNt^Fqu+ zS|IX#ehn*z2^{8J489aD*A3_bmSjT#tNAqs1uD&K^2pk9BNslyq zDM{NmkuLo@I0{yZ7^*C!KI9#aNt!%lQ3e-3DxU*w?~av+g=x)Ha2@F}oO-eArDWR= z(XAvg%G}d7GP4XeG@2ccx8B91^NKnk>abS%Dytd<4u1!NGoZl9{s2Rxl~QlYUQ&+mk9o1=0@dE|@)VTx%Oz3L}CJV!8sCDNS_`YO@ zo@~d9IFlD5G=@Z%4$4Kr(YR~jx3lmPN&1Y8;Jn!|N zMgiX6$*cTqZOeULfyNN7ORBDSyb2vJv1WB!7eR*gMs5I5j4eyT1W%@n5SIi+Zgpw7 zQy2?vCcQDbU(yJf>d}#lCCl_q?lo74THkC{JJHn;g%SA_)h`(MpNH+nV5XboyHL9jaV!K{Wmrx;&_zi!X4C`^PrqHI=%rYB;Y(a1=VTUC9-Zq@@vL22q8T0>H7UL?Ca$u? zYqeIem4)zHpoE)y>eV?cMo;;me>A`R)&T!?!+MR@{Q||at(8!|n-prPe!}1^I1o2) zokgl~C~O@Mt)1)*m~JL<-M-FUiHQ6qROW}V9?|Vs+z~{++X$8W+R`uecZ{s+WxeGj zaS8E8P`h()V_vg&JonI zwF2o?o$TRLPeD<&MVzN}nr}7}!r6ZT%2Q)qrQaT}iQbQ04=9P-2w_&{vqv?t0M>a& z-k&NAWYqaDF9=LEoFHz447zcuFuk_A#&7{hG~&D!k!yZYC;7L?L*)4Us#EaM>7M&C zFESC`Z*!joJjh>xpH5;hw8?lFvcQ;06yflwe^@-6B8UVPT|zv?={if*=u@p{Nx-Sy z8ypFUtKs_#Af(JJPZcHkEVA&nPzYXKZ_wY4MSU#MFJIXTtJ>|Zk(kD1;`$_d>(u=V z0Io`vmZ&BF1(0tAfmp7JtEu~LrIdu`o*sRd)bg0cE4HZ5G{aqFhhu!GPWk76E-}+K zSCpNk@p-??f^Qmd0<$|Lwga-9ME}^~9{&Z9t+0Odl@2@(RhSI>rlCxSwzvRrsvBiA zFjiKKyj(NuHYKlD^px^@6&BA+-J#QuuT|k}g?>Ll3jFxcODF*^EynGbE(_Wpgogsw;85E zZ7HApSCe=++;Pj6+M%_ds@Tfjo~V@7F~sZ?$c6jQLcm$8nB4ASAxms;5aGn_$n%e5 zZKe3{Z*UEqFbLI23C8-a!wBQob5JfVb=`LqL`0#S<@*glM)^Dywf)uoHi6mb`drNrSxn=6LuR}1lp**BNNLX zMc-nHJwFOb%7_`Rz>-wt^E5`{rgR@&`Khi#C~8}&CUyq}3^$|+#kIIGq5wWVSeeDk zL%8XM611@eZBdKb)910`7KYpMa+()b6qB+eFGY=^!Lk&PwH~fAtdri4YAbo`46hUA z#p0Psiwo6!ZDtP)7yTNX%on&-9kR#*#X8-MZ}VE?=i=BQORb?A*1Al&)xjyvK5DWB34 z{@iR#S3<80a@bUVMd)UQo*Q-I8Ci*VmL(v|k{mwsYU#~>zd6P|aN=;m zT2)?=n1O&L{bgGox0{!vXLQ^2vKmtF6{>+9Mj<56@Wyl3>=~|>J@KJpqQns77Zh+; zRqK+Zp(z$;fHR~*HQZn>Uq=@`z`-zwu^*yMR${#bLS{#Ntzxm|)8Bwc!nWhMr{V9I zRF@?R@7aP3x-MRfKam}uvD}+&t$;qEhYtUu=(b%3UXn%AlE!91#Ix$*x^## zGQS>~a+JzMh&!B*W4|_$?3kD=wx?JbOP%Kk+>R!XZ+713<&IH%*wAESsk-A%u=g3) z+RTsy#?&=drP9_19si1+(c|GUV8karkQ0v@o1;p0QzVc$yL zR-j~!3c#iCX;?V0DV)oYQ?1xXC3S(psv(+iKP8g51>+m>W>+P+@)wwd4ZjONPQrJc{Z=jrL{l_L?% zj8fd$rOB?wf?a$&J@)FF9&fTZynSC#=HFsP&7&4G=dAsP+r1i zpj4u1wx=&5F4#nVN8PIEQTlf!ZqHy`%GtAHmHpMfZjC`Yb6%R^8>!M4p~CRQz8@G) za;hTG?C@)G`b$j|Cv6%q*vKk@l@ON(vjt(R8xks7dU_9yF#O7{+@@t+Xr;{?R$pcg zXQ+pmXqxlR{m1>T%kDi}a~*%4`MS}`44GSpBC?G@mZM|}_ zu!F|B?)ss0exxijoH|PgJ0yc`n#*{;)SL{2q+ky`5|<~ggj&vKX%l4MfAAYYH5=Fy>z@&S=S#M^3WSE1=I%(fTuSe%U|a zsK}fM9tXbK{%9=@g&_WsG(zS8%?1tpN1yh>XB%@#ODdAYFf_8t4`>gimt4fLwH=*~ zzj*J%u~p zU-A3qb-@#E6>*&iUz+{X$vr(2rhpa6qYa}`eM_eHiB86x2^=7)jP9UcwI^^4EeAK6?oJ`2Hhf&mG&AP~p>wMy~wN@Cw(PZqT5_(sQHz|Cq?vE66N_3H1@ zUaD(6k#HNFal6|Qhf^hVt#q4Q=F1tMdoLugQ>XV z!1?*tBvz4G&R}>S{NI2RMzjB3C#q|RKD4JBttBd7U4IJ1bwAPg4Z_K z8wsQ+ic+ zpFdSx%B3^9czifd(b8x1@1d*OPt1g^4%&=C{A_&v^dJI#UGC0_tWJTxI35R*ip^NJ zQh07KnIKf!7^~OUP`0%Rc62KjFUeS@jq>O9wOOtA;LR0mCv2ndJf?MCEZOZsI$LwV zy-?KAA65K^+}u)ImRTLYNAW^Zr+?SLw5VG3^eFsRJLGlG4rkI{DD8>{X-!+v9PO?%VA1&_BggBt;;=nqe?Cp0>0Qv9KKt4Q!)}` z_Vn)>?omR9y;$d)r%Z!1adCBw+6_cmzDo;TFzapHwhql`UUa4Txn`+lM;~rv#WsBC zeQmjYy80nY@C!k6MTU3hp1U?!6TNvbWHsKA1#u_0nOCD#u*5;=I+iOD~<21 zt-mozoBA@vQ%BJ5J5y;EQ?|>AUtgct4QmHU^OncjqWAJIDSc|SE0&_SS3}Hosk9-| z;x3-0g2ZA=;>H4{8RtUgIC1#oDEF0lQOG4tJIOrLzIjn9N-(e1@=?bc7^C_)06_ zfjzgos_pvmpB71aT+Y(g)az%D^S)T~`J*X|%Xzv2kyw)0XX@g$=nnQF*L^mkk0}TE zt=VUHRlVGu``0peE0b9jJvidr2Jll4!DU@p&Og7msF!XK_{6cunifEDX|9}P^8gsY zhXDzmo>7TQvPr{V%#5uP{{q%IY~~g_j|mxm*w4A~Q&{?I%NOHw0rBxwq&GfY%>ZFD znfeHL#Cf`8E$RnW_K6UH5r*lIrFFM!HNL2j&EX=vjfC!!r&@<={Z0L!y1Hcf)RFG+ zlY+6DsRNGAwHq?ZWAH@DiTX6k?nb=JVrj>#vkR`s`Ik$+uHpEIU;4}qFI92#YXZ_e zQ}pYYE;UKZn#;}m%6NvUi3z#6HxXk@AQ;4_uw}M&4%u;=jwkRr zfg>=hpcCJ1H+v#$`=iR_(*)i+W>z9^*lBKQ%PZMxJ2xtBCL@Ccb5kxv_Lo2ElSFQn z<@enT)JEZjDRuQ*gs#0ZZKkBb>(sBG#!D~!KnHJajS4U!D2tp2ZfVRS zmPgxD+Q^W?Z>5-W!&sDG#*HK6w~>a{zk<~R$&mRdL7K-F=B}$_GvHA?17EE1h*J7=v)PMXF>?dQt)ozs!> zM0U3M_4`uI< zo~Q(^qmp8nisV;rntV<0$tc7P$5B*cF{6Hhep5>N(+Iqx>Sm}Zq6PI!V{BQ#uQ;b@^e*Lj4C=aImSAWAGcMt2 zngEe9P+JSDP-^$n71Z(Rd5G-VQ=XWMI6QW9y6GO6BSWj_J&jYWrL6Xe54@%&xyYvQ zWWOGOa&oxbse@xfXV?BI_f&r{WhHW*B973-L}0SnIl8J5E~W^8;Or4hjH}J-*#dtm zj0c`Qx4gq54ggfaMl=rmIt#JamR&PLI#B*@0{10g7a#VUcK5e*#Ia>?Jd% z>6t*uy2uzi+Ye$XjZG@l3yuxMO1x+xbMcKdfpoUPdfHI03l!7!g&-8>OkRR>?(aOB z)T^5*-I;iC85*p}ySqt^6rf@@IqEnbBe123nxG1#a)iDOil7P!d@NfAv8)>0O`Y54 zY!5+-u2Wv5b`ACUD9M`~&LK)DY$aEH65t4V58W+J^u1X=y&Y$%t5c>l$9*|zH9iFi zm%5Epky@XfBh*o0nV^-G#Sz@2cz$}JCgvEarb^~=a(}hkS%T)>Vn`X|7FKe_i z@D@q7QCC%`unK!*g*^s=+^j6x!T3%Uxic0#zBhs5ls@`Ejddt>^NCV(<#*3dr=sHEVvh{ zi%vQbI9>Z7j)!zIQR&`BTQ~%s13lgPl#eWtqZAO^ctabNqkrH`TfO*A%J5>r+GdFo z*F`V@3~Ts(wZ*s*Vld=qWsSe2o{CvA1_PdfivMK|`kMhgZY$`EEW$SffRMkJoW8V) zAj6jh>6Z~ekXBN7OUIYy&c9n{r@ z`7F21p=dJw3!u&tJI=n=e4A*lhPY|41wx|+TvSg(4%K;U%m^?VWN_&8nEBhUl*~KX z5AQ@HmgGDtb)_m@9o=#$1I1ai^G7G_>?i4@wcxHdn+N(eSf7|F9`R?D>bW~O6H1o< z0=6GWa_+h>qIR)hpx4)G49ARqjZdl>!^$n>#~{{E(PvGka02tXje%3Q&~@K_xgpWu ztusU4Q=}}HxqhkGOOZcG&!`0QOP1(Vxp=G+4KgZGMI%NAE|R6=qwfA#Gw~N?a0BV9 zLzz;U0k1F;*Tw1I0{)463S`uhm$Q}G>16nBaZK^Z!_A}-eX5i+9@?SkmhCwbn47T~ z`DXBWTD6&SPkGlwva_TghxZ9jYO*{Zhm$WK*-T<*d9D)F!Vtl_-8DN~1M*XI)qw$i z@`djT+%YQOa7vEJ69m$*g`+$|jB0=Or&K4g&BYNPpLNIv-O zSHb3Vqr9k1lEfF0yhTj1cy*@xJ}aSlD?WA6#Z#CY)pJnqx%#QRL^Q1$WArs@PYUb_ zY&vmfa_K6pKx~W1dtK+mL4yp*!5=|yFDzmqFHYkTJDT?N)i`%nI?E4~IpP3a>w?~c z(^bPj;b6;$(qMA$<6_y7)&?$bhQ&7G&4$^$s=56^-hoHKB6`;P3t=NMO$Q$J>s(h2 zwdP!(0iCb;Sc=rA3RP#a8`sd$7KvmvlUY<5OB~O%P2v^{y;1HaqPw_w!_WDweL17< zH#zan6$6qrX`IS2>-%U>5)=qjqO`%~yCKaE-hV%BUX7+-;07IDyNz=}`V&<=}o zq9LLd56zQut#EL}I8xLA=meqLp#L!gq2x50i`!ag?u+vI!JD*tHIc91RyDK-c_1bh zGS(=;P>K4*X&pp%AlgqHy>$o}9Ajfe?eK2{0red*nyy&Ul(Hj08C1sErqQ~Bxc2H) zj$CfZVd_}xTF<2ID(G_oH#F;Ho!@Tu@MEF!R0Za&sdSSEe1QF5DZA+B+_xKfyS^>B z^|#|DD;!Fx1E&nikM{5u(cyPg7($IE9n@RQjF-VDl5ybv$`<$-^&eldZ*$MPs0oH) zuvThZZ(&}+oDxC&s_rnJJZ8G@dKT(?tMD1xWFL%7vA;U(1UyR{sJyI_X1w%H z8$9FK#)t@f-j6fv3F-Cq)Tcsl&2h50^SqlJ|M+*32;EUlKWQZy4hpwZ#i zM@~Y;s-_^)OQddWWU z{l|Ad!Od3LEjT&R5O{AGMheUBlzl8QNoz!{qbjdLjS3?L8!}}iuy+|JA5H*3z{WWsO>-vl=ZIUx2 zl5cK%Eeys7ZbMCWYug9kZLX4@Kk#1D)Rxqs$`6xp%{Mlr_OOMqQ7w;Jj>n@sN{&?~ z$FWe~TfojowOa(`NCr^{@e4t=lJAl0ksPTRWnAse7;S3w0hZtaUG^BiAqmmjYpRA- z=@+mpkcWy5;67INBQ1mu3vc=_V8bFDFb1to28S`kkn603eaF?bxlidKb>xT1MxVQ~ zWpJ)J#Y2J7f&b$4a=GJhzaJtC%Kw7NL#7)Djq$2pkYt+wV*Q& zw!@L&lNQkTu=ymmZO5hFYdNgwIr@!JI@vH^^j2FR=5N+4H%BEXRT^*|v>E6%q9JQg zX~?o2i<%~J*x$&GOE%^d#ANgq^0HElmTq}Bqf1k52zO9NQ_K*Vqxcg!uu}6GTjyIh zFiw8lzl~NMLZ4H}#hm@3l(Enbo3g6i0#o=uAHqYs$i~FIG_lX}AGV3yZ3U=nz_+0^ z%VVoR_Q6kV8JX(WG79a-DdWa%-(l%de;+U=i=B9XjB}?z&JD8qE`(hkvh)@`f3$X@{7<-wHrEBlpL)3<_H(2PUpV=I%|N)?goF+ih!-=g4MF+svc3A0@AlFN$>fig*klXLza9Uze$5!ywF)dBZyss zIRf6621&W0&g;?n>%o&@d}|XK+Br(#W_o&UGEzy8{H<|SM+%{0P-RNf(4gcn??b+a zHCWt%SREIqdRdVc9?8Z)hPd}kRB&(wI?tl`#`HgxFv_ut zvBGLBg^Q?Xwy+Ywh%(i*lhob&pgxT)6M~^btJ)+d+{ceyg9WEcBfmro7RMZ_`5Ac= zx!KqlX&5>r;Yw^I4%b04l_P+imUZpvu*9weTDyL9yl`MWKQAHE^0YLEr{%XMvvM@( zLt!k^43DC_nB=YE2rh2=3)o_Q*Z;=&K15<7OHs1fm4nY5htQg(TFqoW!wUzOS z%$Pz@DJ)>uwnVh<(WXDpir@bI);qLn?k-jW;^~#)`Son>Mqm4fi0kTsDX6Pf2UZR& z{CYuB6IcugZ-W6pVsoh}ERaZPl!R?CHAs|}cCBPz3|DhFJiP@)Q7&pncmJxs5$okP zwk3TLsw8+3zEsmS#ViB+31PuDG92DBF^5uawPcA;E)I|I<-$gZFs$KK~;(XLy=U7zy*b*~Ddx(@6BXo;&Rq2S!g{D7R zCi#=QMo6Jjgc}D3!s}Nu#1>G;`^8!wkfR%VC_yI|5v4S*!T;$?zJ7a`Wo+_{*k(LOTCbu9OXd9Mz&EV%S`%4 z+8(vYrWJ}4;qxnSjOcdS&%Q4_uSj)P)a0O$gbsq*KxXB1X^=>& zL)snkkvQ#bM^7P{XFaEVq;QhO89X3!pge zyF~*IJ&*mXRwuiylm1hauo2n<1n;H0yMwxeA=e9G@O|=Ok%|8TRyF?u;2(GY0^lst zgZlGQpV2_$e*qbRGH6GBe*ypGs>1)|s{j5%g@T2FhJb{D{;ymW0EI!$F0O`-Nd`^9 zVdk2QMad=+!YQWy14gm|Tf^Kfl!|L$LDN0ue}t_uhJk+@HmYSK9@}O0^4Ipkaki`D|enp%U>6Uf&C9hpmixS$>PUS4{*pqjcJ3L>Q3E1d<5No;^=m#X?klre=hV| zu>*w%t)7wp;mrR@wWQ8dIIP*t=8$&W^3{=ciLE;e3hUO}HU$e)!y>B0)BKyP|=g4HSp+O3)=obl|H_ZPff ziMOiE=!*kcrM*lg8e3NKcSyKLb8zi7W6_vzV<_1z5gKv=EC4{-VEn*DI`b7KL(P7q z4fj@7NSRPF@v6aIPc|!kFoTzBc0T@SF;zn&^+$WUw4KR1i8-q5XLRW3Z5Q)QC|L(b zXjsSa=NV)|slj~oMX#N?UUw1UPtN&3D>#_Qc^bRw#!K zis)86GGq$f$cC7Ce*skMDvgskc7`#HBH9v0ijlI&LK++ANUcid6@l7u)@uMc% z&U z3BK@ucYzD#D`5IZUyFZ*h)tossNizzGIp=w`n1(__Jay5tqR^K`KaAd4I9^HT#sLT zcY4iRkCbJh?Au8ATlQq1sGwmf*Y{MYD<4Nt_nn?qWijYV3YTmkByI>nH4600fd(07 z>5+u2)r10wZM*yLBn)cDc!Rkhu*_PI`sHr(B7%PTNQ%S+!%O^GuKKg}q^CbN|7R;J zKx!aunvra1+C_LzutpRXSe~;9EP-vF=odLm+BHmMTqIj z&cD%km;RyVLJ~d_Iee7b$)$Hd*A$q6SZMyWaHllVF=g&%dF<1@iNlw0azJ?|oGff{ zP)qy;(ktelY+J$$thVut> zBwYF6+rZN2OSkjQB@ZOecF^ThFR;KX`f_=uQ|K}wC88R^9UJn-YE`)J(!e1S$tY7A zh*+Qt07difQ zCtr4qL>gyB2}*M|EB?y;OCeKS6*XAOV!^NcAy{fbf$`FbON-zUhBP{GNXK|42g&@l z@vqm0IHh1jG6)?)@oC*-e%oy%4LPS(s$_o}xuM$`-UBERxvoqU{VR779IR%tTS%|$ z@3)XaDW11><{HKek}rjc77gLJ?p6ghpR+V*MG5rif_s?M+t>80*2Oh41;+@YkII{b z(^OVf|0m!hAKYP;v4dMxrgaeDMa1ry_C_H|(OMuQS^97&tAbX_|&F%T+&fa&b2taVQ8?Dl;fk1^oW9tJlB;3BC6 zVk`)ql8UzBICz+Huc?ep7i<{)r0@Z10glE30n3I=q)*hQc@LN!8;G|Q$YVa`A6v7U z)kY00DdfY+X5D%W1k54fx6xQ2`k7M@M)F59D^CgHFsLkjM@I79>^Csn zMt=FF!F>FUjs0x zm^$#@3<$<=^gi**zNUDP1z1t)B7gzNF_lBTOFKLygV+3*pk3``UD(DiUa9ADcR3G1 z8Z=G~uX%J~v5npsGU~kpi$;yXv0-H!bU%B_F^p{*HVi~O;?NrtG^oRl+!*qQ3U>bvmIq~Hb2?zlNd`HzCizY?>O&T%Fy6Xhs{^I|1%JcO?+w6E?2 zs9VxeOeShMmK+G0RAN02BdZq)%HQlK>UMgC8vAL-Q8P}py_BauiXwQaf=o8k3wPw^H^WnFd&RN z4lD|fQy8i8j9Bl(zWz~yk0|a*JDFJiCu_!3BzeS9f#a1bwph03TYguFBaQ*jBTo-% zrDNvn$0@!(hpQGKst+><%+EqhtLEk)q2#m|5pM z!Fcw$#LKbsi)=BRn%>G<*Y_~9u3OC=PDK>i7J}! z_>~BqkuJtu_AuZaH3V2Qe5?~oHSGS*@a zQ$sQX`!hEIMAQ-PW{Nmu(+nqoe{n}B83|nxc7vWKW>H%-q?RLjL=ViSLA1Tbac^-2 z^PkLcqJ-aJ5G^{16EU0^UjxS(NzdTU&r{kcQo2i$Omls>3_%Jwjn{=XP{P=Z#MKSB zZl-3TTz(Ay0F=M&(YHn^*(ux6+F}E(HHSLfsy8AwW_X%wYF<5e1!cfZ-56ILdA81g00vz)jD2<{=07!EQ;g6UIqqYe77umgvQ z49TkxU?!?3>QTehdN$*q!ytN@fpkQNVR*ax{2N`Kko zcQT_mWi4Z! z#9x|6%0u=J8{TchCZ@yOO-J^y0tod4N^4EXIEVgm&^Ebvkxe+vhCtwPf_ zwBLXxzyKn*J-jnQ1U3m!b4|xWUuM)9Nm*@)IFevBDbptFn*j%Oi}6fO1)%OBv1kBL zECjVjz#t<91CBv}=*=n@Uq+ga3-f7<#U~H!N`CUcD7Ff-#K60CXbja17(2~hhHn1= z(BX)1X3U~^lIY%}qfP;c6+?VoE+dw9yB08A*dM@{r6OIX3W!Y4k(=^nND20v2s5ZA zh9@;cbzf7cl?VJyQD$?GC@_P|R>1FLFfWKRGfi*mI@7pK*)}nauMkD~wa+SnJJpyD zW6|Pa$|h!_{{UyBCtrtFWKJAcbEMz4_wh=&Sq@Zjc^S!Ka&rjFtqSFy6_hiXq$SToNO#1@ph$*S+-f(hvd%A521&Z*bo)w zh93Cgs3K@cn~AXMI3gA^?`xkzZx{sw6F*H4x#9N{4V*9{4qB)=DzBKCIJ)|Y_s~}S zj*a+aY7jjHTR&y49F5hcwAx`-z3nmOyHCHgA7MY#tjF*scbPbuiJCAn{{RBIg3Bq7 zi%CN(iDsoyY{+t%5N!@R9={fA>Ly^B;(H!~4Jszi`?=6Y0)Cwmag_?IWCn7pa|__m zSc3@!Vh%(Yesw?WK-A6qtb8mXz>XdYg8u-KGq{@$oP_aqimHRq#4Jrhsw3GnLB~O8 zmUXFSGc!#~uJ)Qb%_uKU(@I|x`?S`At9}LsY7FoNVF&s~ejC!DCneS={b%B*rU1 zOw7ySuMCYwn?ZERYh`uBJr*?J$bhbkrtolGt%k;X}sJ`?KB|!PaQ&CzdU?Xei=VtrS3QpQ?wkE zN3)z&P6W*99$EJuWt)&h&Y2+k97MZP(CV?n(qp9Y4-0v0XMor=aTG9_2SY!K@XGjz zeuj3p<*)_|V4`Lh56GJn3}MpWh`0#0s-ok}%qk%%Q8r=Iw9AHU?9)VJ(UXa*!I8#g z&M)XOJvwlzJ|fWy5Mt7sQlxcIS*K*>VsWclcBiXZNb*>0l?SnzsrM7~>I`O1v($7j zWc~&Us9|!9sZ$UCfsne<9+0pBEdgjHoLn$H;AO{b< z3|{>fJj2TNib~qb+K6tK!W?gOKl~WCKz+LZ0EnKA!&v1S`O0=X$BaiE2li))h0o?? zXuZm(nRsCUXptjuxTkSpt3hre!V%1;8B|+g1Ab@z-?aNHM*jfpnSrT-jhBJAPRxUb z)6Q&1wDk6eyy$-bO#$f4nYrLQyuS{(8mY;lz=7;|ul}F39DN%DG3?cGL&H1Ea}~F& z@Z8(~0Hf4#Qbg22h&()2iO!$c5y>CK%pZLWnj5Ly za5kPTc0Ff!JHTQ$97Z<4&kJ{!Hzj2_7&$5kz}R3nGaB8gi=QFVzD?+7hWyFsVAqb7 zFE--VTWby8HQkIC!V3{Frx%8RllY%?Mn30`3>W>Qg;l5vMZHoiiaf=MFkI7nDCp44 zuk*a$I0b(k12ouS&2kaqy3UQSIu!!yGB`||?9I@X>#F@C^sRC(CanF>6^*C|L^COX! zR+u*CVljl(suhW-{zCKauE&YK0t3r`qJCfcuN#(vV_vzyF%XiuDLI+?j0-;<#MOk> z@MG{6^9QhL`m}&zHyVQuI0sEs^lBima(HJ61{J6_Y1t|dH6Y3zr2hcn60q{+l&Tp( z%4!KRp##eZVg{5JDy()r8VUT@nrH_TuRC;ltR2TTc-|!CQ~v;T7_cqH&8>onEq3|_ zoR>B+9a(@GchZ$x^Sl6jb0C!lyK_Fj1PaQ-bDyjBq zw9IiQf|!jdw5HHlMkZ4dn#5Q;$Aa7gEzA^_ZG_p66W^=d>hO_cGY8xlY{J2i<~Zpy zC!tC7pW|vjn5R1@Y)?TKw0>nOtmNT{A`w=-uC#_A9Sa$a&J)5j;i==0)_$7w9BG_A z49pqfsG}&{?Mzu}e>KpbJ@_yN)9~J63ozG$!)T<%Q3SA$E@DIx))|)pi8I7RW65&O z<_0iWRH%7<2NT>u%DqZLxVo8`Jh1#a%0R16MjMYKH5iSL9}i0aJmsstilR_NKyXxC zXJ_~+tF{roA-Po8oQqE$yC~zfCx!?;%p9rHl|WaAs_@!>9s}nn!Y9pALtZaRhKQq} z%&#;P9f04;c;8Kc&`olfyMax8OvzMmKQ^GW7cofVetVEStugp@d1gGT@#r?=P$opi z=Dje*398)wD7X7r0~vZJOisWV110$L5C4DwmdSqBlEzMh9WP2@29-Xc$ZLm2(|DdsM_a( z7Jn$D)j})|kln2^#Z%B`X5^~>0P`0M?c+`Xr= z+@ak#e*_-lZw-jVOqg)W{YScscz$hjhmr|`7RSuYYLSBG#K!KAWg7|HrZR*g>cpMOD z45Y$RXqNRc&`Qv|8P4920sjC=GvTVR{1G#H zs?e1c=?VV;F%WvOngKVOT6kDoO}fu>^(xF3-hc?cMxh_l#%5!wH!xrY;(`6fEP8IV zhl%6!s5mzq(dMFlmpd!0dx9>FxY$iZ(213}40C1Q%tS2_mQ%c@!YP2tPJa@ey=7Hj zNq6;%6nPFK6Jb0}fZ*RX$FP*hq)mez&kCg~p_Z(l^uTWbA%xyk?+#oF?HIXCSlSNt zN~W`V4jau-O(w&yFcn1b=FkC2G~CT<{{Xbgcn|f%Qy7!wFs7u#@aTgSEif&IM}hmN z)WzlqL1o=cH>X_#UNQJttA7|rHND2-YAx*#dYw!D4-sNP2Z}7Dp2AX3XrO%!`BrC= zuB>3YF}k6j&3GSCxSgRFa7YAtgBQDC9mZ0qs0NuBruUtiuP7L|DS+~Wck~cTx_yfK0D>s~)rtZEC3jM%c~Z$e;GK+TvqP{{W*7vr90ViGsx;1b$}n=*$jb>Lx92 zN1vt`y+1?2&%@F6SVu4%!(t{2UYPe2U$2`+9}BaNUsf@GO(We-2OIM@6fH>M=wc$N z11)$`KuNha6ZI=gHF}^HhQ-Nglv5OmnHWvJg%GZO^uW&5%${OqryF_C6*K)tB_I9f zR~Ltw2n>znVDOvFaJ+D-u$cp&Mu|U4ptFsRh6~g|b@LoaYCqb>yHQ}`(A`)ItZ&EC zyEIjT#6y4+G78gJdx}Xv^)bwtF=5R!wUlmQyD{iDrJ>bh22wC00&ENe;uG9W5JBD? z03u;L0R2S_^u?VtbcB&?N0H1QNtO71tvqR+#9VA}nS+EjxVsp*p9<;*=Z@lQXfU;m zZ~p*O9Y)44aGSdA#jcDj$Z~{=H4Ych#v*(1b-YC}O2?0Q3a1ku$f9@?1QRkq5QR!~ z$MhlY3=w*+)Jer-22wbY&BF`$kJeN0TNgq09wdScu&M`mZ{{W#!Rrm&O?Fb`6CD}HQjlPXReTF7oDFcG=@KTNPROkG@hAHP+~Y-3*f^;F}U{-;SJ!xaodi17&=>>HAa`D-eTf*nr;68 zkdB_>SEfB!N{vyrKurGt9aGiFSwez(u`-nxAN0jUU~(%fup2FeVo#mV8!DG9%rkGI zzz`uS!!fwn!WN(yryRdwUY#D(tvw%r1Z-kh+uCApGz84skCaj_IEjegq~Z+h)Rw=c zgHFz)9p`4J?J1)A064X3jQi@8%!G^QX7NA5%g=Kowc2rnCQlKqKUCT>;!f- z7czB%$A!!#M%v1K@+`WW?q)C3u!8x+%N*Vec#JQPS7>z;wN&?&8NEqAOVDuKalv<& zXouX!B4aRZRu1^nd03kpH8UubJBd|Tc~5D9=ygHnK$ouZJ_QrB?Ixq_B?UpeVq;iJ zdibT$H!~BthG)^d(9JqLR^l&*>~a~wr$$=MIOoF$+;H*gG+_`O!OR&{(|Jqcrj06c zHq8$(i90FsV>?+;biAS}xEZuOqhZ7hGh=}KKv{2#92O3D-2E+ApkE2U6|vv;d!CVx zSC3Jn35MfPW-)miaVr{${AXkmf>K!Jj2uCz`Y4UfvJ4bJ0N8yE&m6_(fDzH2(>^(E z^+eB8$7#9YxcW!Gwu~lwaRa3CC%YK7{?Dm9{Vn)vIBE#`I*x@VSqGeA?d&>o-h1?I z$8q$upOL@p_8d1nb{!kdpqs&bVu9S?Acv=Zt;g2eqyNMJE)f6%0s#X91Ofs91Oos7 z0003301*QaAu$9JK@%V%Q8HmLQbGk3BVsghf&bb72mt~C0Y3oJv=gMm>tx@7C@27N zJ5aG^rCMgjak~nHScFm3 zd-3CZtOCp!f7{~%g`Q7$&7)+KpGNZ2g4LH-2Q=;j{HSS@#j!85k ziW|>}gc9G!w6JwY`-E)*8@rueKJ*pH(S?s;)23eR_~JjPt=c@)*#`5S_lyj`mbG(_ zI@F^pLTX*gI%BKVm$=NU+mXaEg+Zayr2hcO$1xzphWwIeX>vRX#5ParR{C5$%zmK6 z$IR_zJZW;wy$ZW=Jtp$dcPXoeyhO0t@pCEeb~-;k-ixMXagoRZ8akcCdS7jm?zn>5 zI&HMvKxn{hUXI?<#iObgyAL9 zL*4fco@PCm!=_a3U)bVx3-SyG%@{+cBngE^97FAaCUhuHN6Kg9AU+@w&e4sSri2X4 zcAqcp1^)neS%(b^vE;=TE^Pwb>@X`1BL@3`7(uPhoEx4l2 zN$fSuCe;1Tr2hcMKlget+fJD+NBx>23~bDKXgpjyK|5`?;y)UOf(UkuY{LW)?J>2= z5se5=skSpQaUFLxGGYfEd52;|BE&mRn+a4#VYs@4g;rzYbk6x1@-f@Q2aA>rup?I2 zJnN188FAZfMur1XTExl3<6HPt#rV!z?o>{BYWRu#MrjS@M5iR3onxnRS;&s5IcWa^Dy_ubHq_&c(f6;K})Ry2=O|eoa3eg<0>#W zrZJA~+=!i43?t$TAF^U+$&e|kxS%K(<{5Xitq$Oc!%LSGlC=mR?r{L~ zAdEYpEIdJ(hxpH3{->#sz*@I6d2kNnv;YAMW4a^*D{ZD**Z^Q|++Qt>$-7(|#ya#a ztB`_f=W$anx(LRgC7=Llk$lPpV<%~c$Fj7&2)-dbi$j=~R%UD|ljK3M8>?ky3;2kg zS;)WyoljNV><0i;yO&Vzb@B{et1^o2+H{ZVW4}5d&WzyJf>0t4iKC+?((7X^OP4NO zxT``1?s9eNI$+?k^8>aJR;ZZZ@*sriTGZ+DoDY6JrYxzMLm{}r#Qdk?yTp4jZZZQZ zv}|C)tUO9HwT$dH$b%7q0QTI?fpU-gN5#4-WXHBO1NRO>+?$KM^%oG^a~mT)+4gkY z#?elMd(>Wp$NWx*QhS9!?uTPNWj~Svb-!tyF{Tl_mj6}4o38rO#^YpBi?M|pGc_|BVH{7h^kF=NcWRQOxQYs2yl zl+Dz9HDB;&a?^-dXcpK$TS`npBjA3TI+1JT&R6yf!j|Ykg{(#NnAF)j2XAtnHmUU& zje@Ke@s-zx84&=+uB--XXQL9XnRz0;f zy4!}SLX{zME@8*f9bPqDHYGs4jH^kh8y-i4v~Z&#wxh$aWYt)J2Lmuj@^`tgl-_#G zS4(rTMa)BW+{Vgdc>e&)&pQTfRaPqo-ep$2T|!ei9F$zjT@ZIa)^?xFAcp5)%A@H7 z3CW3Z%vRjy5qPP2popZykTy4n+~0LxfR-Z0J6*4^Ll_cezlr=?Aak}w1@8hV%ZX@n zQxNSw=9OB)+YB8-HA?|F{7VnS0e=$NgEa|x#^DLElp6Qg$BA$SxM7sq&9bBO0+Pa1vaN@5`#fh*c@tEn z&pX`dX-wShGpJ4al+Dp|3#s7&EMvB&gCQCYwpCKC#HK8ZFO?cer(Hu~DO1B%Q>08z zAJ8JlgOz3C@`&EcVJP25beGAMNYgy#As2&`qG958((iHO5%rmCJM6AaXeEip(O z0A*SxpEI!nh3j#bxU{CaP-Y!K;xTvctj1TJF5ti+8bI*P}gpwzcCHJ(6b`*uWvpK_(ysi)J%^ zIq?sB26UT4t)tLN$_VaM!_=mEQ)y$c!A;LfOcV$gb743pz;POdHN)JFW$l@YJ-td| z%eu8o`$V=woW@tQ!_>I7`HfXo34W*a^;>{JjfJEC06-;LbkpkBGUf&#-g?z-!L%jZ z^LaxHP`a^OEXHD2`$%@vbI5>MM#i}4$99}#U=rC3)wD1&wQo~M5op$9?Nb*CSoTc) z4;N;QMv|KsinIaX-YBGa07_IB>{epy=uH5_$-F0LAjGMtSnM~28M~DLQ(*_gLDecQ zp>YtS09Mw8f{BX7HS~*!Se{I|n03_SQLvRUNlk3Bqnd=0ayi=JV|KAncaYAbX;^vq z@c5HR*!4YnRk+t^aMWslvVM+$<(}dictnp}%tf%?X{qrYbhlh>GgXWn&bT3_J4~7KWxLp8K}iKfcz}cJBkZ10wx_oi;icYjs7ucgzKqS3_in&=+(8yA`@d`2stJP z%|m#!6$iCIkL?_bm?%ACb~af~l2R5`8F!XH=_(I)N^O$1^3$8dln3rC0_Fj1tPgQU tlW`iFR2+d02?^nd$jc3;V@2tiTY@uQpo(EI9N616m|=H{AFxCkl;>`;O@Z_+}%A8+--0O!JVK7OWu%k z?|tk2ezjRcb@kWP)!kLq-Fxjn3x9q9IP%hR(f|Si03g60;LkGf3BdSE&oMEdW8=KQ z!G4AJ@+ICYN&+JIL&-@&LjnKeWaed}XX0g66XoL*RWnkNS21!lH+PH;i*0MWNBI9$ z@TUg=p&_Be9|TGO5rlvQLiqC?Ach-=i1cLY{|Mn3A~FgR>YpV5?O*vl+kfiNDA9(+ zDE3GRayjzq8y!Zc?+lIO}#dwyUD^ot9bs z<{|bmUF-FAgZ}}(iOH_;OYZODZqYg97e*j}&6=Gp>V=p6tiPGjQ7V>2%F-x0xOfU0VsEx(HeW1mIEpS`twjzeqU_+h{L@45sJS(p~VuBVH{dCt;ZD~Iy`t2 zTTgCOa^H@J3=H%_ha2xs$q+l|9mZg?Y5#EMQskZRc7+>rD+A+mK?l9RZIMP|#}oCL z1c;tTo)|mVrN7HLcI`mvmt%)*A6!2+GBML#HuBnC?7B2~cBX#Gh1Ks}PycO5nWK=< zRa(Au-BsNaS-zM%`SW-1eC#7yA3vT55Uy&>KX@UthLenwU;JIH_J74!DlQSMV;D zQFn6NFQ|qd03>aE4tqzSG7W3<3%7Hj?WLO68+d_ zxh#J#F@8@00Epb3zMke~(@M0$z7zAOE=~L#a40}nxAW5s^^mIiB!9RRRMfNL%C9x27uZTg?+`9WR(D?XzPvYhMmy!>>AjZo1O;M6 zSbHn0A$?2dpN%|qR`*T}44%~DuUw~A=`;;oypw|M2>t=ApRoQjw~sjv34Ej?jS-#W zu%P8HlLt<4Gzxe6O4GYb6|ns8L~NrFGdL8P>*3m$9{MN{&JPwTEK_jWWwF>?>h*)y zAwwp-wVYpPHd&TfE6uEq`orP9MwOPr%w!qPl!;;cES{vT&$A3io4g$0F^)jyV_bPd zn$x-Jn^C)*1_vVw9XMv@zUHJ&9eZqxG3}a9KDhCDWVXM6uL^tl&ZR&HpPC)ybZK-D z4hHF0aF}dbb}9=MPhRXK34KS>wuG1y?BM|IqP1<_eTRMmxI=Jq^hYrYOY4i7D3b|gf zvTXJ4X8XdfQ1M$D&v%7eeNTPMR1Crav6x`xd3uMgB=5F^5svc%&SxR5GuUqfWZW?gc&uv^*lPOF-`UTSx zW{HV@)-*+5=GrbuT=F#HD8>g3&~9vKNT;y&ftfUS!`kobIs)g+KEFRef%$G~flkF~ zyQ-dfjpOd{{oelNT(+U>_Uo9G@d=3pQFzM0!Y0v(&B;k=N^8#a28f!Rwl{$4nR@UqA zXYPy*>=3rKzEi;Ox&0`RTc#xWSUEB z0G~R#G zqyuTnlp#HyctmwmhdU=CdwCCAAA5+v-EUH?r>Q`uWa}jm<{VblxM()IBt#Si5C~wm z{e0hI1X|aKg+nypeE_18vY#Wm$kb=5N8w(A7O_s(i`UQRxqoo)M%F?N2LKWi!(=T7 zv-cWTze^x{Tf|d6h2Rkka64r za%|y`FG6)JwYOuYCNA2f}0pniv-*ZBiUaBB3s#8_5n=Dz)0z^C;)iQZiEo_JBH@K!{HC0^Ea&{ z;QvNe7V+aV$+P?T833>aCP;i9*~VgXV&N;MzfbYh5tbp|w_UjDjq3{g@J5(64<81E zIHG(${DNhVEdGU14R=yNws*@)>Sn!0{Q*SAtM;19i>QZ(>RTea7hY z(;icxeN$EGw*d7#I9zp^`8#q%Ztl011W{~fQw#g&gK$rx??j)yS~lwZ?9rc|?)tl~j`eZJ^Toru1koo1tm5)zBssINa>TGYycosD^3h@j zLU?ufxF!2k&sLoF_Cu7AOQV26H+&8V&NJ6b>Q;{6lLRLz`zyM>XQEdm107DIKxeQ$Azvg1-yj< zMgJ=Y5vA)Xic<}s{hF=br^fxS7!k{BaTxNFoL~+%QhpPU{y#Z3#)|Ve6^SlnyJ&M- z&;PFnK2?J7$h--+*+Vl(xP|N-^5y@h2_f{2$UQN#XZwT8wbw`Sr{MpWkjNMZ)*+Df z8FC??2KED9WdHwE00<=W_-&Ae)B0X)Ebo!D|MdYNd-`~%?X@zJ=IEq`oGSh6aDQ82 zx^x<9)qJ$95pjmuB8vW36Z|~;0bf`5c3V0{vseEAwNU;dsRim`A*U0Wx9NI;D!NF*FZrJkq!-=w4Lxb#i+0;CLn@qvP{azTj(KzGXXd^+;OVnr{hJabV>Yfo`qAhd|&np^(~T zl%nKoRB59jBjNV2HtXa#KJO$7pUiQQ6N85wiS0*`9(ili4tAG^lX0J0ceoqT?-XAW z>HRWaub1WG%Odq%(n)Kon~wt!jHD|rsGwgdum2SysCN6mnso#)Zk_BY!OA zS1=J+7U!{f9Dt;d7SvSMR5BL_Y+W?9uB?)Zti$(CqE=ECWqV6#&Uzfsx4Sug``Brz zQVsx4zg*h;?|E3x0IJA}y_R2*1u3EcRZc_Vi2aeVe$#uvslH8U*x_^#esM7*`@Uzj zSL1fqjYu`NyS5EEwFdz8*4e#!2nu?a4g~_1-l>s!Y<6WL66#L*7BsTyTJ7*-Zx^23WNEpoom(}3n9WY^yD|qs zEm7*vov&K-y!EyKkUZ@5kSX7tQOG}@t;?X1nDNRYWzWvw9f8M4Nq>xKN~*Wwva_(Y z2|U;j85!QUkA}<(g|MSsQH<$oWov}5y$6?-5hk;f>*jsmj<03o5F2t|rgUQ*+Bi41 z5^^2;`K5Y2*so3D0u_ueF&kwO3_wI40))&t*zepeL=owA18?E06WHngbv8*Bk$nz5 zvlhNs7{A(50ki_s=WB2mt>nsM1L)-=&ESV>%4Bh8;2Hb3S0nG?hyQYhPTja?^lH3t zpTiF;m#Q5^h>2tN_6LxqOl$aU0cnOr-gj84h^&<|MFHo43L7e>ry~OZXj8t? z-+p3%e9AZfZWh{0>aPDiHmsk`uoll=?W~}sq zX8R?4S|<^>JzY#iwtkwXIeQTmmC!CWkg(9*hnb>6Yj`kAgZ5-tby)n7GKz|r8H3?U zi8iM~B18d)zL{*kWjj#-#aGv4Y<*~v0wMo{>wKl-7XZO_^Til@2Y_Jc5Gw673IH8v zNBv>`0F~me^`LeDaCVtcd7U+5cLZQ)csB8T0nlsXW3?kUGW}6iF!wvz07TdJ?S%S1 z1y@}_=A9o&##%SPwaT?)Y+yexgbU1%AM6j`0zi{gijx{hX!XHoExJq(!^Q6BjSkCa z0C9O~x`>Hh$+9ZauhW<+uQStEg?Dj+^kQdC6v57=ew<{ZqT0Npz3mQm?tXgVdblxP z*bE@pRc4rvqVT)w=^a*OjU2BJ9@n3_Dn4n`o=8Hx--s?Cba8Ro@-j$@1N6PY%p}PG zoBK?P`-khxvzbzQT!7XaJisFgG;r?Cr)Q|IELj2Q%W`SiKJNiQu9BUd0{O6@Q1{}y zKk&Mp*&m>VE}7>D;{rfq-Ae*WQ7pImq-}rrsbsp{$seU{SZli&zN&H!$FY3CjQ6V| zZur_eK*6^c0G0rgL;~D3nW10@BURv_)%3F}0KC1<0DIa1#8;bE18DHTaNy+WBm@xM z*U~Qh0mSRHhVyO!@t_+3z}LwYW1;|@uoA61`JNa6%E{@u>HoyNnjXqH*L>oh)z|8b zWQ#trP!I6b*b@VA)sHTDT2nl+%8kisrr}Q<$a~4c&PW#?j&NF&Yj;*-r+{+^Q&vjV z{i1LVU|rNT_kUu5nM#h`e>r)02_7z7H~=CdB0NG+k>UTJHm#><0iJUNrj=bTEIG^V{xnL-adj%{nyUs?-!g+Eo09-I|ksWh*`1vW)hDCw*J;XgDehaY++ z;(5j|JZNfkoWc`BwIhN!eRIn?VZWO2tNlCDdQ`$BNs9CLHmrjCX@Xov{j7k^6j55= z?|b`T&0*CMFuwMO^ZVYQhusc(+FQF-f?e>>!3(=i*oDNlEi$@_C5IG-BEi<{_gP{( zsQlzJa^qibdYt1EsLL~0f|~_SuM{Vu_#{5R%mk^kx2VHh2?6!N0dG> zFFMBBp<^6)=6Y@V@c7pI0p*$_Gi>2L$<{A`Txpj<3jI3W^e6)nLPXh!}hzl)AU zTH9M5#i-Yp*qD-?R8)t90+V9+5g_YcitGagT(t;2<*BHJQGv?&tjGmIbO(%)(sQNNu)H^(;YS_9 zrDLFOY#xhG>9L%74{vBuIo$v>oGW_oL+C}CzaA9Wf!K6j1e0)pXIz5ncxR)96#~3ATLRZYRo&Ok%eH zInP?*^R8zQ)|iG9X?5KT6R@u?XKsD9Oj~LE?f7WT^vZO#(4gU+jXm9x1HGjL?IoFW z<}P(I70`x|VxPDql*OvBozMOO%k+!u=nEtEZ$`$9At{JnR2*UXIp*dJstMntq*bdc zq+iQE#B;+l`6su6%5d9;mc&YHTJBAjt<1oao!Nb+$v#r^6j8+j{Yu|HuVTgVZvBF{ zcc1sI)hH)dBZ4Zif};BEL&efFar#kpy4EDE z-04Vq1EyJ~+r4*jAK#6?OgV++zaH~rzlH>=b2#-*@E*v9J+slqns0`E3fmi)R`k#f zx@$S6#=}kc##}>Onk$Y;LvTbl;@aIBJXb{1oLGUZF8Kun-TDKtBl?7!ll0OQWsIet z5B99a)XY)qE;DC*VCW{2eIr3ctSWuMG`QkhBj54^chO>4J8Fp0F|xj(DLGGI|CJzE zP1G+IcItBMprabxFFAW%lDJ{#VQv5nolBsPx~3}KmsVMc}M zc+S|=^ifaG%g1}?vx|`!M6~hPi?`UyZTcnl6iS(CBoj}ln#9RQtOVUoJC{+{5ZyHr zE4_L1nz~JS>x4)uU5-Uwf}mS!;eMx2%A;@(XW|*3I$D?Y!p(iW_mXbO5DERr=uEGv ziRmn*Tq^Ws2-a(Y48spe#ffQef*=+L3N-cj=2Hh17o+cq{6_aTa9wo{K-Mlkc;I-G z$^HDJSyNjjxC76SnyI=bV?VwSsrA zQ%7BvVZ;lxN1ZFi3pD!$Wr)ewDw)KCplc1*W+`T>$;Hg!30BuwQ$_;$WpcQjA;!(> z0#uIQw1$2p@@P`%KK^XNK#nG6{mjR%Pja>``v>5bqn1sX*XONoFp1&NTA6El*8Hi4*Ook) zmU(Qe|J)^ohqb9K+>D%O8rp`IUE#iQg(ECboyX?P6#r#=nO9$sQ(&&R9VM;2Z9pfk zi6*T0wictf+al0^UgLvC&^sNvpj}^!T!tA1yU;^yMKhf%LK^uf zbgM~=og@uuDM59n6jxKxsYU6;H)Y7^+w)SvUR&kQ-~3SM#9Q>~=SVZju*Rr=F$bJ|W|9lP4&$CaRQnlNCmlE&p&}fm zF8y$a;AD2=9$tiIl4=^apghC%DyF9!txkf;RlEFWgc)<~@l9OJ;oc7vK*rBD>{qoEN6S$bVVK8O2jK>T| zY$g2=^KFCQDIVKYh!wu2cQYt`}oo?7@m`q0C`TFResvj|}qr*M_^v zGcHoglm@T0{#i$%3L+P>9LDSXA!PRU>1#=ex{Qec!t>BNCv?o(%Sv*~uhJ|v-@)J% z2sIlYLD9Q*Q$3(c1JgGPQJ1NvjpxReg`i9wk-$B`^A#n1JUGPlmQ)#B1YWV=-+aNd z*7xS4NQ>Jr%p&hjW8mD8B#aDY*gYLl2EnPJc^4`1+YerHM@tR)L7JZ=CpPxnGuc!s z?l*d5E)6uP3E;Xq-9RUd&~o+B@VV|>lbDG_lTXPfdkN;2u;GMa!z(>x*)P4!g0<3Q z4FypL`CS-zZ9-0_Z12(DCDzyz9dtM`ypGF7p-ovg#?i7b+86kYtQP6SIwmw^l+3VyQM1(4$lLS$QVczsqus4SD30DzU=_8(<4*% zm?X>weMcO)+MdZ}mk&a5#RS@o;;GV39^a8=|R>j`+KSl4Ee&N#P|D zb<$6cETiQQn%>9CNg*qou}NnRHl?f52S()P6)RB1Sap_~DX&$__mQMoc1jPzb~YY& zrM5fzB9dorsM(uu1L>y{v@kQe%s-jzmZHmkZK6v@i#-HqkI8eF>&2!X20G#=87FEc zm5d&P*@;z*8nzJpby7MaF!e$iU*@rb&An+nNUo({AP`P$QNO|eyj`qgVm0xO2Bn9Q zTk@<4qH4!7fOI}o-p10iy+9t8J`x=rT>6EHSiwPwAuLZP_4<209fuurZDBjw+}2;b4+z zz#9ZSMcs!1q&Tlw=D1bA;qPqPa&dtY&(r&XAyl6bznu8_ozt1c!9nJBAI3YXP$RLk zrh-bQ`y+Y$DX(cs*Jrj+mWEhc_6y$RPEK!d+Kx^0 zWSoQ|a(q1?$PHhiKfp-ZUuZFVWm2PnN0sFVDVX_;qgRbLVS1@P#O#rexrZ%>G~+6W zTBOc$DqpKv84qyCXo~Akdt<+U>{&seTj0PSGvqf7r|@^3D4UYdFN9)L@$JrZV_)L1 z=V78zF+oAM?EV$i8dXsppX^bNePTIExk9kEN0cbio7xiJUi16x*?*_{+8kj|l~kOt z)AANY)>}C1Qs6ckiZe1c_GmK)bH=Mo@3LYX50t{C)NXjz{5@`v&|?dfK$~n~K90)L z*>WuOQb8X5{rf7WrZiCnW-@F0;VHEItQ4DgVK?dt>Pg#6My>vy2v!^g1=FuIfvmj7 z0#IEh8)QfMTDtciK$*YUw(sH%o6zmOb{8aJc4ECut;Nx0_62QTPMUE%S{;Y3+S(-1 zuFomG?Hqz$4O{KXwfFeMnq7(OQda)~&eq_24sDZmcH%d`?S0)V!AmOgd)3ku+E-cL z>_~~%P}nuGIRAbjfn;XOkCl?@rAwVpmn>a6#)br-*i7u}_ypvZfSA-qbp?k@ok98e6)#Wf<=F!O?72bTYy?ob}wn&EEnV zES1_;s<$BdI?7fyswI6v4DC{3Gx6HvQqh_r^G^`-8HkS6cZuyGTSA#Ma>Rz}Q6P?K zmM2$IGWpIta7tXEnXzG}!l{kHYDH~Pr!!_yrhRf@z(@@}O_?4Ofeh(aAA@ ze*Z*q%ruJ|U`TewZ1hd>AEB;MqWm$bRpGvdmOAEZ(fZS6%o#|{KPEN z)RnBQsA3TNQc-^{1SFm4)Y0V2A&5-%(87klfKnM%PQb8Y*=#++jj-273NpC<1_-qa za^CM7%Fdm2szQRTrgU~!!VBh?LSF5sD$_<9;X2Rp^r*Pbk1#>}t#7J*lhUq{|q#`gFQlMT6K%IJY1{rIe6QGQ0m3wrQ_(zUAEWq&za0 zaN7aA!WVauxblVcl;>-iISr2-=wchSJbIe_3%|G(SUTF9SIV4Th|z*?g#Q3|jv-K} z6c~Dn5kTMRFx^Oo5(54)II@CSAt+;iu)sJ~(`7NrA%V6(VYYwYKSq7;g^*$(_lD$* zWx}iSCq_GMJh-|A+8TfZJR2!ze)-ZpHlzMJWj|p;U#wEEkk{Nu^o(3i=s5>I6{|$^ zeESen#G&%qr2LSZ$u!d`H>~|1OS$)0Mwg~rs5sf9$|`8#FwLu&0(VnI8!QH53|2EG zt1*nxZEKv$O&IC85xx9?S0WOEs{!q9oeCl zdA}cMonZL>DKoZ($=RewV&_A_z7F`Tn5@YHEdb#*R~(havzK9IeWA2ttsNa1N(8*- zyMww?HX-#<1~y%diK}4-mC~7;n;5xmbnN(YC)EKKvdjwH`$oiX4k9}znPSXAT-*zI zQ33w+?|qfC%QPG8G=ImOgtw{P$sF{{XUB+`Y3d=6<~5Z)-bBHzBDDU zu(Pq@ST~q2uzX4iZ@NA*mJsI|;n9y8k2 zQ=gRu|FUOkZPW~YcFel@3oFeymPND24ROZ|!k*{`i{1h!xLxf@mUHdNif>0;=Zb1( zz`7QcvKH)kdca_#Ybmw0`FAscu9R;<%-W2c^!-~=*Xa!%ZfodoHdl=uY|1AvlNEX? zBJD~P=toARKeBX_RHYJsrj`>~n-V)E>Z|T*CH!949+97=;WX-b{7+)Wa|H~StFyVn z9p`m{S5kC8T*i#}P1>Y>tJPNZcM`S7nPxJ%9uEHj-qj6CQH?uHGp6FU-NaN3H!w?- zC#cQqBA$FmKo}dC;S0Vp@u@NT%C#SihoWoz_?T1DqBF2*unmGMy!F zc!qT3UdRmBi`N>>ziHBRU2bqUlt(}4r#7@pG&jll8uwVYMEYUjus}*}M|x~qid6@7 zu@T201ras1d1|3T=ulZSBrDQykLc1znDEWwA@wKO%DQzTo4KFW`q5g&cI6t~54rz1 z|6}iDt@0=8crww6)a_cJ=KRwZ|v zn_Iza@u$-F6<(BWJ{E9<8}e91HvLbg=+y~%_C99j#*ZW9OnQWy z7!Mtfk5E~ENo1!N322$s9EgiOBL*)gu{?>MyNaO(9EQ&DOx`CSf0E{$Ds4kffi8yM z)j0qO1WeD6VF+{aE#|O8=;4vs0fAc(QD%lK9Nn;2jX94AV3wu^1MsHaCO zfAH97(-_rbzU{&V!?HC=ZBI5Y>fnfEDd9ejQ1qYEgPu0PEK}+m%+VausJCf0M`5(7 zm6grs2BAv|jMR|9s93HhlAVZrt-e&{Max9wOs}a0>gx)vk8DbL(O^%D%^lFQi+jR1qtV=Ry}`qyRT>-K;8&e_sK1lT{_T!Y>k1;vXRe!Msv2bn7xcw?-IX% zoorE3@6%PkWfFfU33UVXn)R6Z;0SvRk< zs9|&NCJ>fhC#AN<@h)UrCa#Fjm?8$12pKeuCd}iOqkg?QmF3zd&_tgBdiPvEG(bQ5 zo0v!Eh71{rAKuQe#CF()wfOVPw-uDv*G5GKr-JT)8)3Wbs4PM7u%<)BWr|=H{wda$ zpKckhd{R-0)dr{J5N+wEKkLu|d%PhDF5gt2Q#~v%Gekki(~|tRNH4eR*DBMgXi*AZ zyV4a6*qL*j+4VUNIIw}`^7Jku3aiq zL+Dk~WI95BW5ePXw)fgwK5u8t*nDy-$L6v+q>B#m%oUvb1Ni%`kxh}=%a7<&6*s`gNca34+w&58bUMki7EnhVh>Uva{f;_d+bv)D;Zoep)h4 zsP(E`cWI+Ob%&N7cD*J$evu!J%s@jLHdJ;&Dm*1xD?)|FJoV0uWZ{yX^7Xi%v+pnP zt$W}5r6KW%Mk?QC$r0q^@O`_A&iK5z5m^KiWGC);JnUyO3$hi}EOsph0@*i? z%{0czS5Y~267=Y#U;%Gudl*%Nox~^Do#Qnl^}Vi=5(A1$$9HSbtFSWx*IS2v3uTbjshM$_<;cbq;$)-Xt1An6KCRD`qgT zgGT5@XKyoRT`J@x`BOGOdS78esg-y4yieZ*bA%%B-MgYHo%c#;Bo|jjEH|L2n!?f> zstzLLEK7x#qoAbD+ELDMN;$lAMKBF5X%7|qrKiyCnqnQhVV(}%u(o)dbPz$vC2g4G zP2)V0^Oj@)Nb~)}YyNTP%ng1Ut&q3Q*;8^h$plApo7`b6L)yyxS^&aNZ_Mk21QnAF zOFFKEWmvq?!*4G;8^RwkR-p&_uy2jQ0^xGpNgXp|6&9Axe}LF|&fA``Shm@)W|oNC z_IX<~f4K^Cjl2e~E18_Z1YOe_VhKtVdA#wG5$TgjMikP{>O1pXA{T?L#Kgm;>?t=K zw^$`D$ns(}Ve;k8MjcI<1UaXpi%yty(JlhSXrQx?qJ&^!{CUJo`CM+=N3&XFof8x& zlt~m{c@y%?pfP^19cE)vS=xRE3E5COjsl$s-S-|X6{S$;=7;)_Q% zpHS3wFyehfAj*qR32m3I7L|JMwCN4_Yp9c0Z{LbQlp5=xY{8^I>%hyBYnp2%v_gP4 z9?3(CQ2gPs;)y)7U9?_ld5_xmfN8^*9{Tv{jBHH1tI)|GwZ}HD_M(@N46D_>VVpBp zgN)GT!SY`Df9fCWoIhIHUuqxXs-CG)yZ%tvRzbR*3dhCY59CI}aUjynKYdv{lJ6`` zz{GL3@D6EQg;oAcSdKaqLr7paRwEYOsObQbDxrWL%*QNUJ6D0nxZu&~@Wc8_yN8t( zD=a_Hpe<}ED==~XeMi-|Q~U`PYeXH+{Myp12_$_@t$0Zo@6A=9Y<7t?w|Bv5f;`TVAs}gFQTa8a1HdA@ZGje)bWcp3kddlxF-UNS-An@|lsMdmHxTM(BhEaQ% z&8pagLEh^sIosvuV}zH6Gyz_W_~o9SwJ7$l1LpC`f7R2pnLih1JghEdYW+N8VV)pR zEiDVpAfTwhdggrk>QjQQtVGJNBij2IHh|zA;J84U7}K|qnCXMsRHz+@02%w?9Q1vY zRXxsWJf`55x{4Lt&TTtYtZuE)Ag4Zxwzm@fU>Xj!YL~& z1*&cQ+b74t3b&Z*`fJNRr6Ac0adPn`%Roi6Jk4l!zE)CjwF?!FjjtwLIVxUS)V>+ zM_8Xs^KRkVaRsG+w4G!B%Dp{N09}!rQ9Jxi1ioZjMZ_KJp^%cK0+>6(dbAl$g!a2H zXp=|bR6Sf>IjX`m!fNy&Xw0+Za%k#n4BXbjLmAZs>qis zFY1GfbLH-V-@mBXE?r(^>wMtCdxinUxjZBH&sHrJ75@DPKv;tRp|y4x@&UG`Ef<^XvoPxN{D|C2FH{ zN_nuf*42*za?}>0xjdnr(hu=s&p3AycNFaDStO`wdMX>6zlvjot(Gt1NQ-Lk8Y`Ko z@TlEo&mB)E(IYlO!Ssjuzgp|%2>nnbBZ-2Mn*8r>snOV1>R$Sj`)Bfv#mMavb}klX zwmT4eMeXvRnWJKP-&NG_Q5(CK9piOg)7vr#Vd>r7B41<%Wn{U`d^ax@AJeg}$Bjr; zqo|SNaozQ_GiI@jaE~{ypuE7}PW)`9E#0A&ADoUmXzp8nwG~}H99^Ee0&N{J*#fEP z?9zqBP{%Pvg;t^TnI0U*QIs{6nKjF4o%3t`!{CED$)j8Sx_aC!-DKhNlF{YLORQ$W zXhlDe`)9L9E=4x!SQ|0cit8q1YY2LiY|j6+&Elx8*Bnp5)Z?JrJnpQ~L{JcyDInqy z64A`1m1m;Gw^8j8TWNuTK4gAD{0A_iM3z@h7r%G$YihRUW|@t1=raQ<(W&)@ZHaJ2B0R>_?#iMpSdNdR&s8tzgD^(*JD)AfcZakAiG~rZE03oOU5>AaYSF5t5v%l3`r|0xI9oSV zRE4G)lqfh+iod2!gTA@g0hxECtNYipyD)R1>W~D8XQ^X*8_8cBzgW@BoEGORz^T$R z`=D*eQ>xb7=J=UQ_Nyp)fExxjKU2YkgEDIOhfOvD-Ar4)(LR5JSq-bm;on^d1na+d zrt#)hSXWI0B@gH<#p0A`tdrd7qAI@xEwiXr`Mrwp=w%Wa8_37yW*d!L)CTAogX0HQ z%*Pa!SFHl56Ozujj5Mo2sS+|)pvXqeIkhsJK)x;Y$r0o)Rk@1^Z;kY~Bh3*=x71RE zOXj}`z(}1sirRcJRSj;O)yh>Xf89>-D@=@kj1Q#2;w)wM4Tj2+5elS^iQP=_yxSF+ zpUGs(JIywI%s?uk?eq+Ph_a6Rz&~U!?e9KxG(sJE*R%M^l81RzQJ#XFSn+1}p&K&&Dk>ZZ*@d;Ue)ic>nUy;_eol`XwF`is%4l#!ET&SvQjSl!^6LUtw zEa~yEKxbj#V>Tp8f$B?abAhIIuLBt1yZ$tl*AzKJzYsvg?U`yIqd+B5qYc zY<|b8PAbd=S^r{`-+Jj8B)P%*a_EGEx%L+Ur27vrRKTOnaJi+qO* zWAur$gyh%ys4CJc!0ws{{3=p^txwDX4f1l?+Kk7r^`DFYmm}uykRtPG`M8m1R_{F( z8d@MF+IktCHkJAg8V|JIAJTMiVF~Q@q-I9X`{jh`en3VtMY9 zCOK!VC%2oTz^Wz)Zh8FPU*t0gTHHZ&vTREozYy*WHT zu*;#1cBYpEeoh$uCQM}jEJyrvj3Eh&;G4;CT(WLf7W419z+U(XrmU)iD2OJm%0}Qa zmvf<7kGq=r^Q-U4$!wt47^Pno6MVifY~Rlvjd1JaG^hCt;u7E+O=QsO)tFG))Im#^ zKe}nqBn5i%;nr?<*yS&1H9SYI@RDO0!^HPwES%P!msAnuEsrNeHBs-eFEIRoPlT35$3&JIVIed&n?zVM9CQjx_P}VgGTeYf2RZnjr<= zV-A?z<;_boHt|yIxUwu8QA*hv){bRUx-S_cfr!=Lw#$#yj>;9yQXm78ucy(eH-5;F zhBAGZ-3~O73jVHBzWe$xMv?ptm|D}Qgsfnczwns zH|F|^;$+-r(tGwY^acBo;{?*15Cs;HFau0}4sxSA6n6<#yIKF?j1NoEkip^_EjmDn4nB0^;+(yXOHRq{Q zz%0;Hj}{iR*;SMJXRW*g2g^)#(x{t89d>z9wrZpp`QH;S@n)D~f&FaDuvEQ_?8#I< zbE3Kt$dTZVWmGKLOqm)P4Q7iL?~d*p3#DLFh#6FbzZ$|c!f>~1(n%k#o{V`$!Xxyn zyS?q%E1tt4P*l1cp?`d9x>rifbW*M={PR8{Hmp@H*HJCWsFj=-BCVc1FHozTJVlTn zP+yQ(5}dzyK`Cb{C3RV%#V9k~*>y^VhML(>P{1^1Vj`94*?^5p*L_HfjMIabTmF4M z{3T_5QJqgSp-NHjK)C8!9_zhe$)bCWp28nsQvns8c1_|$n(VN1^LwBivvNc>(-+7W z$H_EoT#nFEO_;P#SRgjHew4Me@pXE>Mtbq8QyN1<@v)G+MZ#<)n&>FGPW#Fj2}3lN z7g&B4#^z^wE`=MYr)hj0fpIh?UMQ!&vuxRTP_4(%9)=*R6P2gv8RCB8me{LdY&sk7 znWtUR;-RNeh%6PYr8DX4I8=B(aPFNrbk(B*KZ(cu0c`oFCn&UrleJsj$l2~#ICQn8 z-h@(uokis$TQkliWz%3xEscQ$QQ?G{Q!6W3vqY@8@HyQ-s63)jW?qbm9&ku^6n+ z)e@H1ZR{p*JibPz1sc{z)hVvNvR8x2?8K4SwBYBt>9~hfl)bzh{z@6cmg%o-KdD!I z8RR}Y8EdRYrON;9s(q`r^bIXPlbrB4c~~aj*2|dP{9ozAnb`b~qTM24u`f{UJ2Jnv zD$|OS95xEX302dCyQvL-BMi*Bt4et=UshF%uwEtRo_BN0^Gu+PhP2hop=Kcx%s>o7 z-53K$QDdkLUW86YF?EgOqBwD8Qd?3H>CVrE7_LD}lI3W&3$IgXwxph0^e&}sh>lT8 zGk&vJmxNg+|FUj^OqXThNS04`S)W2HlxMz&vypGPDWQe%Pk1eii3YJ#&>`@CmFYbAml)~$j za-@m)xUFaA?M8^EFF!TNJOZ0{_?|*okxX=I#nUE;LiBai@$C}TXp@4a(f0(!%|QE$ zSy)8qk}Z$>QirySzs;7MczISI+6bVxnkt3An&eLNz9DKbDBn%f(;QU#U7uy|#P%S4 z#{^^YT3@Fs+*G#pyCai4KA>i57A&yNJbta0=0C`w6SC!8Eha<sTx^__gh+=u z>6h*WTWj%cY*V-*RXPelhtD~=?)k!4)y2)1>k&rhENlyGl**Z|8HJ$FVHK~FjVQuc z1_rMPZYaqIhkSE+%11CXGFD9+Rp}z~+w(IBNxyUDq|SKDdH$3T&u z?e_#-1ahl&lX!e!4+AdttGh@u9D8R`Jn7Km{1tzxcz=|Z^)xF10@?UZHwNY|V!omB zGlfXM>wh)=;h#*}Z#hwJyVUk87PUo*1n~nC*Wa#+Ivq1TxU3%2#Cnkp5GLEb>&dNB zg<&uL0Qt>xUnr1p;~IWQG1Sl@$T+0(k?bPz(hEq?BT-m} zBfdw;qKx02mqKLc@EBr%-y(I#p|m-3sGtTR@_XkTzmbu4iMnofRh+oR_mlAGa1CZjuxYyBO37KXYsqUSc$G43M zm=fPf&@3kZMC>yk^qvp#{elS|143?n5ehG;VqwX22hxZ!w*x=XHxrz`XG5`nSdt;s z6`RRohYNScVT^E= zViW>Swt#?nvi|=7#GGOP$(XyG9w)%~bpeIOR+EW%_&NHSr4cR`EJ;2L;9xj=j8Vsd zJ`6_~?Zy@y9BBzBw{2w(jwXP)SXN}Nf081 z9f#uPm!KcybH^vw;U@_g_{3w$$>3!wW@qYe+L44%sylr_V7<;wA$B|;mkG}2Jq8x% z0K#*eEP2K!9kJx>a-~fDwIq&nJ`I zH;+CfjAM+)z8A)E#uhHYK<})eD<@lzpYdlVezW1n#MtK~emTza6Z~uGh=6zf*gmH5 zD`4}0@^h#RSLZsg9()cl!_OGR40j_L$p~+Ozg%Z^k;e+E7l1uK70ypMUc=OV$@tD3 zcE@ru2+fIr`$ZbYp+*m^Bb@fD*^zx(#2l=YVH}v`jH|^nSK&i)YuW2j_92c2IK-a@ zBaEd9L#6?94zl%9EqBTFr<=CnGmU!3Mh1JGZF`U5}d09w&hezt63{V z5DyMN6n~ttDQDAEI-R zX>ZNIkOdT|$4)S+K4tt_Ic9!>BPp+~3n5^~ht3Ih870HB`-J+epR zoKH?qtr$G0!EfE$`iVI#f;A@#Gr49zA3i4~af9b${7|drxOP$$4m>!{Kc|uaB;?YW z82cFtCgT3zqyqNxCkg5210A}%X1=kJ!;$iZ?VNlg`d>LL>VWa<+>%d# z!|+?H73h`bPYMP6ip&IKX>h!;Oc);XRHy&duNLudE$}uD=i8`g8uq z<2mVL{G`C*zAJ-(jyz5r`*=v*u#!komFt@lssX|x1W=>;n|d6%%r+fJ!0YzJelcGb zOjifMk%ZwmH|Y#J|snAJn(Cn4p;kPksulf@wnJ8yKYo$11RnaM-Rt zoJSzwd?yJQTmgmgPg&|dn);`MD~{lQR5>Cnh*gJgYjiIafjTca6f(mkMkZmE_KuIx z`3UVmz+01xW-DaUdqjmK-+iFL9%@yH6Xv0|X) zM8HWx$1B(ekFiMy^MUZbGmNhbPU=4J#IT~G{2zbnwyDKwI$d*Nq>_~8RYLJ`<&u4J zBxxpREI@{K>F3iDaz+V38QsXuePa^!F!{5O5#h&=AJkn#f(Yerdp!ii$qx$lHTP;0 z*BKb7%tr@|SLt%Ntjs_F=Br*w^Q9Ote_S!EbI9i(Sxw0%CFQgl_HIg?hg(*^9TDQM zZ|jG^d<%#1-~Yq_G!Os+0s#X81O)^F0s;d80003301+VrF+mbh5F$`vFfu@3aT6ec zkpx0gp(AiZVzE>I+5iXv0RRm@0RI5gwSnBtMy({}V8-!%;T8h%DjsZouuTRrMQG`* zg@RN=(dL1GY>W=@wH6!*2c5Ym!lz+5QDm9RpS3RaUK3qUH8lYw{IvlcL16YW?>S>T zByIfBMJ{|j=K`}EKd2~>Wm>7n_j6BvRKa$%MC0u4bqN(a(K6y5qEBHCsTywE0RSPi zvO`DD>26eZ#3q8`z<}`(WYpuU!MGo{xSX!1nsL#A_E;Q7ydMW0I&~ab(uY#Cz&KGo zumo%!G01=%5oad&m7PZ&Ob>OaY#l>}X;qe*V=QQs5Or_^Kr*8MdkE*vP~po+?ZGn)7~#{m_mP|@g zV+$+Z11k*NekBuDEv3?@H3_5m_7d=_4Ya!o$9N7Q6u~(ig<{i8gbpSG2WDQb4Fz$qcU_8P> zA!ob?286NhE42>+lBhu^`nh>rtn1uY_Fz3F9&&6)-A$NB*d6A9{*0}L2{4c~kF-rc z?D#hWh=##D2w>qQ;SH8y3F2SPJ=epq68p>UBN{FujoNgPj0-00%CnFRBOM}DsH%iz zXL#Pm6HG-I-VVsl4GF&NT%Q2tGnhLNj2lXzx=!K35MHkaKXy&kL zzZV$W7dAkI`9(!s1i`p4EFP+s59vix70Ar7_^Q~C05Y&1hb<43lB63sxT2hb1jsw| ztp5N(rV7xNM&}?xF#y9xI7N-X8$vntg;GEq!@5}VnW{I1Kd4ldZUKZ|t5Gp*|ZPLfeOjGkl7-72~$dzOahMkYArkP}#mx12vB7T`5_AuXAF^}+rxe(#?JChlS zc04o!+XR^6l{rL?4Jq6=a$(n{4Vk+8c$_MY%vQ6aoR4xL%7_6Ea2j6U&Bhx}{W;=XbkU_18B6D2a0}dw*!Gw9eObPxg zbt22@0%@?+aqcJh?MNtr(=M8}0u4Z@0N6sK*r|-TQQk1HI7kfYr_LguHDELY9tx(+ zW+9a@Z@UQ07fBc9CQ#oeGrz$Z{X0D{LBQ~?JUQ{JA`c!w<`a<=5WRrAl}*_Dh&V9r zq=PT>E9C%-jC&kIv0qTsJt7shgHxz}X0hsH%>Mu@J(@A+a}Z%>vYc~+QH8Jn09b;Y z2uJcJwxCcyJ{3Dcq<$eL$k+mI17Ow{<9ASD8*K@tmOQ;A+^n8F7}11<#3$rw?c>@b z(?AXG34m_V{(U`D)i=P(z%r~XF^6;lsKe>{Ce~^2d4o`D75oZ=Xu4%v@d5t;#yhN4 zDi&#yQB1Ea{{SH1T&RY$?o?GOgOYohQIDTf+7JUje~;MDX;{<}t-Zu1+fSKvrMH!8 z%L%G5o`gQfCd6Vb2Y%ua9Mi|Dg?iDYS5zc)vgXU;QA$ovrz2A=(;Y&8k6M6U^#}yOC(6H>L#W5oArHK=7*Wiu0ld^v zj#NM}BkrUcs8o$L;^SofFL`)r-V;PXGO7HdyWR47A4wR_?r>LNZigyMFFFUyF)6CVNryr31k2nGk#5ws`B(&<{| z-maf)&!G>6KyGp|amryFhaY!$P0;#Z5ABMnpmbq3zgB zL1j)zJ_LosfAv@v*}pk}cLd7J zciW%HGe};U<`gBO38KTHmk=6Z$TFZOsCSF0`hfQX>u=2)<;W18;#cr z0H5XRS62%)2nVrKn-BmYQ_@FyS*^+JVzsixqK*wfq88d}9r@Fj;0850fR$m}>$Y!k zF2E49-CMDmdS=-8^-6%6{$joW-UYL9iI?dtXu>QvV>DOv(4PWmH)wOw26Z~OX@4VT zrAmw`u?t?2_J_kzhHtKAqZITM?jSkv{UWSA@5ii9YA_KWLAT(|Myz%-Oar1|^pUiz zFKBI>@_csEbinC=M3ps#FXmX4FCrl!l;F;vuQ{5pPu*bww+BA)kBNDzP3fKtu^A5_ zO)=!KZuhBlzlcDut-#cyyMdD3H`h24?2=CXfo=#&Tc-(ls1)ej?>g-6Ta$ zj}oR)iRNDMg=(a#RiZ(;rwkd*t9;< z`Ug-n(fq1z&78y)=CT+-wB%q#{{X+PxQB7GequEcJJsYwG(hkI6GAfDH0TgSaG#S< z4@d%a-mWt!G_TpKq*xW-sulxIw^^h^4(0(!{KD8{WU2O+2&aHyh_(g+kaET;rylXf zW1p0p3H88VgOB{_+|Hsv7+I!#!aoxK0R7C+QWSRvI)VX}k7EhyZ%G2oWgw~A5<=JQ zSE73fd3YPjW})lTJ-Dc(g)AU2?0g^0WgN=Nh`W7gG$lX@g?z#kD8?g-NkW&9Yc~{A zDgOXr*jxhi*9M326k4d{$4vT35ym2q+BC^u%&Gv83lL_Y>BL;4b~8})ZIv@m0|bT} zz-7}XA~SG2)i27mVrpT6;Xs_a!al4B_E%9)@l7wJk;v{~(;&? zSm=M~)d{Pvs-SQqC<;UiL-KP1`X&DA{rYT5Fgr~X)%w@6!oS>c(W-kB{=zMEYH;M{ zF3b!E%%WaQWc{a&Hz6%Oj$z`$zPX!T!$E?lmgJVK;08uJK%ojpJ1 z^B7v4ijA=}5V3gH!|)AymY~ek6v7jFUcxx067NeGSf^#?ZrW$G(-!F6$7nIpd02;Y z%u`~xiSn`Wuul`~BAt3^MXGVRB63AY0f?m1Ye%L&PsUB&+Z66@tZP((SO2dTMeO)3q^jxD`?>1FjQog2iLE z`r;Kg(eUkb(=&cMbr*|GT&yckq#>QgyGus+b5Y20lt znBEvm49cgpVYwjGz2H2~t_X#w^o$6uGweh`mt!hcSj(%ggL9Sd{Y4mdtEeq>!P;gF zo0?*iOn05yh*+mC!)QR>bXtxh=(3VM%u!D^R3M&_H*Z!ZXd72klM8~S&6N=kme&XN zcZdl!%;+?)ygOu+S$!dwvCO)!3ZZe&1PX*vbjwFvSUdMKW-5RE0tTYwVpmW>0Ht3J zOuD)tEW2j+?U;UOa5XrHGUs+XlQh(^6H`*tOl}0eobNRjgD%J-C4OK(>j|{eTy=g- z8i5z2TU|qvkw*|2qpAwGaWChE$6ZGB?*9M@P9WTS_b~_L_rxR1`#A<3m~kuS+{_gV zU@482Pk5+$Sez397+v7grVM86jA1>eWF0VzXPJYsGbDMd`y@}zm=?D-(R(qnVK%Bw z5+UFjc*)u(a7YFLxR>&G6Iy}E#C#sgYUlp|FuWOlQ5=S6=KM8{3ByNlzkvr0n=oNe z`fcT>C*oJ0qMnxT3v59U{EhpM`+=VTX>~hJp-y=bh#)paO&va_VhJC>5Gg;XK>|@$ zJe!1DGw%mbG$6g&jbFH#I<5g@_yuZgq^TsCqzNFh1CPwUz5(n3Ac|X|t7p?0GTr${`s(0%*6E02E{#*R=MEap|{~mGMZ( zm)EPN1iqp`m;tzhX8@0Z?LXl0#X8QK3LunWEd>S&Y~S$!JX;W8HUXDzQouj=6a`cO zn-aXFoR93!ZbSr-$C6`!q^u3MEgw)}vSuM8%__RQN$J0HJ0A1(FHfs$Bh$aw{Q(np z)9*AzwwnSDAzK|Wg^U{$pMZFPZ9C4~!xx~K%v_MsFNaM&g}&wm5%Cc?IrlN{whGQiZ-ZqWsJRjq9mXsBUQ=-+>6Mo(c7 zSXc$Jmu;(@6Spv#bMghMb`U8GANNum?t2rCJ9&iQG?d@QJ`&_%X+M zR+*rGAj{?^8ovnk-Y~{P*ubbStvojrkDrU8O{s?b>3vM~_|e`9j<>8w2y@h`OePsAsWg17y;`HHoTin0MMC{>0K5HS(S4Ks_?@eMyjrZ}=AmAvVXk^uxTY zx22DPc2*JS1pGo{Zhb8L9{!kpT>4jNMm@b>sCriFJzy~Oo<08I2m641z%tG0*XlxE zeP;b2!@2c~gnd!?rZ=o#q@0ggA6ZiSkAgfqeXJmDmzaOtd=OwBv2YKr5FU~x?JM^K zE7nh-Z>X}R{?K#lTc1K1BfJ~%3H_U~>?eNyvOn%0L+?9y)?3zx+*SVou!;Ln{8O|e z?htYIp!m1u`-bBT{ic2}IQxWs!pHvrTVKUP_NDw&D?e~?7=6MvA8_7&;kpq0rl%16 zUOv;P3HXP2un)BB;<5W!ZwZ6parUtuAMG!HfIiqFJ7CSHB3Q@mGQQel{dfcWFKEN< zy72C^w}{vu{pbJ005K5&0s;a70t5yE0Rsg9000010ssR95fULW1rs7b5Fju?P*D_N zLL)M9Br{Thq5s+d2mt~C0Y3oz1K6qDh;wP)f!zK@TG=u4XkWZc+MltA!N$kpjzvm! zu`S5&#$R>$7M0>=CMBr8p&E-d=@QHgn-1l8HdHre&-_YW%KHwHa@3L>ff3P{YQT@e zYz^$o^Xsdoi7|4lbPOg=b?QhAB@RlG;OzD>l{jp)s_{`gQ)X9|#A}SZJ*fj@yiXK& zZ3K&ub?aExlueA1!LtCzU=_{!zBVcdssB)E9 z>=|{oUC>N=E#BFP6U!_+^prOd$6#tJa`(l;jRU) zUE#Gj^qKqwLN*#wD_>6;Za8W0IWazko zm4?CJxw*I@B0IBWsczAa9T|GM4o9(R;iyG!$F%-OJcd!&N+}Er5iY)}IPCR3qrH}P zje>8qGmQyN30mj~78+}A>LJG;;pvwFPhB1V08sdqsB{NOMtWb;!7WzNYR5=3?W)Z% zl;x&EiIG1me+r@LvBsuXJj49tKtXlYvpuT8X{SNQ~js# z)}iTGmXsPGYFUd#zOD8CrF5-d?bwyNT7`b#YGq-tw6gAEZ;qKp$L=U9cCpi*nRT(= zRbd?r9euO*mX@yb-$d?Zq2tbBt&Z9Y_SWL4qNOd~Si$*!a~Bym!$%BTp z0>lnY0Qv{4$;PqOiX9o|-9v>W>Ls3X62I;da|L#S%g6UEwQW$#_mw9t>Rsk7dsEg` znQeAyjK0U>EJHj$EZOO9@OxI76?u+kS4znJYItL*Zu7+NBhV%eu0g-B)bSjXUkcJ< z2DY?j5Dk4hagqAQtmC%ScbPb%{{T`Rzj& z>g3kUgsJTlC8=_!@7^CPAx79rDDtfg4^8V*%F)woHewcsu^EaPQ>CabPx_8538+$CRPFxTt%nIbz*vN zQnDTPJ3uzEtV-=EzVkdfkmGzz{#}7OcN4>`XHA~x+GScQthB~|IIr(}mVv>gjGHyS zk4?-MZ(9AM-ql}XllR>7L*i_A<2*jn`3GmTA6dXEcQTkBfJ_%6RpY?kx`*MF-T8oo(rH+JT`_#W?`v*{HN5p&9BqA?>s*KELFM*nTi_DODR$@ zSxln783;#X_4O~K{btye)8%BNeW2|!y+MRKuNgs#HZ}W|RuL2rXVXNO&E{B7+ESbW zmJUe5c}-qPBy@m!}%76BE5C?o6TSgUNwEvngNFS>z0tXuZA{BJ7O`l|w%Z6JdmFuSU~F$Z*`o_creQ$3rl( zNzxyzPeU_V#f6V)jON7a+6L7m4&-P|dR$mtyFvxm9d2TwMCjKNB-t6bmpYE_bez#5yPgwD7vyt1$2EcMpGt z;h%WDz65M)UqU03#$!8ZDeW!At%)EFnPm&ef}>x!alo^q2!n#_K*CCZLjeznR-TgE zGMwt)xr<^yWAknoP&Q^}R)?U#eA_o@IX6$+~h>^BL7 z&HObu^@HPWVUYgk@|LCm>v1hhR1q(u&a9~DWw==tH$YfKuE4!d6EYh0>Bx~db8V1i z6(H}*C!l&s)U!9r9;iH3H!IKcKEMbvQ|~U%sT7s!Wm#5a1FbAJFa(pmORjtDZVEa~ zYq24n@bjHehm2d0Fss`!DRH8Sq4 zbb)1S%j%KqTOE-yG0P|w9wuFhl#S{ozqw5e8*T^@P$Bf{24D%|I(L`f zQEh-rOnaT%(y+F`<|TU~nUU zdCHob{YLeEpthA9!prY>Pe{-*#c+7E@Z{R801uA-p@-!V52jI1aUUH=RT`HIC>!e0 zyhg-r5M@3gYySX`NSR>I?c-gCxo{k zS)$=600XGFs5|w87LY;UCWq=>aH%#-^9DguB2b}$*Vo)9<^m6Exwy;}Z1$PAhp?*l zm{k7&q^D4QV-Lz85PMR7EHzIBg-~=Aj z!}5;*09m0wE~57KyM`Z?N7XG0e4+vF55W8sKt7`%n^8x$KLZcNVETqP$^--5m;_bV z)^Rrnz(75={&gO~)Aa|y2tBd+fP>ia6O04f6AAeY5D&+gq7TF$l>7uAi9awqfC;a} zADu_z55&MGzY=~!@YGTGlkh((j-QDpclaNXM&SHO`Gg;dFv0SH__h;d7!Sk`#z zBQs)w|Jncu0RsU6KLGv!8#-fL17twW%r%kxwml%2mbH(9AXQ#ZGUhHY43+qNZlYq^ zs-R0Q8N_F~n}B6v(m!DjAH`HAUc$Bj8BKjaF`giO2~u=+?>#$Ml3W29{WkvqEi$0) zG?9?kf<36GC4aXnBDQeCKSAt&hSmUbS6=fhaEZh(*KZ~vR7IB9ojiAg)v>Wi5~^DW zvGyMcTJxrQ^`O9KsP+%nBKS>WNrjXfD-^1DL$*0F&dtFo9b^%1%T2*i^F>M{D??k9xnB-IK~iiLpb?e|!5|p^7!KW{pjC>%_dG}FJ&5@?DFbC0>4IhJkJUUolEUfddvRMcu;@w%j&fof?;bP7fhzS;ECvi*a_0V;zV@m&yW8AAlAWWh19p7v!Y$H zr3XokR#~|#PHU z*>@h4dN;q?NAAyW)BR%jVg;nPrLrAbdq$q9xS+;L8TA zu7~RlrZ!;XnDs4)x;9q0ay@+~efCh}2$WIKIPD&l?}KJa%xCn@%KSpHCO;>BA`lF+ zW|*V($jixs@U4tvI*;3Ug3)IH{0pySMaZ{$mFR+4%#H|{Edl^i(xbH9_?ELRi<3zl z!Q4XQIF~z)(`>Q(5h^XEACP|Gsi|!Tyi>mYwKb?RcpXDxJR|nvTTX#0UXcxd_LK0i znbKk@>gHQgk_?dxGD zAq!(+8X@rN3veZMZQOG_O>RnnPDL01_$a$G&67kUJdojqRE>iHkKxwE=2zjBXQZ)_ zL@c9?fbX`IXgePI5mK{F?2);wh>NkHjx1%)iJyd=~F8wDA zTW&2D$LQu;V{U9jy2s)r4xP*>(=)u$`4+>5RH37ACE&fdu-M)nrNPYg8rsXW@YbDe zgzvyr(*l7r@Mi!*bosh^gD3n}tZ@e51`G#sDOO*hE^3jv8f6wOna}`){{XSF_vu{{ z&k<|33E}Ixj+kmNuSg`Ad`k6T8!H9GwS`Jg+(vusm8hjg%PmLX8Coi~_mXfRix!G6sG4H&v8fA1lH&GnQwO1vMLYZx? zYXt&$e+&T($|iJnmzQ?KJTe8B9Z6cxQBd;~mRFUOS7NW2f>{3mUd4*%v5V@1 z&cIG{NYbwl=ri^i-WPu!-4ctiS49UHAqs zharPBwaRcOhwEq3c!U5n8F~vDNtuV=RoEc&5Vi=%sQY?lh)k-EqscIMa0doGVLO=C zs+@^vZ=(Vj$`EPT_npO4C{jRXj8`M4S>_TdQ7K|q_KbA<>NLP0gU@nU`g7hKPNpAb zH&gc}dQzgOIS|-0iDNTyvb5+rVRrujb4mMvZ1DhgJ>?~Zf3ef=ffPab*!vH}&n%f0 zW2h}N-UDK+&&8i1(taotCQO@)KK4fjaQL{YqFyr4vfPO69A~EVe8F=#o z0T^-bBFy|*x??v{_{#^7fO%Ni!1q-mu6``QM{W4PLFT?r;0R9ph?@ZXO8_G_%=n^Y z9zc0JV27V}zSHmUV;PUf9z)1RAPC2O>R+5NfJDrK81IvJ;{oT84=Wpcd*I|tevE7) zYV7iK!flePJfaXXW%@YfDrTi zl^jf&$G{(n)M@<0FC DBP*l- literal 0 HcmV?d00001