From 2702c4b6e98845e399c5f006eeffb4bde5bebf67 Mon Sep 17 00:00:00 2001
From: miroman-afk <74014189+miroman-afk@users.noreply.github.com>
Date: Wed, 29 Dec 2021 13:17:03 +0300
Subject: [PATCH] v.2.3
Happy New Year!
---
commands/Import — копия.php | 90 +++
commands/TopDishesNewYear.php | 125 ++++
composer.json | 2 +-
models/ExchangeItems.php | 9 +
models/ExchangeOrders.php | 9 +
models/ExchangeShifts.php | 9 +
module.ini | 4 +-
web/controllers/dashboard.js | 585 +++++++++++++++++
web/menu_min.js | 9 +
web/routes_min.js | 8 +
web/views/dashboard/add.html | 19 +
web/views/dashboard/dashboard.html | 615 ++++++++++++++++++
web/views/dashboard/images/2.png | Bin 0 -> 1484883 bytes
web/views/dashboard/images/4.png | Bin 0 -> 1106061 bytes
web/views/dashboard/images/6.png | Bin 0 -> 642574 bytes
web/views/dashboard/images/7.png | Bin 0 -> 1481490 bytes
web/views/dashboard/images/8.png | Bin 0 -> 857753 bytes
web/views/dashboard/images/9.png | Bin 0 -> 1788774 bytes
web/views/dashboard/images/new-year-1.jpg | Bin 0 -> 205212 bytes
web/views/dashboard/items/items-delete.html | 41 ++
web/views/dashboard/items/items-discount.html | 38 ++
web/views/dashboard/items/items-guests.html | 37 ++
web/views/dashboard/items/items-staff.html | 41 ++
web/views/dashboard/items/items-total.html | 55 ++
web/views/dashboard/items/more-delete.html | 39 ++
web/views/dashboard/items/more-discount.html | 43 ++
web/views/dashboard/items/more-guests.html | 34 +
web/views/dashboard/items/more-newyear.html | 75 +++
web/views/dashboard/items/more-staff.html | 42 ++
web/views/dashboard/items/more-table.html | 47 ++
web/views/dashboard/items/more-total.html | 40 ++
31 files changed, 2013 insertions(+), 3 deletions(-)
create mode 100644 commands/Import — копия.php
create mode 100644 commands/TopDishesNewYear.php
create mode 100644 models/ExchangeItems.php
create mode 100644 models/ExchangeOrders.php
create mode 100644 models/ExchangeShifts.php
create mode 100644 web/controllers/dashboard.js
create mode 100644 web/views/dashboard/add.html
create mode 100644 web/views/dashboard/dashboard.html
create mode 100644 web/views/dashboard/images/2.png
create mode 100644 web/views/dashboard/images/4.png
create mode 100644 web/views/dashboard/images/6.png
create mode 100644 web/views/dashboard/images/7.png
create mode 100644 web/views/dashboard/images/8.png
create mode 100644 web/views/dashboard/images/9.png
create mode 100644 web/views/dashboard/images/new-year-1.jpg
create mode 100644 web/views/dashboard/items/items-delete.html
create mode 100644 web/views/dashboard/items/items-discount.html
create mode 100644 web/views/dashboard/items/items-guests.html
create mode 100644 web/views/dashboard/items/items-staff.html
create mode 100644 web/views/dashboard/items/items-total.html
create mode 100644 web/views/dashboard/items/more-delete.html
create mode 100644 web/views/dashboard/items/more-discount.html
create mode 100644 web/views/dashboard/items/more-guests.html
create mode 100644 web/views/dashboard/items/more-newyear.html
create mode 100644 web/views/dashboard/items/more-staff.html
create mode 100644 web/views/dashboard/items/more-table.html
create mode 100644 web/views/dashboard/items/more-total.html
diff --git a/commands/Import — копия.php b/commands/Import — копия.php
new file mode 100644
index 0000000..5593ee9
--- /dev/null
+++ b/commands/Import — копия.php
@@ -0,0 +1,90 @@
+where('is_active', '=', 1)->get();
+ $end_date = date('m/d/Y H:i:s', strtotime($input['end_date']) + 86399);
+ $start_date = date('m/d/Y H:i:s', strtotime($input['start_date']));
+ foreach ($terminals as $terminal) {
+ $url = $HRCPortalURL . 'api/cloud/list?api=2.0&project_code=hrc&code=' . $terminal['key'] . '&folder=' . $folder;
+ $search = curl_init();
+
+ curl_setopt_array($search, array(
+ CURLOPT_URL => $url,
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_HEADER => false,
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ ));
+ $search_response = curl_exec($search);
+ curl_close($search);
+ $responses = json_decode($search_response, TRUE)['files'];
+
+ foreach ($responses as $key => $response) {
+ if (array_key_exists('filename', $response)) {
+ $fulldate = date_parse_from_format('d-m-Y-H-i-s', $response['filename']);
+ $fulldate = mktime($fulldate['hour'], $fulldate['minute'], $fulldate['second'], $fulldate['month'], $fulldate['day'], $fulldate['year']);
+ if ($fulldate >= strtotime($start_date) && $fulldate <= strtotime($end_date)) {
+ $out[] = date('d-m-Y-H-i-s', $fulldate);
+ }
+ }
+ }
+ if (!isset($out)) {
+ return [
+ 'status' => 'success',
+ 'message' => 'shifts not found',
+ ];
+ } else {
+ foreach ($out as $filename) {
+ $date_file = date('Y-m-d', $filename);
+ //$path = '/backup/' . $filename . '.xml';
+ $path = '/Резервная%20копия/' . $date_file . '/exchange/' . $date_file . '/exchange/' . $filename . '.xml';
+ $download_url = $HRCPortalURL . 'api/cloud/download?api=2.0&project_code=hrc&code=' . $terminal['key'] . '&path=' . $path;
+ $download = curl_init();
+
+ curl_setopt_array($download, array(
+ CURLOPT_URL => $download_url,
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_HEADER => false,
+ CURLOPT_MAXREDIRS => 10,
+ CURLOPT_TIMEOUT => 0,
+ CURLOPT_FOLLOWLOCATION => true,
+ CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
+ ));
+ $download_response = curl_exec($download);
+ curl_close($download);
+ $file = json_decode($download_response, TRUE)['content'];
+ $params = array('code' => $terminal['key'], 'name' => $filename . '.xml', 'folder' => 'exchange', 'content' => $file, 'project_code' => 'hrc', 'api' => '2.0');
+ $upload = curl_init();
+ curl_setopt_array($upload, array(
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_HEADER => true,
+ CURLOPT_URL => $HRCPortalURL . 'api/cloud/upload',
+ CURLOPT_SSL_VERIFYHOST => 0,
+ CURLOPT_POST => true,
+ CURLOPT_POSTFIELDS => $params,
+ ));
+ $upload_response = curl_exec($upload);
+ curl_close($upload);
+ }
+ return [
+ 'status' => 'success',
+ 'start_date' => strtotime($start_date),
+ 'end_date' => strtotime($end_date),
+ ];
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/commands/TopDishesNewYear.php b/commands/TopDishesNewYear.php
new file mode 100644
index 0000000..5033a20
--- /dev/null
+++ b/commands/TopDishesNewYear.php
@@ -0,0 +1,125 @@
+where('is_active', '=', 1)->first();
+ $dirname = __DIR__ . "\\..\\..\\..\\Exchange\\" . $terminal['key'] . "\\";
+ $filename = "newyear.json";
+ if (!is_dir($dirname)) {
+ mkdir($dirname, 0777);
+ }
+ if (!file_exists($dirname . $filename)) {
+ $info = ExchangeItems::where('menu_code', '>', 0)
+ ->where('real_price', '>', 1)
+ ->where('created_at', '>=', '2021-10-01 00:00:00')
+ ->where('created_at', '<', '2021-12-31 23:59:59')
+ ->get()
+ ->unique('menu_code');
+ $count = ExchangeItems::where('menu_code', '>', 0)->where('created_at', '>=', '2021-10-01 00:00:00')->where('created_at', '<', '2021-12-31 23:59:59')->count();
+ if ($count > 0) {
+ foreach ($info as $key => $value) {
+ $out[] = $value;
+ }
+ foreach ($out as $key => $item) {
+ $dishInfo = Dishes::where('code', '=', $item['menu_code'])
+ ->where('legacy_code', '=', $item['dishes_code'])
+// ->where('is_history', '=', 0)
+ ->first();
+ $onlineDishInfo = ExchangeItems::where('menu_code', '=', $item['menu_code'])
+ ->where('dishes_code', '=', $item['dishes_code'])
+ ->where('created_at', '>=', '2021-10-01 00:00:00')
+ ->where('created_at', '<', '2021-12-31 23:59:59')
+ ->first();
+ $dishName = $dishInfo['name'];
+ $dishCount = ExchangeItems::where('menu_code', '=', $item['menu_code'])
+ ->where('created_at', '>=', '2021-10-01 00:00:00')
+ ->where('created_at', '<', '2021-12-31 23:59:59')
+ ->sum('count');
+ $dishSum = $onlineDishInfo['real_price'] * $dishCount;
+ if ($dishSum > 0) {
+ $dishTotalCost = round(($onlineDishInfo['special_price'] * $dishCount), 2);
+ $dishPercent = round((100 - ((($dishSum - $dishTotalCost) * 100) / $dishSum)), 2);
+ $dishProfit = $dishSum - $dishTotalCost;
+ } else {
+ $dishTotalCost = 0;
+ $dishPercent = 0;
+ $dishProfit = 0;
+ }
+ $dishes[] = array('name' => $dishName, 'count' => intval($dishCount), 'sum' => intval($dishSum), 'totalCost' => intval($dishTotalCost), 'percentProffit' => $dishPercent, 'proffit' => $dishProfit);
+ }
+ for ($i = 0; $i < count($dishes); $i++) {
+ $sortkey[$i] = $dishes[$i]['count'];
+ }
+ arsort($sortkey);
+ foreach ($sortkey as $key => $key) {
+ $sorted[] = $dishes[$key];
+ }
+ $sorted = array_slice($sorted, 0, 3);
+ //End top dishes counter
+
+ //Start top day
+ //SELECT COUNT(`code`) AS `orders_counter`, `shift_id` FROM `exchange_orders` WHERE `is_closed` > 0 AND `opened` > '2021-01-01 00:00:00' GROUP BY `shift_id` ORDER BY `orders_counter` desc
+ $shifts = ExchangeOrders::where('is_closed', '>', 0)
+ ->where('opened', '>', '2021-01-01 00:00:00')
+ ->get()
+ ->unique('shift_id');
+ foreach ($shifts as $key => $shift) {
+ $shift_id = $shift['shift_id'];
+ $shift_order_count = ExchangeOrders::where('shift_id', '=', $shift_id)->count();
+ $shift_order_sum = ExchangeOrders::where('shift_id', '=', $shift_id)->sum('order_sum');
+ $shift_date = ExchangeOrders::where('shift_id', '=', $shift_id)->first();
+ $tr_m = ['Нулябрь' /* для сдвига индекса на +1*/, 'Января', 'Февраля', 'Марта', 'Апреля', 'Мая', 'Июня', 'Июля', 'Августа', 'Сентября', 'Октября', 'Ноября', 'Декабря'];
+ $exp_date = getdate(strtotime($shift_date['opened']));
+ $full_datedate = sprintf(
+ '%d %s %d',
+ $exp_date['mday'],
+ $tr_m[$exp_date['mon']],
+ $exp_date['year']
+ );
+ $shift_counter[] = array('shift_id' => $shift_id, 'count' => $shift_order_count, 'date' => $full_datedate, 'sum' => $shift_order_sum);
+ }
+ for ($i = 0; $i < count($shift_counter); $i++) {
+ $shift_counter_sortkey[$i] = $shift_counter[$i]['count'];
+ }
+ arsort($shift_counter_sortkey);
+ foreach ($shift_counter_sortkey as $key => $key) {
+ $shift_counter_sorted[] = $shift_counter[$key];
+ }
+ $shift_counter_sorted = array_slice($shift_counter_sorted, 0, 1);
+ //End top day
+
+ //Return data
+ $data = [
+ 'status' => 'success',
+ 'count' => $count,
+ 'dishes' => $sorted,
+ 'top_shift' => $shift_counter_sorted,
+ ];
+ $handle = fopen($dirname . $filename, 'w+');
+ fputs($handle, json_encode($data));
+ fclose($handle);
+ return $data;
+ } else {
+ return [
+ 'status' => 'success',
+ 'count' => 0,
+ 'dishes' => [],
+ ];
+ }
+ } else {
+ $data = json_decode(file_get_contents($dirname . $filename), true);
+ return $data;
+ }
+ }
+}
\ No newline at end of file
diff --git a/composer.json b/composer.json
index 85bb73c..af7ee00 100644
--- a/composer.json
+++ b/composer.json
@@ -1,6 +1,6 @@
{
"name": "hrc-admin/hello-world",
- "version": "2.2",
+ "version": "2.3",
"require": {
"horeca/admin-php-module-core": "dev-master"
},
diff --git a/models/ExchangeItems.php b/models/ExchangeItems.php
new file mode 100644
index 0000000..0bb71f3
--- /dev/null
+++ b/models/ExchangeItems.php
@@ -0,0 +1,9 @@
+ payment.name);
+ $scope.payments.data = data.payments.map(payment => payment.value);
+ });
+
+ smartRequest.get('dashboard/online/orders', function (data) {
+ var total = data.wait_count + data.closed_count + data.deleted_count + data.returned_count;
+
+ $scope.orders_closed.percent = $scope.calcPercentageForGroupOrders(total, data.closed_count);
+ $scope.orders_closed.total = data.closed_count;
+ $scope.orders_closed.sum = data.closed_sum;
+
+ $scope.orders_waited.percent = $scope.calcPercentageForGroupOrders(total, data.wait_count);
+ $scope.orders_waited.total = data.wait_count;
+ $scope.orders_waited.sum = data.wait_sum;
+
+ $scope.orders_deleted.percent = $scope.calcPercentageForGroupOrders(total, data.deleted_count);
+ $scope.orders_deleted.total = data.deleted_count;
+ $scope.orders_deleted.sum = data.deleted_sum;
+
+ $scope.orders_returned.percent = $scope.calcPercentageForGroupOrders(total, data.returned_count);
+ $scope.orders_returned.total = data.returned_count;
+ $scope.orders_returned.sum = data.returned_sum;
+ });
+
+ smartRequest.get('dashboard/online/middle', function (data) {
+ $scope.middle = data.middle_check;
+ });
+
+ smartRequest.get('dashboard/online/total', function (data) {
+ $scope.total = data.total;
+ });
+
+ smartRequest.get('dashboard/online/staff', function (data) {
+ $scope.personals = data.staff;
+ });
+
+ smartRequest.get('v1/topdishes', function (data) {
+ $scope.dishes = data.dishes;
+ });
+
+ smartRequest.get('dashboard/online/folders', function (data) {
+ $scope.folders.labels = data.folders.map(folder => folder.name);
+ $scope.folders.data = data.folders.map(folder => Math.roundClearNG(folder.count));
+ });
+
+ smartRequest.get('dashboard/online/printers', function (data) {
+ $scope.printers.labels = [];
+ $scope.printers.data = [];
+
+ for (var i = 0; i < data.printers.length; i++) {
+ $scope.printers.labels.push(data.printers[i].name);
+ $scope.printers.data.push(Math.roundClearNG(data.printers[i].count, -2));
+ }
+ });
+
+ smartRequest.get('dashboard/online/tables', function (data) {
+ $scope.tables = data.tables;
+ });
+
+ smartRequest.get('dashboard/online/menu', function (data) {
+ $scope.menus.labels = [];
+ $scope.menus.data = [];
+
+ for (var i = 0; i < data.menus.length; i++) {
+ $scope.menus.labels.push(data.menus[i].menu_name);
+ $scope.menus.data.push(Math.roundClearNG(data.menus[i].count, -2));
+ }
+ });
+
+ smartRequest.get('dashboard/online/profit', function (data) {
+ $scope.profit = data.profit;
+ });
+
+ smartRequest.get('dashboard/online/guests', function (data) {
+ $scope.guests = data.guestsCount;
+ $scope.namedGuests = data.namedGuests;
+ $scope.sumNamedGuests = data.totalSum;
+ });
+
+ smartRequest.get('dashboard/online/deleted', function (data) {
+ $scope.deleted = Math.roundNG(data.count, -2);
+ $scope.deleted_sum = Math.roundNG(data.sum, -2);
+ });
+
+ smartRequest.get('dashboard/online/discount', function (data) {
+ $scope.discounts = Math.roundNG(data.count, -2);
+ $scope.discounts_sum = Math.roundNG(data.sum, -2);
+ $scope.tot_disc_sum = Math.roundNG(data.total_sum, -2);
+ });
+
+ smartRequest.get('dashboard/online/guests/median', function (data) {
+ $scope.medianGuests.labels = [];
+ $scope.medianGuests.data = [[]];
+
+ var tempData = [];
+ var tempTime = [];
+ for (var i = 0; i < data.data.length; i++) {
+ var newDate = $scope.getMomentDate(data.data[i].time);
+
+ tempData.push(parseInt(data.data[i].count));
+ tempTime.push(newDate);
+
+ var indexTime = $scope.getIntervals(tempTime[i], $scope.medianGuests.labels);
+
+ if (indexTime == -1) {
+ $scope.medianGuests.labels.push(tempTime[i]);
+ $scope.medianGuests.data[0].push(tempData[i]);
+ } else {
+ $scope.medianGuests.data[0][indexTime] += tempData[i];
+ }
+ }
+ });
+
+ smartRequest.get('dashboard/online/finance/median', function (data) {
+ $scope.medianFinance.labels = [];
+ $scope.medianFinance.data = [[], [], []];
+
+ var tempSum = [];
+ var tempTotalCost = [];
+ var tempProffit = [];
+ var tempTime = [];
+
+ for (var i = 0; i < data.data.length; i++) {
+ var newDate = $scope.getMomentDate(data.data[i].time);
+
+ tempSum.push(data.data[i].sum);
+ tempTotalCost.push(data.data[i].totalCost);
+ var proffit = parseFloat((tempSum[i] - tempTotalCost[i]).toFixed(2));
+ tempProffit.push(proffit);
+ tempTime.push(newDate);
+
+ var indexTime = $scope.getIntervals(tempTime[i], $scope.medianFinance.labels);
+
+ $scope.fillMedianFinance(indexTime, tempTime[i], tempSum[i], tempTotalCost[i], tempProffit[i]);
+ }
+
+ for (var i = 0; i < $scope.medianFinance.data.length; i++) {
+ for (var j = 0; j < $scope.medianFinance.data[i].length; j++) {
+ var data = $scope.medianFinance.data[i][j];
+ data = Math.round(data * 100) / 100;
+ $scope.medianFinance.data[i][j] = data;
+ }
+ }
+ });
+
+ $scope.checkUpdate();
+ };
+
+ $scope.update();
+
+ $scope.ping = function () {
+ let stop = $interval(function () {
+ if($location.url() == '/dashboard') {
+ smartRequest.get('dashboard/ping', function (data) {
+ $scope.need_update = data.data.update;
+
+ if (!$scope.need_update) {
+ $scope.update();
+ $interval.cancel(stop);
+ }
+ });
+ }
+ }, 10000);
+ };
+
+ $scope.ping();
+
+ $scope.all_widgets = [];
+ $scope.add = function () {
+ smartRequest.get('settings/widgets/all', function (data) {
+ $scope.all_widgets = data.widgets;
+ });
+
+ $('#add-widget').modal();
+ };
+
+ $scope.calcPercentageForGroupOrders = function (total, countOrdersGroup) {
+ return total > 0 ? Math.round(countOrdersGroup * 100 / total) : 0;
+ };
+
+
+ $scope.addWidget = function () {
+ $('#add-widget').modal('toggle');
+
+ smartRequest.post('settings/widgets/enable', {
+ code: $scope.add_widget_code
+ }, function (data) {
+ $scope.update();
+ });
+ };
+
+ $scope.deleteWidget = function (code) {
+ smartRequest.post('settings/widgets/disable', {
+ code: code
+ }, function (data) {
+ $scope.update();
+ });
+ };
+
+ $scope.getMomentDate = function (date_str) {
+ var date = moment(date_str, 'DD.MM.YYYY HH:mm:ss');
+ var remainder = 30 - (date.minute() % 30);
+ return moment(date).add(remainder, 'minutes').set('second', 0);
+ };
+
+ $scope.getIntervals = function (momentTime, array) {
+ for (var i = 0; i < array.length; i++) {
+ var time = array[i];
+ if (time.get('hour') == momentTime.get('hour') && time.get('minute') == momentTime.get('minute')) {
+ return i;
+ }
+ }
+ return -1;
+ };
+
+
+ $scope.fillMedianFinance = function (index, time, sum, totalCost, proffit) {
+ if (index == -1) {
+ $scope.pushToMedianFinance(time, sum, totalCost, proffit);
+ } else {
+ $scope.incMedianFinance(index, sum, totalCost, proffit);
+ }
+ };
+
+ $scope.pushToMedianFinance = function (time, sum, totalCost, proffit) {
+ $scope.medianFinance.labels.push(time);
+ $scope.medianFinance.data[0].push(sum);
+ $scope.medianFinance.data[1].push(totalCost);
+ $scope.medianFinance.data[2].push(proffit);
+ };
+
+ $scope.incMedianFinance = function (index, sum, totalCost, proffit) {
+ $scope.medianFinance.data[0][index] += sum;
+ $scope.medianFinance.data[1][index] += totalCost;
+ $scope.medianFinance.data[2][index] += proffit;
+ };
+
+ $scope.getMore = function (code) {
+ smartRequest.get('dashboard/more/' + code, function (data) {
+ $scope.moreData = data;
+ $('#get-more-' + code).modal();
+ });
+ };
+
+ $scope.getItems = function (modal, order) {
+ $('#get-more-' + modal).modal('toggle');
+ smartRequest.get('dashboard/' + modal + '/items?order=' + order.number, function (data) {
+ $scope.order = data;
+ $('#items-' + modal).modal('toggle');
+ });
+ };
+
+ $scope.returnModal = function (name) {
+ $('#items-' + name).on('hidden.bs.modal', function (event) {
+ $('#get-more-' + name).modal('show');
+ });
+ };
+
+ $scope.getStaffMore = function (staff) {
+ smartRequest.get('dashboard/more/staff?code=' + staff.code, function (data) {
+ $scope.staff = data;
+ $('#get-more-staff').modal('toggle');
+ });
+ };
+
+ $scope.getTableMore = function (table) {
+ smartRequest.get('dashboard/more/table?place=' + table.place_name + '&table=' + table.table_name, function (data) {
+ $scope.table_ord = data;
+ $('#get-more-table').modal('toggle');
+ });
+ };
+
+ $scope.getClosedDate = function (closeTime) {
+ if (closeTime == '30.12.1899')
+ return $scope.NOT_CLOSED;
+ return closeTime;
+ };
+
+ $scope.getBackClass = function (percentProffit) {
+ if (percentProffit <= 25) {
+ return 'green-600';
+ } else if (percentProffit <= 35) {
+ return 'green';
+ } else if (percentProffit <= 50) {
+ return '';
+ } else if (percentProffit <= 100) {
+ return 'red';
+ }
+ };
+
+ var declOfNum = function (titles, number) {
+ number = Math.abs(number);
+ var cases = [2, 0, 1, 1, 1, 2];
+ return function (number) {
+ return titles[(number % 100 > 4 && number % 100 < 20) ? 2 : cases[(number % 10 < 5) ? number % 10 : 5]];
+ };
+ };
+
+ $scope.GetCountNamedGuests = declOfNum(['именованный гость', 'именованных гостя', 'именованных гостей']);
+ $scope.GetCountDeletedPositions = declOfNum(['позиций', 'позиции', 'позиций']);
+ $scope.GetCountTotalOrders = declOfNum(['заказ', 'заказа', 'заказов']);
+ }
+
+})();
diff --git a/web/menu_min.js b/web/menu_min.js
index e69de29..25e3f5d 100644
--- a/web/menu_min.js
+++ b/web/menu_min.js
@@ -0,0 +1,9 @@
+group_name: 'HRC',
+item: [
+ {
+ name: 'Рабочий стол',
+ url: 'app.dashboard',
+ icon: 'dashboard',
+ order: 0
+ }
+];
\ No newline at end of file
diff --git a/web/routes_min.js b/web/routes_min.js
index 43e4b7d..38b3a09 100644
--- a/web/routes_min.js
+++ b/web/routes_min.js
@@ -1,3 +1,11 @@
+{
+ code: 'app.dashboard',
+ url: '/dashboard',
+ templateUrl: '../views/dashboard/dashboard.html',
+ data : { title: 'Рабочий стол' },
+ controller: 'DashboardCtrl',
+ resolve: ['scripts/controllers/dashboard.js', 'chart']
+},
{
code: 'app.v1.reimport',
url: '/v1/reimport',
diff --git a/web/views/dashboard/add.html b/web/views/dashboard/add.html
new file mode 100644
index 0000000..087796e
--- /dev/null
+++ b/web/views/dashboard/add.html
@@ -0,0 +1,19 @@
+
\ No newline at end of file
diff --git a/web/views/dashboard/dashboard.html b/web/views/dashboard/dashboard.html
new file mode 100644
index 0000000..8c8f155
--- /dev/null
+++ b/web/views/dashboard/dashboard.html
@@ -0,0 +1,615 @@
+
+
+
+
+
{{update_time}}
+
+
+ Данные по филиалу
+ {{globals.currentUser.organization.name}}
+
+
+
+
+
+
+
+
+
Информация о смене будет доступна позже
+
+
Открыл: {{shiftInfo.open}} в {{shiftInfo.opened | date:'H:mm d.MM'}}
+
+ Закрыл: {{shiftInfo.close}} в {{shiftInfo.closed | date:'H:mm d.MM'}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Удаленных позиций нет
+
+
+
+
+
+
+
+
+
+
+
+
+
Заказов со скидками нет
+
+
+
+
+
+
+
+
+
+
+
+
+
Именованных гостей нет
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ orders_closed.percent }}%
+
+
+
+
+ Закрытые
+
+ {{ orders_closed.total }} на сумму
+ {{ orders_closed.sum | curr}}
+
+
+
+
+
+
+
+
{{ orders_waited.percent }}%
+
+
+
+
+ Отложенные
+
+ {{ orders_waited.total }} на сумму
+ {{ orders_waited.sum | curr}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ orders_deleted.percent }}%
+
+
+
+
+ Удаленные
+
+ {{ orders_deleted.total }} на сумму
+ {{ orders_deleted.sum | curr}}
+
+
+
+
+
+
+
+
{{ orders_returned.percent }}%
+
+
+
+
+ Возвраты
+
+ {{ orders_returned.total }} на сумму
+ {{ orders_returned.sum | curr}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+ Кол-во |
+ Сумма,
+ BYN |
+ Total cost,
+ BYN |
+ Total cost /
+ Сумма |
+ Прибыль,
+ BYN |
+
+
+
+
+ |
+ {{ dish.name }}
+ |
+ {{ dish.count }} |
+ {{ dish.sum | curr}} |
+ {{ dish.totalCost | curr}} |
+ {{ dish.percentProffit }} % |
+ {{ dish.proffit | curr}} |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Занятых столов нет
+
+
+
+
+
+ | Зал |
+ Номер стола |
+ Количество заказов |
+ Сумма, BYN |
+
+
+
+
+ |
+ {{ table.place_name }}
+ |
+
+ {{ table.table_name }}
+ |
+ {{ table.guests_count }} |
+ {{ table.sum | curr}} |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/web/views/dashboard/images/2.png b/web/views/dashboard/images/2.png
new file mode 100644
index 0000000000000000000000000000000000000000..ee8217c19a92eaa9b173d398a3b2d528f2f92a94
GIT binary patch
literal 1484883
zcmV(rK<>YZP)F%>Z|FREZBAPEA1It_|J6_!L2pjIHX
zWi85)X_rqKMJ6Ib5Cwoi9>IJ`fHWMcQy@A&Ldl9-yl6AFb2@ZB6w#S=k3b~Ac0I_0
zP@+o~%$$EsFCo2!Q%OEMjywv5FAA(|G)q4tN;DG~9~}c9HFG>CXfq|tql#ib8_1G&
z)}e!0FejB!D2h%Tw0lR(s+LwpEy=K=z>Q;`VJ!nLKyw`mwOA+BsgNr+JQ@-s$-lg}
zxV@f3BY{0Jt6DVEj9)5HU`a_#13FU0ePGs;YRq^=0a1G;K}|bka-mQ$IZIW!Yf5EN
zFRx-m9w{)`3%Z
zBrK_ZR=BLDrl+o>Wn5=mR<(?a0WX@Qou8I~VyQC}rFnIukbOySfCD9dmXVflM?u%U
zwc(j|iBCy@dVGzBhgV>1ZftOcaApEzj;l6Ojtdf$DLm9zH#iA7bngY9u{eHXKZugtxX4~zzn|^bTKWsPMrrU0ygM8O*w+L)R`wm8b==-ieZu-Nf
zI~=+rtb3*QN73e9Yz19MeabtfHwPDWhrUB2j3e%_fdTEij+%!9uA_p5NRscK4u_uf
zH%Br(WfT$+NxbjBAweF8)W+`E(Y?-!4&SI&f3VO738y+Kg0F^-Pi~V8eOAiVj<}uz
zX{LbAa)JN~=9}q4Cxa8JVlrPph{7-$%_mSXnHNPdDGJi_GB1mHF&hoaDLO~vF)GlD?kvd|
zU7Bh>swy9A9>;m!G=bKVj26dXkRsAF$!#{gy}iA@eg}H_0~YeO!QVEGmC!NIj>j4&
zlz|64L=WH$%^PdJX|BoOMbdQ0CCp+H$f{{%=>r}*&npbKlvx}yd6_b;51nycOUKAQ
zYH>3bZz!UE=GtaLo?j=;$TIT~w~We^BepxQG_mWP3C=lmdl{TE+$2pc*|9^T{0(#
z>%;bZr1Q!2V*0`hNag7;tCy=)@##&w`n3Jx?qN~pKmBx9q-~KT?
z0ml{Fyj(6@#@F7o?dq-XoxB}eyD(@DeE4O*m@x@>cx(e05mDF*#VaNd&=m;SNA=?t>*WLB$aoX
zAB54ehmVqNFKIX%y10SS?N~3c#61
m{4Hz^@;^_~MK2-+%vMy?TGKUM=p}+k<+e+Ky?-_t_BLOt
z9LdllkUtA1mUM=s7_yHX!ISB9GMz1^)5QzZ$;E8;mOuQ_hqFlyXka!*V4akfX@L4!
zKsl5`xz74gep#0DNjU;9%*#24d|3iLrW0ZW5XvhH0w6}V2>FN{Qxt-%2pv(jN(Vy%
z>`bLaNgAJjKCei~>X785yfte0;GK7_-+c3um4wyYHkm0Nb9f`Mfk`Ti8v;qvP)HN<
zUI8yh2#8SR8Hq(ebigIk&DG$fwSSm~ds}*Q)8(s+o
z4k35aOV#*{Pn3xqeAK7RnUwtxvjs`od>@^rD4#IN!VKle7{^`6BBf0lKyzs&n9Bxl
zVCBWjiv@e+;;qHJz5yys7wqlDY*tU|wwTwKd4)EkjEdD&HNJyNHl68UVuCVZAdo;i
zGWkMHqyv;_M-U5929SY3#3)h;!}|ufpnQ-EFe1nyNM!=OJ{~N=87K$M;d20G@|->=
z@{az6`~L;B^sj2ncKSpx&qDH!PJ5ilg2o3#?*Rqy{|*|6?C^>kvDjd~UNjNS#^&N)
zan6z1(M!l()VdRkbDk#S?O^BLxya;uw}j)lZO!MeaVK7SWv?P8&_FAj4M1F
z?T83Ak|XSGhdYaQu?US%a4_)(E3|@)bNvxAelXjhp(l`pbcm;-C-k6Oq3H;0=n0~n
z=$rl<*hri8#K<1$v{blVYqL6Gh2xLCdv!EAI+9Qi4SN_Eks-_$ap{zKw*uzG@Q6YT
zeMcLh02CrmqKD6{BcO=`H0+2FJ8XAi0vT{H)Fe#Rf=?`sy#U4bz;dx{U+;EbZMUC%
zE6nf#PIuIrty$@fp%Rr|Cw_Ve=UQ911jJSV!1U>O)zujc3EhTciz@4TK7O^6^FbQNo~Mh<#~@
zLWI^?JOR%q!6_SXs-g@O98!rQvz{NF?lX@B^T}c{ySSKLU;!?G53>*FbLQZ~=@j$;
zVkmh_sNz)=uMW}vIFg?m@=_=JC3t~PY)+L@T6w$3M`;O+5{4S$M^zp;_6JB)GfN@q
zKrLk%oFw)8jbL1s++M3qoUwrC4KoT}Flb-_c`_nID&x3}Zw;E!X9m<}&_`TKgQu&;
z=`DdooGb##MUY}7M=ZX|4KJeMaUJVqZck#K6a_@m$4W_^bJ9rXNfQu}C5*jNP~DpE
zh4^bhiT=70Q#od%dS`G^NnB9KA|@E5{?jHxkr!WMXf)SU^OodSlG7o~niw>2;D)4X
z@=#R>v04?|Vb(6DxVhdIj2ITP>0(;f6k$8q42W^eQ^gN)z<{h_4h)c4W%9N&%%@RZ
z@b-jBVIYxS2{Bw5TPA`IfgHaul2eh>e%zu=8yLO#)698&wWyBdVLK6n7&$9){;$%1
znW%H6b2a;aKHi=6IrU6$LhxLJ7wWuvE{oY%76HP0w+cu;2Mxex*iJZWekPY?{yIGi
z-fC7z`fs2`bbfe9&bvsN;9YGZM@82qw4CS}2%;rDEfv0L2{f!Z>S}&42r;JMhDCv4
zZI{d0?9*Bgv23Lrq_E^tu3fXllTJ^YPY@QkvCM@txTm$BEyI`+5h6Mjb8Zyw0)1tF
z!p>#M>+kMB4Xd)eT>kX?FBkJ%_?>M{FP7dw9B-guW3085$98cGvY28fPus6hVg2sgZ)l~&EZdqEetDXRft$nO#I6y>F2mlc*`l$eDuu<%n3sfRub8r3k9RWmSQ7Lg#
z5`S{xH--=-pWqNa9UqaCt+!GJstRJn*99pNj8JoA;q@Aw|6ZWMO&pf+g1GXO*-0ae
z{gx2L1oyJ}dRFi}dx*dX0Rv4#cXFg9vyq5rIzkiFf#2>8;!wI_30be**WZ5qtx0;f#CGez)l7#@&T;Bc>nwFd2M)q{r-B*%N6@v{|@9Cy9H>FVG9ioL^21->AbDT
z`*@_NECd<~;CE4tWLe?m!4ImZU>I;ipW)$jZ;ck`bf{P}IXyNsKGvZi$n68sPUIAv
zNd9ZXT)#J*Pp)X!PIbBP=`vR?Cet@Ac&od(c=clH#AM1lK`|wq6g6;wp4YSiLM
zOim;D86n;VH9Rg2LPiCkVN|{hd>H2y512?LSSB6zSC>^l)K4*bm;rtzbOmcLPU9@5
z&9!V!rm=d=u>JYN06D$bG}q8O*E}_dZlMOuAOr0Y{`Jyg_yvVvwFV97LjVpX5fKDI
zFpJsrm>*FD)dMNbc04`LCo0~+@BGgYtwV$cc_g6bmP|w$ULOO9OnEK2EBIvhSsx(|
z2`eOx3&GtXbL1+Z|ynJ!I%x+-JI;G>EaGLU5kH2{U
zS?e)*vMA<@S#h)AP@foT@{$JV@3F2+BU?Y}dywZe0tRu;9)ZjiX3&^D
z6C==I;9zRO$)zk8H=$o}*nhZFvdO^b#8=mu@j}C*NEFP`jFt)t&SLThX_K8j(ywc+
zo$XXL0*
zFy|l&)~PT7=J{E(<4EhSiggW9*K^}KDh&T6eujhc#Yd0c-8pFd2B!pgnKp%AUVFvF
zzRq{=O2Fb?#T&D*G3$}arfcn<@Q3p=uL~);ln8lBtW^HO+0r~B^%M#iS^2z
z8TN{I09+*QblQO(IF`px*cA@HfZ+l%eEWMa4PV{{jR1o9?OWLJ-w+8zh;Yz$SZWk7
zRrcV^Op@Dnl5Vhb2z*7s$%foMgx{nl!%q^7KrS;#xB>A99Jb4b0N{p5s2B{`Cm@6G
zgMz!mLIXCwK+6W5=7BP#O*1Le6;)(Zs|!>GdH@QFVIW1fD1QrVaNqt)-Iq?Pri7(;
z_m;>R!Iez9KK}Z_%#(x>^l(NK+@UVfqMe!=X23K^)k8|P4m%}iV*iDy1gbQcLKWZ%
zAr$i#XvvikP{
zy$wyp+>ygq_QytVNI2srP`#c)poWNTV8*o~=T-*Vth?pH5JR*=en*2mkGDIv2)0o+
zb$;t*3sp%`-|m++TZqAk*q&IDqZj}o>SnxiieL$;(Z){V=48INa|l$}-Pu1p+}+)O
z_HbtpZ{Hlh^)3Mp9fSd?#E5%0$m{A&ub;n3JT3UB1m8pEArO3kw_CJNK|8dqXc+qe
zXOl*?RYNK{O4>I8yy$r*Yr*iw_@)Gd*{2>atr&b02%LPi?%7cdJj2>agaj2eTD^P*
ze&iTQm2CQfb4BH?Y~U^gK`7KR%r&YpK1G;#yB;2s2qwV;H;BoxVQ^a)qd|;6nIEAy
zIZ~?_zniBB;)KpvX5c{qMK37O^q|9J^oQ^X
z9MbS$(bRp#QS=FUP|lUZcMP@?Q@5RJ3&@sG(JH&zA9kjmA=2O)=6i4M&D*Lp_O24a
zD4G^dP0~!(NZ7SU4dYf-p5cBLAy+Eu@J@v9!BGnbDlDo}feuuRQYg`xU42I2B#&Wc
z-;@W;BQJ(=$VPk6`(Nx3RarNuY-Hp6#!SWkcry5Umz`&1rzHFT7&GLQ(Zd)w@QDT*
zV&jHM%&Hu&keS9wMhQ`!-JHYi1PeA05}Mj3fr1?~1}XAbK=LGBac{SmXCTRykwUw{
zdahQRj1`hD~MF|+KWnARjas$C7|KYKX@WNMSRq0MF%Pl(74taAS3!%yG;x?ETiY)j>u4bcVmRiIYE-bSH@95b96F{Ek!&iLf(AD9
zl42B*3Lsc3!Ufz;>;hNFkwiE{5dMg5%Wd1;OGqiml&TttgCv|I0R#eC2qVbmldI_K
zzx?g$O(+2ZgnKtK`Q7b&Qit5g5N3JLKOoY#WS<9eZU5;fm<>aVxG@Ed%Kq!PVNewC
zU|3-^@ul;KhM=BthUN*Bphvn<8*?~U6zvs4e1q=Q6_oo&zH8Sd`3uU%|EWFjewvFcM(i@Rl2H7AMhdBAT2tjs>NWMk9Po^tkU523|B1WBK#HFPE(Dv4uFr8KPfrha@;2o$
zU{E)OOO{)CM3#~pu*fZ}h=yPpb`GE2A#pl9+*gzkmSDcOH+OI(>$h)S4_$>V|c6Oc0w|SR9m!f<(ZwVt7yrlsD?B)M+qGsMlsA9#E8-O<)ER=-|8$6K{V=
z3~o>0BNP!x0pA3`Z?QgKoS)Y{s#rokqXk%ZS!2Fz2F*2i@#85dp*4gripVkVptw2{
zDo(|~`3zJ6hxax%L~clyBNo)on!z+g3zSSP^k4_6gmyp$DN-HqCcr@aR(wLM+*}@S
z(8#eU`Nz&&gWLE{CCyu2o$9>7{uhiWgl@zXH;`k5q6yiEY-Q5QPb4la1zv-S01_@*
z!XWi~0tCxB#DdvnS%m3oMG(wtZ~hc3Jjy1C3NkU#&=nd2Iuedj6r>{``xG%Hf!u^6
zX30JZO``{eXQn|zII_r0H7p)TU?ReG0TxVC*g)3C${xmhFvdlZjXpA0#%av9=PPTD
z?0s&ORdU;?7-5RBmaE62Oa_F6OKF*8AoGXh)2q%cf@tuE)PokHs1q*%lKR}P84pWl
z6UM>P+2>-BXYo*P&TW{7UX^AXg;AsfR2XV6dv$;flu3yR(`3pf%9E!be)j1HZ#}(#VA5)L=kD(4
zwX@CTcUwnOuJDT-cf1Sn0
zFId0u`I98ZWTPox1&T7>YHqtdcrpwed_w4wZ9Tn^Vw(>T;25km89D7p1`fssNTVz7
z_!S-bg}Sqzv~%C+>1j+!{6+4Blp7nW0S}b8X;UJ>B*+8df*%Do!DN82f$oU{*yR@5
z1%3f6phk#D6iGMwM-_W5ZX6;>!NZ2WK>_20i0?p)3wt#*dH^0+A(KF&8m?bjzkd4C
zx)asV=@4Yla@V$?U$JG!P+fNycW+;8Ups=SI(zpF*vx*+Qv=3T){fW7(R~zc;caIS
z1ua`h%-jdG@=C;lTZQGdfg5=1;L*v3RWy6Cz1c*_RbieTD1ll6P*^vIWsepzUj)|3
z`vHy-jT$A^-J~$coo4|FN4O|}4@XCozz#wUdy0>o9_)5c%@5{{;ecE)ff~4+nM810
z0$_lbM+#Nrzfwj|;t;@SgGM8}C~g1QSVZ)9R4>p`B}$
z*Js|Xrbd;@o|-NM8ag2mmU1*x!wj)y2^1yZX1;0?G?)j6@h1V}Sb>93sQ4qD9F$6U
zv8$QG8X`p{$O7IiA~gj8d(8tJYm}k6K<|A9p6^gnIE&>@Oev
z`SI?2W@2`d6j`yE&IWe3ju4G<_u<#?yz%n>iJq3LXCD6W^N)`%ac^8|o3~uHZ6$Yd
z!m%MNkZ4KL8ceCzFsE9pcqOOn%*=CaQyh+ddWuWpT1WxtKr|g7!QkQc>K0&toEkw0
z1@hZQ1#VzV3}|3ukBTD~zNb3=qcUtbX3qv+RV3SS>TVI**{{91q_+xPh}}6oVaPGJ
z*m1M`?ujdN60*#WUJ#ZbiGon|5G(0=PRKd9q=o1W8+eSq1a2%flEjWkkkUX&s5b!}
zwGa11I1?h?(Fh@;6x4;t0cq3RT!bzEy_d$%Yk~#fA@i;$LPT?hlp2pqxF;0jK!G-(
z21pY#5~RQmT;338N$==^3Mf0&H5*@lQ(19RS6?H%Y#K6J;GZR8$>Q~@{@q3>4
zxCc`%C-%AfZlCu#?=5L!J)p8S6W1y|lcD;Ga2B4!Dp*YJ@ze76Ds&-3@82H>KNB#<
zRngNJ_r!&dL7`)hJMMIrB5*3!d!}4OFE4o*BL~T^XA?;$4qgT@JOf_X05S+OeE8(%
zqmcv?GM;4F9!cmz|57R)oTTtlP~v*5Pg)THC;|2oI1-^LhjcXaxS-0zy>MAs3M144
z8D8PeOu!Pli$%?Iu*_k_sHmWEFj)CjNw&1v%PIha;_1pz!oz{dwkby%)-=p%9#9jr
zJ)!0&Q^Lw-fAmhzVtz04QIQO>O&~fA2U^mtG>;wR^TKYV(6CjgYw;YQYEtt
zf|_GX^~}a_iV8PKOL5c=j2?YJGK$@`CrwX#`ez+~!^J+Cdz>3NYfD+JG=$k?1nx4!
zjAtuk#e=NKnJd#+Iw8bB5Dtbnr>q9`1rtZfE7})Pon06g$MYn|K8Tpg}2&5G1G+
zcc7EZnLL>fW&7LUBh+3TY)2tJgF{NoC{(3B3~5#Bj#)(ETbC!#fJg&Ddh~T4vt_H3
z{)9Y3fD8(9&)hv~`udI?mp?Z+a*}aO)(eOS6155cffPsrCJ=j>yVQll!$WI8u5Jt-
zLe)XqJ{9sifT&KuAvAFU738>+gx%W%tI`Me9V_&0ONOM}*i&iBws|3?CB~NSCJ1~s
z5K(=@t+-FSo2+OuoFbC2L`&vS(t13jVn?Efb~3PdvTB4k!dOwbVFF8{7E4y#I*rJx
zov<~h(W#JEM4Zw7qA23p>iv`bCe(vuZh;go^3LzjpBb
zx9>jv9}GowG4)YY(No(
zM_C)j0~73_0lbh>egFr<2(1*!i)d*0`?Pt2LJ{9_p6KGl4~X``MUHPET4c%
zhB>A4xPFk~AbH3su>&sZ2vH
zCojm=12Vz-rVI51@HAk79imI4m%kL(7wj5#eO`hOkhJrH^=(OSSO^A?RzBuahZnMpHHjZ{Yh(j8Xp%pkVrWS?IC$oOfEm(rA3iIA#cP|J6KOMy5Khzt
z8%#pR_{2j0$Jae>Y+$d;Hvk}NKm#-k31iGD<3p1g9jgdW@Ed~X!j`r;VYr}8vkQP3
zjE0p!gQri@ajX)PLBxJ)rwsd9tHJHa89j#xu|JDw6w%xVDUEF)f+=vw(6>+a=ArJ$
zMus?coX)+b+Qj53AcI)Nr!sGlTpfA
z%GQhe?3E*MihDTiOXc${HisUGj8ehPkq`(TfClcSnMx`#FR7w>EEy3uTJJe$-Wcaj
zSY$qHZ8eSmExB6S?GuQCxD34D(|T%~37%n`d)){(#I+XE-<4>Z;|-)mYbwu;*IhQ+
z929Dvq0Ar?i4@4g2dT0uB&mZFPLJ)vgd%Qz;pN`2l`6x)gqnuno_k{GeH5EdfAaCi@4T`+Ymbpj
ze{k;e+{XNaE24u(0ZvrjK
zfP`YPZ`HfTo}CspltiWG=i6`Ih1c-S2j_rK+&rDN8t2Cnp;iVBWyfvxS}733?df#qD~Mq<#M_0^01aVI=Qvpv3nGMpn#NsK1lfP6x6M+xOdP>l
z<;f1b_ocI13u8ROU;@d+D|P28|ai#jv5+K{&B-26t9wh>IQZ8YTn<97)Yz5mCPT<2RKF
zh7NQHcp|LgbHSqHM==ldBVZPqxDlZUncP&73%?CNIHf*`VNCzchv0fB=&m5HkYC48
zWV~9duf!9SNJERkiDSZ*YFWvKM8bF9S`@mKtULw@lgw5$Pp?HW-!=K
zL#Xl4@Dqx(-+e=PMdFDMJ^+9&Yu*jJ$zz?DA?q{xwy=BOYKz1JY30BQk&}C?u}8MHhuBpc&<67gWh<0I}#=1`M$#A-=O!au?;L=lmxRmV}^R
zCgjO4Ml1-GXu}fOLOY#FMCiRpL67ZJf4mUT4H;1cBX+1W^1e!NYr?cs*al6L@j)8;~y*t2A%cpyNR$xmgN>h7jgxTyoAtU8!N358z(mBa%#}
z!#2t^RES}zo4c{lD1_Z!;sWykc_hG??c7PZPk|6W{E?jKHX#M8&<}l`r7;|
zYw4Q?D%J&;dOpHnHZ|wjFqgM<0IDu!-vMfg6@8}DdaM;y2Awre3Sccsg>VOtjBHa$
z%}nMpZ9N^=zTYshJb$$LvG2P@NL-d(YzkC>fPE8ulV_^nsB+g)2511oly>ff24)IE
z5CpoQURk=vq0;?Mc+p5WqXNajmsT;Gtg5#fA6lZOQfgKA%o^ZF%<_;^(c1^z`sgh_
z!3+!XCb>gK8CkF4FDSt5y^QEKPHk9onNvlqwBO
z;vgC^JT70LmQT!PLJzjZ6(Ud9lkJnVnqrH!y1OIe%j4s-Cy$R?WE7BWSzw|*OS)^#
zhS6>d1x`lQb6Y^v2om5nOsFSV2^U-;2YK~`_fb+_M$*dW$sm{pQod+9@3!d;2*)#6
zQT(#p93~a&_5}U3#R4o`bf1elqsz5{nV4;GW?LK2fAaCWdmHV}qZh9k>oJ`;Q#jt)
zo?NW85Xpuw$VuBXd
znnVb30ZyPszyhv}>a90H?K+`1sYnFhf(G+&beZ<&jmCuRCywwZ`07h1vh+WJ1Tnjn
zt(Z)MVUnH7QOEi9H^?W@g(Q*nrCy~;1K$>MBMKyfS?fFDD~sVa>BEo733-YVmZg*d
z?b}SQogNQ70bI9i(72wcN=o-49Gy%eDK{h^!cj*y=#?uS+(_J0xw4d)Zpre}&54lY
zkH$I9bc7G5C!c%{RffIi_73(oo;ZNdK!CkCszExQLE5b=U#bYawA}g5$up*xb&_}r
z7sU8pbmkGnW)+J_)nkgZvYQg{Fb0b>YzjxBuw;na!#0fr6m}(E!_DEBmrSNs^TcaV
z*vH+Qg%dBlw31!}jc)PWy|XFz#Rfl|3$z0&saVu8Te5^i14`4m51?0P=jyGgNkVFw
zR%Oxe{RGR;fCUT}getm_WUJR0nAIf2bMnhRBV=c5k+}tfD0oRB`8DijiEM8)rRiQ^<&Mr0F`!1Hc&_`bJlw`R3g3QHeMS9O6bfZC=E&%
zW0|532YZBU1UikwkECRJHm%K0w!8P7L}bplu21RvS_!GpvqE%i>f7fBJaiGo(zkF;
zxs2C|wDe^ld8@vjWtif0c)^(pR>NFnF&FqWl)E8H!Ce3ip@Eygsg+EL3ctehIaRgLyl05OO;QDTK@c7iQ`ctLTrzG9n?x(Y$2ISr^kLiWW{K%D_W#gWV@!VJ^l
zPD+vDK#--~Dh{+>Y5KbcDMXoisZFkd5q1V;&qWeTKpBM{MBd0jS}n)7@WHMm?|>%c
z>HRr`(cMk61sbdjpqRXjDwy}v$<~blEr?WU0{>O$FS@TbBcU8h4HhgYh1R=ZjY^8i
z7c@@;yG=&3HOW;G=Fh@ngfLFkw4JCY{~JE)>-7w^nxYtn>cDZOT|ZM5sX*
zC5eM-Mf)w4Ad8fWgXdsPej(Y=%`f=w*LxUlXed(~q*y8P-$CKUV+
z#s2Em{e>0l^j6kH3wac8QKG%R{r+N^B_6#O38v$R-Gv
zhldw%U%>`O^e`G`&DM0azqR$k$+B6kY&bE4>>1^Q5u60=)*Uil5jC7OrBo`UYGET8
z_2G=n3{TEzgL$1DB{51yMNsWL^UNA_fAy3X53-A$39d(FpOCAU_LEIyfP?@liaixf
zPMocbseBSJD;IP%gt<*cOO}{~dzq@|Mj(e?d7x5kY%34%4&*Rz%)M!v&>X20>~(}d
zg%lVXx)jt37&kmO2T~S2M|${A0_cY*jzU9zE|g5$SlF51YZrX-;|UE9-^jQUn@^A>
zH9MiHJFNv}rj0>^t4eUgOl~1(tbm4a_L(*(syt*TkErZAo@bvv=WLX7E@d+k=os2P
z)sQ}SpeOKqsAxIpfs+0K^G3NMwhKkbfm8fE25#`0JxL?GbC|0{gQo0~Pxz%zZ<%qE
z((E0CR1tN?pYj?_EU2PRbBkWpmK}eF1A*5qzZxjMFc%|SkZ#u0c!DOu=y>`w3
zGJw@^u0P;uCC36Z*ty5(%$_5+wzj4`W6ry-?3)*F4IGwi7(}r&71?$X-l7(2vURY$
zt#b5co(8;dE?U8REaWlb_Vmqg-iE~HbZY~(r~5+2gf7c
zHUuJ^^X}Oz&prF1%GGEGH&wN{jr&WvsN(#Qr8Ih%lUfGnReN@jWR;hPAb}(MA^z&K
zuRgn!;pL4H!&k(l2`3QiKPp)HS>Zu+i-Nl9|B|E<8S?h8?A}O}6M?&O#863RXoN(@
z+#MR1+&w@jgPU)Xcm>_Hex$Vqh^(I=axHw2Bn@HNz*cS`z}^Tak1AdXGbB|60x|}Z
zb0X;g7;ljL@s(QXSQpXXoc1obB%HKOSOQjfZ2T
zd-e}m8ImVw$CbnrRr1dqv-F7w)no=KZRlri!&o+e4g#ymG>#ULfTD_dr{g@duq0-K
zs~u73k5;K*cM0MJCsYEimZ+l}Fa;?5k3h0WEM;P^Kb=6E0qMlvEArE@fsZGAJK_0n
zQ+^t_hM{~sP6+xtqVBIZlKO)6B5OH#L2okbBf>+Zwc0i2RM2bjwoPsrCWy(3CQ$U3
zYpVu!Z3V}D@WRphW_@{hvA#e`@#@N^ixpgs8LWmahbbHgDL{&_&5H!1LYez<88Q~!
z2R)4{W;3R1f-Q1<@I+vn4=A(S0@YA74q4+~YoAKJ99-5DcS
zNGzJBNdH!b4TBvv$gL9MiL>+Fa|TuM^+ywc1XTH&3HxNB0K(9m%W^O9!m?#p(YV^!
zL3H?aLnUmXzj;_rLf^sP`n(i(O~`!7I52zRr_+{~r#)$l
zQoHmg<1?=tUZ>Zd*x8UDi3KD4PAly#SS6hG2iF^qwl#*gLOIJecq@2~T<)j>?Ml!x
z;%AR2`UuR|ND`Z)%g>NcToN=#6$pU8ZO8zFVcq@prKJ>x4_Ig(QG_yq3FzeiuDFxA
zU4NHO3m2vwNeu5GfZ8Y?!iidcs>qsXlAfo%_DK|ovQCBZBO
zbtNQ28#*AryBU2rD
zq%iXt2${3(`Yy1oH_lyxV%Y?;&^R1rPrBU2eRUGUQk+W(P_T}|fI@bcdruxbckt|i
zojpBzawO33+K3>N%OLgj#KxrQFD^wk7`NFadXW0FOv43BA(V_C8_&5D9)D^%g`B8i
zii7EvT=Wqk5JTD~7fexCf^cFq@b6+khO4U!>3d0dsPD3!Zt>5gF8~>)FEr*rG+L66
z1rt=AO-!~-AWLe?hD-&-Ata+fO`~m22xv%jJcilMBc9~99%EUurkL-c7c(fjYBLLz
zsZ{Lox}n1K3J!hNMhkRfbg8tN|4G-`{KoB+alGt{oqchVHH2)oA#_*J5+GH8OF<|H
z#3iawQi>uKq#ObY5(kn4fuEv8Js_2;61`BVoH%eqs)Q8a!nNY>;`9AJV>@nO*7l6Y
z9H^)3)!w?PmQgWD9OV9~IlGt^Ghh1&r8t&F!l6is+P6D?~P
zb8PRZ5~Mqn?%@A*q1kB(GTLw>ZCWkZw2!Ci8ZNZ$CF)2bv2zZ(DisRV+h*+=ZB?oWPeYvJl{VRk4kQu3^ExSjpfW<
zkzc3hN8?>wNgpd*z($|b31NvA+YXq4S&ajAE{qyDCr95+;%h~y3QK(tDcBs@Q=}fH
zK?6_$+HxTl0}uhA5T=*#8%`yuK<=Q;DJ#1m1R%rBjd&9w)o_q2m=G3Fz;FoL3XyN{
zhxp~TUJwU@YH){6L);%)3Y;N%hGx#D>-K#lq6zKh3=o6L7oN$B-dA!7;{;i3Sh;{p
zv3pIWmMUK5-%QHM-JHI~Vo>$R&^|C|pvJzXY2+Fsir7$AByHAUQK(LYK1?!_9;SXK
zhtJgmzrY3%=BQ9bYYQis|I?UVa%v?iaYAFk8Ebfc;v{nygd0)|qk{_y-nZXJOL|U>
z$T-5D8V0w4lh5@G^-NFUGi=*>0=vu3v&ThA5}uu#r*?V#=fAv@Qp0Oh8V(PR4=>TF
zok}*5hgLY6kj4#=7bD_GOspd;rFGJC84%g(xDRHKn9$Q*7Fz%&p>^ocJI(;P$wt=l
z3ga=rWfhuHtSt+57Dp{Vi0@`OuL2In6xfTS5o>tqT61Zcv{~NdE{MO{_#bxGU+`PDOgmwKO1i2LqWuyNxX`1wO2p
zZ`%nWhR1{l`SHocH-CJ7a`H{E!__kzR-%?S0WN?S*1!#pIw8WsgwzkfoKh87&FT*Q
z#h9f>xFkISjfWwT2n6Rb(`R`AtiuQia=Ch%C~s@#SVKDwMTJZCQzDCpR=JCer>r^>
zS)|PEv*PKtRlj^{rb@;_TDc;)CxP|qfZQxyijC!j*1J4+U9*wZa}QY*K-rQLa)vt5
z++NRNC%Og=X6e9hkmp{zzf&pK^OiU&xA8jDLsB5&zLFp0gadlHAv_}ur&NXC-av4s
zUBbEEr&eq?5^bzdYr_g*xv)PfktIF6W*;55TkoyC|LcHh
zRJj0ZW|K^ivtRw4(cb><7k==C@9uVc^MfxR9ordIJ_qC+J)ezxQo9;Rjp6-bF_&r#
zoG^F{4u<{o{Q{3Z{2)Q*A|qL*5-Qo4PB1G49l%fkIiL+GMgtXR*W`c)h&FJ-QVMNp
z2x#yzAOP)v5muK3G=%HO3yUj25n5mrh{5id3)k$?TtxlXmSo8AQTz$XF)X2|xD9q$
zB${p^fgyl0b(YL701R9sSv`dRXoMZc0kua*&(2j2wM^SnaLlkG$vLDFVa`OHLictD
zVPS=~bQ18!CqyJ~HwV0<7EUC0;P7wwj;K#6ur+IF
zE|?_~e1~&R_JM>OIG3v$U7WCE4g+QJ8-OF9Norvanq&qL;ImLM;hCQ8*@yylNX4#t
zh+K-7R&GZ@lZYo?^LhE|^_!#1OPoUTM$NbEt|nX<1=;L&s+0u{At>N9bQ+}YD>)uh
zAx2$$(y16iIM>sMvvA=i?v6f24tPnLc;CBu)rWeAj$Ezhw?MPCk!RcgoU6{qZIcd
zQb=%8qPCLIhT{$GIr%xHO{^7-Xz1NPnRXCyX8ADmBUe-;k;~Uah*Fsj_aV->>|(U+K&d)l0E$F}}1)B%E8kCSA@-
zq!Rr3XYb#?JZ4w65wkMa;E;UE!@45=PtJ&ye3r)R2sM^TrX>eunXI9WNN-E(_&TLL
zIdQe6r9q$55pd;`#nS=qYRefOKmZZ`c^&|`J>b&iumAMT7nf02Or5WfKh2fl5|Y=*_|<*WcCR?prw#AWaLjJfIc#TB$)
zDh{kzVj{JWGQL3o_`m?c{0I`88y8_Rgoq-dEdDlR5Fh3BiE3q_1@jq9@}Q!hLHO)t
zzzDznbg{pfpdeyKtqlKBZ3(~hOEIEB$VXte2RpzcutPbk5P_%NW`EKQYx@&K&Y@`y_s2ZgSWct(;ARYFa=vgBtHM>#z
zWHB|9%-o8RR91ZW5OemEGe>5Qpn|2%nHdcCmuCCQH;HgLuuI5+lN?%#Lr4N=*vym;
zBD%bX6S&5c4H9l0h#8=bV^WFkng;aw_sMWVdJpu|Gpj+4A;krSFgS=sQD%>yf#YB_
zoCq`o78GjOV)R%SqX8bn!?nqyCzG{@0DGnlN<}}S99Aq}|GL7qucV-W65xxJc{)1u
zJV
zDkhJ|0x-Q&>$w3!0EfPzgAsz|?(2QA^`xh1bEHZ#r7e9s)qj<{@gKZ&+Sn@AMm`Zw
zN;P+-5p7n5v&io}ga&y;*1SP!TVJAqsIgGB44@YnZv&wI~{q|qQW!-m1bm8X_j5vo4sHN;;AH5uv$
zO1yjFfu0m}Rd;opbQR-m|B(4H7
zfXLa}#*w`8{$L_Y*G`o&WyHd=D=6zO)&ZzgNm>0=T9Q8EuR@KxrGlc=6LqEYa4ls(
zKyS3LjRVdkEQ1hG0!HYY*hb>q#v>8d%GM8oYuHdmJ3*BI0Ye6>IGnit+z8`@j;NPk
z23cTo@H{TZP2}FuF-K6Zs|+vCwiglaa)A-CYZ_g6phjF0hT=4Yy^u9ckr>+`a-A(1)C@vK=ST
zP>w6mK$#Ez|2V4$fv_P0R;QZcIoz8V2)lv{;D!)UI9Qd9Q0-OP?&W1+0hh725q_Q$
zUGIshowLE*5{Z#P!?{3UFp$1^x&@Z+88i&wF|0j$qV1%d2uS4XP>+!7cf-=$k4Hq`
zL`agLFb$ATCtcAfqSi%hXn5oS*!pJ0BpjhaD{x1{2}q!$qB|@t^3rG(B;SvC1F2|*xv}GfoZDQRRvYBaPAGahPfz@F9MxN=N^LLQL
zX#e{|zpA-6N-|FB%cG6LM=8kV90%h>tpYY29UN1$kV@q7`-4ly*bPPv*oQ^#iAC-=
zQX}P}?DUO{C77sqg%(lF6++X2tWxy+hP!78RS9Sy?$nEw0Ug+TS+RK7W2jvm&-H`i
zF3{39n-CVO-+T9!?=BPSa(2K6+su5h|Ka^U=413voXySU*#SouazxGT%A~C(Klt*q
zJ!IpX0H%o`bs33{;WJ#J1$l;<-o@3a{5-*SFp~Jp{u^v>$zlh^&LYAA#cLnu6q*D|
zsLU-m7C3@>Yfx(b8$|OhB@$Hj#D0+M-SBU!2s_C0;6dOLNw9&oKnPk`EO8+n1|x}B
zU52nslQ2TUA7QBJb6qm8z?u|q!yiP%z>Ev}1h16sPQr)mzfnDq
zy^RPIT+;3mYL8NiNkuzLDdN}By&W)|hha#dC}9Cw*<}{pv1^YFLI@`(WLi{XHiQv|
zn~F677USL+q3K>;oa-m6{=_07Nhq$i_MUD%l&6LgC8KhWUe+w{ntSMXIFxs$(hJ)h=iz%-f(XyY>Y;Yj^Bj#or5Af?
zkR0C1{xut+ZHkpDKJ{f6F=JN+y)T}J_@11kg;yxOct&
zcmNj45?;f&HxTELvBGA3y~5sI3IbJ~KIVhkX+n(}6E@d$+B8Ea
zw>aI2u^q_3d78i`P4<8kwL*nzt$SPX_q7zOqE6BVTZnY6()kZV`7Rrt6u
zL#**xmyP4KBsZ#+b%T7f2eBfLh>EbuRTOCGhbE+*gMkhuov`u)jVeso@&86}#K0j)
zZ;Go#sr_H79AUVemUgM
z9QN+z{lsqVcLNRPz1=Uoe!VkhsG1#?2bkLDT|mQ!7mwsTAJjwSElHVeaTSvQZ06
z)%Ii`Tv=Ngdlyo+E`=lj2%3~`pPi8lE9}Xh;xj&yK*+EH%5Me9J)i-Vm59Ppi@h+%
zG<$)Mj{NpUW|W2)H&oqdV}1gz6ddy!B4^Y9@uOdRi#9=bk>zhxLq^R^sKR4$9L~gb
z5OWCkjr&R(4i^$2m{g0r2SL}VK8bx)6m_0fI#AaN|Ooqkk0vnmBOR-AyedQDs+hyM;N;a3T
z-hBV3KYjD(*GF$&efeNc17_F3wF?i4LFa)A5T#INNPrV_G`TMyg)=8w$kC9+ckt$O
zmclL%G`;c(wN_ZNsw1mtj`ym~-2u)aX2LrT8;`wt<)z<41x_Sn=l&6fzxKWVFPRJN(*kphK|F|v`V5T8@tQn@!CX?fn>yDPDd__
zQ(cBGD%J&Cx%}$~C#0Y|QYjbG7+ap5Ne>cE1Ae@4JOXTZHZ2r=domtBda?p!V1tYT
zz)(zdr7VKi1+5j2QYklX;94}$L@Hbl)W+t%+qE5oN1n77MBLsiRm>{8%Y+^3c$C^S
zvh&!o){8rC$cqpAnprcZ2k(H5AxWjOmaKbG`TVwNmXs*4Uy?}X?_7~
z%{=WWEW1xM!$S9?ONqn2#MJaXu^A-k=FJsIE~di9B&jXPM<_O$ln}oe6Nk-NA=+bY
za_$*x-#ElmV5cxiv8%z3X-&Gf@)vC8beC<%9w}*8STVRKbh^$z#!PepM4qKFN2R(q
z48N?vhPVdpEPm6is#StodMISo!_x`PO{?2EZ>cOa*3WHVp{1$HTz6L^GHucqX+TD^
zAY-XQV{rs|$e=QXDm^I}TuFdipF#sz9OP0&Bw^qhQ@h9)m40SQ2N8V}3H?355rY
z!a;kT%w-50RyXA0HKWr*+koT&LH~6gj*V&q48t!Fro?E{Oxc0`Ic>mQkpCOB$zMt*
zvcy*55>~_IF(ag1)bk2-8ZBnN0_F;pOZKVeTShP-UPacXQz?vT&SfX^aU=a*8Ly6E
z7<~BWi@`AIdKOy`8I%SG2ZyV68Rq!DS>^L?I9_`2@&Swn#vij3%F*)v{{DwY<%pAP
zIBMl9qtj`?tsDsj-w*aFzub=}zPn<1TG{O$!HuLehb86d6$nAbdXK>mkQ@XO#tD1g
zvD)KjS5)np@nE3@*n;KP6@NkDFvD7t8L;IOH#ZT)0#gcFDE_s4Jy<|tK7wr*Ij%iX
zLVyBV4wUWUP{FaR*GO{;IB>kNE4h8Z3-#^bp?~P#FQbXJV#S0
z>`+@}+pq
z`{4qfIDCdO(!eUcFdUM6;`QsVeDBRGu^NtuT*Vk#NTe#^LL~r{1U56-&!o&|pX6kD
zp{crt)o%QoH4Q77E=^>!rYJ1ZHxiQWCr{FW8qC0LX0DB5d<`O^w(S<0vjU|Lt7)!)y@Qty6phrLER|F1WPeh$g?97<5M3#sk!3(wb;)$D^9@0vjF>-lnWqV%xt69Z_%V
z0M*{MA}7m-4OZg}6bk%qYp!EOj2&jl-eClgc8sv-!5(h#IkxTM%t
z!Ul>fl){b~dqN#pFoJPZW7=kXk|IApFhnfY`xT9{E+CYF*^Tm}X+!Od1aG{T~
z=@ii5&a6Kj$MaYRr7GmF|H}F2fBpSHLO_
zf?W!;6k?Xxh9X{n$z{PLs5I>V|WZ0m=^dBMEcz3qE
z!ON4&NR)4Ou)p-+8%vsOpaYKl#4{i{kLVIZ=5uBmFWw(74i*pR0yFh6Y!!)eIF#4v
z?Y%3o0P&4(1ReG;?tgqn%_%EJm#`t&;=@58Vb6kyGpRe+Y{E*Dq#G!m`48bzn#KYO
zP%mjUsA$&24SQ+@kT7#y%V#ox@D$taOymI=4u)w54hSBA6H;S1k#VQ#y#)m~!WBuo
zF#>Osi%1J3NZz57gFE1vIqn*+DJAWNBxm4bhtg(A(3m0#qAdo45dlTcqSNF8;wG?1
zM9K*7)e%BkC2j39KN05AXykWyt82{?6I|4TPUk(p+@nf;8vnU!04B;QHio6Zyo6
zxea#ca3TtW7K3lD5ra|No>fwf+pHYvP8Eb=FZ3GhsNo^1u;MlVE)`7Gei{TC-u&UG
zKls6s+)1MdsmSpt)i{c96%<=aJEGa4>?%ZU;$%nERf%yO
z#X>KfmA`9!Jl4AoXquh&q{oig=pkbNfEU)~(l@uCeoKgBu02#MgZa=k%f)0&+6ruU
zSC-L$9E?}S%PV8H8yi$F50=Z#4Ldw3q4jnuqyddWY1YLU}&k
z{2#i@3eR(hNyPE~Y=3j+2?vDIZxPQC=7UrZ
zEO4-NV8s3addzzG<;#~xmsndOEGRDzkB_isXJRrhC7aSj-m18cC@C3k;a}~kP${l|
zSUi+-57eyv%q~UpX;ve*-r(>O%y9YQc*c|_T)3dK0RWiqeDBSh=P%G+7-~Rd&@}WW
zm+Ceb%RD@hW|uFPm&DIlS=rTuYBG|twuX(Z$IqrR`6=HY&*iD%A=8!CKr9Y4u1oHL
z63(_+fel;s286CX9MnApzcgb3r^L`DxDes`5n~HxumTNoJI%5uu7i~v3?0m95JE6-
zLb3@J$v^?*OopjoDs7Yd7
zuOHKH}j-z^}a-I!nnMyLWnbanY8vBWh_$oxYDy-pKQ!yNI0
z(`f8$gKRulgZw|bzp`AS`$(hB&DG5ns`v@?r>TX7d}1p1ERon9@5-^m^4Q5z0Suau
zDr9|izcO19hoL9y4Co5}%F*;NmTt|`w;~>$I_3##L7Lb0jy5<`@Y*xp#Pwa3JolwZ|EWObx56axk
z?ps*G^|cCQYF}+@0#W0NmgJy5q$&^XRZ1F?B)4za%%QEu5l0bGMmuZ0MDNBFwZz$d
zG^j_d6xd_JsE4uo1RE2xb43A^n{tE%845npgpIouej2O-=?;bz`g*x-03qDFZfnb6
zHq1+)p12FSIBVfL%Z0qF$v>N6!l~k;@!`rpl&jXEzgXtpdl(cYZU%#QDF7BoV!7s6UU<5W-g@zG)@4)h3*~e
z%C=b1<#vC~7oyl0Rx91!wWdROhlKvSpadESFNu{n%Q>sz8YUOdY;O?|F8K06ip>Uc
zxY}II)50__h8*4!ng*U_74!}AXy?oF*My^GHUzhu0UfLpwYt1H<`2%mQo`mR1;>?b
zF&}L>uw^-rhbMpn9vcSP98*S^4KsX;KA!f0w`MBcBQ%Ya3794*P>n69Wh^r)`{~hO
zr%7;aI305f!z>%_#vRt!hhoCw_``?QLGEy}@e2@*j(+loul(@mU;W+}zKeb3>T($7
zhHqRFqo7!wa8YJQKY4yxf^pz(P`f!;Dhn`!xh)x}LC>UL0vQN+I9~u@7`*AE_Ti=9
zdvE({`;0)!HtH8rINjcRD$D@k5mXSzLF@(~1V>S9IAg026{@1i8P*dJFSWkVJl7vU
zgAhZA+HZbK#`^2=vIhwJ9X3*{mtlvOz;uNO6o;i;5zLS(@f#p#hMCB1B`UlTyG~Zd5k`4VyE@
zU1*&(Aw(hiov=M)CjbG7VZ0f9n(?TKQdJAp4aBYc4A>7{NEXrf8ZrZlEI{(fp;
zYkMHJR+V5c?C#2Q^o9evtiq;K(?Pj}D+e4zn$;lC&}FrtgJREVK>OWYp$5w-z$9R)
ziHzyPLIb`FDp9&8(t)<2o~gV0?{hEK9!|FOAL1{?b3XYEh#^!OPNy=s!c<}nb%y)*
zU+nLL9adJvYuMO;yo7yVUz1Pkb$Q!&fD8i$V1hMGOvUU$2nE3yU3Ks3&=NJ(O_1T!
z!9La3>WK8=!);;sr|z~QYiL#jJHnZB68)!{Y)tH=d64-M+ES6i38s;;VZ4(Xdk#`9
zaEZ9*>k7xmom-z|dPR+RYxTrRwF3yupuJue^06oTpN>pDY}3O@%r~hXX5kf@OyPON
zNP<&_n@0KZ)Sn@g8MIm?4Gj{PTcFxMHA`W(k|W6A6=>f<3n{U>rWdK`fkkrz2QG!E
zjrdwA$R%Id@3X7db+QwgOCG?1&%qkFqoGKtLE4dAZlaFYJc8OaYdpleVXdRPde0kA
zUYq@jtKatN&__vBTRj4Zr0D9fbVz&2&7PQIlD|ENKZL8b~$3_xie2H#;7O#eec
zriMr)Gf4&Z6m8aCvh0Ri$<#U?QX@QZkX^;-QCO$_*&)zjAC7|(6QPw^FcTMt-~y~A
zNm5DB{5^Ca5NU7@N{|CE#W9BLs7JyufO`PlHfR_!YR)jSfJvc1c10GxZ6zCvyTeFI
zUv$QBoJ)3QiAIsduj%#eed)u?rIkEFo3J`AUvK#fU;D~ezx~s1edUYaUBxz{7k9o_
zjfMJ>3WmA){O`~A<)@Nr%_5gq25KRv_}Mc>$?FI;6xe?pv&?2s=Y_srJy>wNihHoH
z5qj^zWPszaeR}qI`|RnScMTOzC6q9F*we%oDs^Um4O(TPxtAhSkW;!rGw)Pn%MGq6
zuuz~R3_%H|1YC%}aX`B)P+J5Nq~AmJZ$7g!BzqFhi#p@BL5zscg34c;8IT+-2@B8=
z#Y&km*gnHvoallBR*JX?lZ=QNp$_!1L`3~i%gR|{^gvN09e7~m;E%5w)|Nn#6ibUW
zI&@e~7Iu(E=!gUjByfO3QvE4*9AHYN@C;38@3+yBmAqCb_w8?2^WC8(5d=LwXcacNc?&{y+^d
zF=n2o>N=7K=7lUMjz4hwu!Iy-yH%<|1Ia@jnR_>H-{E;kcKFb;8vNhUsz4)>q4i)N*uZ4ck$+~f
zYbACN58oly+#!`&AAFGw{Z%^J=h8H=53?-AAdt{m0t-Y_a`DUq3o}`8nISY=N;*aI
zZ~;|84K8YNZ-f!88Sq}y@92`ahEmprdoVHR&CFv6H({=j8!vKwH~VdO?Yj3!0X*&{
z=wX?eZ$o1`(PAsKA8eDean=eSOP*@F_q1$ooF{0Q|smh%!ORObC|@xX*n#gU!n8r#D2F>;o~T7(otEYEWc~
zEE`>-)WA49&kDGmfe8CdwGQ4dMv@=)5qih~GhE~7y6HcV=d>SLNI~bk)JVh1P*U#p
zhI5QGFn`!D1y}o_k1L`-UjFV^e)iRGfBW0t|KZmN<+~fIkQ_^qyN9{hYs2yWH@>^1
z{u$sH*$CK4c_ej6;F==q660Q4lTWc4#eu`Y!Tb4SlHByO3C|wer+|j-y=~ULZHSB|
z73`jp%vFHJKz4_eL$Za^6_rEnEuDtz{1NR^#Lis^8zB|a=xZ%8H=Qd1z0T|^WP
zxJ}LqiC48a3#d&3E5Hd-N3_?+3yC(Yc4!a)S*4nN`Hi|!G5l6vSfPO2(hH%2aMJ+p
z@QL;eEo5Ph1oiU~HiRuR*^(mOg@`*_0|-tEGfW?#UBtI=2j}#yqH03lG9qKLVb5Nm
zT%`!wa``Cy5kSFgX=y8>rNBYjXwS$8QUb%F5=uBfci9deD1sTRY+@)!I<@wRh!F>P
z2*52G7?dg0C24Cb)EbIHK0(37a}tWa&);Bk31$#z*ttC1IX<43L4>faku1^PRy(Y0
zLa-~-UPVzDS=C(AaJx@!a
zs;Ws$8oUyzGGa*JLRmK{K5DQ<2{*RjzshEcY+vY
znRfk=YEf8{a>INSiiT-I0x|FfM*=+jrg4gN8C;II;BDhdao*itKGd>v{SVB-7f*bN2&c&$P
z6Wpi8yzGVNaZk+{FZ3SSAd@d2NZZVY+02R!KvY|48kI^%e78`z#M1=qhWCWr%@eC34a8UYn*k)8v9erU1=9h3g2)j_LA2?NqfRI|
zaEJxIH|vF5NrtKAO@y$3d?9);!`z(mnD;8Il{gR7-Poz)g%ulE(ftD>s2Q1z2Eh-%
z*4bh<*v~Wxp#_No^w~3XN6>`Cx)L%@j&j5A-N5P#0Ev)6gkMLKbi09+-ePSUnXDXi
zgpKVR10B>D!??vDfJ|DEA64Rt!UFD(TyRFcQU`EAiIPm;!uUZzMD5Ibu%}1|0jJum
z13Pc9^#@0TpCD@zB@i=a-&kPzu{RE{4>FRF>
zuc35+)7*MJb6E%R>H`X*~g}7^pY53l47@mzjzN<5<0;ZWi
zb_21Dq36N}5fyOKx6+x-B9mmm$?8nhY2AR(lF>#65h{-4vSHb*f_%UMh0Ya|-@0ZA
zr0i~lJ_DG6f-YHv@sw2>HqmI%Rmz&9A>~9iqaI~>ZQ5Gj1~L45?+T=Sasf7k;Uo#g
zIiV+}^6WHT11Ws>{)-n+_V3?Er(v+NwlQ&hZNoMaH&9AWj8WWmAtj1}Nz@t!(8^J|
zgtatfH_5N5KxI$SOhy}%JW|E9jy5T_U;QZV#DAzgLbfFAF2+T@wekS#q!_y6}Pjp%A
z71$a^)UhyKQgvm=8^XBi*@uCwY`MUCdR&ztLRR1j)rCLP+N6XN^FAgCqVGr@U^XCS
z*x7;80AM&iV21S?bM<$~9z<{LU(KG~s=;QqfFUu>!1aW!ItDk;>iC#x1~m@D&-iL)
zkwTxaR#FDb@&cu4x+AWo1f6;(!Ej|3kgbna!_I>T4;BM+f^7k%AIVAMr7!&SM?d<-
zAOHCMuY6%?xtnfsG54e?mlk=xaqwY(wKrG*8oK(2k0eblrMQ`cci}Wl33;RWVlj{h
zz)Sch3oI!J&KaEH(87JZ1z3=$x-(FN5Cgj~8qOd$&>}uU5TO}K0pcW`NV02iMF=IN
zA_?z-{Mvg04bsdbM+rg#3n7T)i~8C|6C_*{op2DK;BAs}gr7rpWr37SahG8{kH_JO9V7JMLC0O3sL=^;
zRZOm)O#1~I0%BbI;@+=9b<>L#7z_{y?WyQhl&Rn&`%E$plc#VKHkhDDC73{m(ePkr2hcD(R8Ng!fo+{6_lXoP9x!=4L79+S>hw5ut0$}%e(djs3t>CA`}1Ipuv2G
zWyQWiACkgIBqqG?=oApchJgvP&A=ulIeX?cltK+#TmRmM(eR&te|CcEE67nF_zdUY
z6lhq-kJHMN{qH__asL|(2rEwZCdb#*?8t$$H1I)Vgh*5yku-zv+7AjD+~YKD^w>$N
zbmv;`ghMcV*Q1}wMKwik3#dC$e=AHxRo%3+0#@Cp+5Ym`$iUs0e1YdfM=1x1Nj!T(k5y^tYZg6vjcsCJl7;@c;wbRFyRVAY(O%h@Qa=O=`SNr=75uuvZxe
zu?RDoscRT&xTCg0Nk6@^*QqQmtW(9N>u!onva3;{fn>G`i(%(zi7njv^59aoW8~5icY(AJ5WE*s;Yp*xwxVPND@Z!Oj@zs>udriXJUGCOsy!wUjed|}>`4OPu%ga63
zxQ_ERl5|3{W!&0s?(f59m6mVE+{7L_j}9z=K$Y(!++rag9nTbW>-ci9xj)18gk#54
zR@sjw^adw@9VDapFI#8x8%I_}@o4&^`oraR7qQ)LcRKDKaAG^L!fuRE7VIo9Y=;q2
zHePt7%mS2Tfe{LhSRf(9f=w2nNNmuE1re)^*svW9ERY8NBYx-HS5+>;bJeR?uU=JG
zySwY2ckj9Po;;pEHZc;OHwc2w^<&`&3T-nb9Wl}d3d<_>0Uxx_pP6|t7=a2xA)%fn
zV+Cq+Mga~;TM5RX?>PsUQ?p7LfkA>%4(?>;1Ie}-#y&7YPMGK&OqxWwFSf#0?~_M`
zWjq()_|MHbkedUN9w335AT$$dFkIRJ3a*hB<^l^>_+&bhmBTh!&;t?RPMRi3t8|C=kk((gYqIi3Z)|zcA&|D>%((EA)1DQ1#WI+
zQ!A##Avx9GtFu@52BC%HkN*Ccuf9^Kfy9GqAZ8&Yw^E^CV;@6_#umysq_n4X@)6>Vc96WD3ES^JhW_#{=@H~)W|3`fGU6vPV4w!8NE%-im)eBT3IJcr{p!W)^XiCAuFL(KJ{=7}@vU^A1P+PPP@fa2
zE~7t{^RhvAs!&TfTmx1M<**17R*-5GFvYZz&@_}2`dX1$1}AeTTNc2grbk3-Lf7!{
zY=`IxNY_H9iXZ&OF>aW0osII`Y-fJ-PFT{CPZ`z#ge;jGmcO*`0F2h
z`v>27vFW
zK>0Z%G+O!uF5~dc^1@7TfL9KCNz`=edcjQaSm&=|^U^VJS-&!
zE-r;>{to02&I+nS5|_yXLa|dN6>Vfg4x!S74q<%OCsL1Xrk(iT@X{%9REYb^l|Q+I
zIVorO9@ePC3apapkO*vysZuJa)zR7t4S$_^sd<|c_qO`7_-%)XO}IovIJT@twL%t~
zdH7r!RLB~UQOU03_+U9fM?`H?r`6fHZUg`=p+lbqgo{(403SNWCY~Z{4xfUb`aWAF
zIzqd_VTL4K8+3v50;t{Sz|{nUh7Cr{9@H+jmwnR`!H6ddYkFSbWX!lGz|?zP@{*$
zb4*GIE%;Huh*T?;2M<`aRAnNpklH?3nx@ExE=!dEhq`qelFHc#@1|mcR3Diwp-%cH
zg)1@_egPhs@`_rhb&86Xls&)1U;WjYlz!3-OcUK&p=$bKeF;a~K=I3EzfkH(|4`fZ
zS7#nzbg9a!v2goH*jaZYfAGM
zJv_T}`}V`LQ6c1YLmrsj`IHykuE9$*ExH!NDoHpv08A#(+r98VYP
zeOX}^R_V13S`R@91R5sXFpWLDGY=6#XuMBeYwijnK<900BzgxF40J`%=|B*ypaxMJ
z-oF54SZGn;IC3zEkOByR3q^RirZ#cXh6ks~b|P&Z6+)nv)q=K~e{ra&E9c7;A%d}y
z{gTmNDULMA0dT|pQcjrmT>uzVWCh1$klO`&95(NOK`DKuf-*6P
zfu=kt9hMIn7dQd6uVs>@JvgcqS8{yNzJLWlg45!q;XhL3EvfU_b&@Nt1H6dhz|sjc
z&|+mgh0ZHM4vs)$plu`p-BI-WYw;A$`P8UzlzBF%*nlMS5Lm@?X#j+-qhY2itI2sZIR+pr&v
z7=R8e0u8)2s$;IN^KJg%{D2)8LTRZ0C0N#a5E|y!7$)Anefu?#;q9A$ym|QsJp;}Y
zmrt(ekpH&;4WE3n4F~d%p=#)jZ~WE3O+>Iq_XI$Pd53YnFKDdo2wrxbnQd(t5Y8Iuk3bCrYGAAD7A_uqb#1Cpesx3#%
ztLN3o3>9gsHg!E&A=qYJeZ3utfy1&_fE(nDOl9O?(^2HQND-y|7%$^mb+sq#Bc_8>
z0wi`1#SVa+i7RLjA)Oj~fQHX$F=#t0g`tf&lu0g>Kd~yexz`p=H~|zf3@C;9U>6X=@L0z{0oO6l
zP1G4WxiuDw#0v|u!B9CU6aZ>@ak?1FqGd&?6S8*=nsssj1$M%`$PTy6kGeQ5`qFP?
z6VC@cA>gF;@n0X_Ju5oxWYOb5u{#&wU}DiOMytKM$7jW&qxaYK&m{8GwMQha7@}gB
zFAMH3S*WrBHdWLin(nY`UXXBZF}aoPVoZ^JSMp*$-z7?}aF1v(7I=p8Ckf5eZ$l^6nLB|0O*U~>cjs)AL^LzI_4XY-^T6iAS
zbMIlcFoA*1SBfxAvs6o%
>d
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