From 69ae21e9fd555291febad8980443640cf692e6b5 Mon Sep 17 00:00:00 2001 From: Juan Ferrer Toribio Date: Fri, 22 Jul 2016 22:00:27 +0200 Subject: [PATCH] Backup --- {debian/conf => conf}/apache.conf | 16 +- {debian/conf => conf}/config.php | 4 +- configure.php | 6 +- debian/install | 17 +- .../account/address-list/address-list.js | 0 .../account/address-list/style.css | 0 .../account/address-list/ui.xml | 0 .../account/address/address.js | 0 .../forms => forms}/account/address/style.css | 0 {web/forms => forms}/account/address/ui.xml | 0 {web/forms => forms}/account/conf/conf.js | 0 {web/forms => forms}/account/conf/style.css | 0 {web/forms => forms}/account/conf/ui.xml | 0 .../admin/access-log/access-log.js | 0 .../admin/access-log/style.css | 0 {web/forms => forms}/admin/access-log/ui.xml | 0 .../admin/connections/connections.js | 0 .../admin/connections/style.css | 0 {web/forms => forms}/admin/connections/ui.xml | 0 {web/forms => forms}/admin/items/items.js | 0 {web/forms => forms}/admin/items/style.css | 0 {web/forms => forms}/admin/items/ui.xml | 0 {web/forms => forms}/admin/links/links.js | 0 {web/forms => forms}/admin/links/style.css | 0 {web/forms => forms}/admin/links/ui.xml | 0 {web/forms => forms}/admin/photos/photos.js | 0 {web/forms => forms}/admin/photos/style.css | 0 {web/forms => forms}/admin/photos/ui.xml | 0 {web/forms => forms}/admin/queries/queries.js | 0 {web/forms => forms}/admin/queries/style.css | 0 {web/forms => forms}/admin/queries/ui.xml | 0 {web/forms => forms}/admin/shelves/shelves.js | 0 {web/forms => forms}/admin/shelves/style.css | 0 {web/forms => forms}/admin/shelves/ui.xml | 0 {web/forms => forms}/admin/users/style.css | 0 {web/forms => forms}/admin/users/ui.xml | 0 {web/forms => forms}/admin/users/users.js | 0 {web/forms => forms}/admin/visits/style.css | 0 {web/forms => forms}/admin/visits/ui.xml | 0 {web/forms => forms}/admin/visits/visits.js | 0 .../agencies/packages/packages.js | 0 .../agencies/packages/style.css | 0 {web/forms => forms}/agencies/packages/ui.xml | 0 .../agencies/provinces/provinces.js | 0 .../agencies/provinces/style.css | 0 .../forms => forms}/agencies/provinces/ui.xml | 0 {web/forms => forms}/cms/about/about.js | 0 .../cms/about/image/2_control.png | Bin .../cms/about/image/4_control.png | Bin .../cms/about/image/agencies.png | Bin .../cms/about/image/auction.png | Bin .../cms/about/image/commercial.png | Bin .../cms/about/image/courses.png | Bin .../cms/about/image/dealer.png | Bin .../cms/about/image/differentiates_us.png | Bin {web/forms => forms}/cms/about/image/fit.png | Bin .../forms => forms}/cms/about/image/glass.png | Bin .../cms/about/image/goods_receive.png | Bin .../cms/about/image/goods_transport.png | Bin .../cms/about/image/palletizing.png | Bin .../cms/about/image/producers.png | Bin .../forms => forms}/cms/about/image/store.png | Bin .../cms/about/image/summary.png | Bin .../cms/about/image/trailer.png | Bin .../cms/about/image/training.png | Bin {web/forms => forms}/cms/about/image/web.png | Bin .../cms/about/image/youtube.png | Bin {web/forms => forms}/cms/about/style.css | 0 {web/forms => forms}/cms/about/ui.xml | 0 forms/cms/contact/contact.js | 44 +++ {web/forms => forms}/cms/contact/style.css | 2 +- {web/forms => forms}/cms/contact/ui.xml | 5 +- {web/forms => forms}/cms/home/home.js | 0 {web/forms => forms}/cms/home/style.css | 0 {web/forms => forms}/cms/home/ui.xml | 3 +- {web/forms => forms}/cms/location/location.js | 0 {web/forms => forms}/cms/location/style.css | 0 {web/forms => forms}/cms/location/ui.xml | 0 {web/forms => forms}/cms/training/style.css | 0 {web/forms => forms}/cms/training/training.js | 0 {web/forms => forms}/cms/training/ui.xml | 0 {web/forms => forms}/cms/why/style.css | 0 {web/forms => forms}/cms/why/ui.xml | 0 {web/forms => forms}/cms/why/why.js | 0 .../forms => forms}/ecomerce/basket/basket.js | 5 + .../forms => forms}/ecomerce/basket/style.css | 0 {web/forms => forms}/ecomerce/basket/ui.xml | 0 .../ecomerce/catalog/catalog.js | 0 .../ecomerce/catalog/style.css | 0 {web/forms => forms}/ecomerce/catalog/ui.xml | 0 .../ecomerce/checkout/checkout.js | 0 .../ecomerce/checkout/style.css | 0 {web/forms => forms}/ecomerce/checkout/ui.xml | 0 .../ecomerce/confirm/confirm.js | 0 .../ecomerce/confirm/style.css | 0 {web/forms => forms}/ecomerce/confirm/ui.xml | 0 .../ecomerce/invoices/invoices.js | 6 +- .../ecomerce/invoices/style.css | 0 {web/forms => forms}/ecomerce/invoices/ui.xml | 0 .../forms => forms}/ecomerce/orders/orders.js | 0 .../forms => forms}/ecomerce/orders/style.css | 0 {web/forms => forms}/ecomerce/orders/ui.xml | 0 .../forms => forms}/ecomerce/ticket/style.css | 0 .../forms => forms}/ecomerce/ticket/ticket.js | 0 {web/forms => forms}/ecomerce/ticket/ui.xml | 0 {web/forms => forms}/news/new/new.js | 0 {web/forms => forms}/news/new/style.css | 0 {web/forms => forms}/news/new/ui.xml | 0 {web/forms => forms}/news/news/news.js | 0 {web/forms => forms}/news/news/style.css | 0 {web/forms => forms}/news/news/ui.xml | 0 hedera.php | 9 + {web/image => image}/access-log.svg | 0 {web/image => image}/add-photo.svg | 0 {web/image => image}/add.svg | 0 {web/image => image}/basket.svg | 0 {web/image => image}/blog.svg | 0 {web/image => image}/blogger.svg | 0 {web/image => image}/clean.svg | 0 {web/image => image}/close.svg | 0 {web/image => image}/dark/add.svg | 0 {web/image => image}/dark/basket.svg | 0 {web/image => image}/dark/close.svg | 0 {web/image => image}/dark/connect.svg | 0 {web/image => image}/dark/delete.svg | 0 {web/image => image}/dark/exit.svg | 0 {web/image => image}/dark/go-next.svg | 0 {web/image => image}/dark/go-previous.svg | 0 {web/image => image}/dark/graph.svg | 0 {web/image => image}/dark/info.svg | 0 {web/image => image}/dark/logo.png | Bin {web/image => image}/dark/logo.svg | 0 {web/image => image}/dark/menu.svg | 0 {web/image => image}/dark/new-order.svg | 0 {web/image => image}/dark/ok.svg | 0 {web/image => image}/dark/pay.svg | 0 {web/image => image}/dark/place.svg | 0 {web/image => image}/dark/preferences.svg | 0 {web/image => image}/dark/print.svg | 0 {web/image => image}/dark/refresh.svg | 0 {web/image => image}/dark/search.svg | 0 {web/image => image}/dark/shipping.svg | 0 {web/image => image}/dark/user-info.svg | 0 {web/image => image}/dark/view-dual.svg | 0 {web/image => image}/dark/view-grid.svg | 0 {web/image => image}/dark/view-list.svg | 0 {web/image => image}/dark/view.svg | 0 {web/image => image}/debian.png | Bin {web/image => image}/delete.svg | 0 {web/image => image}/download.svg | 0 {web/image => image}/edit.svg | 0 {web/image => image}/error.svg | 0 {web/image => image}/exit.svg | 0 {web/image => image}/facebook.svg | 0 {web/image => image}/family/1.svg | 0 {web/image => image}/family/2.svg | 0 {web/image => image}/family/3.svg | 0 {web/image => image}/family/4.svg | 0 {web/image => image}/family/5.svg | 0 {web/image => image}/family/7.svg | 0 {web/image => image}/family_dark/1.svg | 0 {web/image => image}/family_dark/2.svg | 0 {web/image => image}/family_dark/3.svg | 0 {web/image => image}/family_dark/4.svg | 0 {web/image => image}/family_dark/5.svg | 0 {web/image => image}/family_dark/7.svg | 0 {web/image => image}/favicon.ico | Bin {web/image => image}/git.svg | 0 {web/image => image}/gnome.svg | 0 {web/image => image}/go-next.svg | 0 {web/image => image}/go-previous.svg | 0 {web/image => image}/google-plus.svg | 0 {web/image => image}/incognito.svg | 0 {web/image => image}/info.svg | 0 {web/image => image}/invisible.png | Bin {web/image => image}/logo.svg | 0 {web/image => image}/menu.svg | 0 {web/image => image}/new-order.svg | 0 {web/image => image}/ok.svg | 0 {web/image => image}/pay.svg | 0 {web/image => image}/place.svg | 0 {web/image => image}/preferences.svg | 0 {web/image => image}/print.svg | 0 {web/image => image}/refresh.svg | 0 {web/image => image}/search.svg | 0 {web/image => image}/shipping.svg | 0 {web/image => image}/show.svg | 0 {web/image => image}/star.svg | 0 {web/image => image}/step-cur.svg | 0 {web/image => image}/step.svg | 0 {web/image => image}/store.png | Bin {web/image => image}/supplant.svg | 0 {web/image => image}/unavailable.svg | 0 {web/image => image}/unknown.svg | 0 {web/image => image}/update-browser.png | Bin {web/image => image}/warning.svg | 0 {web/image => image}/youtube.svg | 0 index.php | 9 + {web/js => js}/db/calc-sum.js | 0 {web/js => js}/db/calc.js | 0 {web/js => js}/db/conn.js | 0 {web/js => js}/db/db.js | 0 {web/js => js}/db/form.js | 0 {web/js => js}/db/iterator.js | 0 {web/js => js}/db/main.js | 0 {web/js => js}/db/model.js | 0 {web/js => js}/db/param.js | 0 {web/js => js}/db/query.js | 0 {web/js => js}/db/result-set.js | 0 {web/js => js}/db/result.js | 0 {web/js => js}/db/simple-iterator.js | 0 {web/js => js}/hedera/app.js | 55 ++-- {web/js => js}/hedera/form.js | 0 {web/js => js}/hedera/gui.css | 0 {web/js => js}/hedera/gui.js | 0 {web/js => js}/hedera/gui.xml | 0 {web/js => js}/hedera/hedera.js | 0 {web/js => js}/hedera/login.css | 0 {web/js => js}/hedera/login.js | 2 +- {web/js => js}/hedera/login.xml | 0 {web/js => js}/hedera/main.js | 0 {web/js => js}/hedera/module.js | 0 {web/js => js}/hedera/report.css | 0 {web/js => js}/hedera/report.html | 0 {web/js => js}/hedera/report.js | 0 {web/js => js}/hedera/roboto.ttf | Bin {web/js => js}/hedera/style.css | 6 + {web/js => js}/hedera/tpv.js | 0 {web/js => js}/htk/assistant-bar.js | 0 {web/js => js}/htk/assistant.js | 0 {web/js => js}/htk/column.js | 0 {web/js => js}/htk/column/button.js | 0 {web/js => js}/htk/column/check.js | 0 {web/js => js}/htk/column/date.js | 0 {web/js => js}/htk/column/image.js | 0 {web/js => js}/htk/column/link.js | 0 {web/js => js}/htk/column/radio.js | 0 {web/js => js}/htk/column/spin.js | 0 {web/js => js}/htk/column/text.js | 0 {web/js => js}/htk/field.js | 0 {web/js => js}/htk/field/button.js | 0 {web/js => js}/htk/field/calendar.js | 0 {web/js => js}/htk/field/check.js | 0 {web/js => js}/htk/field/date-chooser.js | 0 {web/js => js}/htk/field/entry.js | 0 {web/js => js}/htk/field/html.js | 0 {web/js => js}/htk/field/image.js | 0 {web/js => js}/htk/field/label.js | 0 {web/js => js}/htk/field/radio-group.js | 0 {web/js => js}/htk/field/radio.js | 0 {web/js => js}/htk/field/search-entry.js | 0 {web/js => js}/htk/field/select.js | 0 {web/js => js}/htk/field/spin.js | 0 {web/js => js}/htk/field/table.js | 0 {web/js => js}/htk/field/text-area.js | 0 {web/js => js}/htk/field/text.js | 0 {web/js => js}/htk/full-image.js | 0 {web/js => js}/htk/grid.js | 0 {web/js => js}/htk/htk.js | 0 {web/js => js}/htk/image-editor.js | 0 {web/js => js}/htk/image-editor.xml | 0 {web/js => js}/htk/main.js | 0 {web/js => js}/htk/popup.js | 0 {web/js => js}/htk/repeater.js | 0 {web/js => js}/htk/spinner.js | 0 {web/js => js}/htk/style.css | 0 {web/js => js}/htk/toast.js | 0 {web/js => js}/htk/widget.js | 0 {web/js => js}/misc/main.js | 0 {web/js => js}/misc/mootools.js | 0 {web/js => js}/misc/tinymce/license.txt | 0 .../plugins/emoticons/img/smiley-cool.gif | Bin .../plugins/emoticons/img/smiley-cry.gif | Bin .../emoticons/img/smiley-embarassed.gif | Bin .../emoticons/img/smiley-foot-in-mouth.gif | Bin .../plugins/emoticons/img/smiley-frown.gif | Bin .../plugins/emoticons/img/smiley-innocent.gif | Bin .../plugins/emoticons/img/smiley-kiss.gif | Bin .../plugins/emoticons/img/smiley-laughing.gif | Bin .../emoticons/img/smiley-money-mouth.gif | Bin .../plugins/emoticons/img/smiley-sealed.gif | Bin .../plugins/emoticons/img/smiley-smile.gif | Bin .../emoticons/img/smiley-surprised.gif | Bin .../emoticons/img/smiley-tongue-out.gif | Bin .../emoticons/img/smiley-undecided.gif | Bin .../plugins/emoticons/img/smiley-wink.gif | Bin .../plugins/emoticons/img/smiley-yell.gif | Bin .../plugins/visualblocks/css/visualblocks.css | 0 .../skins/lightgray/content.inline.min.css | 0 .../tinymce/skins/lightgray/content.min.css | 0 .../skins/lightgray/fonts/tinymce-small.eot | Bin .../skins/lightgray/fonts/tinymce-small.json | 0 .../skins/lightgray/fonts/tinymce-small.svg | 0 .../skins/lightgray/fonts/tinymce-small.ttf | Bin .../skins/lightgray/fonts/tinymce-small.woff | Bin .../tinymce/skins/lightgray/fonts/tinymce.eot | Bin .../skins/lightgray/fonts/tinymce.json | 0 .../tinymce/skins/lightgray/fonts/tinymce.svg | 0 .../tinymce/skins/lightgray/fonts/tinymce.ttf | Bin .../skins/lightgray/fonts/tinymce.woff | Bin .../tinymce/skins/lightgray/img/anchor.gif | Bin .../tinymce/skins/lightgray/img/loader.gif | Bin .../tinymce/skins/lightgray/img/object.gif | Bin .../tinymce/skins/lightgray/img/trans.gif | Bin .../tinymce/skins/lightgray/skin.ie7.min.css | 0 .../misc/tinymce/skins/lightgray/skin.min.css | 0 {web/js => js}/misc/tinymce/tinymce.min.js | 0 {web/js => js}/sql/batch.js | 0 {web/js => js}/sql/delete.js | 0 {web/js => js}/sql/dml.js | 0 {web/js => js}/sql/expr.js | 0 {web/js => js}/sql/field.js | 0 {web/js => js}/sql/filter-item.js | 0 {web/js => js}/sql/filter.js | 0 {web/js => js}/sql/function.js | 0 {web/js => js}/sql/holder.js | 0 {web/js => js}/sql/insert.js | 0 {web/js => js}/sql/list.js | 0 {web/js => js}/sql/main.js | 0 {web/js => js}/sql/multi-stmt.js | 0 {web/js => js}/sql/object.js | 0 {web/js => js}/sql/operation.js | 0 {web/js => js}/sql/search-tags.js | 0 {web/js => js}/sql/select.js | 0 {web/js => js}/sql/sql.js | 0 {web/js => js}/sql/stmt.js | 0 {web/js => js}/sql/string.js | 0 {web/js => js}/sql/table.js | 0 {web/js => js}/sql/target.js | 0 {web/js => js}/sql/update.js | 0 {web/js => js}/sql/value.js | 0 {web/js => js}/vn/browser.js | 0 {web/js => js}/vn/builder.js | 0 {web/js => js}/vn/cookie.js | 0 {web/js => js}/vn/date.js | 0 {web/js => js}/vn/error.js | 0 {web/js => js}/vn/hash-listener.js | 0 {web/js => js}/vn/hash-param.js | 0 {web/js => js}/vn/hash.js | 0 {web/js => js}/vn/ie.js | 0 {web/js => js}/vn/json-request.js | 14 +- {web/js => js}/vn/locale.js | 0 {web/js => js}/vn/main.js | 0 {web/js => js}/vn/mutators.js | 0 {web/js => js}/vn/node.js | 0 {web/js => js}/vn/object.js | 0 {web/js => js}/vn/param.js | 0 {web/js => js}/vn/url.js | 0 {web/js => js}/vn/value.js | 0 {web/js => js}/vn/vn.js | 0 .../ca/forms/account/address-list.json | 0 .../ca/forms/account/address.json | 0 .../ca/forms/account/conf.json | 0 .../ca/forms/admin/access-log.json | 0 .../ca/forms/admin/connections.json | 0 .../ca/forms/admin/links.json | 0 .../ca/forms/admin/photos.json | 0 .../ca/forms/admin/queries.json | 0 .../ca/forms/admin/shelves.json | 0 .../ca/forms/admin/users.json | 0 .../ca/forms/admin/visits.json | 0 .../ca/forms/agencies/packages.json | 0 .../ca/forms/agencies/provinces.json | 0 .../locale => locale}/ca/forms/cms/about.json | 0 .../ca/forms/cms/contact.json | 0 {web/locale => locale}/ca/forms/cms/home.json | 0 .../ca/forms/cms/location.json | 0 .../ca/forms/cms/training.json | 0 {web/locale => locale}/ca/forms/cms/why.json | 0 .../ca/forms/ecomerce/basket.json | 0 .../ca/forms/ecomerce/catalog.json | 0 .../ca/forms/ecomerce/checkout.json | 0 .../ca/forms/ecomerce/confirm.json | 0 .../ca/forms/ecomerce/invoices.json | 0 .../ca/forms/ecomerce/orders.json | 0 .../ca/forms/ecomerce/ticket.json | 0 {web/locale => locale}/ca/forms/news/new.json | 0 .../locale => locale}/ca/forms/news/news.json | 0 {web/locale => locale}/ca/js/db.js | 0 {web/locale => locale}/ca/js/hedera.js | 0 {web/locale => locale}/ca/js/htk.js | 0 {web/locale => locale}/ca/js/vn.js | 0 {web/locale => locale}/ca/pages/tpv.json | 0 .../ca/pages/update-browser.json | 0 .../ca/pages/version-menu.json | 0 {web/locale => locale}/ca/rest/query.json | 0 .../en/forms/account/address-list.json | 0 .../en/forms/account/address.json | 0 .../en/forms/account/conf.json | 0 .../en/forms/admin/access-log.json | 0 .../en/forms/admin/connections.json | 0 .../en/forms/admin/items.json | 0 .../en/forms/admin/links.json | 0 .../en/forms/admin/photos.json | 0 .../en/forms/admin/queries.json | 0 .../en/forms/admin/shelves.json | 0 .../en/forms/admin/users.json | 0 .../en/forms/admin/visits.json | 0 .../en/forms/agencies/packages.json | 0 .../en/forms/agencies/provinces.json | 0 .../locale => locale}/en/forms/cms/about.json | 0 .../en/forms/cms/contact.json | 0 {web/locale => locale}/en/forms/cms/home.json | 0 .../en/forms/cms/location.json | 0 .../en/forms/cms/training.json | 0 {web/locale => locale}/en/forms/cms/why.json | 0 .../en/forms/ecomerce/basket.json | 0 .../en/forms/ecomerce/catalog.json | 0 .../en/forms/ecomerce/checkout.json | 0 .../en/forms/ecomerce/confirm.json | 0 .../en/forms/ecomerce/invoices.json | 0 .../en/forms/ecomerce/orders.json | 0 .../en/forms/ecomerce/ticket.json | 0 {web/locale => locale}/en/forms/news/new.json | 0 .../locale => locale}/en/forms/news/news.json | 0 {web/locale => locale}/en/js/db.js | 0 {web/locale => locale}/en/js/hedera.js | 0 {web/locale => locale}/en/js/htk.js | 0 {web/locale => locale}/en/js/vn.js | 0 {web/locale => locale}/en/pages/tpv.json | 0 .../en/pages/update-browser.json | 0 .../en/pages/version-menu.json | 0 {web/locale => locale}/en/rest/query.json | 0 locale/en/vn/image.json | 28 ++ .../es/forms/account/address-list.json | 0 .../es/forms/account/address.json | 0 .../es/forms/account/conf.json | 0 .../es/forms/admin/access-log.json | 0 .../es/forms/admin/connections.json | 0 .../es/forms/admin/items.json | 0 .../es/forms/admin/links.json | 0 .../es/forms/admin/photos.json | 0 .../es/forms/admin/queries.json | 0 .../es/forms/admin/shelves.json | 0 .../es/forms/admin/users.json | 0 .../es/forms/admin/visits.json | 0 .../es/forms/agencies/packages.json | 0 .../es/forms/agencies/provinces.json | 0 .../locale => locale}/es/forms/cms/about.json | 0 .../es/forms/cms/contact.json | 0 {web/locale => locale}/es/forms/cms/home.json | 0 .../es/forms/cms/location.json | 0 .../es/forms/cms/training.json | 0 {web/locale => locale}/es/forms/cms/why.json | 0 .../es/forms/ecomerce/basket.json | 0 .../es/forms/ecomerce/catalog.json | 0 .../es/forms/ecomerce/checkout.json | 0 .../es/forms/ecomerce/confirm.json | 0 .../es/forms/ecomerce/invoices.json | 0 .../es/forms/ecomerce/orders.json | 0 .../es/forms/ecomerce/ticket.json | 0 {web/locale => locale}/es/forms/news/new.json | 0 .../locale => locale}/es/forms/news/news.json | 0 {web/locale => locale}/es/js/db.js | 0 {web/locale => locale}/es/js/hedera.js | 0 {web/locale => locale}/es/js/htk.js | 0 {web/locale => locale}/es/js/vn.js | 0 {web/locale => locale}/es/pages/tpv.json | 0 .../es/pages/update-browser.json | 0 .../es/pages/version-menu.json | 0 {web/locale => locale}/es/rest/query.json | 0 locale/es/vn/image.json | 28 ++ .../fr/forms/account/address-list.json | 0 .../fr/forms/account/address.json | 0 .../fr/forms/account/conf.json | 0 .../fr/forms/admin/access-log.json | 0 .../fr/forms/admin/connections.json | 0 .../fr/forms/admin/links.json | 0 .../fr/forms/admin/photos.json | 0 .../fr/forms/admin/queries.json | 0 .../fr/forms/admin/shelves.json | 0 .../fr/forms/admin/users.json | 0 .../fr/forms/admin/visits.json | 0 .../fr/forms/agencies/packages.json | 0 .../fr/forms/agencies/provinces.json | 0 .../locale => locale}/fr/forms/cms/about.json | 0 .../fr/forms/cms/contact.json | 0 {web/locale => locale}/fr/forms/cms/home.json | 0 .../fr/forms/cms/location.json | 0 .../fr/forms/cms/training.json | 0 {web/locale => locale}/fr/forms/cms/why.json | 0 .../fr/forms/ecomerce/basket.json | 0 .../fr/forms/ecomerce/catalog.json | 0 .../fr/forms/ecomerce/checkout.json | 0 .../fr/forms/ecomerce/confirm.json | 0 .../fr/forms/ecomerce/invoices.json | 0 .../fr/forms/ecomerce/orders.json | 0 .../fr/forms/ecomerce/ticket.json | 0 {web/locale => locale}/fr/forms/news/new.json | 0 .../locale => locale}/fr/forms/news/news.json | 0 {web/locale => locale}/fr/js/db.js | 0 {web/locale => locale}/fr/js/hedera.js | 0 {web/locale => locale}/fr/js/htk.js | 0 {web/locale => locale}/fr/js/vn.js | 0 {web/locale => locale}/fr/pages/tpv.json | 0 .../fr/pages/update-browser.json | 0 .../fr/pages/version-menu.json | 0 {web/locale => locale}/fr/rest/query.json | 0 .../mn/forms/account/address-list.json | 0 .../mn/forms/account/address.json | 0 .../mn/forms/account/conf.json | 0 .../mn/forms/admin/access-log.json | 0 .../mn/forms/admin/connections.json | 0 .../mn/forms/admin/items.json | 0 .../mn/forms/admin/links.json | 0 .../mn/forms/admin/photos.json | 0 .../mn/forms/admin/queries.json | 0 .../mn/forms/admin/shelves.json | 0 .../mn/forms/admin/users.json | 0 .../mn/forms/admin/visits.json | 0 .../mn/forms/agencies/packages.json | 0 .../mn/forms/agencies/provinces.json | 0 .../locale => locale}/mn/forms/cms/about.json | 0 .../mn/forms/cms/contact.json | 0 {web/locale => locale}/mn/forms/cms/home.json | 0 .../mn/forms/cms/location.json | 0 .../mn/forms/cms/training.json | 0 {web/locale => locale}/mn/forms/cms/why.json | 0 .../mn/forms/ecomerce/basket.json | 0 .../mn/forms/ecomerce/catalog.json | 0 .../mn/forms/ecomerce/checkout.json | 0 .../mn/forms/ecomerce/confirm.json | 0 .../mn/forms/ecomerce/invoices.json | 0 .../mn/forms/ecomerce/orders.json | 0 .../mn/forms/ecomerce/ticket.json | 0 {web/locale => locale}/mn/forms/news/new.json | 0 .../locale => locale}/mn/forms/news/news.json | 0 {web/locale => locale}/mn/js/db.js | 0 {web/locale => locale}/mn/js/hedera.js | 0 {web/locale => locale}/mn/js/htk.js | 0 {web/locale => locale}/mn/js/vn.js | 0 {web/locale => locale}/mn/pages/tpv.json | 0 .../mn/pages/update-browser.json | 0 .../mn/pages/version-menu.json | 0 {web/locale => locale}/mn/rest/query.json | 0 .../pt/forms/account/address-list.json | 0 .../pt/forms/account/address.json | 0 .../pt/forms/account/conf.json | 0 .../pt/forms/admin/access-log.json | 0 .../pt/forms/admin/connections.json | 0 .../pt/forms/admin/items.json | 0 .../pt/forms/admin/links.json | 0 .../pt/forms/admin/photos.json | 0 .../pt/forms/admin/queries.json | 0 .../pt/forms/admin/shelves.json | 0 .../pt/forms/admin/users.json | 0 .../pt/forms/admin/visits.json | 0 .../pt/forms/agencies/packages.json | 0 .../pt/forms/agencies/provinces.json | 0 .../locale => locale}/pt/forms/cms/about.json | 0 .../pt/forms/cms/contact.json | 0 {web/locale => locale}/pt/forms/cms/home.json | 0 .../pt/forms/cms/location.json | 0 .../pt/forms/cms/training.json | 0 {web/locale => locale}/pt/forms/cms/why.json | 0 .../pt/forms/ecomerce/basket.json | 0 .../pt/forms/ecomerce/catalog.json | 0 .../pt/forms/ecomerce/checkout.json | 0 .../pt/forms/ecomerce/confirm.json | 0 .../pt/forms/ecomerce/invoices.json | 0 .../pt/forms/ecomerce/orders.json | 0 .../pt/forms/ecomerce/ticket.json | 0 {web/locale => locale}/pt/forms/news/new.json | 0 .../locale => locale}/pt/forms/news/news.json | 0 {web/locale => locale}/pt/js/db.js | 0 {web/locale => locale}/pt/js/hedera.js | 0 {web/locale => locale}/pt/js/htk.js | 0 {web/locale => locale}/pt/js/vn.js | 0 {web/locale => locale}/pt/pages/tpv.json | 0 .../pt/pages/update-browser.json | 0 .../pt/pages/version-menu.json | 0 {web/locale => locale}/pt/rest/query.json | 0 {web/pages => pages}/main/analytics.php | 0 pages/main/head.php | 19 ++ {web/pages => pages}/main/html.php | 2 +- {web/pages => pages}/main/main.js | 0 {web/pages => pages}/main/style.css | 7 - {web/pages => pages}/tpv/html.php | 4 +- pages/tpv/soap-request.xml | 20 ++ {web => pages}/tpv/soap-test.php | 0 {web/pages => pages}/tpv/style.css | 2 +- {web/pages => pages}/update-browser/html.php | 2 +- {web/pages => pages}/update-browser/style.css | 2 +- {web/pages => pages}/version-menu/html.php | 5 +- {web/pages => pages}/version-menu/new-web.svg | 0 {web/pages => pages}/version-menu/old-web.svg | 0 {web/pages => pages}/version-menu/style.css | 2 +- php-test | 2 +- .../delivery-note/delivery-note.js | 0 .../delivery-note/style.css | 0 {web/reports => reports}/delivery-note/ui.xml | 0 .../items-report/items-report.js | 0 .../items-report/style.css | 0 {web/reports => reports}/items-report/ui.xml | 0 .../shelves-report/shelves-report.js | 0 .../shelves-report/style.css | 0 .../reports => reports}/shelves-report/ui.xml | 0 rest.php | 9 + .../cms/contact => rest/core}/IndieFlower.ttf | Bin rest/core/captcha.php | 49 +++ rest/core/log.php | 34 ++ rest/core/login.php | 14 + rest/core/logout.php | 15 + {web/rest => rest/core}/query.php | 40 +-- rest/dms/add.php | 117 +++++++ rest/dms/invoice.php | 25 ++ .../dms/invoice.sql | 2 +- rest/image/image-request.php | 59 ++++ rest/image/image.php | 147 +++++++++ rest/image/resize.php | 72 +++++ rest/image/sync.php | 124 ++++++++ rest/image/thumb.php | 98 ++++++ rest/image/upload.php | 149 +++++++++ rest/misc/contact.php | 80 +++++ rest/misc/contact.sql | 26 ++ {web/rest => rest/misc}/visits-sync.php | 20 +- rest/tpv/confirm-mail.php | 110 +++++++ rest/tpv/confirm-post.php | 17 + .../tpv/confirm-soap.php | 42 ++- {vn => rest}/tpv/soap-reply.xml | 0 {vn => rest}/tpv/soap-request.dtd | 0 {vn => rest}/tpv/soap.wsdl | 0 rest/tpv/tpv.php | 38 +++ rest/tpv/transaction.php | 66 ++++ vn/hedera/hedera.php | 8 +- vn/hedera/init.php | 17 - vn/hedera/js.php | 46 --- vn/hedera/util.php | 24 -- vn/hedera/web.php | 240 --------------- vn/rest/encoding.php | 13 - vn/rest/exception.php | 30 -- vn/rest/module.php | 26 -- vn/rest/rest.php | 10 - vn/rest/service.php | 52 ---- vn/tpv/tpv.php | 272 ---------------- vn/web/app.php | 291 ++++++++++++++++++ vn/web/html-app.php | 145 +++++++++ vn/web/http-request.php | 42 +++ vn/{rest/message.php => web/json-message.php} | 8 +- vn/{rest/reply.php => web/json-reply.php} | 5 +- vn/web/json-request.php | 83 +++++ vn/web/rest-app.php | 76 +++++ {web => vn/web}/unavailable.html | 2 +- vn/web/util.php | 42 +++ web/forms/cms/contact/captcha.php | 47 --- web/forms/cms/contact/contact.js | 76 ----- web/forms/cms/contact/send-data.php | 39 --- web/forms/ecomerce/invoices/download.php | 36 --- web/index.php | 131 -------- web/js/vn/http-request.js | 30 -- web/log.php | 20 -- web/pages/main/head.php | 19 -- web/pages/main/opensans.ttf | Bin 217360 -> 0 bytes web/pages/main/roboto.ttf | Bin 162876 -> 0 bytes web/rest.php | 119 ------- web/rest/image.php | 30 -- web/rest/login.php | 11 - web/rest/logout.php | 14 - web/rest/tpv.php | 36 --- web/tpv/imap.php | 7 - web/tpv/post.php | 7 - web/tpv/soap-request.xml | 1 - web/tpv/soap.php | 7 - 663 files changed, 2255 insertions(+), 1486 deletions(-) rename {debian/conf => conf}/apache.conf (50%) rename {debian/conf => conf}/config.php (92%) rename {web/forms => forms}/account/address-list/address-list.js (100%) rename {web/forms => forms}/account/address-list/style.css (100%) rename {web/forms => forms}/account/address-list/ui.xml (100%) rename {web/forms => forms}/account/address/address.js (100%) rename {web/forms => forms}/account/address/style.css (100%) rename {web/forms => forms}/account/address/ui.xml (100%) rename {web/forms => forms}/account/conf/conf.js (100%) rename {web/forms => forms}/account/conf/style.css (100%) rename {web/forms => forms}/account/conf/ui.xml (100%) rename {web/forms => forms}/admin/access-log/access-log.js (100%) rename {web/forms => forms}/admin/access-log/style.css (100%) rename {web/forms => forms}/admin/access-log/ui.xml (100%) rename {web/forms => forms}/admin/connections/connections.js (100%) rename {web/forms => forms}/admin/connections/style.css (100%) rename {web/forms => forms}/admin/connections/ui.xml (100%) rename {web/forms => forms}/admin/items/items.js (100%) rename {web/forms => forms}/admin/items/style.css (100%) rename {web/forms => forms}/admin/items/ui.xml (100%) rename {web/forms => forms}/admin/links/links.js (100%) rename {web/forms => forms}/admin/links/style.css (100%) rename {web/forms => forms}/admin/links/ui.xml (100%) rename {web/forms => forms}/admin/photos/photos.js (100%) rename {web/forms => forms}/admin/photos/style.css (100%) rename {web/forms => forms}/admin/photos/ui.xml (100%) rename {web/forms => forms}/admin/queries/queries.js (100%) rename {web/forms => forms}/admin/queries/style.css (100%) rename {web/forms => forms}/admin/queries/ui.xml (100%) rename {web/forms => forms}/admin/shelves/shelves.js (100%) rename {web/forms => forms}/admin/shelves/style.css (100%) rename {web/forms => forms}/admin/shelves/ui.xml (100%) rename {web/forms => forms}/admin/users/style.css (100%) rename {web/forms => forms}/admin/users/ui.xml (100%) rename {web/forms => forms}/admin/users/users.js (100%) rename {web/forms => forms}/admin/visits/style.css (100%) rename {web/forms => forms}/admin/visits/ui.xml (100%) rename {web/forms => forms}/admin/visits/visits.js (100%) rename {web/forms => forms}/agencies/packages/packages.js (100%) rename {web/forms => forms}/agencies/packages/style.css (100%) rename {web/forms => forms}/agencies/packages/ui.xml (100%) rename {web/forms => forms}/agencies/provinces/provinces.js (100%) rename {web/forms => forms}/agencies/provinces/style.css (100%) rename {web/forms => forms}/agencies/provinces/ui.xml (100%) rename {web/forms => forms}/cms/about/about.js (100%) rename {web/forms => forms}/cms/about/image/2_control.png (100%) rename {web/forms => forms}/cms/about/image/4_control.png (100%) rename {web/forms => forms}/cms/about/image/agencies.png (100%) rename {web/forms => forms}/cms/about/image/auction.png (100%) rename {web/forms => forms}/cms/about/image/commercial.png (100%) rename {web/forms => forms}/cms/about/image/courses.png (100%) rename {web/forms => forms}/cms/about/image/dealer.png (100%) rename {web/forms => forms}/cms/about/image/differentiates_us.png (100%) rename {web/forms => forms}/cms/about/image/fit.png (100%) rename {web/forms => forms}/cms/about/image/glass.png (100%) rename {web/forms => forms}/cms/about/image/goods_receive.png (100%) rename {web/forms => forms}/cms/about/image/goods_transport.png (100%) rename {web/forms => forms}/cms/about/image/palletizing.png (100%) rename {web/forms => forms}/cms/about/image/producers.png (100%) rename {web/forms => forms}/cms/about/image/store.png (100%) rename {web/forms => forms}/cms/about/image/summary.png (100%) rename {web/forms => forms}/cms/about/image/trailer.png (100%) rename {web/forms => forms}/cms/about/image/training.png (100%) rename {web/forms => forms}/cms/about/image/web.png (100%) rename {web/forms => forms}/cms/about/image/youtube.png (100%) rename {web/forms => forms}/cms/about/style.css (100%) rename {web/forms => forms}/cms/about/ui.xml (100%) create mode 100644 forms/cms/contact/contact.js rename {web/forms => forms}/cms/contact/style.css (100%) rename {web/forms => forms}/cms/contact/ui.xml (93%) rename {web/forms => forms}/cms/home/home.js (100%) rename {web/forms => forms}/cms/home/style.css (100%) rename {web/forms => forms}/cms/home/ui.xml (92%) rename {web/forms => forms}/cms/location/location.js (100%) rename {web/forms => forms}/cms/location/style.css (100%) rename {web/forms => forms}/cms/location/ui.xml (100%) rename {web/forms => forms}/cms/training/style.css (100%) rename {web/forms => forms}/cms/training/training.js (100%) rename {web/forms => forms}/cms/training/ui.xml (100%) rename {web/forms => forms}/cms/why/style.css (100%) rename {web/forms => forms}/cms/why/ui.xml (100%) rename {web/forms => forms}/cms/why/why.js (100%) rename {web/forms => forms}/ecomerce/basket/basket.js (90%) rename {web/forms => forms}/ecomerce/basket/style.css (100%) rename {web/forms => forms}/ecomerce/basket/ui.xml (100%) rename {web/forms => forms}/ecomerce/catalog/catalog.js (100%) rename {web/forms => forms}/ecomerce/catalog/style.css (100%) rename {web/forms => forms}/ecomerce/catalog/ui.xml (100%) rename {web/forms => forms}/ecomerce/checkout/checkout.js (100%) rename {web/forms => forms}/ecomerce/checkout/style.css (100%) rename {web/forms => forms}/ecomerce/checkout/ui.xml (100%) rename {web/forms => forms}/ecomerce/confirm/confirm.js (100%) rename {web/forms => forms}/ecomerce/confirm/style.css (100%) rename {web/forms => forms}/ecomerce/confirm/ui.xml (100%) rename {web/forms => forms}/ecomerce/invoices/invoices.js (56%) rename {web/forms => forms}/ecomerce/invoices/style.css (100%) rename {web/forms => forms}/ecomerce/invoices/ui.xml (100%) rename {web/forms => forms}/ecomerce/orders/orders.js (100%) rename {web/forms => forms}/ecomerce/orders/style.css (100%) rename {web/forms => forms}/ecomerce/orders/ui.xml (100%) rename {web/forms => forms}/ecomerce/ticket/style.css (100%) rename {web/forms => forms}/ecomerce/ticket/ticket.js (100%) rename {web/forms => forms}/ecomerce/ticket/ui.xml (100%) rename {web/forms => forms}/news/new/new.js (100%) rename {web/forms => forms}/news/new/style.css (100%) rename {web/forms => forms}/news/new/ui.xml (100%) rename {web/forms => forms}/news/news/news.js (100%) rename {web/forms => forms}/news/news/style.css (100%) rename {web/forms => forms}/news/news/ui.xml (100%) create mode 100755 hedera.php rename {web/image => image}/access-log.svg (100%) rename {web/image => image}/add-photo.svg (100%) rename {web/image => image}/add.svg (100%) rename {web/image => image}/basket.svg (100%) rename {web/image => image}/blog.svg (100%) rename {web/image => image}/blogger.svg (100%) rename {web/image => image}/clean.svg (100%) rename {web/image => image}/close.svg (100%) rename {web/image => image}/dark/add.svg (100%) rename {web/image => image}/dark/basket.svg (100%) rename {web/image => image}/dark/close.svg (100%) rename {web/image => image}/dark/connect.svg (100%) rename {web/image => image}/dark/delete.svg (100%) rename {web/image => image}/dark/exit.svg (100%) rename {web/image => image}/dark/go-next.svg (100%) rename {web/image => image}/dark/go-previous.svg (100%) rename {web/image => image}/dark/graph.svg (100%) rename {web/image => image}/dark/info.svg (100%) rename {web/image => image}/dark/logo.png (100%) rename {web/image => image}/dark/logo.svg (100%) rename {web/image => image}/dark/menu.svg (100%) rename {web/image => image}/dark/new-order.svg (100%) rename {web/image => image}/dark/ok.svg (100%) rename {web/image => image}/dark/pay.svg (100%) rename {web/image => image}/dark/place.svg (100%) rename {web/image => image}/dark/preferences.svg (100%) rename {web/image => image}/dark/print.svg (100%) rename {web/image => image}/dark/refresh.svg (100%) rename {web/image => image}/dark/search.svg (100%) rename {web/image => image}/dark/shipping.svg (100%) rename {web/image => image}/dark/user-info.svg (100%) rename {web/image => image}/dark/view-dual.svg (100%) rename {web/image => image}/dark/view-grid.svg (100%) rename {web/image => image}/dark/view-list.svg (100%) rename {web/image => image}/dark/view.svg (100%) rename {web/image => image}/debian.png (100%) rename {web/image => image}/delete.svg (100%) rename {web/image => image}/download.svg (100%) rename {web/image => image}/edit.svg (100%) rename {web/image => image}/error.svg (100%) rename {web/image => image}/exit.svg (100%) rename {web/image => image}/facebook.svg (100%) rename {web/image => image}/family/1.svg (100%) rename {web/image => image}/family/2.svg (100%) rename {web/image => image}/family/3.svg (100%) rename {web/image => image}/family/4.svg (100%) rename {web/image => image}/family/5.svg (100%) rename {web/image => image}/family/7.svg (100%) rename {web/image => image}/family_dark/1.svg (100%) rename {web/image => image}/family_dark/2.svg (100%) rename {web/image => image}/family_dark/3.svg (100%) rename {web/image => image}/family_dark/4.svg (100%) rename {web/image => image}/family_dark/5.svg (100%) rename {web/image => image}/family_dark/7.svg (100%) rename {web/image => image}/favicon.ico (100%) rename {web/image => image}/git.svg (100%) rename {web/image => image}/gnome.svg (100%) rename {web/image => image}/go-next.svg (100%) rename {web/image => image}/go-previous.svg (100%) rename {web/image => image}/google-plus.svg (100%) rename {web/image => image}/incognito.svg (100%) rename {web/image => image}/info.svg (100%) rename {web/image => image}/invisible.png (100%) rename {web/image => image}/logo.svg (100%) rename {web/image => image}/menu.svg (100%) rename {web/image => image}/new-order.svg (100%) rename {web/image => image}/ok.svg (100%) rename {web/image => image}/pay.svg (100%) rename {web/image => image}/place.svg (100%) rename {web/image => image}/preferences.svg (100%) rename {web/image => image}/print.svg (100%) rename {web/image => image}/refresh.svg (100%) rename {web/image => image}/search.svg (100%) rename {web/image => image}/shipping.svg (100%) rename {web/image => image}/show.svg (100%) rename {web/image => image}/star.svg (100%) rename {web/image => image}/step-cur.svg (100%) rename {web/image => image}/step.svg (100%) rename {web/image => image}/store.png (100%) rename {web/image => image}/supplant.svg (100%) rename {web/image => image}/unavailable.svg (100%) rename {web/image => image}/unknown.svg (100%) rename {web/image => image}/update-browser.png (100%) rename {web/image => image}/warning.svg (100%) rename {web/image => image}/youtube.svg (100%) create mode 100755 index.php rename {web/js => js}/db/calc-sum.js (100%) rename {web/js => js}/db/calc.js (100%) rename {web/js => js}/db/conn.js (100%) rename {web/js => js}/db/db.js (100%) rename {web/js => js}/db/form.js (100%) rename {web/js => js}/db/iterator.js (100%) rename {web/js => js}/db/main.js (100%) rename {web/js => js}/db/model.js (100%) rename {web/js => js}/db/param.js (100%) rename {web/js => js}/db/query.js (100%) rename {web/js => js}/db/result-set.js (100%) rename {web/js => js}/db/result.js (100%) rename {web/js => js}/db/simple-iterator.js (100%) rename {web/js => js}/hedera/app.js (85%) rename {web/js => js}/hedera/form.js (100%) rename {web/js => js}/hedera/gui.css (100%) rename {web/js => js}/hedera/gui.js (100%) rename {web/js => js}/hedera/gui.xml (100%) rename {web/js => js}/hedera/hedera.js (100%) rename {web/js => js}/hedera/login.css (100%) rename {web/js => js}/hedera/login.js (98%) rename {web/js => js}/hedera/login.xml (100%) rename {web/js => js}/hedera/main.js (100%) rename {web/js => js}/hedera/module.js (100%) rename {web/js => js}/hedera/report.css (100%) rename {web/js => js}/hedera/report.html (100%) rename {web/js => js}/hedera/report.js (100%) rename {web/js => js}/hedera/roboto.ttf (100%) rename {web/js => js}/hedera/style.css (98%) rename {web/js => js}/hedera/tpv.js (100%) rename {web/js => js}/htk/assistant-bar.js (100%) rename {web/js => js}/htk/assistant.js (100%) rename {web/js => js}/htk/column.js (100%) rename {web/js => js}/htk/column/button.js (100%) rename {web/js => js}/htk/column/check.js (100%) rename {web/js => js}/htk/column/date.js (100%) rename {web/js => js}/htk/column/image.js (100%) rename {web/js => js}/htk/column/link.js (100%) rename {web/js => js}/htk/column/radio.js (100%) rename {web/js => js}/htk/column/spin.js (100%) rename {web/js => js}/htk/column/text.js (100%) rename {web/js => js}/htk/field.js (100%) rename {web/js => js}/htk/field/button.js (100%) rename {web/js => js}/htk/field/calendar.js (100%) rename {web/js => js}/htk/field/check.js (100%) rename {web/js => js}/htk/field/date-chooser.js (100%) rename {web/js => js}/htk/field/entry.js (100%) rename {web/js => js}/htk/field/html.js (100%) rename {web/js => js}/htk/field/image.js (100%) rename {web/js => js}/htk/field/label.js (100%) rename {web/js => js}/htk/field/radio-group.js (100%) rename {web/js => js}/htk/field/radio.js (100%) rename {web/js => js}/htk/field/search-entry.js (100%) rename {web/js => js}/htk/field/select.js (100%) rename {web/js => js}/htk/field/spin.js (100%) rename {web/js => js}/htk/field/table.js (100%) rename {web/js => js}/htk/field/text-area.js (100%) rename {web/js => js}/htk/field/text.js (100%) rename {web/js => js}/htk/full-image.js (100%) rename {web/js => js}/htk/grid.js (100%) rename {web/js => js}/htk/htk.js (100%) rename {web/js => js}/htk/image-editor.js (100%) rename {web/js => js}/htk/image-editor.xml (100%) rename {web/js => js}/htk/main.js (100%) rename {web/js => js}/htk/popup.js (100%) rename {web/js => js}/htk/repeater.js (100%) rename {web/js => js}/htk/spinner.js (100%) rename {web/js => js}/htk/style.css (100%) rename {web/js => js}/htk/toast.js (100%) rename {web/js => js}/htk/widget.js (100%) rename {web/js => js}/misc/main.js (100%) rename {web/js => js}/misc/mootools.js (100%) rename {web/js => js}/misc/tinymce/license.txt (100%) rename {web/js => js}/misc/tinymce/plugins/emoticons/img/smiley-cool.gif (100%) rename {web/js => js}/misc/tinymce/plugins/emoticons/img/smiley-cry.gif (100%) rename {web/js => js}/misc/tinymce/plugins/emoticons/img/smiley-embarassed.gif (100%) rename {web/js => js}/misc/tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif (100%) rename {web/js => js}/misc/tinymce/plugins/emoticons/img/smiley-frown.gif (100%) rename {web/js => js}/misc/tinymce/plugins/emoticons/img/smiley-innocent.gif (100%) rename {web/js => js}/misc/tinymce/plugins/emoticons/img/smiley-kiss.gif (100%) rename {web/js => js}/misc/tinymce/plugins/emoticons/img/smiley-laughing.gif (100%) rename {web/js => js}/misc/tinymce/plugins/emoticons/img/smiley-money-mouth.gif (100%) rename {web/js => js}/misc/tinymce/plugins/emoticons/img/smiley-sealed.gif (100%) rename {web/js => js}/misc/tinymce/plugins/emoticons/img/smiley-smile.gif (100%) rename {web/js => js}/misc/tinymce/plugins/emoticons/img/smiley-surprised.gif (100%) rename {web/js => js}/misc/tinymce/plugins/emoticons/img/smiley-tongue-out.gif (100%) rename {web/js => js}/misc/tinymce/plugins/emoticons/img/smiley-undecided.gif (100%) rename {web/js => js}/misc/tinymce/plugins/emoticons/img/smiley-wink.gif (100%) rename {web/js => js}/misc/tinymce/plugins/emoticons/img/smiley-yell.gif (100%) rename {web/js => js}/misc/tinymce/plugins/visualblocks/css/visualblocks.css (100%) rename {web/js => js}/misc/tinymce/skins/lightgray/content.inline.min.css (100%) rename {web/js => js}/misc/tinymce/skins/lightgray/content.min.css (100%) rename {web/js => js}/misc/tinymce/skins/lightgray/fonts/tinymce-small.eot (100%) rename {web/js => js}/misc/tinymce/skins/lightgray/fonts/tinymce-small.json (100%) rename {web/js => js}/misc/tinymce/skins/lightgray/fonts/tinymce-small.svg (100%) rename {web/js => js}/misc/tinymce/skins/lightgray/fonts/tinymce-small.ttf (100%) rename {web/js => js}/misc/tinymce/skins/lightgray/fonts/tinymce-small.woff (100%) rename {web/js => js}/misc/tinymce/skins/lightgray/fonts/tinymce.eot (100%) rename {web/js => js}/misc/tinymce/skins/lightgray/fonts/tinymce.json (100%) rename {web/js => js}/misc/tinymce/skins/lightgray/fonts/tinymce.svg (100%) rename {web/js => js}/misc/tinymce/skins/lightgray/fonts/tinymce.ttf (100%) rename {web/js => js}/misc/tinymce/skins/lightgray/fonts/tinymce.woff (100%) rename {web/js => js}/misc/tinymce/skins/lightgray/img/anchor.gif (100%) rename {web/js => js}/misc/tinymce/skins/lightgray/img/loader.gif (100%) rename {web/js => js}/misc/tinymce/skins/lightgray/img/object.gif (100%) rename {web/js => js}/misc/tinymce/skins/lightgray/img/trans.gif (100%) rename {web/js => js}/misc/tinymce/skins/lightgray/skin.ie7.min.css (100%) rename {web/js => js}/misc/tinymce/skins/lightgray/skin.min.css (100%) rename {web/js => js}/misc/tinymce/tinymce.min.js (100%) rename {web/js => js}/sql/batch.js (100%) rename {web/js => js}/sql/delete.js (100%) rename {web/js => js}/sql/dml.js (100%) rename {web/js => js}/sql/expr.js (100%) rename {web/js => js}/sql/field.js (100%) rename {web/js => js}/sql/filter-item.js (100%) rename {web/js => js}/sql/filter.js (100%) rename {web/js => js}/sql/function.js (100%) rename {web/js => js}/sql/holder.js (100%) rename {web/js => js}/sql/insert.js (100%) rename {web/js => js}/sql/list.js (100%) rename {web/js => js}/sql/main.js (100%) rename {web/js => js}/sql/multi-stmt.js (100%) rename {web/js => js}/sql/object.js (100%) rename {web/js => js}/sql/operation.js (100%) rename {web/js => js}/sql/search-tags.js (100%) rename {web/js => js}/sql/select.js (100%) rename {web/js => js}/sql/sql.js (100%) rename {web/js => js}/sql/stmt.js (100%) rename {web/js => js}/sql/string.js (100%) rename {web/js => js}/sql/table.js (100%) rename {web/js => js}/sql/target.js (100%) rename {web/js => js}/sql/update.js (100%) rename {web/js => js}/sql/value.js (100%) rename {web/js => js}/vn/browser.js (100%) rename {web/js => js}/vn/builder.js (100%) rename {web/js => js}/vn/cookie.js (100%) rename {web/js => js}/vn/date.js (100%) rename {web/js => js}/vn/error.js (100%) rename {web/js => js}/vn/hash-listener.js (100%) rename {web/js => js}/vn/hash-param.js (100%) rename {web/js => js}/vn/hash.js (100%) rename {web/js => js}/vn/ie.js (100%) rename {web/js => js}/vn/json-request.js (81%) rename {web/js => js}/vn/locale.js (100%) rename {web/js => js}/vn/main.js (100%) rename {web/js => js}/vn/mutators.js (100%) rename {web/js => js}/vn/node.js (100%) rename {web/js => js}/vn/object.js (100%) rename {web/js => js}/vn/param.js (100%) rename {web/js => js}/vn/url.js (100%) rename {web/js => js}/vn/value.js (100%) rename {web/js => js}/vn/vn.js (100%) rename {web/locale => locale}/ca/forms/account/address-list.json (100%) rename {web/locale => locale}/ca/forms/account/address.json (100%) rename {web/locale => locale}/ca/forms/account/conf.json (100%) rename {web/locale => locale}/ca/forms/admin/access-log.json (100%) rename {web/locale => locale}/ca/forms/admin/connections.json (100%) rename {web/locale => locale}/ca/forms/admin/links.json (100%) rename {web/locale => locale}/ca/forms/admin/photos.json (100%) rename {web/locale => locale}/ca/forms/admin/queries.json (100%) rename {web/locale => locale}/ca/forms/admin/shelves.json (100%) rename {web/locale => locale}/ca/forms/admin/users.json (100%) rename {web/locale => locale}/ca/forms/admin/visits.json (100%) rename {web/locale => locale}/ca/forms/agencies/packages.json (100%) rename {web/locale => locale}/ca/forms/agencies/provinces.json (100%) rename {web/locale => locale}/ca/forms/cms/about.json (100%) rename {web/locale => locale}/ca/forms/cms/contact.json (100%) rename {web/locale => locale}/ca/forms/cms/home.json (100%) rename {web/locale => locale}/ca/forms/cms/location.json (100%) rename {web/locale => locale}/ca/forms/cms/training.json (100%) rename {web/locale => locale}/ca/forms/cms/why.json (100%) rename {web/locale => locale}/ca/forms/ecomerce/basket.json (100%) rename {web/locale => locale}/ca/forms/ecomerce/catalog.json (100%) rename {web/locale => locale}/ca/forms/ecomerce/checkout.json (100%) rename {web/locale => locale}/ca/forms/ecomerce/confirm.json (100%) rename {web/locale => locale}/ca/forms/ecomerce/invoices.json (100%) rename {web/locale => locale}/ca/forms/ecomerce/orders.json (100%) rename {web/locale => locale}/ca/forms/ecomerce/ticket.json (100%) rename {web/locale => locale}/ca/forms/news/new.json (100%) rename {web/locale => locale}/ca/forms/news/news.json (100%) rename {web/locale => locale}/ca/js/db.js (100%) rename {web/locale => locale}/ca/js/hedera.js (100%) rename {web/locale => locale}/ca/js/htk.js (100%) rename {web/locale => locale}/ca/js/vn.js (100%) rename {web/locale => locale}/ca/pages/tpv.json (100%) rename {web/locale => locale}/ca/pages/update-browser.json (100%) rename {web/locale => locale}/ca/pages/version-menu.json (100%) rename {web/locale => locale}/ca/rest/query.json (100%) rename {web/locale => locale}/en/forms/account/address-list.json (100%) rename {web/locale => locale}/en/forms/account/address.json (100%) rename {web/locale => locale}/en/forms/account/conf.json (100%) rename {web/locale => locale}/en/forms/admin/access-log.json (100%) rename {web/locale => locale}/en/forms/admin/connections.json (100%) rename {web/locale => locale}/en/forms/admin/items.json (100%) rename {web/locale => locale}/en/forms/admin/links.json (100%) rename {web/locale => locale}/en/forms/admin/photos.json (100%) rename {web/locale => locale}/en/forms/admin/queries.json (100%) rename {web/locale => locale}/en/forms/admin/shelves.json (100%) rename {web/locale => locale}/en/forms/admin/users.json (100%) rename {web/locale => locale}/en/forms/admin/visits.json (100%) rename {web/locale => locale}/en/forms/agencies/packages.json (100%) rename {web/locale => locale}/en/forms/agencies/provinces.json (100%) rename {web/locale => locale}/en/forms/cms/about.json (100%) rename {web/locale => locale}/en/forms/cms/contact.json (100%) rename {web/locale => locale}/en/forms/cms/home.json (100%) rename {web/locale => locale}/en/forms/cms/location.json (100%) rename {web/locale => locale}/en/forms/cms/training.json (100%) rename {web/locale => locale}/en/forms/cms/why.json (100%) rename {web/locale => locale}/en/forms/ecomerce/basket.json (100%) rename {web/locale => locale}/en/forms/ecomerce/catalog.json (100%) rename {web/locale => locale}/en/forms/ecomerce/checkout.json (100%) rename {web/locale => locale}/en/forms/ecomerce/confirm.json (100%) rename {web/locale => locale}/en/forms/ecomerce/invoices.json (100%) rename {web/locale => locale}/en/forms/ecomerce/orders.json (100%) rename {web/locale => locale}/en/forms/ecomerce/ticket.json (100%) rename {web/locale => locale}/en/forms/news/new.json (100%) rename {web/locale => locale}/en/forms/news/news.json (100%) rename {web/locale => locale}/en/js/db.js (100%) rename {web/locale => locale}/en/js/hedera.js (100%) rename {web/locale => locale}/en/js/htk.js (100%) rename {web/locale => locale}/en/js/vn.js (100%) rename {web/locale => locale}/en/pages/tpv.json (100%) rename {web/locale => locale}/en/pages/update-browser.json (100%) rename {web/locale => locale}/en/pages/version-menu.json (100%) rename {web/locale => locale}/en/rest/query.json (100%) create mode 100755 locale/en/vn/image.json rename {web/locale => locale}/es/forms/account/address-list.json (100%) rename {web/locale => locale}/es/forms/account/address.json (100%) rename {web/locale => locale}/es/forms/account/conf.json (100%) rename {web/locale => locale}/es/forms/admin/access-log.json (100%) rename {web/locale => locale}/es/forms/admin/connections.json (100%) rename {web/locale => locale}/es/forms/admin/items.json (100%) rename {web/locale => locale}/es/forms/admin/links.json (100%) rename {web/locale => locale}/es/forms/admin/photos.json (100%) rename {web/locale => locale}/es/forms/admin/queries.json (100%) rename {web/locale => locale}/es/forms/admin/shelves.json (100%) rename {web/locale => locale}/es/forms/admin/users.json (100%) rename {web/locale => locale}/es/forms/admin/visits.json (100%) rename {web/locale => locale}/es/forms/agencies/packages.json (100%) rename {web/locale => locale}/es/forms/agencies/provinces.json (100%) rename {web/locale => locale}/es/forms/cms/about.json (100%) rename {web/locale => locale}/es/forms/cms/contact.json (100%) rename {web/locale => locale}/es/forms/cms/home.json (100%) rename {web/locale => locale}/es/forms/cms/location.json (100%) rename {web/locale => locale}/es/forms/cms/training.json (100%) rename {web/locale => locale}/es/forms/cms/why.json (100%) rename {web/locale => locale}/es/forms/ecomerce/basket.json (100%) rename {web/locale => locale}/es/forms/ecomerce/catalog.json (100%) rename {web/locale => locale}/es/forms/ecomerce/checkout.json (100%) rename {web/locale => locale}/es/forms/ecomerce/confirm.json (100%) rename {web/locale => locale}/es/forms/ecomerce/invoices.json (100%) rename {web/locale => locale}/es/forms/ecomerce/orders.json (100%) rename {web/locale => locale}/es/forms/ecomerce/ticket.json (100%) rename {web/locale => locale}/es/forms/news/new.json (100%) rename {web/locale => locale}/es/forms/news/news.json (100%) rename {web/locale => locale}/es/js/db.js (100%) rename {web/locale => locale}/es/js/hedera.js (100%) rename {web/locale => locale}/es/js/htk.js (100%) rename {web/locale => locale}/es/js/vn.js (100%) rename {web/locale => locale}/es/pages/tpv.json (100%) rename {web/locale => locale}/es/pages/update-browser.json (100%) rename {web/locale => locale}/es/pages/version-menu.json (100%) rename {web/locale => locale}/es/rest/query.json (100%) create mode 100755 locale/es/vn/image.json rename {web/locale => locale}/fr/forms/account/address-list.json (100%) rename {web/locale => locale}/fr/forms/account/address.json (100%) rename {web/locale => locale}/fr/forms/account/conf.json (100%) rename {web/locale => locale}/fr/forms/admin/access-log.json (100%) rename {web/locale => locale}/fr/forms/admin/connections.json (100%) rename {web/locale => locale}/fr/forms/admin/links.json (100%) rename {web/locale => locale}/fr/forms/admin/photos.json (100%) rename {web/locale => locale}/fr/forms/admin/queries.json (100%) rename {web/locale => locale}/fr/forms/admin/shelves.json (100%) rename {web/locale => locale}/fr/forms/admin/users.json (100%) rename {web/locale => locale}/fr/forms/admin/visits.json (100%) rename {web/locale => locale}/fr/forms/agencies/packages.json (100%) rename {web/locale => locale}/fr/forms/agencies/provinces.json (100%) rename {web/locale => locale}/fr/forms/cms/about.json (100%) rename {web/locale => locale}/fr/forms/cms/contact.json (100%) rename {web/locale => locale}/fr/forms/cms/home.json (100%) rename {web/locale => locale}/fr/forms/cms/location.json (100%) rename {web/locale => locale}/fr/forms/cms/training.json (100%) rename {web/locale => locale}/fr/forms/cms/why.json (100%) rename {web/locale => locale}/fr/forms/ecomerce/basket.json (100%) rename {web/locale => locale}/fr/forms/ecomerce/catalog.json (100%) rename {web/locale => locale}/fr/forms/ecomerce/checkout.json (100%) rename {web/locale => locale}/fr/forms/ecomerce/confirm.json (100%) rename {web/locale => locale}/fr/forms/ecomerce/invoices.json (100%) rename {web/locale => locale}/fr/forms/ecomerce/orders.json (100%) rename {web/locale => locale}/fr/forms/ecomerce/ticket.json (100%) rename {web/locale => locale}/fr/forms/news/new.json (100%) rename {web/locale => locale}/fr/forms/news/news.json (100%) rename {web/locale => locale}/fr/js/db.js (100%) rename {web/locale => locale}/fr/js/hedera.js (100%) rename {web/locale => locale}/fr/js/htk.js (100%) rename {web/locale => locale}/fr/js/vn.js (100%) rename {web/locale => locale}/fr/pages/tpv.json (100%) rename {web/locale => locale}/fr/pages/update-browser.json (100%) rename {web/locale => locale}/fr/pages/version-menu.json (100%) rename {web/locale => locale}/fr/rest/query.json (100%) rename {web/locale => locale}/mn/forms/account/address-list.json (100%) rename {web/locale => locale}/mn/forms/account/address.json (100%) rename {web/locale => locale}/mn/forms/account/conf.json (100%) rename {web/locale => locale}/mn/forms/admin/access-log.json (100%) rename {web/locale => locale}/mn/forms/admin/connections.json (100%) rename {web/locale => locale}/mn/forms/admin/items.json (100%) rename {web/locale => locale}/mn/forms/admin/links.json (100%) rename {web/locale => locale}/mn/forms/admin/photos.json (100%) rename {web/locale => locale}/mn/forms/admin/queries.json (100%) rename {web/locale => locale}/mn/forms/admin/shelves.json (100%) rename {web/locale => locale}/mn/forms/admin/users.json (100%) rename {web/locale => locale}/mn/forms/admin/visits.json (100%) rename {web/locale => locale}/mn/forms/agencies/packages.json (100%) rename {web/locale => locale}/mn/forms/agencies/provinces.json (100%) rename {web/locale => locale}/mn/forms/cms/about.json (100%) rename {web/locale => locale}/mn/forms/cms/contact.json (100%) rename {web/locale => locale}/mn/forms/cms/home.json (100%) rename {web/locale => locale}/mn/forms/cms/location.json (100%) rename {web/locale => locale}/mn/forms/cms/training.json (100%) rename {web/locale => locale}/mn/forms/cms/why.json (100%) rename {web/locale => locale}/mn/forms/ecomerce/basket.json (100%) rename {web/locale => locale}/mn/forms/ecomerce/catalog.json (100%) rename {web/locale => locale}/mn/forms/ecomerce/checkout.json (100%) rename {web/locale => locale}/mn/forms/ecomerce/confirm.json (100%) rename {web/locale => locale}/mn/forms/ecomerce/invoices.json (100%) rename {web/locale => locale}/mn/forms/ecomerce/orders.json (100%) rename {web/locale => locale}/mn/forms/ecomerce/ticket.json (100%) rename {web/locale => locale}/mn/forms/news/new.json (100%) rename {web/locale => locale}/mn/forms/news/news.json (100%) rename {web/locale => locale}/mn/js/db.js (100%) rename {web/locale => locale}/mn/js/hedera.js (100%) rename {web/locale => locale}/mn/js/htk.js (100%) rename {web/locale => locale}/mn/js/vn.js (100%) rename {web/locale => locale}/mn/pages/tpv.json (100%) rename {web/locale => locale}/mn/pages/update-browser.json (100%) rename {web/locale => locale}/mn/pages/version-menu.json (100%) rename {web/locale => locale}/mn/rest/query.json (100%) rename {web/locale => locale}/pt/forms/account/address-list.json (100%) rename {web/locale => locale}/pt/forms/account/address.json (100%) rename {web/locale => locale}/pt/forms/account/conf.json (100%) rename {web/locale => locale}/pt/forms/admin/access-log.json (100%) rename {web/locale => locale}/pt/forms/admin/connections.json (100%) rename {web/locale => locale}/pt/forms/admin/items.json (100%) rename {web/locale => locale}/pt/forms/admin/links.json (100%) rename {web/locale => locale}/pt/forms/admin/photos.json (100%) rename {web/locale => locale}/pt/forms/admin/queries.json (100%) rename {web/locale => locale}/pt/forms/admin/shelves.json (100%) rename {web/locale => locale}/pt/forms/admin/users.json (100%) rename {web/locale => locale}/pt/forms/admin/visits.json (100%) rename {web/locale => locale}/pt/forms/agencies/packages.json (100%) rename {web/locale => locale}/pt/forms/agencies/provinces.json (100%) rename {web/locale => locale}/pt/forms/cms/about.json (100%) rename {web/locale => locale}/pt/forms/cms/contact.json (100%) rename {web/locale => locale}/pt/forms/cms/home.json (100%) rename {web/locale => locale}/pt/forms/cms/location.json (100%) rename {web/locale => locale}/pt/forms/cms/training.json (100%) rename {web/locale => locale}/pt/forms/cms/why.json (100%) rename {web/locale => locale}/pt/forms/ecomerce/basket.json (100%) rename {web/locale => locale}/pt/forms/ecomerce/catalog.json (100%) rename {web/locale => locale}/pt/forms/ecomerce/checkout.json (100%) rename {web/locale => locale}/pt/forms/ecomerce/confirm.json (100%) rename {web/locale => locale}/pt/forms/ecomerce/invoices.json (100%) rename {web/locale => locale}/pt/forms/ecomerce/orders.json (100%) rename {web/locale => locale}/pt/forms/ecomerce/ticket.json (100%) rename {web/locale => locale}/pt/forms/news/new.json (100%) rename {web/locale => locale}/pt/forms/news/news.json (100%) rename {web/locale => locale}/pt/js/db.js (100%) rename {web/locale => locale}/pt/js/hedera.js (100%) rename {web/locale => locale}/pt/js/htk.js (100%) rename {web/locale => locale}/pt/js/vn.js (100%) rename {web/locale => locale}/pt/pages/tpv.json (100%) rename {web/locale => locale}/pt/pages/update-browser.json (100%) rename {web/locale => locale}/pt/pages/version-menu.json (100%) rename {web/locale => locale}/pt/rest/query.json (100%) rename {web/pages => pages}/main/analytics.php (100%) create mode 100755 pages/main/head.php rename {web/pages => pages}/main/html.php (90%) rename {web/pages => pages}/main/main.js (100%) rename {web/pages => pages}/main/style.css (53%) mode change 100644 => 100755 rename {web/pages => pages}/tpv/html.php (75%) create mode 100644 pages/tpv/soap-request.xml rename {web => pages}/tpv/soap-test.php (100%) rename {web/pages => pages}/tpv/style.css (86%) mode change 100644 => 100755 rename {web/pages => pages}/update-browser/html.php (85%) rename {web/pages => pages}/update-browser/style.css (89%) mode change 100644 => 100755 rename {web/pages => pages}/version-menu/html.php (87%) rename {web/pages => pages}/version-menu/new-web.svg (100%) rename {web/pages => pages}/version-menu/old-web.svg (100%) rename {web/pages => pages}/version-menu/style.css (97%) mode change 100644 => 100755 rename {web/reports => reports}/delivery-note/delivery-note.js (100%) rename {web/reports => reports}/delivery-note/style.css (100%) rename {web/reports => reports}/delivery-note/ui.xml (100%) rename {web/reports => reports}/items-report/items-report.js (100%) rename {web/reports => reports}/items-report/style.css (100%) rename {web/reports => reports}/items-report/ui.xml (100%) rename {web/reports => reports}/shelves-report/shelves-report.js (100%) rename {web/reports => reports}/shelves-report/style.css (100%) rename {web/reports => reports}/shelves-report/ui.xml (100%) create mode 100755 rest.php rename {web/forms/cms/contact => rest/core}/IndieFlower.ttf (100%) create mode 100755 rest/core/captcha.php create mode 100755 rest/core/log.php create mode 100755 rest/core/login.php create mode 100755 rest/core/logout.php rename {web/rest => rest/core}/query.php (81%) create mode 100644 rest/dms/add.php create mode 100644 rest/dms/invoice.php rename web/forms/ecomerce/invoices/get-invoice-path.sql => rest/dms/invoice.sql (75%) create mode 100755 rest/image/image-request.php create mode 100755 rest/image/image.php create mode 100644 rest/image/resize.php create mode 100644 rest/image/sync.php create mode 100644 rest/image/thumb.php create mode 100755 rest/image/upload.php create mode 100755 rest/misc/contact.php create mode 100644 rest/misc/contact.sql rename {web/rest => rest/misc}/visits-sync.php (62%) create mode 100644 rest/tpv/confirm-mail.php create mode 100644 rest/tpv/confirm-post.php rename vn/tpv/soap-method.php => rest/tpv/confirm-soap.php (73%) rename {vn => rest}/tpv/soap-reply.xml (100%) rename {vn => rest}/tpv/soap-request.dtd (100%) rename {vn => rest}/tpv/soap.wsdl (100%) create mode 100755 rest/tpv/tpv.php create mode 100755 rest/tpv/transaction.php delete mode 100644 vn/hedera/init.php delete mode 100755 vn/hedera/js.php delete mode 100755 vn/hedera/util.php delete mode 100755 vn/hedera/web.php delete mode 100755 vn/rest/encoding.php delete mode 100755 vn/rest/exception.php delete mode 100755 vn/rest/module.php delete mode 100755 vn/rest/rest.php delete mode 100755 vn/rest/service.php delete mode 100755 vn/tpv/tpv.php create mode 100755 vn/web/app.php create mode 100644 vn/web/html-app.php create mode 100644 vn/web/http-request.php rename vn/{rest/message.php => web/json-message.php} (72%) rename vn/{rest/reply.php => web/json-reply.php} (83%) create mode 100644 vn/web/json-request.php create mode 100644 vn/web/rest-app.php rename {web => vn/web}/unavailable.html (92%) create mode 100644 vn/web/util.php delete mode 100755 web/forms/cms/contact/captcha.php delete mode 100644 web/forms/cms/contact/contact.js delete mode 100755 web/forms/cms/contact/send-data.php delete mode 100644 web/forms/ecomerce/invoices/download.php delete mode 100755 web/index.php delete mode 100644 web/js/vn/http-request.js delete mode 100755 web/log.php delete mode 100755 web/pages/main/head.php delete mode 100755 web/pages/main/opensans.ttf delete mode 100644 web/pages/main/roboto.ttf delete mode 100755 web/rest.php delete mode 100755 web/rest/image.php delete mode 100755 web/rest/login.php delete mode 100755 web/rest/logout.php delete mode 100755 web/rest/tpv.php delete mode 100755 web/tpv/imap.php delete mode 100755 web/tpv/post.php delete mode 100644 web/tpv/soap-request.xml delete mode 100755 web/tpv/soap.php diff --git a/debian/conf/apache.conf b/conf/apache.conf similarity index 50% rename from debian/conf/apache.conf rename to conf/apache.conf index 9a60aca0..982b7c6f 100644 --- a/debian/conf/apache.conf +++ b/conf/apache.conf @@ -1,6 +1,7 @@ -# Alias /hedera-web /usr/share/hedera-web/ +# Alias /hedera-web /usr/share/hedera-web/web/ +# Alias /vn-image-data /var/cache/hedera-web/image/ - + Options -Indexes -FollowSymLinks AllowOverride None @@ -20,3 +21,14 @@ + + + Options Indexes FollowSymLinks MultiViews + AllowOverride FileInfo Options + + Order Allow,Deny + Allow From All + Require all granted + + + diff --git a/debian/conf/config.php b/conf/config.php similarity index 92% rename from debian/conf/config.php rename to conf/config.php index 13770791..4099c4f7 100755 --- a/debian/conf/config.php +++ b/conf/config.php @@ -19,11 +19,11 @@ return [ * Database parameters. **/ 'db' => [ - 'host' => 'db.verdnatura.es' + 'host' => 'localhost' ,'port' => 3306 ,'schema' => 'hedera-web' ,'user' => 'hedera-web' - ,'pass' => 'base64pass' + ,'pass' => '' ] ]; diff --git a/configure.php b/configure.php index 7f759b75..3d4f6151 100644 --- a/configure.php +++ b/configure.php @@ -1,9 +1,6 @@ diff --git a/debian/install b/debian/install index 79e01697..35d0221f 100644 --- a/debian/install +++ b/debian/install @@ -1,4 +1,17 @@ -debian/conf/* etc/hedera-web +conf/* etc/hedera-web vn usr/share/php doc/* usr/share/doc/hedera-web -web/* usr/share/hedera-web +forms usr/share/hedera-web/web +image usr/share/hedera-web/web +js usr/share/hedera-web/web +locale usr/share/hedera-web/web +pages usr/share/hedera-web/web +reports usr/share/hedera-web/web +rest usr/share/hedera-web/web +rest-json usr/share/hedera-web/web +index.php usr/share/hedera-web/web +rest.php usr/share/hedera-web/web +rest-json.php usr/share/hedera-web/web +hedera.php usr/share/hedera-web/bin +tasks usr/share/hedera-web/bin + diff --git a/web/forms/account/address-list/address-list.js b/forms/account/address-list/address-list.js similarity index 100% rename from web/forms/account/address-list/address-list.js rename to forms/account/address-list/address-list.js diff --git a/web/forms/account/address-list/style.css b/forms/account/address-list/style.css similarity index 100% rename from web/forms/account/address-list/style.css rename to forms/account/address-list/style.css diff --git a/web/forms/account/address-list/ui.xml b/forms/account/address-list/ui.xml similarity index 100% rename from web/forms/account/address-list/ui.xml rename to forms/account/address-list/ui.xml diff --git a/web/forms/account/address/address.js b/forms/account/address/address.js similarity index 100% rename from web/forms/account/address/address.js rename to forms/account/address/address.js diff --git a/web/forms/account/address/style.css b/forms/account/address/style.css similarity index 100% rename from web/forms/account/address/style.css rename to forms/account/address/style.css diff --git a/web/forms/account/address/ui.xml b/forms/account/address/ui.xml similarity index 100% rename from web/forms/account/address/ui.xml rename to forms/account/address/ui.xml diff --git a/web/forms/account/conf/conf.js b/forms/account/conf/conf.js similarity index 100% rename from web/forms/account/conf/conf.js rename to forms/account/conf/conf.js diff --git a/web/forms/account/conf/style.css b/forms/account/conf/style.css similarity index 100% rename from web/forms/account/conf/style.css rename to forms/account/conf/style.css diff --git a/web/forms/account/conf/ui.xml b/forms/account/conf/ui.xml similarity index 100% rename from web/forms/account/conf/ui.xml rename to forms/account/conf/ui.xml diff --git a/web/forms/admin/access-log/access-log.js b/forms/admin/access-log/access-log.js similarity index 100% rename from web/forms/admin/access-log/access-log.js rename to forms/admin/access-log/access-log.js diff --git a/web/forms/admin/access-log/style.css b/forms/admin/access-log/style.css similarity index 100% rename from web/forms/admin/access-log/style.css rename to forms/admin/access-log/style.css diff --git a/web/forms/admin/access-log/ui.xml b/forms/admin/access-log/ui.xml similarity index 100% rename from web/forms/admin/access-log/ui.xml rename to forms/admin/access-log/ui.xml diff --git a/web/forms/admin/connections/connections.js b/forms/admin/connections/connections.js similarity index 100% rename from web/forms/admin/connections/connections.js rename to forms/admin/connections/connections.js diff --git a/web/forms/admin/connections/style.css b/forms/admin/connections/style.css similarity index 100% rename from web/forms/admin/connections/style.css rename to forms/admin/connections/style.css diff --git a/web/forms/admin/connections/ui.xml b/forms/admin/connections/ui.xml similarity index 100% rename from web/forms/admin/connections/ui.xml rename to forms/admin/connections/ui.xml diff --git a/web/forms/admin/items/items.js b/forms/admin/items/items.js similarity index 100% rename from web/forms/admin/items/items.js rename to forms/admin/items/items.js diff --git a/web/forms/admin/items/style.css b/forms/admin/items/style.css similarity index 100% rename from web/forms/admin/items/style.css rename to forms/admin/items/style.css diff --git a/web/forms/admin/items/ui.xml b/forms/admin/items/ui.xml similarity index 100% rename from web/forms/admin/items/ui.xml rename to forms/admin/items/ui.xml diff --git a/web/forms/admin/links/links.js b/forms/admin/links/links.js similarity index 100% rename from web/forms/admin/links/links.js rename to forms/admin/links/links.js diff --git a/web/forms/admin/links/style.css b/forms/admin/links/style.css similarity index 100% rename from web/forms/admin/links/style.css rename to forms/admin/links/style.css diff --git a/web/forms/admin/links/ui.xml b/forms/admin/links/ui.xml similarity index 100% rename from web/forms/admin/links/ui.xml rename to forms/admin/links/ui.xml diff --git a/web/forms/admin/photos/photos.js b/forms/admin/photos/photos.js similarity index 100% rename from web/forms/admin/photos/photos.js rename to forms/admin/photos/photos.js diff --git a/web/forms/admin/photos/style.css b/forms/admin/photos/style.css similarity index 100% rename from web/forms/admin/photos/style.css rename to forms/admin/photos/style.css diff --git a/web/forms/admin/photos/ui.xml b/forms/admin/photos/ui.xml similarity index 100% rename from web/forms/admin/photos/ui.xml rename to forms/admin/photos/ui.xml diff --git a/web/forms/admin/queries/queries.js b/forms/admin/queries/queries.js similarity index 100% rename from web/forms/admin/queries/queries.js rename to forms/admin/queries/queries.js diff --git a/web/forms/admin/queries/style.css b/forms/admin/queries/style.css similarity index 100% rename from web/forms/admin/queries/style.css rename to forms/admin/queries/style.css diff --git a/web/forms/admin/queries/ui.xml b/forms/admin/queries/ui.xml similarity index 100% rename from web/forms/admin/queries/ui.xml rename to forms/admin/queries/ui.xml diff --git a/web/forms/admin/shelves/shelves.js b/forms/admin/shelves/shelves.js similarity index 100% rename from web/forms/admin/shelves/shelves.js rename to forms/admin/shelves/shelves.js diff --git a/web/forms/admin/shelves/style.css b/forms/admin/shelves/style.css similarity index 100% rename from web/forms/admin/shelves/style.css rename to forms/admin/shelves/style.css diff --git a/web/forms/admin/shelves/ui.xml b/forms/admin/shelves/ui.xml similarity index 100% rename from web/forms/admin/shelves/ui.xml rename to forms/admin/shelves/ui.xml diff --git a/web/forms/admin/users/style.css b/forms/admin/users/style.css similarity index 100% rename from web/forms/admin/users/style.css rename to forms/admin/users/style.css diff --git a/web/forms/admin/users/ui.xml b/forms/admin/users/ui.xml similarity index 100% rename from web/forms/admin/users/ui.xml rename to forms/admin/users/ui.xml diff --git a/web/forms/admin/users/users.js b/forms/admin/users/users.js similarity index 100% rename from web/forms/admin/users/users.js rename to forms/admin/users/users.js diff --git a/web/forms/admin/visits/style.css b/forms/admin/visits/style.css similarity index 100% rename from web/forms/admin/visits/style.css rename to forms/admin/visits/style.css diff --git a/web/forms/admin/visits/ui.xml b/forms/admin/visits/ui.xml similarity index 100% rename from web/forms/admin/visits/ui.xml rename to forms/admin/visits/ui.xml diff --git a/web/forms/admin/visits/visits.js b/forms/admin/visits/visits.js similarity index 100% rename from web/forms/admin/visits/visits.js rename to forms/admin/visits/visits.js diff --git a/web/forms/agencies/packages/packages.js b/forms/agencies/packages/packages.js similarity index 100% rename from web/forms/agencies/packages/packages.js rename to forms/agencies/packages/packages.js diff --git a/web/forms/agencies/packages/style.css b/forms/agencies/packages/style.css similarity index 100% rename from web/forms/agencies/packages/style.css rename to forms/agencies/packages/style.css diff --git a/web/forms/agencies/packages/ui.xml b/forms/agencies/packages/ui.xml similarity index 100% rename from web/forms/agencies/packages/ui.xml rename to forms/agencies/packages/ui.xml diff --git a/web/forms/agencies/provinces/provinces.js b/forms/agencies/provinces/provinces.js similarity index 100% rename from web/forms/agencies/provinces/provinces.js rename to forms/agencies/provinces/provinces.js diff --git a/web/forms/agencies/provinces/style.css b/forms/agencies/provinces/style.css similarity index 100% rename from web/forms/agencies/provinces/style.css rename to forms/agencies/provinces/style.css diff --git a/web/forms/agencies/provinces/ui.xml b/forms/agencies/provinces/ui.xml similarity index 100% rename from web/forms/agencies/provinces/ui.xml rename to forms/agencies/provinces/ui.xml diff --git a/web/forms/cms/about/about.js b/forms/cms/about/about.js similarity index 100% rename from web/forms/cms/about/about.js rename to forms/cms/about/about.js diff --git a/web/forms/cms/about/image/2_control.png b/forms/cms/about/image/2_control.png similarity index 100% rename from web/forms/cms/about/image/2_control.png rename to forms/cms/about/image/2_control.png diff --git a/web/forms/cms/about/image/4_control.png b/forms/cms/about/image/4_control.png similarity index 100% rename from web/forms/cms/about/image/4_control.png rename to forms/cms/about/image/4_control.png diff --git a/web/forms/cms/about/image/agencies.png b/forms/cms/about/image/agencies.png similarity index 100% rename from web/forms/cms/about/image/agencies.png rename to forms/cms/about/image/agencies.png diff --git a/web/forms/cms/about/image/auction.png b/forms/cms/about/image/auction.png similarity index 100% rename from web/forms/cms/about/image/auction.png rename to forms/cms/about/image/auction.png diff --git a/web/forms/cms/about/image/commercial.png b/forms/cms/about/image/commercial.png similarity index 100% rename from web/forms/cms/about/image/commercial.png rename to forms/cms/about/image/commercial.png diff --git a/web/forms/cms/about/image/courses.png b/forms/cms/about/image/courses.png similarity index 100% rename from web/forms/cms/about/image/courses.png rename to forms/cms/about/image/courses.png diff --git a/web/forms/cms/about/image/dealer.png b/forms/cms/about/image/dealer.png similarity index 100% rename from web/forms/cms/about/image/dealer.png rename to forms/cms/about/image/dealer.png diff --git a/web/forms/cms/about/image/differentiates_us.png b/forms/cms/about/image/differentiates_us.png similarity index 100% rename from web/forms/cms/about/image/differentiates_us.png rename to forms/cms/about/image/differentiates_us.png diff --git a/web/forms/cms/about/image/fit.png b/forms/cms/about/image/fit.png similarity index 100% rename from web/forms/cms/about/image/fit.png rename to forms/cms/about/image/fit.png diff --git a/web/forms/cms/about/image/glass.png b/forms/cms/about/image/glass.png similarity index 100% rename from web/forms/cms/about/image/glass.png rename to forms/cms/about/image/glass.png diff --git a/web/forms/cms/about/image/goods_receive.png b/forms/cms/about/image/goods_receive.png similarity index 100% rename from web/forms/cms/about/image/goods_receive.png rename to forms/cms/about/image/goods_receive.png diff --git a/web/forms/cms/about/image/goods_transport.png b/forms/cms/about/image/goods_transport.png similarity index 100% rename from web/forms/cms/about/image/goods_transport.png rename to forms/cms/about/image/goods_transport.png diff --git a/web/forms/cms/about/image/palletizing.png b/forms/cms/about/image/palletizing.png similarity index 100% rename from web/forms/cms/about/image/palletizing.png rename to forms/cms/about/image/palletizing.png diff --git a/web/forms/cms/about/image/producers.png b/forms/cms/about/image/producers.png similarity index 100% rename from web/forms/cms/about/image/producers.png rename to forms/cms/about/image/producers.png diff --git a/web/forms/cms/about/image/store.png b/forms/cms/about/image/store.png similarity index 100% rename from web/forms/cms/about/image/store.png rename to forms/cms/about/image/store.png diff --git a/web/forms/cms/about/image/summary.png b/forms/cms/about/image/summary.png similarity index 100% rename from web/forms/cms/about/image/summary.png rename to forms/cms/about/image/summary.png diff --git a/web/forms/cms/about/image/trailer.png b/forms/cms/about/image/trailer.png similarity index 100% rename from web/forms/cms/about/image/trailer.png rename to forms/cms/about/image/trailer.png diff --git a/web/forms/cms/about/image/training.png b/forms/cms/about/image/training.png similarity index 100% rename from web/forms/cms/about/image/training.png rename to forms/cms/about/image/training.png diff --git a/web/forms/cms/about/image/web.png b/forms/cms/about/image/web.png similarity index 100% rename from web/forms/cms/about/image/web.png rename to forms/cms/about/image/web.png diff --git a/web/forms/cms/about/image/youtube.png b/forms/cms/about/image/youtube.png similarity index 100% rename from web/forms/cms/about/image/youtube.png rename to forms/cms/about/image/youtube.png diff --git a/web/forms/cms/about/style.css b/forms/cms/about/style.css similarity index 100% rename from web/forms/cms/about/style.css rename to forms/cms/about/style.css diff --git a/web/forms/cms/about/ui.xml b/forms/cms/about/ui.xml similarity index 100% rename from web/forms/cms/about/ui.xml rename to forms/cms/about/ui.xml diff --git a/forms/cms/contact/contact.js b/forms/cms/contact/contact.js new file mode 100644 index 00000000..f2f92226 --- /dev/null +++ b/forms/cms/contact/contact.js @@ -0,0 +1,44 @@ + +Vn.Contact = new Class +({ + Extends: Vn.Form + + ,activate: function () + { + var self = this; + var form = this.$('contact-form').onsubmit = function () + { self.onSubmit (); return false; }; + + this.refreshCaptcha (); + } + + ,refreshCaptcha: function () + { + var url = 'rest.php?method=captcha'; + this.$('captcha-img').src = url +'&stamp='+ new Date ().getTime (); + } + + ,onSubmit: function () + { + var request = new Vn.JsonRequest (); + request.sendForm (this.$('contact-form'), + this.onResponse.bind (this)); + } + + ,onResponse: function (request, json, error) + { + var form = this.$('contact-form'); + + if (json) + { + form.reset (); + Htk.Toast.showMessage (_('DataSentSuccess')); + } + else + Htk.Toast.showError (_('ErrorSendingData')); + + form['captcha'].value = ''; + this.refreshCaptcha (); + } +}); + diff --git a/web/forms/cms/contact/style.css b/forms/cms/contact/style.css similarity index 100% rename from web/forms/cms/contact/style.css rename to forms/cms/contact/style.css index 00aeb54a..98fa547d 100644 --- a/web/forms/cms/contact/style.css +++ b/forms/cms/contact/style.css @@ -46,10 +46,10 @@ .captcha img { vertical-align: middle; + margin-left: 1em; } .captcha input { - margin-left: 1em; max-width: 8em; } diff --git a/web/forms/cms/contact/ui.xml b/forms/cms/contact/ui.xml similarity index 93% rename from web/forms/cms/contact/ui.xml rename to forms/cms/contact/ui.xml index e7ae453f..73bc3a5c 100755 --- a/web/forms/cms/contact/ui.xml +++ b/forms/cms/contact/ui.xml @@ -11,7 +11,10 @@

OrCallUs

-
+
diff --git a/web/forms/cms/home/home.js b/forms/cms/home/home.js similarity index 100% rename from web/forms/cms/home/home.js rename to forms/cms/home/home.js diff --git a/web/forms/cms/home/style.css b/forms/cms/home/style.css similarity index 100% rename from web/forms/cms/home/style.css rename to forms/cms/home/style.css diff --git a/web/forms/cms/home/ui.xml b/forms/cms/home/ui.xml similarity index 92% rename from web/forms/cms/home/ui.xml rename to forms/cms/home/ui.xml index 0dad40f2..5a4d463a 100755 --- a/web/forms/cms/home/ui.xml +++ b/forms/cms/home/ui.xml @@ -15,8 +15,7 @@ - SELECT title, date_time, text, image, id FROM news - WHERE tag != 'course' + SELECT title, date_time, text, image, id FROM news ORDER BY priority, date_time DESC diff --git a/web/forms/cms/location/location.js b/forms/cms/location/location.js similarity index 100% rename from web/forms/cms/location/location.js rename to forms/cms/location/location.js diff --git a/web/forms/cms/location/style.css b/forms/cms/location/style.css similarity index 100% rename from web/forms/cms/location/style.css rename to forms/cms/location/style.css diff --git a/web/forms/cms/location/ui.xml b/forms/cms/location/ui.xml similarity index 100% rename from web/forms/cms/location/ui.xml rename to forms/cms/location/ui.xml diff --git a/web/forms/cms/training/style.css b/forms/cms/training/style.css similarity index 100% rename from web/forms/cms/training/style.css rename to forms/cms/training/style.css diff --git a/web/forms/cms/training/training.js b/forms/cms/training/training.js similarity index 100% rename from web/forms/cms/training/training.js rename to forms/cms/training/training.js diff --git a/web/forms/cms/training/ui.xml b/forms/cms/training/ui.xml similarity index 100% rename from web/forms/cms/training/ui.xml rename to forms/cms/training/ui.xml diff --git a/web/forms/cms/why/style.css b/forms/cms/why/style.css similarity index 100% rename from web/forms/cms/why/style.css rename to forms/cms/why/style.css diff --git a/web/forms/cms/why/ui.xml b/forms/cms/why/ui.xml similarity index 100% rename from web/forms/cms/why/ui.xml rename to forms/cms/why/ui.xml diff --git a/web/forms/cms/why/why.js b/forms/cms/why/why.js similarity index 100% rename from web/forms/cms/why/why.js rename to forms/cms/why/why.js diff --git a/web/forms/ecomerce/basket/basket.js b/forms/ecomerce/basket/basket.js similarity index 90% rename from web/forms/ecomerce/basket/basket.js rename to forms/ecomerce/basket/basket.js index 02785f37..e267c7f0 100644 --- a/web/forms/ecomerce/basket/basket.js +++ b/forms/ecomerce/basket/basket.js @@ -17,6 +17,11 @@ Vn.Basket = new Class if (isOk) this.loadUi (); } + + ,activate: function () + { + this.$('items').setInfo ('i', 'basket_item', 'hedera'); + } ,onConfigureClick: function () { diff --git a/web/forms/ecomerce/basket/style.css b/forms/ecomerce/basket/style.css similarity index 100% rename from web/forms/ecomerce/basket/style.css rename to forms/ecomerce/basket/style.css diff --git a/web/forms/ecomerce/basket/ui.xml b/forms/ecomerce/basket/ui.xml similarity index 100% rename from web/forms/ecomerce/basket/ui.xml rename to forms/ecomerce/basket/ui.xml diff --git a/web/forms/ecomerce/catalog/catalog.js b/forms/ecomerce/catalog/catalog.js similarity index 100% rename from web/forms/ecomerce/catalog/catalog.js rename to forms/ecomerce/catalog/catalog.js diff --git a/web/forms/ecomerce/catalog/style.css b/forms/ecomerce/catalog/style.css similarity index 100% rename from web/forms/ecomerce/catalog/style.css rename to forms/ecomerce/catalog/style.css diff --git a/web/forms/ecomerce/catalog/ui.xml b/forms/ecomerce/catalog/ui.xml similarity index 100% rename from web/forms/ecomerce/catalog/ui.xml rename to forms/ecomerce/catalog/ui.xml diff --git a/web/forms/ecomerce/checkout/checkout.js b/forms/ecomerce/checkout/checkout.js similarity index 100% rename from web/forms/ecomerce/checkout/checkout.js rename to forms/ecomerce/checkout/checkout.js diff --git a/web/forms/ecomerce/checkout/style.css b/forms/ecomerce/checkout/style.css similarity index 100% rename from web/forms/ecomerce/checkout/style.css rename to forms/ecomerce/checkout/style.css diff --git a/web/forms/ecomerce/checkout/ui.xml b/forms/ecomerce/checkout/ui.xml similarity index 100% rename from web/forms/ecomerce/checkout/ui.xml rename to forms/ecomerce/checkout/ui.xml diff --git a/web/forms/ecomerce/confirm/confirm.js b/forms/ecomerce/confirm/confirm.js similarity index 100% rename from web/forms/ecomerce/confirm/confirm.js rename to forms/ecomerce/confirm/confirm.js diff --git a/web/forms/ecomerce/confirm/style.css b/forms/ecomerce/confirm/style.css similarity index 100% rename from web/forms/ecomerce/confirm/style.css rename to forms/ecomerce/confirm/style.css diff --git a/web/forms/ecomerce/confirm/ui.xml b/forms/ecomerce/confirm/ui.xml similarity index 100% rename from web/forms/ecomerce/confirm/ui.xml rename to forms/ecomerce/confirm/ui.xml diff --git a/web/forms/ecomerce/invoices/invoices.js b/forms/ecomerce/invoices/invoices.js similarity index 56% rename from web/forms/ecomerce/invoices/invoices.js rename to forms/ecomerce/invoices/invoices.js index ff623b35..7c8cff50 100644 --- a/web/forms/ecomerce/invoices/invoices.js +++ b/forms/ecomerce/invoices/invoices.js @@ -2,15 +2,13 @@ Vn.Invoices = new Class ({ Extends: Vn.Form - - ,activate: function () {} - + ,onDownloadClick: function (column, invoiceId) { if (!invoiceId) return; - var url = '//www.verdnatura.es/hedera-web/forms/ecomerce/invoices/download.php?invoice='+ invoiceId; + var url = 'rest.php?method=invoice&invoice='+ invoiceId; window.open (url, '_blank'); } }); diff --git a/web/forms/ecomerce/invoices/style.css b/forms/ecomerce/invoices/style.css similarity index 100% rename from web/forms/ecomerce/invoices/style.css rename to forms/ecomerce/invoices/style.css diff --git a/web/forms/ecomerce/invoices/ui.xml b/forms/ecomerce/invoices/ui.xml similarity index 100% rename from web/forms/ecomerce/invoices/ui.xml rename to forms/ecomerce/invoices/ui.xml diff --git a/web/forms/ecomerce/orders/orders.js b/forms/ecomerce/orders/orders.js similarity index 100% rename from web/forms/ecomerce/orders/orders.js rename to forms/ecomerce/orders/orders.js diff --git a/web/forms/ecomerce/orders/style.css b/forms/ecomerce/orders/style.css similarity index 100% rename from web/forms/ecomerce/orders/style.css rename to forms/ecomerce/orders/style.css diff --git a/web/forms/ecomerce/orders/ui.xml b/forms/ecomerce/orders/ui.xml similarity index 100% rename from web/forms/ecomerce/orders/ui.xml rename to forms/ecomerce/orders/ui.xml diff --git a/web/forms/ecomerce/ticket/style.css b/forms/ecomerce/ticket/style.css similarity index 100% rename from web/forms/ecomerce/ticket/style.css rename to forms/ecomerce/ticket/style.css diff --git a/web/forms/ecomerce/ticket/ticket.js b/forms/ecomerce/ticket/ticket.js similarity index 100% rename from web/forms/ecomerce/ticket/ticket.js rename to forms/ecomerce/ticket/ticket.js diff --git a/web/forms/ecomerce/ticket/ui.xml b/forms/ecomerce/ticket/ui.xml similarity index 100% rename from web/forms/ecomerce/ticket/ui.xml rename to forms/ecomerce/ticket/ui.xml diff --git a/web/forms/news/new/new.js b/forms/news/new/new.js similarity index 100% rename from web/forms/news/new/new.js rename to forms/news/new/new.js diff --git a/web/forms/news/new/style.css b/forms/news/new/style.css similarity index 100% rename from web/forms/news/new/style.css rename to forms/news/new/style.css diff --git a/web/forms/news/new/ui.xml b/forms/news/new/ui.xml similarity index 100% rename from web/forms/news/new/ui.xml rename to forms/news/new/ui.xml diff --git a/web/forms/news/news/news.js b/forms/news/news/news.js similarity index 100% rename from web/forms/news/news/news.js rename to forms/news/news/news.js diff --git a/web/forms/news/news/style.css b/forms/news/news/style.css similarity index 100% rename from web/forms/news/news/style.css rename to forms/news/news/style.css diff --git a/web/forms/news/news/ui.xml b/forms/news/news/ui.xml similarity index 100% rename from web/forms/news/news/ui.xml rename to forms/news/news/ui.xml diff --git a/hedera.php b/hedera.php new file mode 100755 index 00000000..65d89264 --- /dev/null +++ b/hedera.php @@ -0,0 +1,9 @@ +run (); + +?> diff --git a/web/image/access-log.svg b/image/access-log.svg similarity index 100% rename from web/image/access-log.svg rename to image/access-log.svg diff --git a/web/image/add-photo.svg b/image/add-photo.svg similarity index 100% rename from web/image/add-photo.svg rename to image/add-photo.svg diff --git a/web/image/add.svg b/image/add.svg similarity index 100% rename from web/image/add.svg rename to image/add.svg diff --git a/web/image/basket.svg b/image/basket.svg similarity index 100% rename from web/image/basket.svg rename to image/basket.svg diff --git a/web/image/blog.svg b/image/blog.svg similarity index 100% rename from web/image/blog.svg rename to image/blog.svg diff --git a/web/image/blogger.svg b/image/blogger.svg similarity index 100% rename from web/image/blogger.svg rename to image/blogger.svg diff --git a/web/image/clean.svg b/image/clean.svg similarity index 100% rename from web/image/clean.svg rename to image/clean.svg diff --git a/web/image/close.svg b/image/close.svg similarity index 100% rename from web/image/close.svg rename to image/close.svg diff --git a/web/image/dark/add.svg b/image/dark/add.svg similarity index 100% rename from web/image/dark/add.svg rename to image/dark/add.svg diff --git a/web/image/dark/basket.svg b/image/dark/basket.svg similarity index 100% rename from web/image/dark/basket.svg rename to image/dark/basket.svg diff --git a/web/image/dark/close.svg b/image/dark/close.svg similarity index 100% rename from web/image/dark/close.svg rename to image/dark/close.svg diff --git a/web/image/dark/connect.svg b/image/dark/connect.svg similarity index 100% rename from web/image/dark/connect.svg rename to image/dark/connect.svg diff --git a/web/image/dark/delete.svg b/image/dark/delete.svg similarity index 100% rename from web/image/dark/delete.svg rename to image/dark/delete.svg diff --git a/web/image/dark/exit.svg b/image/dark/exit.svg similarity index 100% rename from web/image/dark/exit.svg rename to image/dark/exit.svg diff --git a/web/image/dark/go-next.svg b/image/dark/go-next.svg similarity index 100% rename from web/image/dark/go-next.svg rename to image/dark/go-next.svg diff --git a/web/image/dark/go-previous.svg b/image/dark/go-previous.svg similarity index 100% rename from web/image/dark/go-previous.svg rename to image/dark/go-previous.svg diff --git a/web/image/dark/graph.svg b/image/dark/graph.svg similarity index 100% rename from web/image/dark/graph.svg rename to image/dark/graph.svg diff --git a/web/image/dark/info.svg b/image/dark/info.svg similarity index 100% rename from web/image/dark/info.svg rename to image/dark/info.svg diff --git a/web/image/dark/logo.png b/image/dark/logo.png similarity index 100% rename from web/image/dark/logo.png rename to image/dark/logo.png diff --git a/web/image/dark/logo.svg b/image/dark/logo.svg similarity index 100% rename from web/image/dark/logo.svg rename to image/dark/logo.svg diff --git a/web/image/dark/menu.svg b/image/dark/menu.svg similarity index 100% rename from web/image/dark/menu.svg rename to image/dark/menu.svg diff --git a/web/image/dark/new-order.svg b/image/dark/new-order.svg similarity index 100% rename from web/image/dark/new-order.svg rename to image/dark/new-order.svg diff --git a/web/image/dark/ok.svg b/image/dark/ok.svg similarity index 100% rename from web/image/dark/ok.svg rename to image/dark/ok.svg diff --git a/web/image/dark/pay.svg b/image/dark/pay.svg similarity index 100% rename from web/image/dark/pay.svg rename to image/dark/pay.svg diff --git a/web/image/dark/place.svg b/image/dark/place.svg similarity index 100% rename from web/image/dark/place.svg rename to image/dark/place.svg diff --git a/web/image/dark/preferences.svg b/image/dark/preferences.svg similarity index 100% rename from web/image/dark/preferences.svg rename to image/dark/preferences.svg diff --git a/web/image/dark/print.svg b/image/dark/print.svg similarity index 100% rename from web/image/dark/print.svg rename to image/dark/print.svg diff --git a/web/image/dark/refresh.svg b/image/dark/refresh.svg similarity index 100% rename from web/image/dark/refresh.svg rename to image/dark/refresh.svg diff --git a/web/image/dark/search.svg b/image/dark/search.svg similarity index 100% rename from web/image/dark/search.svg rename to image/dark/search.svg diff --git a/web/image/dark/shipping.svg b/image/dark/shipping.svg similarity index 100% rename from web/image/dark/shipping.svg rename to image/dark/shipping.svg diff --git a/web/image/dark/user-info.svg b/image/dark/user-info.svg similarity index 100% rename from web/image/dark/user-info.svg rename to image/dark/user-info.svg diff --git a/web/image/dark/view-dual.svg b/image/dark/view-dual.svg similarity index 100% rename from web/image/dark/view-dual.svg rename to image/dark/view-dual.svg diff --git a/web/image/dark/view-grid.svg b/image/dark/view-grid.svg similarity index 100% rename from web/image/dark/view-grid.svg rename to image/dark/view-grid.svg diff --git a/web/image/dark/view-list.svg b/image/dark/view-list.svg similarity index 100% rename from web/image/dark/view-list.svg rename to image/dark/view-list.svg diff --git a/web/image/dark/view.svg b/image/dark/view.svg similarity index 100% rename from web/image/dark/view.svg rename to image/dark/view.svg diff --git a/web/image/debian.png b/image/debian.png similarity index 100% rename from web/image/debian.png rename to image/debian.png diff --git a/web/image/delete.svg b/image/delete.svg similarity index 100% rename from web/image/delete.svg rename to image/delete.svg diff --git a/web/image/download.svg b/image/download.svg similarity index 100% rename from web/image/download.svg rename to image/download.svg diff --git a/web/image/edit.svg b/image/edit.svg similarity index 100% rename from web/image/edit.svg rename to image/edit.svg diff --git a/web/image/error.svg b/image/error.svg similarity index 100% rename from web/image/error.svg rename to image/error.svg diff --git a/web/image/exit.svg b/image/exit.svg similarity index 100% rename from web/image/exit.svg rename to image/exit.svg diff --git a/web/image/facebook.svg b/image/facebook.svg similarity index 100% rename from web/image/facebook.svg rename to image/facebook.svg diff --git a/web/image/family/1.svg b/image/family/1.svg similarity index 100% rename from web/image/family/1.svg rename to image/family/1.svg diff --git a/web/image/family/2.svg b/image/family/2.svg similarity index 100% rename from web/image/family/2.svg rename to image/family/2.svg diff --git a/web/image/family/3.svg b/image/family/3.svg similarity index 100% rename from web/image/family/3.svg rename to image/family/3.svg diff --git a/web/image/family/4.svg b/image/family/4.svg similarity index 100% rename from web/image/family/4.svg rename to image/family/4.svg diff --git a/web/image/family/5.svg b/image/family/5.svg similarity index 100% rename from web/image/family/5.svg rename to image/family/5.svg diff --git a/web/image/family/7.svg b/image/family/7.svg similarity index 100% rename from web/image/family/7.svg rename to image/family/7.svg diff --git a/web/image/family_dark/1.svg b/image/family_dark/1.svg similarity index 100% rename from web/image/family_dark/1.svg rename to image/family_dark/1.svg diff --git a/web/image/family_dark/2.svg b/image/family_dark/2.svg similarity index 100% rename from web/image/family_dark/2.svg rename to image/family_dark/2.svg diff --git a/web/image/family_dark/3.svg b/image/family_dark/3.svg similarity index 100% rename from web/image/family_dark/3.svg rename to image/family_dark/3.svg diff --git a/web/image/family_dark/4.svg b/image/family_dark/4.svg similarity index 100% rename from web/image/family_dark/4.svg rename to image/family_dark/4.svg diff --git a/web/image/family_dark/5.svg b/image/family_dark/5.svg similarity index 100% rename from web/image/family_dark/5.svg rename to image/family_dark/5.svg diff --git a/web/image/family_dark/7.svg b/image/family_dark/7.svg similarity index 100% rename from web/image/family_dark/7.svg rename to image/family_dark/7.svg diff --git a/web/image/favicon.ico b/image/favicon.ico similarity index 100% rename from web/image/favicon.ico rename to image/favicon.ico diff --git a/web/image/git.svg b/image/git.svg similarity index 100% rename from web/image/git.svg rename to image/git.svg diff --git a/web/image/gnome.svg b/image/gnome.svg similarity index 100% rename from web/image/gnome.svg rename to image/gnome.svg diff --git a/web/image/go-next.svg b/image/go-next.svg similarity index 100% rename from web/image/go-next.svg rename to image/go-next.svg diff --git a/web/image/go-previous.svg b/image/go-previous.svg similarity index 100% rename from web/image/go-previous.svg rename to image/go-previous.svg diff --git a/web/image/google-plus.svg b/image/google-plus.svg similarity index 100% rename from web/image/google-plus.svg rename to image/google-plus.svg diff --git a/web/image/incognito.svg b/image/incognito.svg similarity index 100% rename from web/image/incognito.svg rename to image/incognito.svg diff --git a/web/image/info.svg b/image/info.svg similarity index 100% rename from web/image/info.svg rename to image/info.svg diff --git a/web/image/invisible.png b/image/invisible.png similarity index 100% rename from web/image/invisible.png rename to image/invisible.png diff --git a/web/image/logo.svg b/image/logo.svg similarity index 100% rename from web/image/logo.svg rename to image/logo.svg diff --git a/web/image/menu.svg b/image/menu.svg similarity index 100% rename from web/image/menu.svg rename to image/menu.svg diff --git a/web/image/new-order.svg b/image/new-order.svg similarity index 100% rename from web/image/new-order.svg rename to image/new-order.svg diff --git a/web/image/ok.svg b/image/ok.svg similarity index 100% rename from web/image/ok.svg rename to image/ok.svg diff --git a/web/image/pay.svg b/image/pay.svg similarity index 100% rename from web/image/pay.svg rename to image/pay.svg diff --git a/web/image/place.svg b/image/place.svg similarity index 100% rename from web/image/place.svg rename to image/place.svg diff --git a/web/image/preferences.svg b/image/preferences.svg similarity index 100% rename from web/image/preferences.svg rename to image/preferences.svg diff --git a/web/image/print.svg b/image/print.svg similarity index 100% rename from web/image/print.svg rename to image/print.svg diff --git a/web/image/refresh.svg b/image/refresh.svg similarity index 100% rename from web/image/refresh.svg rename to image/refresh.svg diff --git a/web/image/search.svg b/image/search.svg similarity index 100% rename from web/image/search.svg rename to image/search.svg diff --git a/web/image/shipping.svg b/image/shipping.svg similarity index 100% rename from web/image/shipping.svg rename to image/shipping.svg diff --git a/web/image/show.svg b/image/show.svg similarity index 100% rename from web/image/show.svg rename to image/show.svg diff --git a/web/image/star.svg b/image/star.svg similarity index 100% rename from web/image/star.svg rename to image/star.svg diff --git a/web/image/step-cur.svg b/image/step-cur.svg similarity index 100% rename from web/image/step-cur.svg rename to image/step-cur.svg diff --git a/web/image/step.svg b/image/step.svg similarity index 100% rename from web/image/step.svg rename to image/step.svg diff --git a/web/image/store.png b/image/store.png similarity index 100% rename from web/image/store.png rename to image/store.png diff --git a/web/image/supplant.svg b/image/supplant.svg similarity index 100% rename from web/image/supplant.svg rename to image/supplant.svg diff --git a/web/image/unavailable.svg b/image/unavailable.svg similarity index 100% rename from web/image/unavailable.svg rename to image/unavailable.svg diff --git a/web/image/unknown.svg b/image/unknown.svg similarity index 100% rename from web/image/unknown.svg rename to image/unknown.svg diff --git a/web/image/update-browser.png b/image/update-browser.png similarity index 100% rename from web/image/update-browser.png rename to image/update-browser.png diff --git a/web/image/warning.svg b/image/warning.svg similarity index 100% rename from web/image/warning.svg rename to image/warning.svg diff --git a/web/image/youtube.svg b/image/youtube.svg similarity index 100% rename from web/image/youtube.svg rename to image/youtube.svg diff --git a/index.php b/index.php new file mode 100755 index 00000000..7615150d --- /dev/null +++ b/index.php @@ -0,0 +1,9 @@ +run (); + +?> diff --git a/web/js/db/calc-sum.js b/js/db/calc-sum.js similarity index 100% rename from web/js/db/calc-sum.js rename to js/db/calc-sum.js diff --git a/web/js/db/calc.js b/js/db/calc.js similarity index 100% rename from web/js/db/calc.js rename to js/db/calc.js diff --git a/web/js/db/conn.js b/js/db/conn.js similarity index 100% rename from web/js/db/conn.js rename to js/db/conn.js diff --git a/web/js/db/db.js b/js/db/db.js similarity index 100% rename from web/js/db/db.js rename to js/db/db.js diff --git a/web/js/db/form.js b/js/db/form.js similarity index 100% rename from web/js/db/form.js rename to js/db/form.js diff --git a/web/js/db/iterator.js b/js/db/iterator.js similarity index 100% rename from web/js/db/iterator.js rename to js/db/iterator.js diff --git a/web/js/db/main.js b/js/db/main.js similarity index 100% rename from web/js/db/main.js rename to js/db/main.js diff --git a/web/js/db/model.js b/js/db/model.js similarity index 100% rename from web/js/db/model.js rename to js/db/model.js diff --git a/web/js/db/param.js b/js/db/param.js similarity index 100% rename from web/js/db/param.js rename to js/db/param.js diff --git a/web/js/db/query.js b/js/db/query.js similarity index 100% rename from web/js/db/query.js rename to js/db/query.js diff --git a/web/js/db/result-set.js b/js/db/result-set.js similarity index 100% rename from web/js/db/result-set.js rename to js/db/result-set.js diff --git a/web/js/db/result.js b/js/db/result.js similarity index 100% rename from web/js/db/result.js rename to js/db/result.js diff --git a/web/js/db/simple-iterator.js b/js/db/simple-iterator.js similarity index 100% rename from web/js/db/simple-iterator.js rename to js/db/simple-iterator.js diff --git a/web/js/hedera/app.js b/js/hedera/app.js similarity index 85% rename from web/js/hedera/app.js rename to js/hedera/app.js index b24a723f..250fbfc3 100644 --- a/web/js/hedera/app.js +++ b/js/hedera/app.js @@ -102,6 +102,11 @@ Vn.App = new Class this.run (); } + ,_onWindowUnload: function () + { + this.unref (); + } + ,_onWindowError: function (message, file, line) { var error = new Error (message); @@ -109,35 +114,28 @@ Vn.App = new Class error.lineNumber = line; this._notifyError (error); } - - ,_onWindowUnload: function () - { - this.unref (); - } ,_onConnError: function (conn, error) { if (error instanceof Vn.Error) - switch (error.domain) + switch (error.code) { - case 'Auth': - if (error.code === 'badLogin') - Htk.Toast.showError (_('Invalid login')); - else if (error.code === 'sessionExpired') - Htk.Toast.showError (_('You\'ve been too idle')); - - if (this._gui) - this._gui.logout (); - break; - case 'Version': + case 'badLogin': + Htk.Toast.showError (_('Invalid login')); + this._logout (); + break; + case 'sessionExpired': + Htk.Toast.showError (_('You\'ve been too idle')); + this._logout (); + break; + case 'newVersion': this._newVersion (error); - break; - case 'User': - Htk.Toast.showError (error.message); - break; - default: - console.error (error.message); + break; + case 'internalError': Htk.Toast.showError (_('There was an internal error')); + break; + default: + Htk.Toast.showError (error.message); } else { @@ -146,6 +144,12 @@ Vn.App = new Class } } + ,_logout: function () + { + if (this._gui) + this._gui.logout (); + } + ,_newVersion: function (error) { if (this.newVersionBlock || this.skipVersion) @@ -184,11 +188,8 @@ Vn.App = new Class ,'stack': error.stack }; - var request = new XMLHttpRequest (); - request.open ('post', 'log.php', true); - request.setRequestHeader ('Content-Type', - 'application/x-www-form-urlencoded'); - request.send (Vn.Url.makeUri (params)); + var request = new Vn.JsonRequest ('log'); + request.send (params); } ,_freeLogin: function () diff --git a/web/js/hedera/form.js b/js/hedera/form.js similarity index 100% rename from web/js/hedera/form.js rename to js/hedera/form.js diff --git a/web/js/hedera/gui.css b/js/hedera/gui.css similarity index 100% rename from web/js/hedera/gui.css rename to js/hedera/gui.css diff --git a/web/js/hedera/gui.js b/js/hedera/gui.js similarity index 100% rename from web/js/hedera/gui.js rename to js/hedera/gui.js diff --git a/web/js/hedera/gui.xml b/js/hedera/gui.xml similarity index 100% rename from web/js/hedera/gui.xml rename to js/hedera/gui.xml diff --git a/web/js/hedera/hedera.js b/js/hedera/hedera.js similarity index 100% rename from web/js/hedera/hedera.js rename to js/hedera/hedera.js diff --git a/web/js/hedera/login.css b/js/hedera/login.css similarity index 100% rename from web/js/hedera/login.css rename to js/hedera/login.css diff --git a/web/js/hedera/login.js b/js/hedera/login.js similarity index 98% rename from web/js/hedera/login.js rename to js/hedera/login.js index 12bbdb6f..ab1b6d46 100644 --- a/web/js/hedera/login.js +++ b/js/hedera/login.js @@ -80,7 +80,7 @@ Vn.Login = new Class this._conn.open ( this.$('user').value, this.$('pass').value, - this.$('remember').value, + this.$('remember').checked, this._onConnOpen.bind (this) ); } diff --git a/web/js/hedera/login.xml b/js/hedera/login.xml similarity index 100% rename from web/js/hedera/login.xml rename to js/hedera/login.xml diff --git a/web/js/hedera/main.js b/js/hedera/main.js similarity index 100% rename from web/js/hedera/main.js rename to js/hedera/main.js diff --git a/web/js/hedera/module.js b/js/hedera/module.js similarity index 100% rename from web/js/hedera/module.js rename to js/hedera/module.js diff --git a/web/js/hedera/report.css b/js/hedera/report.css similarity index 100% rename from web/js/hedera/report.css rename to js/hedera/report.css diff --git a/web/js/hedera/report.html b/js/hedera/report.html similarity index 100% rename from web/js/hedera/report.html rename to js/hedera/report.html diff --git a/web/js/hedera/report.js b/js/hedera/report.js similarity index 100% rename from web/js/hedera/report.js rename to js/hedera/report.js diff --git a/web/js/hedera/roboto.ttf b/js/hedera/roboto.ttf similarity index 100% rename from web/js/hedera/roboto.ttf rename to js/hedera/roboto.ttf diff --git a/web/js/hedera/style.css b/js/hedera/style.css similarity index 98% rename from web/js/hedera/style.css rename to js/hedera/style.css index eff5369b..a0560d08 100644 --- a/web/js/hedera/style.css +++ b/js/hedera/style.css @@ -1,4 +1,10 @@ +@font-face +{ + font-family: 'Roboto'; + src: url('roboto.ttf') format('truetype'); +} + /* Responsive */ /* Standard */ diff --git a/web/js/hedera/tpv.js b/js/hedera/tpv.js similarity index 100% rename from web/js/hedera/tpv.js rename to js/hedera/tpv.js diff --git a/web/js/htk/assistant-bar.js b/js/htk/assistant-bar.js similarity index 100% rename from web/js/htk/assistant-bar.js rename to js/htk/assistant-bar.js diff --git a/web/js/htk/assistant.js b/js/htk/assistant.js similarity index 100% rename from web/js/htk/assistant.js rename to js/htk/assistant.js diff --git a/web/js/htk/column.js b/js/htk/column.js similarity index 100% rename from web/js/htk/column.js rename to js/htk/column.js diff --git a/web/js/htk/column/button.js b/js/htk/column/button.js similarity index 100% rename from web/js/htk/column/button.js rename to js/htk/column/button.js diff --git a/web/js/htk/column/check.js b/js/htk/column/check.js similarity index 100% rename from web/js/htk/column/check.js rename to js/htk/column/check.js diff --git a/web/js/htk/column/date.js b/js/htk/column/date.js similarity index 100% rename from web/js/htk/column/date.js rename to js/htk/column/date.js diff --git a/web/js/htk/column/image.js b/js/htk/column/image.js similarity index 100% rename from web/js/htk/column/image.js rename to js/htk/column/image.js diff --git a/web/js/htk/column/link.js b/js/htk/column/link.js similarity index 100% rename from web/js/htk/column/link.js rename to js/htk/column/link.js diff --git a/web/js/htk/column/radio.js b/js/htk/column/radio.js similarity index 100% rename from web/js/htk/column/radio.js rename to js/htk/column/radio.js diff --git a/web/js/htk/column/spin.js b/js/htk/column/spin.js similarity index 100% rename from web/js/htk/column/spin.js rename to js/htk/column/spin.js diff --git a/web/js/htk/column/text.js b/js/htk/column/text.js similarity index 100% rename from web/js/htk/column/text.js rename to js/htk/column/text.js diff --git a/web/js/htk/field.js b/js/htk/field.js similarity index 100% rename from web/js/htk/field.js rename to js/htk/field.js diff --git a/web/js/htk/field/button.js b/js/htk/field/button.js similarity index 100% rename from web/js/htk/field/button.js rename to js/htk/field/button.js diff --git a/web/js/htk/field/calendar.js b/js/htk/field/calendar.js similarity index 100% rename from web/js/htk/field/calendar.js rename to js/htk/field/calendar.js diff --git a/web/js/htk/field/check.js b/js/htk/field/check.js similarity index 100% rename from web/js/htk/field/check.js rename to js/htk/field/check.js diff --git a/web/js/htk/field/date-chooser.js b/js/htk/field/date-chooser.js similarity index 100% rename from web/js/htk/field/date-chooser.js rename to js/htk/field/date-chooser.js diff --git a/web/js/htk/field/entry.js b/js/htk/field/entry.js similarity index 100% rename from web/js/htk/field/entry.js rename to js/htk/field/entry.js diff --git a/web/js/htk/field/html.js b/js/htk/field/html.js similarity index 100% rename from web/js/htk/field/html.js rename to js/htk/field/html.js diff --git a/web/js/htk/field/image.js b/js/htk/field/image.js similarity index 100% rename from web/js/htk/field/image.js rename to js/htk/field/image.js diff --git a/web/js/htk/field/label.js b/js/htk/field/label.js similarity index 100% rename from web/js/htk/field/label.js rename to js/htk/field/label.js diff --git a/web/js/htk/field/radio-group.js b/js/htk/field/radio-group.js similarity index 100% rename from web/js/htk/field/radio-group.js rename to js/htk/field/radio-group.js diff --git a/web/js/htk/field/radio.js b/js/htk/field/radio.js similarity index 100% rename from web/js/htk/field/radio.js rename to js/htk/field/radio.js diff --git a/web/js/htk/field/search-entry.js b/js/htk/field/search-entry.js similarity index 100% rename from web/js/htk/field/search-entry.js rename to js/htk/field/search-entry.js diff --git a/web/js/htk/field/select.js b/js/htk/field/select.js similarity index 100% rename from web/js/htk/field/select.js rename to js/htk/field/select.js diff --git a/web/js/htk/field/spin.js b/js/htk/field/spin.js similarity index 100% rename from web/js/htk/field/spin.js rename to js/htk/field/spin.js diff --git a/web/js/htk/field/table.js b/js/htk/field/table.js similarity index 100% rename from web/js/htk/field/table.js rename to js/htk/field/table.js diff --git a/web/js/htk/field/text-area.js b/js/htk/field/text-area.js similarity index 100% rename from web/js/htk/field/text-area.js rename to js/htk/field/text-area.js diff --git a/web/js/htk/field/text.js b/js/htk/field/text.js similarity index 100% rename from web/js/htk/field/text.js rename to js/htk/field/text.js diff --git a/web/js/htk/full-image.js b/js/htk/full-image.js similarity index 100% rename from web/js/htk/full-image.js rename to js/htk/full-image.js diff --git a/web/js/htk/grid.js b/js/htk/grid.js similarity index 100% rename from web/js/htk/grid.js rename to js/htk/grid.js diff --git a/web/js/htk/htk.js b/js/htk/htk.js similarity index 100% rename from web/js/htk/htk.js rename to js/htk/htk.js diff --git a/web/js/htk/image-editor.js b/js/htk/image-editor.js similarity index 100% rename from web/js/htk/image-editor.js rename to js/htk/image-editor.js diff --git a/web/js/htk/image-editor.xml b/js/htk/image-editor.xml similarity index 100% rename from web/js/htk/image-editor.xml rename to js/htk/image-editor.xml diff --git a/web/js/htk/main.js b/js/htk/main.js similarity index 100% rename from web/js/htk/main.js rename to js/htk/main.js diff --git a/web/js/htk/popup.js b/js/htk/popup.js similarity index 100% rename from web/js/htk/popup.js rename to js/htk/popup.js diff --git a/web/js/htk/repeater.js b/js/htk/repeater.js similarity index 100% rename from web/js/htk/repeater.js rename to js/htk/repeater.js diff --git a/web/js/htk/spinner.js b/js/htk/spinner.js similarity index 100% rename from web/js/htk/spinner.js rename to js/htk/spinner.js diff --git a/web/js/htk/style.css b/js/htk/style.css similarity index 100% rename from web/js/htk/style.css rename to js/htk/style.css diff --git a/web/js/htk/toast.js b/js/htk/toast.js similarity index 100% rename from web/js/htk/toast.js rename to js/htk/toast.js diff --git a/web/js/htk/widget.js b/js/htk/widget.js similarity index 100% rename from web/js/htk/widget.js rename to js/htk/widget.js diff --git a/web/js/misc/main.js b/js/misc/main.js similarity index 100% rename from web/js/misc/main.js rename to js/misc/main.js diff --git a/web/js/misc/mootools.js b/js/misc/mootools.js similarity index 100% rename from web/js/misc/mootools.js rename to js/misc/mootools.js diff --git a/web/js/misc/tinymce/license.txt b/js/misc/tinymce/license.txt similarity index 100% rename from web/js/misc/tinymce/license.txt rename to js/misc/tinymce/license.txt diff --git a/web/js/misc/tinymce/plugins/emoticons/img/smiley-cool.gif b/js/misc/tinymce/plugins/emoticons/img/smiley-cool.gif similarity index 100% rename from web/js/misc/tinymce/plugins/emoticons/img/smiley-cool.gif rename to js/misc/tinymce/plugins/emoticons/img/smiley-cool.gif diff --git a/web/js/misc/tinymce/plugins/emoticons/img/smiley-cry.gif b/js/misc/tinymce/plugins/emoticons/img/smiley-cry.gif similarity index 100% rename from web/js/misc/tinymce/plugins/emoticons/img/smiley-cry.gif rename to js/misc/tinymce/plugins/emoticons/img/smiley-cry.gif diff --git a/web/js/misc/tinymce/plugins/emoticons/img/smiley-embarassed.gif b/js/misc/tinymce/plugins/emoticons/img/smiley-embarassed.gif similarity index 100% rename from web/js/misc/tinymce/plugins/emoticons/img/smiley-embarassed.gif rename to js/misc/tinymce/plugins/emoticons/img/smiley-embarassed.gif diff --git a/web/js/misc/tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif b/js/misc/tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif similarity index 100% rename from web/js/misc/tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif rename to js/misc/tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif diff --git a/web/js/misc/tinymce/plugins/emoticons/img/smiley-frown.gif b/js/misc/tinymce/plugins/emoticons/img/smiley-frown.gif similarity index 100% rename from web/js/misc/tinymce/plugins/emoticons/img/smiley-frown.gif rename to js/misc/tinymce/plugins/emoticons/img/smiley-frown.gif diff --git a/web/js/misc/tinymce/plugins/emoticons/img/smiley-innocent.gif b/js/misc/tinymce/plugins/emoticons/img/smiley-innocent.gif similarity index 100% rename from web/js/misc/tinymce/plugins/emoticons/img/smiley-innocent.gif rename to js/misc/tinymce/plugins/emoticons/img/smiley-innocent.gif diff --git a/web/js/misc/tinymce/plugins/emoticons/img/smiley-kiss.gif b/js/misc/tinymce/plugins/emoticons/img/smiley-kiss.gif similarity index 100% rename from web/js/misc/tinymce/plugins/emoticons/img/smiley-kiss.gif rename to js/misc/tinymce/plugins/emoticons/img/smiley-kiss.gif diff --git a/web/js/misc/tinymce/plugins/emoticons/img/smiley-laughing.gif b/js/misc/tinymce/plugins/emoticons/img/smiley-laughing.gif similarity index 100% rename from web/js/misc/tinymce/plugins/emoticons/img/smiley-laughing.gif rename to js/misc/tinymce/plugins/emoticons/img/smiley-laughing.gif diff --git a/web/js/misc/tinymce/plugins/emoticons/img/smiley-money-mouth.gif b/js/misc/tinymce/plugins/emoticons/img/smiley-money-mouth.gif similarity index 100% rename from web/js/misc/tinymce/plugins/emoticons/img/smiley-money-mouth.gif rename to js/misc/tinymce/plugins/emoticons/img/smiley-money-mouth.gif diff --git a/web/js/misc/tinymce/plugins/emoticons/img/smiley-sealed.gif b/js/misc/tinymce/plugins/emoticons/img/smiley-sealed.gif similarity index 100% rename from web/js/misc/tinymce/plugins/emoticons/img/smiley-sealed.gif rename to js/misc/tinymce/plugins/emoticons/img/smiley-sealed.gif diff --git a/web/js/misc/tinymce/plugins/emoticons/img/smiley-smile.gif b/js/misc/tinymce/plugins/emoticons/img/smiley-smile.gif similarity index 100% rename from web/js/misc/tinymce/plugins/emoticons/img/smiley-smile.gif rename to js/misc/tinymce/plugins/emoticons/img/smiley-smile.gif diff --git a/web/js/misc/tinymce/plugins/emoticons/img/smiley-surprised.gif b/js/misc/tinymce/plugins/emoticons/img/smiley-surprised.gif similarity index 100% rename from web/js/misc/tinymce/plugins/emoticons/img/smiley-surprised.gif rename to js/misc/tinymce/plugins/emoticons/img/smiley-surprised.gif diff --git a/web/js/misc/tinymce/plugins/emoticons/img/smiley-tongue-out.gif b/js/misc/tinymce/plugins/emoticons/img/smiley-tongue-out.gif similarity index 100% rename from web/js/misc/tinymce/plugins/emoticons/img/smiley-tongue-out.gif rename to js/misc/tinymce/plugins/emoticons/img/smiley-tongue-out.gif diff --git a/web/js/misc/tinymce/plugins/emoticons/img/smiley-undecided.gif b/js/misc/tinymce/plugins/emoticons/img/smiley-undecided.gif similarity index 100% rename from web/js/misc/tinymce/plugins/emoticons/img/smiley-undecided.gif rename to js/misc/tinymce/plugins/emoticons/img/smiley-undecided.gif diff --git a/web/js/misc/tinymce/plugins/emoticons/img/smiley-wink.gif b/js/misc/tinymce/plugins/emoticons/img/smiley-wink.gif similarity index 100% rename from web/js/misc/tinymce/plugins/emoticons/img/smiley-wink.gif rename to js/misc/tinymce/plugins/emoticons/img/smiley-wink.gif diff --git a/web/js/misc/tinymce/plugins/emoticons/img/smiley-yell.gif b/js/misc/tinymce/plugins/emoticons/img/smiley-yell.gif similarity index 100% rename from web/js/misc/tinymce/plugins/emoticons/img/smiley-yell.gif rename to js/misc/tinymce/plugins/emoticons/img/smiley-yell.gif diff --git a/web/js/misc/tinymce/plugins/visualblocks/css/visualblocks.css b/js/misc/tinymce/plugins/visualblocks/css/visualblocks.css similarity index 100% rename from web/js/misc/tinymce/plugins/visualblocks/css/visualblocks.css rename to js/misc/tinymce/plugins/visualblocks/css/visualblocks.css diff --git a/web/js/misc/tinymce/skins/lightgray/content.inline.min.css b/js/misc/tinymce/skins/lightgray/content.inline.min.css similarity index 100% rename from web/js/misc/tinymce/skins/lightgray/content.inline.min.css rename to js/misc/tinymce/skins/lightgray/content.inline.min.css diff --git a/web/js/misc/tinymce/skins/lightgray/content.min.css b/js/misc/tinymce/skins/lightgray/content.min.css similarity index 100% rename from web/js/misc/tinymce/skins/lightgray/content.min.css rename to js/misc/tinymce/skins/lightgray/content.min.css diff --git a/web/js/misc/tinymce/skins/lightgray/fonts/tinymce-small.eot b/js/misc/tinymce/skins/lightgray/fonts/tinymce-small.eot similarity index 100% rename from web/js/misc/tinymce/skins/lightgray/fonts/tinymce-small.eot rename to js/misc/tinymce/skins/lightgray/fonts/tinymce-small.eot diff --git a/web/js/misc/tinymce/skins/lightgray/fonts/tinymce-small.json b/js/misc/tinymce/skins/lightgray/fonts/tinymce-small.json similarity index 100% rename from web/js/misc/tinymce/skins/lightgray/fonts/tinymce-small.json rename to js/misc/tinymce/skins/lightgray/fonts/tinymce-small.json diff --git a/web/js/misc/tinymce/skins/lightgray/fonts/tinymce-small.svg b/js/misc/tinymce/skins/lightgray/fonts/tinymce-small.svg similarity index 100% rename from web/js/misc/tinymce/skins/lightgray/fonts/tinymce-small.svg rename to js/misc/tinymce/skins/lightgray/fonts/tinymce-small.svg diff --git a/web/js/misc/tinymce/skins/lightgray/fonts/tinymce-small.ttf b/js/misc/tinymce/skins/lightgray/fonts/tinymce-small.ttf similarity index 100% rename from web/js/misc/tinymce/skins/lightgray/fonts/tinymce-small.ttf rename to js/misc/tinymce/skins/lightgray/fonts/tinymce-small.ttf diff --git a/web/js/misc/tinymce/skins/lightgray/fonts/tinymce-small.woff b/js/misc/tinymce/skins/lightgray/fonts/tinymce-small.woff similarity index 100% rename from web/js/misc/tinymce/skins/lightgray/fonts/tinymce-small.woff rename to js/misc/tinymce/skins/lightgray/fonts/tinymce-small.woff diff --git a/web/js/misc/tinymce/skins/lightgray/fonts/tinymce.eot b/js/misc/tinymce/skins/lightgray/fonts/tinymce.eot similarity index 100% rename from web/js/misc/tinymce/skins/lightgray/fonts/tinymce.eot rename to js/misc/tinymce/skins/lightgray/fonts/tinymce.eot diff --git a/web/js/misc/tinymce/skins/lightgray/fonts/tinymce.json b/js/misc/tinymce/skins/lightgray/fonts/tinymce.json similarity index 100% rename from web/js/misc/tinymce/skins/lightgray/fonts/tinymce.json rename to js/misc/tinymce/skins/lightgray/fonts/tinymce.json diff --git a/web/js/misc/tinymce/skins/lightgray/fonts/tinymce.svg b/js/misc/tinymce/skins/lightgray/fonts/tinymce.svg similarity index 100% rename from web/js/misc/tinymce/skins/lightgray/fonts/tinymce.svg rename to js/misc/tinymce/skins/lightgray/fonts/tinymce.svg diff --git a/web/js/misc/tinymce/skins/lightgray/fonts/tinymce.ttf b/js/misc/tinymce/skins/lightgray/fonts/tinymce.ttf similarity index 100% rename from web/js/misc/tinymce/skins/lightgray/fonts/tinymce.ttf rename to js/misc/tinymce/skins/lightgray/fonts/tinymce.ttf diff --git a/web/js/misc/tinymce/skins/lightgray/fonts/tinymce.woff b/js/misc/tinymce/skins/lightgray/fonts/tinymce.woff similarity index 100% rename from web/js/misc/tinymce/skins/lightgray/fonts/tinymce.woff rename to js/misc/tinymce/skins/lightgray/fonts/tinymce.woff diff --git a/web/js/misc/tinymce/skins/lightgray/img/anchor.gif b/js/misc/tinymce/skins/lightgray/img/anchor.gif similarity index 100% rename from web/js/misc/tinymce/skins/lightgray/img/anchor.gif rename to js/misc/tinymce/skins/lightgray/img/anchor.gif diff --git a/web/js/misc/tinymce/skins/lightgray/img/loader.gif b/js/misc/tinymce/skins/lightgray/img/loader.gif similarity index 100% rename from web/js/misc/tinymce/skins/lightgray/img/loader.gif rename to js/misc/tinymce/skins/lightgray/img/loader.gif diff --git a/web/js/misc/tinymce/skins/lightgray/img/object.gif b/js/misc/tinymce/skins/lightgray/img/object.gif similarity index 100% rename from web/js/misc/tinymce/skins/lightgray/img/object.gif rename to js/misc/tinymce/skins/lightgray/img/object.gif diff --git a/web/js/misc/tinymce/skins/lightgray/img/trans.gif b/js/misc/tinymce/skins/lightgray/img/trans.gif similarity index 100% rename from web/js/misc/tinymce/skins/lightgray/img/trans.gif rename to js/misc/tinymce/skins/lightgray/img/trans.gif diff --git a/web/js/misc/tinymce/skins/lightgray/skin.ie7.min.css b/js/misc/tinymce/skins/lightgray/skin.ie7.min.css similarity index 100% rename from web/js/misc/tinymce/skins/lightgray/skin.ie7.min.css rename to js/misc/tinymce/skins/lightgray/skin.ie7.min.css diff --git a/web/js/misc/tinymce/skins/lightgray/skin.min.css b/js/misc/tinymce/skins/lightgray/skin.min.css similarity index 100% rename from web/js/misc/tinymce/skins/lightgray/skin.min.css rename to js/misc/tinymce/skins/lightgray/skin.min.css diff --git a/web/js/misc/tinymce/tinymce.min.js b/js/misc/tinymce/tinymce.min.js similarity index 100% rename from web/js/misc/tinymce/tinymce.min.js rename to js/misc/tinymce/tinymce.min.js diff --git a/web/js/sql/batch.js b/js/sql/batch.js similarity index 100% rename from web/js/sql/batch.js rename to js/sql/batch.js diff --git a/web/js/sql/delete.js b/js/sql/delete.js similarity index 100% rename from web/js/sql/delete.js rename to js/sql/delete.js diff --git a/web/js/sql/dml.js b/js/sql/dml.js similarity index 100% rename from web/js/sql/dml.js rename to js/sql/dml.js diff --git a/web/js/sql/expr.js b/js/sql/expr.js similarity index 100% rename from web/js/sql/expr.js rename to js/sql/expr.js diff --git a/web/js/sql/field.js b/js/sql/field.js similarity index 100% rename from web/js/sql/field.js rename to js/sql/field.js diff --git a/web/js/sql/filter-item.js b/js/sql/filter-item.js similarity index 100% rename from web/js/sql/filter-item.js rename to js/sql/filter-item.js diff --git a/web/js/sql/filter.js b/js/sql/filter.js similarity index 100% rename from web/js/sql/filter.js rename to js/sql/filter.js diff --git a/web/js/sql/function.js b/js/sql/function.js similarity index 100% rename from web/js/sql/function.js rename to js/sql/function.js diff --git a/web/js/sql/holder.js b/js/sql/holder.js similarity index 100% rename from web/js/sql/holder.js rename to js/sql/holder.js diff --git a/web/js/sql/insert.js b/js/sql/insert.js similarity index 100% rename from web/js/sql/insert.js rename to js/sql/insert.js diff --git a/web/js/sql/list.js b/js/sql/list.js similarity index 100% rename from web/js/sql/list.js rename to js/sql/list.js diff --git a/web/js/sql/main.js b/js/sql/main.js similarity index 100% rename from web/js/sql/main.js rename to js/sql/main.js diff --git a/web/js/sql/multi-stmt.js b/js/sql/multi-stmt.js similarity index 100% rename from web/js/sql/multi-stmt.js rename to js/sql/multi-stmt.js diff --git a/web/js/sql/object.js b/js/sql/object.js similarity index 100% rename from web/js/sql/object.js rename to js/sql/object.js diff --git a/web/js/sql/operation.js b/js/sql/operation.js similarity index 100% rename from web/js/sql/operation.js rename to js/sql/operation.js diff --git a/web/js/sql/search-tags.js b/js/sql/search-tags.js similarity index 100% rename from web/js/sql/search-tags.js rename to js/sql/search-tags.js diff --git a/web/js/sql/select.js b/js/sql/select.js similarity index 100% rename from web/js/sql/select.js rename to js/sql/select.js diff --git a/web/js/sql/sql.js b/js/sql/sql.js similarity index 100% rename from web/js/sql/sql.js rename to js/sql/sql.js diff --git a/web/js/sql/stmt.js b/js/sql/stmt.js similarity index 100% rename from web/js/sql/stmt.js rename to js/sql/stmt.js diff --git a/web/js/sql/string.js b/js/sql/string.js similarity index 100% rename from web/js/sql/string.js rename to js/sql/string.js diff --git a/web/js/sql/table.js b/js/sql/table.js similarity index 100% rename from web/js/sql/table.js rename to js/sql/table.js diff --git a/web/js/sql/target.js b/js/sql/target.js similarity index 100% rename from web/js/sql/target.js rename to js/sql/target.js diff --git a/web/js/sql/update.js b/js/sql/update.js similarity index 100% rename from web/js/sql/update.js rename to js/sql/update.js diff --git a/web/js/sql/value.js b/js/sql/value.js similarity index 100% rename from web/js/sql/value.js rename to js/sql/value.js diff --git a/web/js/vn/browser.js b/js/vn/browser.js similarity index 100% rename from web/js/vn/browser.js rename to js/vn/browser.js diff --git a/web/js/vn/builder.js b/js/vn/builder.js similarity index 100% rename from web/js/vn/builder.js rename to js/vn/builder.js diff --git a/web/js/vn/cookie.js b/js/vn/cookie.js similarity index 100% rename from web/js/vn/cookie.js rename to js/vn/cookie.js diff --git a/web/js/vn/date.js b/js/vn/date.js similarity index 100% rename from web/js/vn/date.js rename to js/vn/date.js diff --git a/web/js/vn/error.js b/js/vn/error.js similarity index 100% rename from web/js/vn/error.js rename to js/vn/error.js diff --git a/web/js/vn/hash-listener.js b/js/vn/hash-listener.js similarity index 100% rename from web/js/vn/hash-listener.js rename to js/vn/hash-listener.js diff --git a/web/js/vn/hash-param.js b/js/vn/hash-param.js similarity index 100% rename from web/js/vn/hash-param.js rename to js/vn/hash-param.js diff --git a/web/js/vn/hash.js b/js/vn/hash.js similarity index 100% rename from web/js/vn/hash.js rename to js/vn/hash.js diff --git a/web/js/vn/ie.js b/js/vn/ie.js similarity index 100% rename from web/js/vn/ie.js rename to js/vn/ie.js diff --git a/web/js/vn/json-request.js b/js/vn/json-request.js similarity index 81% rename from web/js/vn/json-request.js rename to js/vn/json-request.js index e6c8edd5..0014fd05 100644 --- a/web/js/vn/json-request.js +++ b/js/vn/json-request.js @@ -8,18 +8,22 @@ Vn.JsonRequest = new Class this._methodName = methodName; } - ,send: function (params, callback) + ,sendWithUrl: function (params, callback, method, url) { - var url = 'rest.php?action='+ encodeURIComponent (this._methodName); - var request = new XMLHttpRequest (); - request.open ('post', url, true); + request.open (method, url, true); request.setRequestHeader ('Content-Type', 'application/x-www-form-urlencoded'); request.onreadystatechange = this._onStateChange.bind (this, request, callback); request.send (Vn.Url.makeUri (params)); } + + ,send: function (params, callback) + { + var url = 'rest.php?method='+ encodeURIComponent (this._methodName); + this.sendWithUrl (params, callback, 'post', url); + } ,_onStateChange: function (request, callback) { @@ -62,7 +66,7 @@ Vn.JsonRequest = new Class if (elements[i].name) params[elements[i].name] = elements[i].value; - this.send (params, callback); + this.sendWithUrl (params, callback, form.method, form.action); } }); diff --git a/web/js/vn/locale.js b/js/vn/locale.js similarity index 100% rename from web/js/vn/locale.js rename to js/vn/locale.js diff --git a/web/js/vn/main.js b/js/vn/main.js similarity index 100% rename from web/js/vn/main.js rename to js/vn/main.js diff --git a/web/js/vn/mutators.js b/js/vn/mutators.js similarity index 100% rename from web/js/vn/mutators.js rename to js/vn/mutators.js diff --git a/web/js/vn/node.js b/js/vn/node.js similarity index 100% rename from web/js/vn/node.js rename to js/vn/node.js diff --git a/web/js/vn/object.js b/js/vn/object.js similarity index 100% rename from web/js/vn/object.js rename to js/vn/object.js diff --git a/web/js/vn/param.js b/js/vn/param.js similarity index 100% rename from web/js/vn/param.js rename to js/vn/param.js diff --git a/web/js/vn/url.js b/js/vn/url.js similarity index 100% rename from web/js/vn/url.js rename to js/vn/url.js diff --git a/web/js/vn/value.js b/js/vn/value.js similarity index 100% rename from web/js/vn/value.js rename to js/vn/value.js diff --git a/web/js/vn/vn.js b/js/vn/vn.js similarity index 100% rename from web/js/vn/vn.js rename to js/vn/vn.js diff --git a/web/locale/ca/forms/account/address-list.json b/locale/ca/forms/account/address-list.json similarity index 100% rename from web/locale/ca/forms/account/address-list.json rename to locale/ca/forms/account/address-list.json diff --git a/web/locale/ca/forms/account/address.json b/locale/ca/forms/account/address.json similarity index 100% rename from web/locale/ca/forms/account/address.json rename to locale/ca/forms/account/address.json diff --git a/web/locale/ca/forms/account/conf.json b/locale/ca/forms/account/conf.json similarity index 100% rename from web/locale/ca/forms/account/conf.json rename to locale/ca/forms/account/conf.json diff --git a/web/locale/ca/forms/admin/access-log.json b/locale/ca/forms/admin/access-log.json similarity index 100% rename from web/locale/ca/forms/admin/access-log.json rename to locale/ca/forms/admin/access-log.json diff --git a/web/locale/ca/forms/admin/connections.json b/locale/ca/forms/admin/connections.json similarity index 100% rename from web/locale/ca/forms/admin/connections.json rename to locale/ca/forms/admin/connections.json diff --git a/web/locale/ca/forms/admin/links.json b/locale/ca/forms/admin/links.json similarity index 100% rename from web/locale/ca/forms/admin/links.json rename to locale/ca/forms/admin/links.json diff --git a/web/locale/ca/forms/admin/photos.json b/locale/ca/forms/admin/photos.json similarity index 100% rename from web/locale/ca/forms/admin/photos.json rename to locale/ca/forms/admin/photos.json diff --git a/web/locale/ca/forms/admin/queries.json b/locale/ca/forms/admin/queries.json similarity index 100% rename from web/locale/ca/forms/admin/queries.json rename to locale/ca/forms/admin/queries.json diff --git a/web/locale/ca/forms/admin/shelves.json b/locale/ca/forms/admin/shelves.json similarity index 100% rename from web/locale/ca/forms/admin/shelves.json rename to locale/ca/forms/admin/shelves.json diff --git a/web/locale/ca/forms/admin/users.json b/locale/ca/forms/admin/users.json similarity index 100% rename from web/locale/ca/forms/admin/users.json rename to locale/ca/forms/admin/users.json diff --git a/web/locale/ca/forms/admin/visits.json b/locale/ca/forms/admin/visits.json similarity index 100% rename from web/locale/ca/forms/admin/visits.json rename to locale/ca/forms/admin/visits.json diff --git a/web/locale/ca/forms/agencies/packages.json b/locale/ca/forms/agencies/packages.json similarity index 100% rename from web/locale/ca/forms/agencies/packages.json rename to locale/ca/forms/agencies/packages.json diff --git a/web/locale/ca/forms/agencies/provinces.json b/locale/ca/forms/agencies/provinces.json similarity index 100% rename from web/locale/ca/forms/agencies/provinces.json rename to locale/ca/forms/agencies/provinces.json diff --git a/web/locale/ca/forms/cms/about.json b/locale/ca/forms/cms/about.json similarity index 100% rename from web/locale/ca/forms/cms/about.json rename to locale/ca/forms/cms/about.json diff --git a/web/locale/ca/forms/cms/contact.json b/locale/ca/forms/cms/contact.json similarity index 100% rename from web/locale/ca/forms/cms/contact.json rename to locale/ca/forms/cms/contact.json diff --git a/web/locale/ca/forms/cms/home.json b/locale/ca/forms/cms/home.json similarity index 100% rename from web/locale/ca/forms/cms/home.json rename to locale/ca/forms/cms/home.json diff --git a/web/locale/ca/forms/cms/location.json b/locale/ca/forms/cms/location.json similarity index 100% rename from web/locale/ca/forms/cms/location.json rename to locale/ca/forms/cms/location.json diff --git a/web/locale/ca/forms/cms/training.json b/locale/ca/forms/cms/training.json similarity index 100% rename from web/locale/ca/forms/cms/training.json rename to locale/ca/forms/cms/training.json diff --git a/web/locale/ca/forms/cms/why.json b/locale/ca/forms/cms/why.json similarity index 100% rename from web/locale/ca/forms/cms/why.json rename to locale/ca/forms/cms/why.json diff --git a/web/locale/ca/forms/ecomerce/basket.json b/locale/ca/forms/ecomerce/basket.json similarity index 100% rename from web/locale/ca/forms/ecomerce/basket.json rename to locale/ca/forms/ecomerce/basket.json diff --git a/web/locale/ca/forms/ecomerce/catalog.json b/locale/ca/forms/ecomerce/catalog.json similarity index 100% rename from web/locale/ca/forms/ecomerce/catalog.json rename to locale/ca/forms/ecomerce/catalog.json diff --git a/web/locale/ca/forms/ecomerce/checkout.json b/locale/ca/forms/ecomerce/checkout.json similarity index 100% rename from web/locale/ca/forms/ecomerce/checkout.json rename to locale/ca/forms/ecomerce/checkout.json diff --git a/web/locale/ca/forms/ecomerce/confirm.json b/locale/ca/forms/ecomerce/confirm.json similarity index 100% rename from web/locale/ca/forms/ecomerce/confirm.json rename to locale/ca/forms/ecomerce/confirm.json diff --git a/web/locale/ca/forms/ecomerce/invoices.json b/locale/ca/forms/ecomerce/invoices.json similarity index 100% rename from web/locale/ca/forms/ecomerce/invoices.json rename to locale/ca/forms/ecomerce/invoices.json diff --git a/web/locale/ca/forms/ecomerce/orders.json b/locale/ca/forms/ecomerce/orders.json similarity index 100% rename from web/locale/ca/forms/ecomerce/orders.json rename to locale/ca/forms/ecomerce/orders.json diff --git a/web/locale/ca/forms/ecomerce/ticket.json b/locale/ca/forms/ecomerce/ticket.json similarity index 100% rename from web/locale/ca/forms/ecomerce/ticket.json rename to locale/ca/forms/ecomerce/ticket.json diff --git a/web/locale/ca/forms/news/new.json b/locale/ca/forms/news/new.json similarity index 100% rename from web/locale/ca/forms/news/new.json rename to locale/ca/forms/news/new.json diff --git a/web/locale/ca/forms/news/news.json b/locale/ca/forms/news/news.json similarity index 100% rename from web/locale/ca/forms/news/news.json rename to locale/ca/forms/news/news.json diff --git a/web/locale/ca/js/db.js b/locale/ca/js/db.js similarity index 100% rename from web/locale/ca/js/db.js rename to locale/ca/js/db.js diff --git a/web/locale/ca/js/hedera.js b/locale/ca/js/hedera.js similarity index 100% rename from web/locale/ca/js/hedera.js rename to locale/ca/js/hedera.js diff --git a/web/locale/ca/js/htk.js b/locale/ca/js/htk.js similarity index 100% rename from web/locale/ca/js/htk.js rename to locale/ca/js/htk.js diff --git a/web/locale/ca/js/vn.js b/locale/ca/js/vn.js similarity index 100% rename from web/locale/ca/js/vn.js rename to locale/ca/js/vn.js diff --git a/web/locale/ca/pages/tpv.json b/locale/ca/pages/tpv.json similarity index 100% rename from web/locale/ca/pages/tpv.json rename to locale/ca/pages/tpv.json diff --git a/web/locale/ca/pages/update-browser.json b/locale/ca/pages/update-browser.json similarity index 100% rename from web/locale/ca/pages/update-browser.json rename to locale/ca/pages/update-browser.json diff --git a/web/locale/ca/pages/version-menu.json b/locale/ca/pages/version-menu.json similarity index 100% rename from web/locale/ca/pages/version-menu.json rename to locale/ca/pages/version-menu.json diff --git a/web/locale/ca/rest/query.json b/locale/ca/rest/query.json similarity index 100% rename from web/locale/ca/rest/query.json rename to locale/ca/rest/query.json diff --git a/web/locale/en/forms/account/address-list.json b/locale/en/forms/account/address-list.json similarity index 100% rename from web/locale/en/forms/account/address-list.json rename to locale/en/forms/account/address-list.json diff --git a/web/locale/en/forms/account/address.json b/locale/en/forms/account/address.json similarity index 100% rename from web/locale/en/forms/account/address.json rename to locale/en/forms/account/address.json diff --git a/web/locale/en/forms/account/conf.json b/locale/en/forms/account/conf.json similarity index 100% rename from web/locale/en/forms/account/conf.json rename to locale/en/forms/account/conf.json diff --git a/web/locale/en/forms/admin/access-log.json b/locale/en/forms/admin/access-log.json similarity index 100% rename from web/locale/en/forms/admin/access-log.json rename to locale/en/forms/admin/access-log.json diff --git a/web/locale/en/forms/admin/connections.json b/locale/en/forms/admin/connections.json similarity index 100% rename from web/locale/en/forms/admin/connections.json rename to locale/en/forms/admin/connections.json diff --git a/web/locale/en/forms/admin/items.json b/locale/en/forms/admin/items.json similarity index 100% rename from web/locale/en/forms/admin/items.json rename to locale/en/forms/admin/items.json diff --git a/web/locale/en/forms/admin/links.json b/locale/en/forms/admin/links.json similarity index 100% rename from web/locale/en/forms/admin/links.json rename to locale/en/forms/admin/links.json diff --git a/web/locale/en/forms/admin/photos.json b/locale/en/forms/admin/photos.json similarity index 100% rename from web/locale/en/forms/admin/photos.json rename to locale/en/forms/admin/photos.json diff --git a/web/locale/en/forms/admin/queries.json b/locale/en/forms/admin/queries.json similarity index 100% rename from web/locale/en/forms/admin/queries.json rename to locale/en/forms/admin/queries.json diff --git a/web/locale/en/forms/admin/shelves.json b/locale/en/forms/admin/shelves.json similarity index 100% rename from web/locale/en/forms/admin/shelves.json rename to locale/en/forms/admin/shelves.json diff --git a/web/locale/en/forms/admin/users.json b/locale/en/forms/admin/users.json similarity index 100% rename from web/locale/en/forms/admin/users.json rename to locale/en/forms/admin/users.json diff --git a/web/locale/en/forms/admin/visits.json b/locale/en/forms/admin/visits.json similarity index 100% rename from web/locale/en/forms/admin/visits.json rename to locale/en/forms/admin/visits.json diff --git a/web/locale/en/forms/agencies/packages.json b/locale/en/forms/agencies/packages.json similarity index 100% rename from web/locale/en/forms/agencies/packages.json rename to locale/en/forms/agencies/packages.json diff --git a/web/locale/en/forms/agencies/provinces.json b/locale/en/forms/agencies/provinces.json similarity index 100% rename from web/locale/en/forms/agencies/provinces.json rename to locale/en/forms/agencies/provinces.json diff --git a/web/locale/en/forms/cms/about.json b/locale/en/forms/cms/about.json similarity index 100% rename from web/locale/en/forms/cms/about.json rename to locale/en/forms/cms/about.json diff --git a/web/locale/en/forms/cms/contact.json b/locale/en/forms/cms/contact.json similarity index 100% rename from web/locale/en/forms/cms/contact.json rename to locale/en/forms/cms/contact.json diff --git a/web/locale/en/forms/cms/home.json b/locale/en/forms/cms/home.json similarity index 100% rename from web/locale/en/forms/cms/home.json rename to locale/en/forms/cms/home.json diff --git a/web/locale/en/forms/cms/location.json b/locale/en/forms/cms/location.json similarity index 100% rename from web/locale/en/forms/cms/location.json rename to locale/en/forms/cms/location.json diff --git a/web/locale/en/forms/cms/training.json b/locale/en/forms/cms/training.json similarity index 100% rename from web/locale/en/forms/cms/training.json rename to locale/en/forms/cms/training.json diff --git a/web/locale/en/forms/cms/why.json b/locale/en/forms/cms/why.json similarity index 100% rename from web/locale/en/forms/cms/why.json rename to locale/en/forms/cms/why.json diff --git a/web/locale/en/forms/ecomerce/basket.json b/locale/en/forms/ecomerce/basket.json similarity index 100% rename from web/locale/en/forms/ecomerce/basket.json rename to locale/en/forms/ecomerce/basket.json diff --git a/web/locale/en/forms/ecomerce/catalog.json b/locale/en/forms/ecomerce/catalog.json similarity index 100% rename from web/locale/en/forms/ecomerce/catalog.json rename to locale/en/forms/ecomerce/catalog.json diff --git a/web/locale/en/forms/ecomerce/checkout.json b/locale/en/forms/ecomerce/checkout.json similarity index 100% rename from web/locale/en/forms/ecomerce/checkout.json rename to locale/en/forms/ecomerce/checkout.json diff --git a/web/locale/en/forms/ecomerce/confirm.json b/locale/en/forms/ecomerce/confirm.json similarity index 100% rename from web/locale/en/forms/ecomerce/confirm.json rename to locale/en/forms/ecomerce/confirm.json diff --git a/web/locale/en/forms/ecomerce/invoices.json b/locale/en/forms/ecomerce/invoices.json similarity index 100% rename from web/locale/en/forms/ecomerce/invoices.json rename to locale/en/forms/ecomerce/invoices.json diff --git a/web/locale/en/forms/ecomerce/orders.json b/locale/en/forms/ecomerce/orders.json similarity index 100% rename from web/locale/en/forms/ecomerce/orders.json rename to locale/en/forms/ecomerce/orders.json diff --git a/web/locale/en/forms/ecomerce/ticket.json b/locale/en/forms/ecomerce/ticket.json similarity index 100% rename from web/locale/en/forms/ecomerce/ticket.json rename to locale/en/forms/ecomerce/ticket.json diff --git a/web/locale/en/forms/news/new.json b/locale/en/forms/news/new.json similarity index 100% rename from web/locale/en/forms/news/new.json rename to locale/en/forms/news/new.json diff --git a/web/locale/en/forms/news/news.json b/locale/en/forms/news/news.json similarity index 100% rename from web/locale/en/forms/news/news.json rename to locale/en/forms/news/news.json diff --git a/web/locale/en/js/db.js b/locale/en/js/db.js similarity index 100% rename from web/locale/en/js/db.js rename to locale/en/js/db.js diff --git a/web/locale/en/js/hedera.js b/locale/en/js/hedera.js similarity index 100% rename from web/locale/en/js/hedera.js rename to locale/en/js/hedera.js diff --git a/web/locale/en/js/htk.js b/locale/en/js/htk.js similarity index 100% rename from web/locale/en/js/htk.js rename to locale/en/js/htk.js diff --git a/web/locale/en/js/vn.js b/locale/en/js/vn.js similarity index 100% rename from web/locale/en/js/vn.js rename to locale/en/js/vn.js diff --git a/web/locale/en/pages/tpv.json b/locale/en/pages/tpv.json similarity index 100% rename from web/locale/en/pages/tpv.json rename to locale/en/pages/tpv.json diff --git a/web/locale/en/pages/update-browser.json b/locale/en/pages/update-browser.json similarity index 100% rename from web/locale/en/pages/update-browser.json rename to locale/en/pages/update-browser.json diff --git a/web/locale/en/pages/version-menu.json b/locale/en/pages/version-menu.json similarity index 100% rename from web/locale/en/pages/version-menu.json rename to locale/en/pages/version-menu.json diff --git a/web/locale/en/rest/query.json b/locale/en/rest/query.json similarity index 100% rename from web/locale/en/rest/query.json rename to locale/en/rest/query.json diff --git a/locale/en/vn/image.json b/locale/en/vn/image.json new file mode 100755 index 00000000..9e436ec1 --- /dev/null +++ b/locale/en/vn/image.json @@ -0,0 +1,28 @@ +{ + "CantLockCache": "The cache could not be blocked" + ,"BadFileFormat": "Unrecognized file format" + ,"FileNotChoosed": "You have not selected any file" + ,"PermissionDenied": "You are not allowed to upload the file" + ,"FileUploadError": "Failed to upload the file, check that size is not too large" + ,"FileSaveError": "Failed to save the file: %s" + ,"FileSizeError": "The file must be no longer than %.2f MB" + ,"BadFileName": "The file name must contain only lowercase letters, digits or the '_' character" + ,"BadSchemaName": "Invalid schema name" + ,"SchemaNotExists": "Schema does not exist" + ,"UnreferencedFile": "The file is not referenced by the database" + ,"ComError": "Error communicating with the server" + ,"ImageOpenError": "Error opening the image file" + ,"OperationDisabled": "Operation disabled for security" + ,"ImageAdded": "Image added correctly" + + ,"ErrIniSize": "File exceeds the upload_max_filesize directive in php.ini" + ,"ErrFormSize": "File exceeds the MAX_FILE_SIZE specified in the HTML form" + ,"ErrPartial": "File was partially uploaded" + ,"ErrNoFile": "No file was uploaded" + ,"ErrNoTmpDir": "Missing a temporary folder" + ,"ErrCantWrite": "Failed to write file to disk" + ,"ErrExtension": "File upload stopped by extension" + ,"ErrDefault": "Unknown upload error" + + ,"SyncComplete": "Synchronization complete" +} diff --git a/web/locale/es/forms/account/address-list.json b/locale/es/forms/account/address-list.json similarity index 100% rename from web/locale/es/forms/account/address-list.json rename to locale/es/forms/account/address-list.json diff --git a/web/locale/es/forms/account/address.json b/locale/es/forms/account/address.json similarity index 100% rename from web/locale/es/forms/account/address.json rename to locale/es/forms/account/address.json diff --git a/web/locale/es/forms/account/conf.json b/locale/es/forms/account/conf.json similarity index 100% rename from web/locale/es/forms/account/conf.json rename to locale/es/forms/account/conf.json diff --git a/web/locale/es/forms/admin/access-log.json b/locale/es/forms/admin/access-log.json similarity index 100% rename from web/locale/es/forms/admin/access-log.json rename to locale/es/forms/admin/access-log.json diff --git a/web/locale/es/forms/admin/connections.json b/locale/es/forms/admin/connections.json similarity index 100% rename from web/locale/es/forms/admin/connections.json rename to locale/es/forms/admin/connections.json diff --git a/web/locale/es/forms/admin/items.json b/locale/es/forms/admin/items.json similarity index 100% rename from web/locale/es/forms/admin/items.json rename to locale/es/forms/admin/items.json diff --git a/web/locale/es/forms/admin/links.json b/locale/es/forms/admin/links.json similarity index 100% rename from web/locale/es/forms/admin/links.json rename to locale/es/forms/admin/links.json diff --git a/web/locale/es/forms/admin/photos.json b/locale/es/forms/admin/photos.json similarity index 100% rename from web/locale/es/forms/admin/photos.json rename to locale/es/forms/admin/photos.json diff --git a/web/locale/es/forms/admin/queries.json b/locale/es/forms/admin/queries.json similarity index 100% rename from web/locale/es/forms/admin/queries.json rename to locale/es/forms/admin/queries.json diff --git a/web/locale/es/forms/admin/shelves.json b/locale/es/forms/admin/shelves.json similarity index 100% rename from web/locale/es/forms/admin/shelves.json rename to locale/es/forms/admin/shelves.json diff --git a/web/locale/es/forms/admin/users.json b/locale/es/forms/admin/users.json similarity index 100% rename from web/locale/es/forms/admin/users.json rename to locale/es/forms/admin/users.json diff --git a/web/locale/es/forms/admin/visits.json b/locale/es/forms/admin/visits.json similarity index 100% rename from web/locale/es/forms/admin/visits.json rename to locale/es/forms/admin/visits.json diff --git a/web/locale/es/forms/agencies/packages.json b/locale/es/forms/agencies/packages.json similarity index 100% rename from web/locale/es/forms/agencies/packages.json rename to locale/es/forms/agencies/packages.json diff --git a/web/locale/es/forms/agencies/provinces.json b/locale/es/forms/agencies/provinces.json similarity index 100% rename from web/locale/es/forms/agencies/provinces.json rename to locale/es/forms/agencies/provinces.json diff --git a/web/locale/es/forms/cms/about.json b/locale/es/forms/cms/about.json similarity index 100% rename from web/locale/es/forms/cms/about.json rename to locale/es/forms/cms/about.json diff --git a/web/locale/es/forms/cms/contact.json b/locale/es/forms/cms/contact.json similarity index 100% rename from web/locale/es/forms/cms/contact.json rename to locale/es/forms/cms/contact.json diff --git a/web/locale/es/forms/cms/home.json b/locale/es/forms/cms/home.json similarity index 100% rename from web/locale/es/forms/cms/home.json rename to locale/es/forms/cms/home.json diff --git a/web/locale/es/forms/cms/location.json b/locale/es/forms/cms/location.json similarity index 100% rename from web/locale/es/forms/cms/location.json rename to locale/es/forms/cms/location.json diff --git a/web/locale/es/forms/cms/training.json b/locale/es/forms/cms/training.json similarity index 100% rename from web/locale/es/forms/cms/training.json rename to locale/es/forms/cms/training.json diff --git a/web/locale/es/forms/cms/why.json b/locale/es/forms/cms/why.json similarity index 100% rename from web/locale/es/forms/cms/why.json rename to locale/es/forms/cms/why.json diff --git a/web/locale/es/forms/ecomerce/basket.json b/locale/es/forms/ecomerce/basket.json similarity index 100% rename from web/locale/es/forms/ecomerce/basket.json rename to locale/es/forms/ecomerce/basket.json diff --git a/web/locale/es/forms/ecomerce/catalog.json b/locale/es/forms/ecomerce/catalog.json similarity index 100% rename from web/locale/es/forms/ecomerce/catalog.json rename to locale/es/forms/ecomerce/catalog.json diff --git a/web/locale/es/forms/ecomerce/checkout.json b/locale/es/forms/ecomerce/checkout.json similarity index 100% rename from web/locale/es/forms/ecomerce/checkout.json rename to locale/es/forms/ecomerce/checkout.json diff --git a/web/locale/es/forms/ecomerce/confirm.json b/locale/es/forms/ecomerce/confirm.json similarity index 100% rename from web/locale/es/forms/ecomerce/confirm.json rename to locale/es/forms/ecomerce/confirm.json diff --git a/web/locale/es/forms/ecomerce/invoices.json b/locale/es/forms/ecomerce/invoices.json similarity index 100% rename from web/locale/es/forms/ecomerce/invoices.json rename to locale/es/forms/ecomerce/invoices.json diff --git a/web/locale/es/forms/ecomerce/orders.json b/locale/es/forms/ecomerce/orders.json similarity index 100% rename from web/locale/es/forms/ecomerce/orders.json rename to locale/es/forms/ecomerce/orders.json diff --git a/web/locale/es/forms/ecomerce/ticket.json b/locale/es/forms/ecomerce/ticket.json similarity index 100% rename from web/locale/es/forms/ecomerce/ticket.json rename to locale/es/forms/ecomerce/ticket.json diff --git a/web/locale/es/forms/news/new.json b/locale/es/forms/news/new.json similarity index 100% rename from web/locale/es/forms/news/new.json rename to locale/es/forms/news/new.json diff --git a/web/locale/es/forms/news/news.json b/locale/es/forms/news/news.json similarity index 100% rename from web/locale/es/forms/news/news.json rename to locale/es/forms/news/news.json diff --git a/web/locale/es/js/db.js b/locale/es/js/db.js similarity index 100% rename from web/locale/es/js/db.js rename to locale/es/js/db.js diff --git a/web/locale/es/js/hedera.js b/locale/es/js/hedera.js similarity index 100% rename from web/locale/es/js/hedera.js rename to locale/es/js/hedera.js diff --git a/web/locale/es/js/htk.js b/locale/es/js/htk.js similarity index 100% rename from web/locale/es/js/htk.js rename to locale/es/js/htk.js diff --git a/web/locale/es/js/vn.js b/locale/es/js/vn.js similarity index 100% rename from web/locale/es/js/vn.js rename to locale/es/js/vn.js diff --git a/web/locale/es/pages/tpv.json b/locale/es/pages/tpv.json similarity index 100% rename from web/locale/es/pages/tpv.json rename to locale/es/pages/tpv.json diff --git a/web/locale/es/pages/update-browser.json b/locale/es/pages/update-browser.json similarity index 100% rename from web/locale/es/pages/update-browser.json rename to locale/es/pages/update-browser.json diff --git a/web/locale/es/pages/version-menu.json b/locale/es/pages/version-menu.json similarity index 100% rename from web/locale/es/pages/version-menu.json rename to locale/es/pages/version-menu.json diff --git a/web/locale/es/rest/query.json b/locale/es/rest/query.json similarity index 100% rename from web/locale/es/rest/query.json rename to locale/es/rest/query.json diff --git a/locale/es/vn/image.json b/locale/es/vn/image.json new file mode 100755 index 00000000..b5dac435 --- /dev/null +++ b/locale/es/vn/image.json @@ -0,0 +1,28 @@ +{ + "CantLockCache": "La caché no pudo ser bloqueada" + ,"BadFileFormat": "Formato de archivo no reconocido" + ,"FileNotChoosed": "No has seleccionado ningún archivo" + ,"PermissionDenied": "No tienes permiso para subir el fichero" + ,"FileUploadError": "Error al subir el fichero, comprueba que su tamaño no sea demasiado grande" + ,"FileSaveError": "Error al guardar el fichero: %s" + ,"FileSizeError": "El fichero no debe ocupar más de %.2f MB" + ,"BadFileName": "El nombre del archivo solo debe contener letras minúsculas, dígitos o el carácter '_'" + ,"BadSchemaName": "Nombre de esquema no válido" + ,"SchemaNotExists": "El esquema no existe" + ,"UnreferencedFile": "El archivo no está referenciado por la base de datos" + ,"ComError": "Error en la comunicación con el servidor" + ,"ImageOpenError": "Error al abrir el archivo de imagen" + ,"OperationDisabled": "Operación deshabilitada por seguridad" + ,"ImageAdded": "Imagen añadida correctamente" + + ,"ErrIniSize": "File exceeds the upload_max_filesize directive in php.ini" + ,"ErrFormSize": "File exceeds the MAX_FILE_SIZE specified in the HTML form" + ,"ErrPartial": "File was partially uploaded" + ,"ErrNoFile": "No file was uploaded" + ,"ErrNoTmpDir": "Missing a temporary folder" + ,"ErrCantWrite": "Failed to write file to disk" + ,"ErrExtension": "File upload stopped by extension" + ,"ErrDefault": "Unknown upload error" + + ,"SyncComplete": "Sincronización completada" +} diff --git a/web/locale/fr/forms/account/address-list.json b/locale/fr/forms/account/address-list.json similarity index 100% rename from web/locale/fr/forms/account/address-list.json rename to locale/fr/forms/account/address-list.json diff --git a/web/locale/fr/forms/account/address.json b/locale/fr/forms/account/address.json similarity index 100% rename from web/locale/fr/forms/account/address.json rename to locale/fr/forms/account/address.json diff --git a/web/locale/fr/forms/account/conf.json b/locale/fr/forms/account/conf.json similarity index 100% rename from web/locale/fr/forms/account/conf.json rename to locale/fr/forms/account/conf.json diff --git a/web/locale/fr/forms/admin/access-log.json b/locale/fr/forms/admin/access-log.json similarity index 100% rename from web/locale/fr/forms/admin/access-log.json rename to locale/fr/forms/admin/access-log.json diff --git a/web/locale/fr/forms/admin/connections.json b/locale/fr/forms/admin/connections.json similarity index 100% rename from web/locale/fr/forms/admin/connections.json rename to locale/fr/forms/admin/connections.json diff --git a/web/locale/fr/forms/admin/links.json b/locale/fr/forms/admin/links.json similarity index 100% rename from web/locale/fr/forms/admin/links.json rename to locale/fr/forms/admin/links.json diff --git a/web/locale/fr/forms/admin/photos.json b/locale/fr/forms/admin/photos.json similarity index 100% rename from web/locale/fr/forms/admin/photos.json rename to locale/fr/forms/admin/photos.json diff --git a/web/locale/fr/forms/admin/queries.json b/locale/fr/forms/admin/queries.json similarity index 100% rename from web/locale/fr/forms/admin/queries.json rename to locale/fr/forms/admin/queries.json diff --git a/web/locale/fr/forms/admin/shelves.json b/locale/fr/forms/admin/shelves.json similarity index 100% rename from web/locale/fr/forms/admin/shelves.json rename to locale/fr/forms/admin/shelves.json diff --git a/web/locale/fr/forms/admin/users.json b/locale/fr/forms/admin/users.json similarity index 100% rename from web/locale/fr/forms/admin/users.json rename to locale/fr/forms/admin/users.json diff --git a/web/locale/fr/forms/admin/visits.json b/locale/fr/forms/admin/visits.json similarity index 100% rename from web/locale/fr/forms/admin/visits.json rename to locale/fr/forms/admin/visits.json diff --git a/web/locale/fr/forms/agencies/packages.json b/locale/fr/forms/agencies/packages.json similarity index 100% rename from web/locale/fr/forms/agencies/packages.json rename to locale/fr/forms/agencies/packages.json diff --git a/web/locale/fr/forms/agencies/provinces.json b/locale/fr/forms/agencies/provinces.json similarity index 100% rename from web/locale/fr/forms/agencies/provinces.json rename to locale/fr/forms/agencies/provinces.json diff --git a/web/locale/fr/forms/cms/about.json b/locale/fr/forms/cms/about.json similarity index 100% rename from web/locale/fr/forms/cms/about.json rename to locale/fr/forms/cms/about.json diff --git a/web/locale/fr/forms/cms/contact.json b/locale/fr/forms/cms/contact.json similarity index 100% rename from web/locale/fr/forms/cms/contact.json rename to locale/fr/forms/cms/contact.json diff --git a/web/locale/fr/forms/cms/home.json b/locale/fr/forms/cms/home.json similarity index 100% rename from web/locale/fr/forms/cms/home.json rename to locale/fr/forms/cms/home.json diff --git a/web/locale/fr/forms/cms/location.json b/locale/fr/forms/cms/location.json similarity index 100% rename from web/locale/fr/forms/cms/location.json rename to locale/fr/forms/cms/location.json diff --git a/web/locale/fr/forms/cms/training.json b/locale/fr/forms/cms/training.json similarity index 100% rename from web/locale/fr/forms/cms/training.json rename to locale/fr/forms/cms/training.json diff --git a/web/locale/fr/forms/cms/why.json b/locale/fr/forms/cms/why.json similarity index 100% rename from web/locale/fr/forms/cms/why.json rename to locale/fr/forms/cms/why.json diff --git a/web/locale/fr/forms/ecomerce/basket.json b/locale/fr/forms/ecomerce/basket.json similarity index 100% rename from web/locale/fr/forms/ecomerce/basket.json rename to locale/fr/forms/ecomerce/basket.json diff --git a/web/locale/fr/forms/ecomerce/catalog.json b/locale/fr/forms/ecomerce/catalog.json similarity index 100% rename from web/locale/fr/forms/ecomerce/catalog.json rename to locale/fr/forms/ecomerce/catalog.json diff --git a/web/locale/fr/forms/ecomerce/checkout.json b/locale/fr/forms/ecomerce/checkout.json similarity index 100% rename from web/locale/fr/forms/ecomerce/checkout.json rename to locale/fr/forms/ecomerce/checkout.json diff --git a/web/locale/fr/forms/ecomerce/confirm.json b/locale/fr/forms/ecomerce/confirm.json similarity index 100% rename from web/locale/fr/forms/ecomerce/confirm.json rename to locale/fr/forms/ecomerce/confirm.json diff --git a/web/locale/fr/forms/ecomerce/invoices.json b/locale/fr/forms/ecomerce/invoices.json similarity index 100% rename from web/locale/fr/forms/ecomerce/invoices.json rename to locale/fr/forms/ecomerce/invoices.json diff --git a/web/locale/fr/forms/ecomerce/orders.json b/locale/fr/forms/ecomerce/orders.json similarity index 100% rename from web/locale/fr/forms/ecomerce/orders.json rename to locale/fr/forms/ecomerce/orders.json diff --git a/web/locale/fr/forms/ecomerce/ticket.json b/locale/fr/forms/ecomerce/ticket.json similarity index 100% rename from web/locale/fr/forms/ecomerce/ticket.json rename to locale/fr/forms/ecomerce/ticket.json diff --git a/web/locale/fr/forms/news/new.json b/locale/fr/forms/news/new.json similarity index 100% rename from web/locale/fr/forms/news/new.json rename to locale/fr/forms/news/new.json diff --git a/web/locale/fr/forms/news/news.json b/locale/fr/forms/news/news.json similarity index 100% rename from web/locale/fr/forms/news/news.json rename to locale/fr/forms/news/news.json diff --git a/web/locale/fr/js/db.js b/locale/fr/js/db.js similarity index 100% rename from web/locale/fr/js/db.js rename to locale/fr/js/db.js diff --git a/web/locale/fr/js/hedera.js b/locale/fr/js/hedera.js similarity index 100% rename from web/locale/fr/js/hedera.js rename to locale/fr/js/hedera.js diff --git a/web/locale/fr/js/htk.js b/locale/fr/js/htk.js similarity index 100% rename from web/locale/fr/js/htk.js rename to locale/fr/js/htk.js diff --git a/web/locale/fr/js/vn.js b/locale/fr/js/vn.js similarity index 100% rename from web/locale/fr/js/vn.js rename to locale/fr/js/vn.js diff --git a/web/locale/fr/pages/tpv.json b/locale/fr/pages/tpv.json similarity index 100% rename from web/locale/fr/pages/tpv.json rename to locale/fr/pages/tpv.json diff --git a/web/locale/fr/pages/update-browser.json b/locale/fr/pages/update-browser.json similarity index 100% rename from web/locale/fr/pages/update-browser.json rename to locale/fr/pages/update-browser.json diff --git a/web/locale/fr/pages/version-menu.json b/locale/fr/pages/version-menu.json similarity index 100% rename from web/locale/fr/pages/version-menu.json rename to locale/fr/pages/version-menu.json diff --git a/web/locale/fr/rest/query.json b/locale/fr/rest/query.json similarity index 100% rename from web/locale/fr/rest/query.json rename to locale/fr/rest/query.json diff --git a/web/locale/mn/forms/account/address-list.json b/locale/mn/forms/account/address-list.json similarity index 100% rename from web/locale/mn/forms/account/address-list.json rename to locale/mn/forms/account/address-list.json diff --git a/web/locale/mn/forms/account/address.json b/locale/mn/forms/account/address.json similarity index 100% rename from web/locale/mn/forms/account/address.json rename to locale/mn/forms/account/address.json diff --git a/web/locale/mn/forms/account/conf.json b/locale/mn/forms/account/conf.json similarity index 100% rename from web/locale/mn/forms/account/conf.json rename to locale/mn/forms/account/conf.json diff --git a/web/locale/mn/forms/admin/access-log.json b/locale/mn/forms/admin/access-log.json similarity index 100% rename from web/locale/mn/forms/admin/access-log.json rename to locale/mn/forms/admin/access-log.json diff --git a/web/locale/mn/forms/admin/connections.json b/locale/mn/forms/admin/connections.json similarity index 100% rename from web/locale/mn/forms/admin/connections.json rename to locale/mn/forms/admin/connections.json diff --git a/web/locale/mn/forms/admin/items.json b/locale/mn/forms/admin/items.json similarity index 100% rename from web/locale/mn/forms/admin/items.json rename to locale/mn/forms/admin/items.json diff --git a/web/locale/mn/forms/admin/links.json b/locale/mn/forms/admin/links.json similarity index 100% rename from web/locale/mn/forms/admin/links.json rename to locale/mn/forms/admin/links.json diff --git a/web/locale/mn/forms/admin/photos.json b/locale/mn/forms/admin/photos.json similarity index 100% rename from web/locale/mn/forms/admin/photos.json rename to locale/mn/forms/admin/photos.json diff --git a/web/locale/mn/forms/admin/queries.json b/locale/mn/forms/admin/queries.json similarity index 100% rename from web/locale/mn/forms/admin/queries.json rename to locale/mn/forms/admin/queries.json diff --git a/web/locale/mn/forms/admin/shelves.json b/locale/mn/forms/admin/shelves.json similarity index 100% rename from web/locale/mn/forms/admin/shelves.json rename to locale/mn/forms/admin/shelves.json diff --git a/web/locale/mn/forms/admin/users.json b/locale/mn/forms/admin/users.json similarity index 100% rename from web/locale/mn/forms/admin/users.json rename to locale/mn/forms/admin/users.json diff --git a/web/locale/mn/forms/admin/visits.json b/locale/mn/forms/admin/visits.json similarity index 100% rename from web/locale/mn/forms/admin/visits.json rename to locale/mn/forms/admin/visits.json diff --git a/web/locale/mn/forms/agencies/packages.json b/locale/mn/forms/agencies/packages.json similarity index 100% rename from web/locale/mn/forms/agencies/packages.json rename to locale/mn/forms/agencies/packages.json diff --git a/web/locale/mn/forms/agencies/provinces.json b/locale/mn/forms/agencies/provinces.json similarity index 100% rename from web/locale/mn/forms/agencies/provinces.json rename to locale/mn/forms/agencies/provinces.json diff --git a/web/locale/mn/forms/cms/about.json b/locale/mn/forms/cms/about.json similarity index 100% rename from web/locale/mn/forms/cms/about.json rename to locale/mn/forms/cms/about.json diff --git a/web/locale/mn/forms/cms/contact.json b/locale/mn/forms/cms/contact.json similarity index 100% rename from web/locale/mn/forms/cms/contact.json rename to locale/mn/forms/cms/contact.json diff --git a/web/locale/mn/forms/cms/home.json b/locale/mn/forms/cms/home.json similarity index 100% rename from web/locale/mn/forms/cms/home.json rename to locale/mn/forms/cms/home.json diff --git a/web/locale/mn/forms/cms/location.json b/locale/mn/forms/cms/location.json similarity index 100% rename from web/locale/mn/forms/cms/location.json rename to locale/mn/forms/cms/location.json diff --git a/web/locale/mn/forms/cms/training.json b/locale/mn/forms/cms/training.json similarity index 100% rename from web/locale/mn/forms/cms/training.json rename to locale/mn/forms/cms/training.json diff --git a/web/locale/mn/forms/cms/why.json b/locale/mn/forms/cms/why.json similarity index 100% rename from web/locale/mn/forms/cms/why.json rename to locale/mn/forms/cms/why.json diff --git a/web/locale/mn/forms/ecomerce/basket.json b/locale/mn/forms/ecomerce/basket.json similarity index 100% rename from web/locale/mn/forms/ecomerce/basket.json rename to locale/mn/forms/ecomerce/basket.json diff --git a/web/locale/mn/forms/ecomerce/catalog.json b/locale/mn/forms/ecomerce/catalog.json similarity index 100% rename from web/locale/mn/forms/ecomerce/catalog.json rename to locale/mn/forms/ecomerce/catalog.json diff --git a/web/locale/mn/forms/ecomerce/checkout.json b/locale/mn/forms/ecomerce/checkout.json similarity index 100% rename from web/locale/mn/forms/ecomerce/checkout.json rename to locale/mn/forms/ecomerce/checkout.json diff --git a/web/locale/mn/forms/ecomerce/confirm.json b/locale/mn/forms/ecomerce/confirm.json similarity index 100% rename from web/locale/mn/forms/ecomerce/confirm.json rename to locale/mn/forms/ecomerce/confirm.json diff --git a/web/locale/mn/forms/ecomerce/invoices.json b/locale/mn/forms/ecomerce/invoices.json similarity index 100% rename from web/locale/mn/forms/ecomerce/invoices.json rename to locale/mn/forms/ecomerce/invoices.json diff --git a/web/locale/mn/forms/ecomerce/orders.json b/locale/mn/forms/ecomerce/orders.json similarity index 100% rename from web/locale/mn/forms/ecomerce/orders.json rename to locale/mn/forms/ecomerce/orders.json diff --git a/web/locale/mn/forms/ecomerce/ticket.json b/locale/mn/forms/ecomerce/ticket.json similarity index 100% rename from web/locale/mn/forms/ecomerce/ticket.json rename to locale/mn/forms/ecomerce/ticket.json diff --git a/web/locale/mn/forms/news/new.json b/locale/mn/forms/news/new.json similarity index 100% rename from web/locale/mn/forms/news/new.json rename to locale/mn/forms/news/new.json diff --git a/web/locale/mn/forms/news/news.json b/locale/mn/forms/news/news.json similarity index 100% rename from web/locale/mn/forms/news/news.json rename to locale/mn/forms/news/news.json diff --git a/web/locale/mn/js/db.js b/locale/mn/js/db.js similarity index 100% rename from web/locale/mn/js/db.js rename to locale/mn/js/db.js diff --git a/web/locale/mn/js/hedera.js b/locale/mn/js/hedera.js similarity index 100% rename from web/locale/mn/js/hedera.js rename to locale/mn/js/hedera.js diff --git a/web/locale/mn/js/htk.js b/locale/mn/js/htk.js similarity index 100% rename from web/locale/mn/js/htk.js rename to locale/mn/js/htk.js diff --git a/web/locale/mn/js/vn.js b/locale/mn/js/vn.js similarity index 100% rename from web/locale/mn/js/vn.js rename to locale/mn/js/vn.js diff --git a/web/locale/mn/pages/tpv.json b/locale/mn/pages/tpv.json similarity index 100% rename from web/locale/mn/pages/tpv.json rename to locale/mn/pages/tpv.json diff --git a/web/locale/mn/pages/update-browser.json b/locale/mn/pages/update-browser.json similarity index 100% rename from web/locale/mn/pages/update-browser.json rename to locale/mn/pages/update-browser.json diff --git a/web/locale/mn/pages/version-menu.json b/locale/mn/pages/version-menu.json similarity index 100% rename from web/locale/mn/pages/version-menu.json rename to locale/mn/pages/version-menu.json diff --git a/web/locale/mn/rest/query.json b/locale/mn/rest/query.json similarity index 100% rename from web/locale/mn/rest/query.json rename to locale/mn/rest/query.json diff --git a/web/locale/pt/forms/account/address-list.json b/locale/pt/forms/account/address-list.json similarity index 100% rename from web/locale/pt/forms/account/address-list.json rename to locale/pt/forms/account/address-list.json diff --git a/web/locale/pt/forms/account/address.json b/locale/pt/forms/account/address.json similarity index 100% rename from web/locale/pt/forms/account/address.json rename to locale/pt/forms/account/address.json diff --git a/web/locale/pt/forms/account/conf.json b/locale/pt/forms/account/conf.json similarity index 100% rename from web/locale/pt/forms/account/conf.json rename to locale/pt/forms/account/conf.json diff --git a/web/locale/pt/forms/admin/access-log.json b/locale/pt/forms/admin/access-log.json similarity index 100% rename from web/locale/pt/forms/admin/access-log.json rename to locale/pt/forms/admin/access-log.json diff --git a/web/locale/pt/forms/admin/connections.json b/locale/pt/forms/admin/connections.json similarity index 100% rename from web/locale/pt/forms/admin/connections.json rename to locale/pt/forms/admin/connections.json diff --git a/web/locale/pt/forms/admin/items.json b/locale/pt/forms/admin/items.json similarity index 100% rename from web/locale/pt/forms/admin/items.json rename to locale/pt/forms/admin/items.json diff --git a/web/locale/pt/forms/admin/links.json b/locale/pt/forms/admin/links.json similarity index 100% rename from web/locale/pt/forms/admin/links.json rename to locale/pt/forms/admin/links.json diff --git a/web/locale/pt/forms/admin/photos.json b/locale/pt/forms/admin/photos.json similarity index 100% rename from web/locale/pt/forms/admin/photos.json rename to locale/pt/forms/admin/photos.json diff --git a/web/locale/pt/forms/admin/queries.json b/locale/pt/forms/admin/queries.json similarity index 100% rename from web/locale/pt/forms/admin/queries.json rename to locale/pt/forms/admin/queries.json diff --git a/web/locale/pt/forms/admin/shelves.json b/locale/pt/forms/admin/shelves.json similarity index 100% rename from web/locale/pt/forms/admin/shelves.json rename to locale/pt/forms/admin/shelves.json diff --git a/web/locale/pt/forms/admin/users.json b/locale/pt/forms/admin/users.json similarity index 100% rename from web/locale/pt/forms/admin/users.json rename to locale/pt/forms/admin/users.json diff --git a/web/locale/pt/forms/admin/visits.json b/locale/pt/forms/admin/visits.json similarity index 100% rename from web/locale/pt/forms/admin/visits.json rename to locale/pt/forms/admin/visits.json diff --git a/web/locale/pt/forms/agencies/packages.json b/locale/pt/forms/agencies/packages.json similarity index 100% rename from web/locale/pt/forms/agencies/packages.json rename to locale/pt/forms/agencies/packages.json diff --git a/web/locale/pt/forms/agencies/provinces.json b/locale/pt/forms/agencies/provinces.json similarity index 100% rename from web/locale/pt/forms/agencies/provinces.json rename to locale/pt/forms/agencies/provinces.json diff --git a/web/locale/pt/forms/cms/about.json b/locale/pt/forms/cms/about.json similarity index 100% rename from web/locale/pt/forms/cms/about.json rename to locale/pt/forms/cms/about.json diff --git a/web/locale/pt/forms/cms/contact.json b/locale/pt/forms/cms/contact.json similarity index 100% rename from web/locale/pt/forms/cms/contact.json rename to locale/pt/forms/cms/contact.json diff --git a/web/locale/pt/forms/cms/home.json b/locale/pt/forms/cms/home.json similarity index 100% rename from web/locale/pt/forms/cms/home.json rename to locale/pt/forms/cms/home.json diff --git a/web/locale/pt/forms/cms/location.json b/locale/pt/forms/cms/location.json similarity index 100% rename from web/locale/pt/forms/cms/location.json rename to locale/pt/forms/cms/location.json diff --git a/web/locale/pt/forms/cms/training.json b/locale/pt/forms/cms/training.json similarity index 100% rename from web/locale/pt/forms/cms/training.json rename to locale/pt/forms/cms/training.json diff --git a/web/locale/pt/forms/cms/why.json b/locale/pt/forms/cms/why.json similarity index 100% rename from web/locale/pt/forms/cms/why.json rename to locale/pt/forms/cms/why.json diff --git a/web/locale/pt/forms/ecomerce/basket.json b/locale/pt/forms/ecomerce/basket.json similarity index 100% rename from web/locale/pt/forms/ecomerce/basket.json rename to locale/pt/forms/ecomerce/basket.json diff --git a/web/locale/pt/forms/ecomerce/catalog.json b/locale/pt/forms/ecomerce/catalog.json similarity index 100% rename from web/locale/pt/forms/ecomerce/catalog.json rename to locale/pt/forms/ecomerce/catalog.json diff --git a/web/locale/pt/forms/ecomerce/checkout.json b/locale/pt/forms/ecomerce/checkout.json similarity index 100% rename from web/locale/pt/forms/ecomerce/checkout.json rename to locale/pt/forms/ecomerce/checkout.json diff --git a/web/locale/pt/forms/ecomerce/confirm.json b/locale/pt/forms/ecomerce/confirm.json similarity index 100% rename from web/locale/pt/forms/ecomerce/confirm.json rename to locale/pt/forms/ecomerce/confirm.json diff --git a/web/locale/pt/forms/ecomerce/invoices.json b/locale/pt/forms/ecomerce/invoices.json similarity index 100% rename from web/locale/pt/forms/ecomerce/invoices.json rename to locale/pt/forms/ecomerce/invoices.json diff --git a/web/locale/pt/forms/ecomerce/orders.json b/locale/pt/forms/ecomerce/orders.json similarity index 100% rename from web/locale/pt/forms/ecomerce/orders.json rename to locale/pt/forms/ecomerce/orders.json diff --git a/web/locale/pt/forms/ecomerce/ticket.json b/locale/pt/forms/ecomerce/ticket.json similarity index 100% rename from web/locale/pt/forms/ecomerce/ticket.json rename to locale/pt/forms/ecomerce/ticket.json diff --git a/web/locale/pt/forms/news/new.json b/locale/pt/forms/news/new.json similarity index 100% rename from web/locale/pt/forms/news/new.json rename to locale/pt/forms/news/new.json diff --git a/web/locale/pt/forms/news/news.json b/locale/pt/forms/news/news.json similarity index 100% rename from web/locale/pt/forms/news/news.json rename to locale/pt/forms/news/news.json diff --git a/web/locale/pt/js/db.js b/locale/pt/js/db.js similarity index 100% rename from web/locale/pt/js/db.js rename to locale/pt/js/db.js diff --git a/web/locale/pt/js/hedera.js b/locale/pt/js/hedera.js similarity index 100% rename from web/locale/pt/js/hedera.js rename to locale/pt/js/hedera.js diff --git a/web/locale/pt/js/htk.js b/locale/pt/js/htk.js similarity index 100% rename from web/locale/pt/js/htk.js rename to locale/pt/js/htk.js diff --git a/web/locale/pt/js/vn.js b/locale/pt/js/vn.js similarity index 100% rename from web/locale/pt/js/vn.js rename to locale/pt/js/vn.js diff --git a/web/locale/pt/pages/tpv.json b/locale/pt/pages/tpv.json similarity index 100% rename from web/locale/pt/pages/tpv.json rename to locale/pt/pages/tpv.json diff --git a/web/locale/pt/pages/update-browser.json b/locale/pt/pages/update-browser.json similarity index 100% rename from web/locale/pt/pages/update-browser.json rename to locale/pt/pages/update-browser.json diff --git a/web/locale/pt/pages/version-menu.json b/locale/pt/pages/version-menu.json similarity index 100% rename from web/locale/pt/pages/version-menu.json rename to locale/pt/pages/version-menu.json diff --git a/web/locale/pt/rest/query.json b/locale/pt/rest/query.json similarity index 100% rename from web/locale/pt/rest/query.json rename to locale/pt/rest/query.json diff --git a/web/pages/main/analytics.php b/pages/main/analytics.php similarity index 100% rename from web/pages/main/analytics.php rename to pages/main/analytics.php diff --git a/pages/main/head.php b/pages/main/head.php new file mode 100755 index 00000000..f1001f31 --- /dev/null +++ b/pages/main/head.php @@ -0,0 +1,19 @@ +'."\n\t\t"; + +if ($result = $db->query ('SELECT name, content FROM metatag')) +{ + while ($row = $result->fetch_assoc ()) + echo ''."\n\t\t"; + + $result->free (); +} + +$this->includeJs ('js/vn/vn.js'); +$this->includeJs ('js/vn/locale.js'); +$this->includeJs ('pages/main/main.js'); + +?> diff --git a/web/pages/main/html.php b/pages/main/html.php similarity index 90% rename from web/pages/main/html.php rename to pages/main/html.php index 59bcd6c1..55520cfb 100755 --- a/web/pages/main/html.php +++ b/pages/main/html.php @@ -6,7 +6,7 @@ - + Verdnatura diff --git a/web/pages/main/main.js b/pages/main/main.js similarity index 100% rename from web/pages/main/main.js rename to pages/main/main.js diff --git a/web/pages/main/style.css b/pages/main/style.css old mode 100644 new mode 100755 similarity index 53% rename from web/pages/main/style.css rename to pages/main/style.css index c0fa2228..75100497 --- a/web/pages/main/style.css +++ b/pages/main/style.css @@ -1,14 +1,7 @@ -@font-face -{ - font-family: 'Roboto'; - src: url('roboto.ttf') format('truetype'); -} - body { position: absolute; - margin: 0; height: 100%; width: 100%; z-index: -2; diff --git a/web/pages/tpv/html.php b/pages/tpv/html.php similarity index 75% rename from web/pages/tpv/html.php rename to pages/tpv/html.php index 39c40ef4..8af3205e 100755 --- a/web/pages/tpv/html.php +++ b/pages/tpv/html.php @@ -4,13 +4,13 @@ - + Verdnatura
- Verdnatura + Verdnatura

diff --git a/pages/tpv/soap-request.xml b/pages/tpv/soap-request.xml new file mode 100644 index 00000000..25d594db --- /dev/null +++ b/pages/tpv/soap-request.xml @@ -0,0 +1,20 @@ + + + 21/10/2014 + 17:56 + 1 + D + 724 + 1 + 978 + 000000007216 + 329744999 + 001 + 0000 + + 0 + 1 + 563451 + + b97d1aba50aac5efc0915f59a70e24fc94cb3ffe + diff --git a/web/tpv/soap-test.php b/pages/tpv/soap-test.php similarity index 100% rename from web/tpv/soap-test.php rename to pages/tpv/soap-test.php diff --git a/web/pages/tpv/style.css b/pages/tpv/style.css old mode 100644 new mode 100755 similarity index 86% rename from web/pages/tpv/style.css rename to pages/tpv/style.css index b317b9d7..b43a1ce8 --- a/web/pages/tpv/style.css +++ b/pages/tpv/style.css @@ -1,6 +1,6 @@ * { - font-family: 'Open Sans'; + font-family: 'Roboto'; font-size: 10pt; } div diff --git a/web/pages/update-browser/html.php b/pages/update-browser/html.php similarity index 85% rename from web/pages/update-browser/html.php rename to pages/update-browser/html.php index 7f6fcb14..508697f5 100755 --- a/web/pages/update-browser/html.php +++ b/pages/update-browser/html.php @@ -4,7 +4,7 @@ - + Verdnatura diff --git a/web/pages/update-browser/style.css b/pages/update-browser/style.css old mode 100644 new mode 100755 similarity index 89% rename from web/pages/update-browser/style.css rename to pages/update-browser/style.css index c2fcdc9c..8fff05e8 --- a/web/pages/update-browser/style.css +++ b/pages/update-browser/style.css @@ -1,6 +1,6 @@ * { - font-family: 'Open Sans'; + font-family: 'Roboto'; } img { diff --git a/web/pages/version-menu/html.php b/pages/version-menu/html.php similarity index 87% rename from web/pages/version-menu/html.php rename to pages/version-menu/html.php index d63868d2..1786a030 100755 --- a/web/pages/version-menu/html.php +++ b/pages/version-menu/html.php @@ -4,7 +4,7 @@ - + Verdnatura @@ -17,7 +17,6 @@

-

@@ -26,7 +25,7 @@

- +

diff --git a/web/pages/version-menu/new-web.svg b/pages/version-menu/new-web.svg similarity index 100% rename from web/pages/version-menu/new-web.svg rename to pages/version-menu/new-web.svg diff --git a/web/pages/version-menu/old-web.svg b/pages/version-menu/old-web.svg similarity index 100% rename from web/pages/version-menu/old-web.svg rename to pages/version-menu/old-web.svg diff --git a/web/pages/version-menu/style.css b/pages/version-menu/style.css old mode 100644 new mode 100755 similarity index 97% rename from web/pages/version-menu/style.css rename to pages/version-menu/style.css index 6410c894..1d4bf26c --- a/web/pages/version-menu/style.css +++ b/pages/version-menu/style.css @@ -41,7 +41,7 @@ * { - font-family: 'Open Sans'; + font-family: 'Roboto'; } body { diff --git a/php-test b/php-test index 4900d9db..267e94bd 100755 --- a/php-test +++ b/php-test @@ -1,3 +1,3 @@ #!/bin/bash -php -d auto_prepend_file=configure.php "$@" +php5 -d auto_prepend_file=configure.php "$@" diff --git a/web/reports/delivery-note/delivery-note.js b/reports/delivery-note/delivery-note.js similarity index 100% rename from web/reports/delivery-note/delivery-note.js rename to reports/delivery-note/delivery-note.js diff --git a/web/reports/delivery-note/style.css b/reports/delivery-note/style.css similarity index 100% rename from web/reports/delivery-note/style.css rename to reports/delivery-note/style.css diff --git a/web/reports/delivery-note/ui.xml b/reports/delivery-note/ui.xml similarity index 100% rename from web/reports/delivery-note/ui.xml rename to reports/delivery-note/ui.xml diff --git a/web/reports/items-report/items-report.js b/reports/items-report/items-report.js similarity index 100% rename from web/reports/items-report/items-report.js rename to reports/items-report/items-report.js diff --git a/web/reports/items-report/style.css b/reports/items-report/style.css similarity index 100% rename from web/reports/items-report/style.css rename to reports/items-report/style.css diff --git a/web/reports/items-report/ui.xml b/reports/items-report/ui.xml similarity index 100% rename from web/reports/items-report/ui.xml rename to reports/items-report/ui.xml diff --git a/web/reports/shelves-report/shelves-report.js b/reports/shelves-report/shelves-report.js similarity index 100% rename from web/reports/shelves-report/shelves-report.js rename to reports/shelves-report/shelves-report.js diff --git a/web/reports/shelves-report/style.css b/reports/shelves-report/style.css similarity index 100% rename from web/reports/shelves-report/style.css rename to reports/shelves-report/style.css diff --git a/web/reports/shelves-report/ui.xml b/reports/shelves-report/ui.xml similarity index 100% rename from web/reports/shelves-report/ui.xml rename to reports/shelves-report/ui.xml diff --git a/rest.php b/rest.php new file mode 100755 index 00000000..8b611131 --- /dev/null +++ b/rest.php @@ -0,0 +1,9 @@ +run (); + +?> diff --git a/web/forms/cms/contact/IndieFlower.ttf b/rest/core/IndieFlower.ttf similarity index 100% rename from web/forms/cms/contact/IndieFlower.ttf rename to rest/core/IndieFlower.ttf diff --git a/rest/core/captcha.php b/rest/core/captcha.php new file mode 100755 index 00000000..565de556 --- /dev/null +++ b/rest/core/captcha.php @@ -0,0 +1,49 @@ + 130 + ,'height' => 45 + ,'output' => 'png' + ,'imageOptions' => + [ + 'font_size' => 20 + ,'font_path' => __DIR__ + ,'font_file' => 'IndieFlower.ttf' + ,'text_color' => '#559955' + ,'lines_color' => '#559955' + ,'background_color' => '#DDDDDD' + ,'antialias' => true + ] + ]; + + $captcha = Text_CAPTCHA::factory ('Image'); + $retval = $captcha->init ($options); + + if (PEAR::isError ($retval)) + throw new Exception ('Error initializing CAPTCHA: %s!', + $retval->getMessage()); + + $png = $captcha->getCAPTCHA (); + + if (PEAR::isError ($png)) + throw new Exception ('Error generating CAPTCHA: %s!', + $png->getMessage ()); + + // Get secret passphrase + $_SESSION['captcha'] = $captcha->getPhrase (); + + header ('Content-Type: image/png'); + echo $png; + } +} + +?> diff --git a/rest/core/log.php b/rest/core/log.php new file mode 100755 index 00000000..2d5e45f6 --- /dev/null +++ b/rest/core/log.php @@ -0,0 +1,34 @@ +login (); + } + catch (Exception $e) {} + + $params = [ + 'file' + ,'line' + ,'message' + ,'stack' + ]; + + if (!$this->checkParams ($_REQUEST, $params)) + return FALSE; + + error_log (sprintf ('Browser: %s(%d): %s. Stack: %s' + ,$_REQUEST['file'] + ,$_REQUEST['line'] + ,$_REQUEST['message'] + ,$_REQUEST['stack'] + )); + return TRUE; + } +} + +?> diff --git a/rest/core/login.php b/rest/core/login.php new file mode 100755 index 00000000..4fb9e44c --- /dev/null +++ b/rest/core/login.php @@ -0,0 +1,14 @@ +login (); + return TRUE; + } +} + +?> diff --git a/rest/core/logout.php b/rest/core/logout.php new file mode 100755 index 00000000..707123f9 --- /dev/null +++ b/rest/core/logout.php @@ -0,0 +1,15 @@ +login (); + $this->logout (); + return TRUE; + } +} + +?> diff --git a/web/rest/query.php b/rest/core/query.php similarity index 81% rename from web/rest/query.php rename to rest/core/query.php index 243088d7..71267576 100755 --- a/web/rest/query.php +++ b/rest/core/query.php @@ -1,23 +1,25 @@ login (); + + if (empty ($_REQUEST['sql'])) + throw new Lib\Exception (s('EmptyQuery'), 'emptyQuery'); $results = []; - $conn = $this->conn; try { - $conn->multiQuery ($_REQUEST['sql']); + $db->multiQuery ($_REQUEST['sql']); do { - $result = $conn->storeResult (); + $result = $db->storeResult (); if ($result !== FALSE) { @@ -112,12 +114,12 @@ class RestMod extends Rest\Module else $results[] = TRUE; } - while ($conn->moreResults () && $conn->nextResult ()); + while ($db->moreResults () && $db->nextResult ()); // Checks for warnings - if ($conn->checkWarnings () - && ($result = $conn->query ('SHOW WARNINGS'))) + if ($db->checkWarnings () + && ($result = $db->query ('SHOW WARNINGS'))) { $sql = 'SELECT description, @warn code '. 'FROM sql_message WHERE code = @warn'; @@ -125,18 +127,18 @@ class RestMod extends Rest\Module while ($row = $result->fetch_assoc ()) { if ($row['Code'] == 1265 - && ($warning = $conn->getRow ($sql))) - Rest\Service::addWarning ('User', $warning['code'], $warning['description']); + && ($warning = $db->getRow ($sql))) + $this->app->addWarning ($warning['description'], $warning['code']); else - trigger_error ("Db\\Conn: ${row['Code']}: ${row['Message']}", E_USER_WARNING); + trigger_error ("${row['Code']}: ${row['Message']}", E_USER_WARNING); } } // Checks for errors - $conn->checkError (); + $db->checkError (); } - catch (Db\Exception $e) + catch (Vn\Db\Exception $e) { $row = NULL; $code = $e->getCode (); @@ -148,7 +150,7 @@ class RestMod extends Rest\Module { $sql = 'SELECT description, #code code '. 'FROM sql_message WHERE code = #code'; - $row = $conn->getRow ($sql, ['code' => $message]); + $row = $db->getRow ($sql, ['code' => $message]); break; } case 1305: // ER_SP_DOES_NOT_EXIST @@ -158,13 +160,13 @@ class RestMod extends Rest\Module $sql = 'SELECT description, @err code '. 'FROM sql_message WHERE code = @err'; - $row = $conn->getRow ($sql); + $row = $db->getRow ($sql); break; } } if ($row) - throw new Rest\Exception ('User', $row['code'], $row['description']); + throw new Lib\Exception ($row['description'], $row['code']); else throw $e; } diff --git a/rest/dms/add.php b/rest/dms/add.php new file mode 100644 index 00000000..aaade4fc --- /dev/null +++ b/rest/dms/add.php @@ -0,0 +1,117 @@ +login (); + $db = $this->getSysConn (); + + $description = empty ($_REQUEST['description']) ? + NULL : $_REQUEST['description']; + + $baseDir = _DATA_DIR .'/'. $this->app->getName (); + $docsDir = "$baseDir/dms"; + $tempDir = "$baseDir/.dms"; + + $digXDir = 3; + $zerosDir = ''; + + for ($i = 0; $i < $digXDir; $i++) + $zerosDir .= '0'; + + // Checks document restrictions + + if (empty ($_FILES['doc']['name'])) + throw new Lib\UserException ('File not choosed'); + + $maxSize = $db->getValue ('SELECT max_size FROM dms_config'); + + if ($_FILES['doc']['size'] > $maxSize * 1048576) + throw new Lib\UserException (sprintf ('File size exceeds size: %d MB', $maxSize))); + + try { + // Registers the document in the database + + $db->query ('START TRANSACTION'); + + $db->query ('INSERT INTO dms_document SET description = #', [$description]); + $docId = (string) $db->getValue ('SELECT LAST_INSERT_ID()'); + + $len = strlen ($docId); + $neededLevels = ceil ($len / $digXDir) - 1; + + $dirLevels = $db->getValue ( + 'SELECT dir_levels FROM dms_config LOCK IN SHARE MODE'); + + if ($dirLevels > $neededLevels) + $neededLevels = $dirLevels; + + // Reorganizes the file repository if necessary + + if ($dirLevels < $neededLevels) + $dirLevels = $db->getValue ( + 'SELECT dir_levels FROM dms_config FOR UPDATE'); + + if ($dirLevels < $neededLevels) + { + if (is_dir ($docsDir)) + { + $dif = ($neededLevels - $dirLevels) - 1; + $newDir = $docsDir; + + for ($i = 0; $i < $dif; $i++) + $newDir .= "/$zerosDir"; + + $success = rename ($docsDir, $tempDir) + && mkdir ($newDir, 0770, TRUE) + && rename ($tempDir, "$newDir/$zerosDir"); + + if (!$success) + throw new Exception ('Error while reorganizing directory tree'); + } + + $curLevels = $db->query ('UPDATE dms_config SET dir_levels = #', + [$neededLevels]); + } + + // Saves the document to the repository + + $padLen = ($neededLevels + 1) * $digXDir; + $paddedId = str_pad ($docId, $padLen, '0', STR_PAD_LEFT); + + $saveDir = $docsDir; + + for ($i = 0; $i < $neededLevels; $i++) + $saveDir .= '/'. substr ($paddedId, $i * $digXDir, $digXDir); + + if (!file_exists ($saveDir)) + mkdir ($saveDir, 0770, TRUE); + + $savePath = "$saveDir/". substr ($paddedId, -$digXDir); + + move_uploaded_file ($_FILES['doc']['tmp_name'], $savePath); + + $db->query ('COMMIT'); + + return $docId; + } + catch (Exception $e) + { + $db->query ('ROLLBACK'); + throw $e; + } + } +} + +?> diff --git a/rest/dms/invoice.php b/rest/dms/invoice.php new file mode 100644 index 00000000..7c4e1123 --- /dev/null +++ b/rest/dms/invoice.php @@ -0,0 +1,25 @@ +login (); + + if (empty ($_REQUEST['invoice'])) + throw new Exception (s('Invoice id not sent')); + + $pdfPath = $db->getValueFromFile (__DIR__ .'/invoice', + ['invoice' => (int) $_GET['invoice']]); + + if (!$pdfPath) + throw new Exception (s('Invoice id not found')); + + Vn\Web\printFile ($pdfPath); + } +} + +?> diff --git a/web/forms/ecomerce/invoices/get-invoice-path.sql b/rest/dms/invoice.sql similarity index 75% rename from web/forms/ecomerce/invoices/get-invoice-path.sql rename to rest/dms/invoice.sql index 1a64cc0e..71e43303 100644 --- a/web/forms/ecomerce/invoices/get-invoice-path.sql +++ b/rest/dms/invoice.sql @@ -2,4 +2,4 @@ SELECT CONCAT_WS('/', c.pdfs_dir, invoice_get_path (#invoice)) FROM config c JOIN invoice_view i - WHERE i.invoice_id = #invoice; + WHERE i.invoice_id = #invoice diff --git a/rest/image/image-request.php b/rest/image/image-request.php new file mode 100755 index 00000000..2cd261ab --- /dev/null +++ b/rest/image/image-request.php @@ -0,0 +1,59 @@ +dataDir = _DATA_DIR .'/'. $app->getName () .'/image'; + } + + /** + * Loads information for specified schema. + * + * @param string $schema The schema name + **/ + function loadInfo ($schema) + { + $db = $this->getSysConn (); + + $info = $conn->getRow ( + 'SELECT id, max_width, max_height, `schema`, `table`, `column` + FROM image_schema WHERE name = #schema' + ,['schema' => $schema] + ); + + if (!$info) + return NULL; + + $res = $conn->query ( + 'SELECT width, height, crop + FROM image_schema_size WHERE image_schema_id = #id' + ,['id' => $info['id']] + ); + + $info['sizes'] = []; + + while ($r = $res->fetch_assoc ()) + { + $size = "{$r['width']}x{$r['height']}"; + $info['sizes'][$size] = [ + 'width' => $r['width'], + 'height' => $r['height'], + 'crop' => $r['crop'] + ]; + } + + return $info; + } +} + +?> diff --git a/rest/image/image.php b/rest/image/image.php new file mode 100755 index 00000000..474a2684 --- /dev/null +++ b/rest/image/image.php @@ -0,0 +1,147 @@ + $maxHeight || $width > $maxWidth) + { + $srcX = 0; + $srcY = 0; + $srcWidth = $width; + $srcHeight = $height; + $dstWidth = $width; + $dstHeight = $height; + + if (!$crop) // Resize + { + $ratio = NULL; + + if ($dstWidth > $maxWidth) + { + $ratio = $dstWidth / $maxWidth; + $dstWidth = $maxWidth; + $dstHeight = (int) ($dstHeight / $ratio); + } + + if ($dstHeight > $maxHeight) + { + $ratio = $dstHeight / $maxHeight; + $dstHeight = $maxHeight; + $dstWidth = (int) ($dstWidth / $ratio); + } + } + else // Cut & resize + { + if ($width > $maxWidth) + $dstWidth = $maxWidth; + if ($height > $maxWidth) + $dstHeight = $maxHeight; + + if ($width <= $maxWidth) + { + if ($height > $srcHeight) + $srcHeight = $maxHeight; + } + elseif ($height <= $maxHeight) + { + if ($width > $maxWidth) + $srcWidth = $maxWidth; + } + else + { + $srcWidth = (int) ($maxWidth * ($height / $maxHeight)); + $srcHeight = (int) ($maxHeight * ($width / $maxWidth)); + + if ($srcWidth <= $width) + $srcHeight = $height; + else + $srcWidth = $width; + } + + if ($width !== $srcWidth) + $srcX = (int) (($width / 2) - ($srcWidth / 2)); + + if ($height !== $srcHeight) + $srcY = (int) (($height / 2) - ($srcHeight / 2)); + } + + $resizedImage = imagecreatetruecolor ($dstWidth, $dstHeight); + imagealphablending ($resizedImage, FALSE); + imagesavealpha ($resizedImage, TRUE); + imagecopyresampled ($resizedImage, $image, + 0, 0, $srcX, $srcY, $dstWidth, $dstHeight, $srcWidth, $srcHeight); + $saved = imagepng ($resizedImage, $dstFile); + imagedestroy ($resizedImage); + } + elseif (isset ($symbolicSrc)) + { + $saved = symlink ($symbolicSrc, $dstFile); + } + else + { + imagesavealpha ($image, TRUE); + $saved = imagepng ($image, $dstFile); + } + + if (!$saved) + throw new Exception (sprintf (s('File save error: %s'), $dstFile), 'saveError', )); + } +} + +?> diff --git a/rest/image/resize.php b/rest/image/resize.php new file mode 100644 index 00000000..826828a2 --- /dev/null +++ b/rest/image/resize.php @@ -0,0 +1,72 @@ +checkParams ($options, $params) + $this->usage (); + + $srcDir = $options['src_dir']; + $dstDir = $options['dst_dir']; + $maxHeight = $options['max_height']; + $maxWidth = $options['max_Width']; + $rewrite = isset ($options['rewrite']); + $crop = isset ($options['crop']); + $symbolic = isset ($options['symbolic']); + + set_time_limit (0); + + $count = 0; + $dir = opendir ($srcDir); + + if ($dir) + while ($fileName = readdir ($dir)) + if (!in_array ($fileName, ['.', '..'])) + { + $srcFile = "$srcDir/$fileName"; + $dstFile = "$dstDir/". substr ($fileName, 0, -4).'.png'; + + if (!file_exists ($dstFile) || $rewrite) + try + { + $symbolicSrc = ($symbolic) ? $srcFile : NULL; + + $image = Image::create ($srcFile); + Image::resizeSave ($image, $dstFile, $maxHeight, $maxWidth, $crop, $symbolicSrc); + imagedestroy ($image); + $count++; + } + catch (\Exception $e) {} + } + + return $count; + } +} + +?> diff --git a/rest/image/sync.php b/rest/image/sync.php new file mode 100644 index 00000000..42239985 --- /dev/null +++ b/rest/image/sync.php @@ -0,0 +1,124 @@ +getSysConn () + + set_time_limit (0); + $this->$trashSubdir = date ('YmdHis'); + + $checkCount = 0; + $query = 'SELECT DISTINCT `%3$s` FROM `%1$s`.`%2$s` + WHERE `%3$s` IS NOT NULL AND `%3$s` != \'\''; + + $dir = opendir ("{$this->dataDir}"); + + if ($dir) + while ($schema = readdir ($dir)) + if (!in_array ($schema, ['.', '..'])) + { + $info = $this->loadInfo ($schema); + $schemaPath = "{$this->dataDir}/$schema"; + + // Deletes unreferenced schemas. + + if (!isset ($info)) + { + $this->moveTrash ($schema); + continue; + } + + // Deletes unreferenced sizes. + + $schemaDir = opendir ($schemaPath); + + if ($schemaDir) + while ($size = readdir ($schemaDir)) + if (!in_array ($size, ['.', '..', 'full']) + && !isset ($info['sizes'][$size])) + $this->moveTrash ("$schema/$size"); + + // Gets a list of referenced images from the database. + + $result = $db->query (sprintf ($query + ,$info['schema'] + ,$info['table'] + ,$info['column'] + )); + + if (!$result) + continue; + + $map = []; + + while ($row = $result->fetch_row ()) + { + $map[$row[0]] = TRUE; + $checkCount++; + } + + $result->free (); + + // Deletes unreferenced images. + + $this->cleanImages ($schema, 'full', $map); + + foreach ($info['sizes'] as $size => $i) + $this->cleanImages ($schema, $size, $map); + } + + return TRUE; + } + + function cleanImages ($schema, $size, &$map) + { + $sizePath = "{$this->dataDir}/$schema/$size"; + + if (!is_dir ($sizePath)) + return; + + $iter = new DirectoryIterator ($sizePath); + + for (; $iter->valid (); $iter->next ()) + if (!$iter->isDir () && strripos ($iter->getFilename (), '.png', -4) !== FALSE) + { + $name = substr ($iter->getFilename (), 0, -4); + + if (!isset ($map[$name])) + $this->moveTrash ("$schema/$size/". $iter->getFilename ()); + } + } + + /** + * Moves a data directory to the trash. + * + * @param string $file The file to move to the trash + **/ + function moveTrash ($file) + { + $trashBasedir = "{$this->dataDir}/.trash/". $this->$trashSubdir; + $trashdir = "$trashBasedir/". dirname ($file); + + if (!is_dir ($trashdir)) + mkdir ($trashdir, 0775, TRUE); + + rename ( + "{$this->dataDir}/$file", + "$trashBasedir/$file" + ); + } +} + +?> diff --git a/rest/image/thumb.php b/rest/image/thumb.php new file mode 100644 index 00000000..215a3a08 --- /dev/null +++ b/rest/image/thumb.php @@ -0,0 +1,98 @@ +getSysConn (); + + // Gets parameters from URI. + + $uriSplit = explode ('/', $_SERVER['REQUEST_URI']); + $uriSplit = array_slice ($uriSplit, count ($uriSplit) - 3, 3); + + if (count ($uriSplit) < 3) + throw new Exception ('Bad request'); + + $schema = $uriSplit[0]; + $orgFile = $uriSplit[2]; + $file = $orgFile; + + if (strrpos ($file, '.') === FALSE) + $file .= '.png'; + + $size = explode ('x', $uriSplit[1]); + + if (count ($size) < 2) + throw new Exception ('Bad request'); + + $width = (int) $size[0]; + $height = (int) $size[1]; + + // Verifies that it is an allowed size. + + $params = [ + 'schema' => $schema + ,'width' => $width + ,'height' => $height + ]; + + $row = $db->getValue ( + 'SELECT crop + FROM image_schema s + JOIN image_schema_size z ON z.image_schema_id = s.id + WHERE s.name = #schema + AND z.width = #width + AND z.height = #height' + ,$params + ); + + if (!isset ($row)) + throw new Exception ('Size not allowed'); + + // Creates the thumb. + + $baseDir = "{$this->dataDir}/$schema"; + $srcFile = "$baseDir/full/$file"; + $dstFile = "$baseDir/{$width}x{$height}/$file"; + $symbolicSrc = "../full/$file"; + + if (!file_exists ($srcFile)) + throw new Exception ('Source not exists'); + if (file_exists ($dstFile)) + throw new Exception ('Destination already exists'); + + $image = Image::create ($srcFile); + Image::resizeSave ($image, $dstFile, $height, $width, $row, $symbolicSrc); + imagedestroy ($image); + + // Sends the thumb to the client + + $useXsendfile = $db->getValue ('SELECT use_xsendfile FROM image_config'); + + if ($useXsendfile) + { + header ("X-Sendfile: $dstFile"); + header ("Content-Type: image/png"); + } + else + header ("Location: {$_SERVER['REQUEST_URI']}"); + } +} + +?> diff --git a/rest/image/upload.php b/rest/image/upload.php new file mode 100755 index 00000000..e102770b --- /dev/null +++ b/rest/image/upload.php @@ -0,0 +1,149 @@ +login (); + + // Checks schema. + + $regexp = '/[^a-z0-9_]/'; + + if (empty ($_REQUEST['schema']) || preg_match ($regexp, $_REQUEST['schema']) !== 0) + throw new Lib\UserException (s('BadSchemaName'), 'badSchemaName'); + + $schema = $_REQUEST['schema']; + $info = $this->loadInfo ($schema); + + if (!$info) + throw new Lib\UserException (s('SchemaNotExists'), 'schemaNotExists'); + + // Checks file name and identifier. + + $query = sprintf ( + 'SHOW INDEX FROM `%1$s`.`%2$s` WHERE Key_name = \'PRIMARY\'' + ,$info['schema'] + ,$info['table'] + ); + $pk = $db->getRow ($query); + + if (!empty ($_REQUEST['id']) && empty ($_REQUEST['name'])) + { + $query = sprintf ( + 'SELECT `%3$s` FROM `%1$s`.`%2$s` WHERE `%4$s` = #id' + ,$info['schema'] + ,$info['table'] + ,$info['column'] + ,$pk['Column_name'] + ); + $_REQUEST['name'] = $db->getValue ($query, + ['id' => $_REQUEST['id']]); + } + + if (empty ($_REQUEST['name']) || preg_match ($regexp, $_REQUEST['name']) !== 0) + throw new Lib\UserException (s('BadFileName'), 'badFileName'); + + // Checks permissions. + + if (!empty ($_REQUEST['id'])) + { + $filterColumn = $pk['Column_name']; + $filterValue = $_REQUEST['id']; + } + else + { + $filterColumn = $info['column']; + $filterValue = $_REQUEST['name']; + } + + $query = sprintf ( + 'UPDATE `%1$s`.`%2$s` SET `%3$s` = #name WHERE `%4$s` = #filter LIMIT 1' + ,$info['schema'] + ,$info['table'] + ,$info['column'] + ,$filterColumn + ); + $params = [ + 'name' => $_REQUEST['name'], + 'filter' => $filterValue + ]; + + if (!$db->query ($query, $params)) + throw new Lib\UserException (s('PermissionDenied'), 'permissionDenied'); + + // Checks for file errors. + + if (empty ($_FILES['image']['name'])) + throw new Lib\UserException (s('FileNotChoosed'), 'fileNotChoosed'); + + if ($_FILES['image']['error'] != 0) + { + switch ($_FILES['image']['error']) + { + case UPLOAD_ERR_INI_SIZE: + $message = 'ErrIniSize'; + break; + case UPLOAD_ERR_FORM_SIZE: + $message = 'ErrFormSize'; + break; + case UPLOAD_ERR_PARTIAL: + $message = 'ErrPartial'; + break; + case UPLOAD_ERR_NO_FILE: + $message = 'ErrNoFile'; + break; + case UPLOAD_ERR_NO_TMP_DIR: + $message = 'ErrNoTmpDir'; + break; + case UPLOAD_ERR_CANT_WRITE: + $message = 'ErrCantWrite'; + break; + case UPLOAD_ERR_EXTENSION: + $message = 'ErrExtension'; + break; + default: + $message = 'ErrDefault'; + break; + } + + throw new Lib\Exception (s($message), 'uploadError'); + } + + $maxSize = $db->getValue ('SELECT max_size FROM image_config'); + + if ($_FILES['image']['size'] > $maxSize * 1048576) + throw new Lib\UserException (sprintf (s('FileSizeError'), $maxSize), 'fileSizeError'); + + // Resizes and saves the image. + + $fileName = "{$_REQUEST['name']}.png"; + $schemaPath = "{$this->dataDir}/$schema"; + $fullFile = "$schemaPath/full/$fileName"; + $symbolicSrc = "../full/$fileName"; + + $image = Image::create ($_FILES['image']['tmp_name']); + + Image::resizeSave ($image, $fullFile, $info['max_height'], $info['max_width']); + + foreach ($info['sizes'] as $size => $i) + { + $dstFile = "$schemaPath/$size/$fileName"; + Image::resizeSave ($image, $dstFile, $i['height'], $i['width'], $i['crop'], $symbolicSrc); + } + + imagedestroy ($image); + unlink ($_FILES['image']['tmp_name']); + return TRUE; + } +} + +?> diff --git a/rest/misc/contact.php b/rest/misc/contact.php new file mode 100755 index 00000000..a49b6d47 --- /dev/null +++ b/rest/misc/contact.php @@ -0,0 +1,80 @@ +checkParams ($_REQUEST, $params) + || !isset ($_SESSION['captcha'])) + throw new Lib\UserException (s('Missing parameters'), 'missingParams'); + + // Checks the antispam code + + $lastCaptcha = $_SESSION['captcha']; + unset ($_SESSION['captcha']); + + if ($_REQUEST['captcha'] !== $lastCaptcha) + throw new Lib\UserException (s('Wrong captcha'), 'wrongCaptcha'); + + // Sends the mail + + $db = $this->getSysConn (); + + // TODO: Change form fields + //$db->queryFromFile (__DIR__.'/contact', $_REQUEST); + //$customerId = $db->getValue ('SELECT @id'); + + $conf = $db->getRow ( + 'SELECT m.host, m.port, m.secure, m.sender, m.user, m.password, c.recipient + FROM mail_config m JOIN contact c' + ); + + $mail = new PHPMailer (); + $mail->isSMTP (); + $mail->Host = $conf['host']; + + if (!empty ($conf['user'])) + { + $mail->SMTPAuth = TRUE; + $mail->Username = $conf['user']; + $mail->Password = base64_decode ($conf['password']); + } + else + $mail->SMTPAuth = FALSE; + + if ($conf['secure']) + { + $mail->SMTPSecure = 'ssl'; + $mail->Port = 465; + } + + $mail->setFrom ($conf['sender'], 'Web'); + $mail->addAddress ($conf['recipient']); + $mail->isHTML (TRUE); + $mail->Subject = s('New customer request'); + $mail->Body = '

'. print_r ($_REQUEST, TRUE) .'
'; + + if (!$mail->send ()) + throw new Exception ($mail->ErrorInfo); + + return TRUE; + } +} + +?> diff --git a/rest/misc/contact.sql b/rest/misc/contact.sql new file mode 100644 index 00000000..0f927d2f --- /dev/null +++ b/rest/misc/contact.sql @@ -0,0 +1,26 @@ + +INSERT INTO vn2008.Clientes SET + cliente = #tradename + ,razonsocial = #business-name + ,`if` = #nif + ,telefono = #phone + ,movil = #mobile + ,`e-mail` = #email + ,contacto = #contact + ,re = #es + ,domicilio = #address + ,poblacion = #city + ,codpostal = #pc + ,id_pais = #country + ,province_id = #province + ,chanel_id = NULL -- How did he find us? + ,activo = FALSE; + +SET @id := LAST_INSERT_ID(); + +INSERT INTO account.user SET + id = @id, + name = #user, + password = #password, + active = FALSE; + diff --git a/web/rest/visits-sync.php b/rest/misc/visits-sync.php similarity index 62% rename from web/rest/visits-sync.php rename to rest/misc/visits-sync.php index 35fcdd0b..12dfbf33 100644 --- a/web/rest/visits-sync.php +++ b/rest/misc/visits-sync.php @@ -1,17 +1,19 @@ conn; - $result = $conn->query ("SELECT id, agent FROM visit_agent " - ."WHERE version = '0.0' OR platform = 'unknown' OR cookies IS NULL ORDER BY id DESC"); + { + $this->login (); - $stmt = $conn->prepare ( - 'UPDATE visit_agent SET platform = ?, browser = ?, version = ?, javascript = ?, cookies = ? WHERE id = ?'); + $db = $this->getSysConn (); + $result = $db->query ("SELECT id, agent FROM visit_agent + WHERE version = '0.0' OR platform = 'unknown' OR cookies IS NULL ORDER BY id DESC"); + + $stmt = $db->prepare ('UPDATE visit_agent + SET platform = ?, browser = ?, version = ?, javascript = ?, cookies = ? WHERE id = ?'); if ($result && $stmt) { @@ -49,7 +51,7 @@ class RestMod extends Rest\Module $stmt->close (); if ($result) $result->free (); - + return $result; } } diff --git a/rest/tpv/confirm-mail.php b/rest/tpv/confirm-mail.php new file mode 100644 index 00000000..8d4bd1f4 --- /dev/null +++ b/rest/tpv/confirm-mail.php @@ -0,0 +1,110 @@ +getSysConn (); + + $imap = NULL; + $imapConf = $db->getRow ( + 'SELECT host, user, pass, clean_period, success_folder, error_folder + FROM tpv_imap_config' + ); + + $mailbox = sprintf ('{%s/imap/ssl/novalidate-cert}INBOX', + $imapConf['host']); + + $imap = imap_open ($mailbox + ,$imapConf['user'] + ,base64_decode ($imapConf['pass']) + ); + + if (!$imap) + throw new Exception (imap_last_error ()); + + // Fetchs and confirms new transaction mails + + $inbox = imap_search ($imap, 'ALL'); + + if ($inbox) + foreach ($inbox as $msg) + { + // Decodes the mail body + + $params = []; + $body = imap_fetchbody ($imap, $msg, '1'); + $strings = explode (';', $body); + + foreach ($strings as $string) + { + $x = explode (':', $string); + $params[trim ($x[0])] = trim ($x[1]); + } + + // Confirms the transaction + + try { + $success = $this->confirm ($params, $db); + } + catch (\Exception $e) + { + trigger_error ($e->getMessage (), E_USER_WARNING); + } + + // Moves the processed mail to another folder + + if ($success) + $folder = $imapConf['success_folder']; + else + $folder = $imapConf['error_folder']; + + $folder = sprintf ('INBOX.%s', $folder); + + if (!imap_mail_move ($imap, $msg, $folder)) + trigger_error (imap_last_error (), E_USER_WARNING); + } + + imap_expunge ($imap); + + // Cleans the old mails + + $deleted = NULL; + + if (rand (1, 20) == 1) + { + $folders = array ( + $imapConf['success_folder'] + ,$imapConf['error_folder'] + ); + + $deleted = 0; + $date = new \DateTime (NULL); + $date->sub (new \DateInterval ($imapConf['clean_period'])); + $filter = sprintf ('BEFORE "%s"', $date->format('D, j M Y')); + + foreach ($folders as $folder) + if (imap_reopen ($imap, $mailbox.'.'.$folder)) + if ($messages = imap_search ($imap, $filter)) + { + foreach ($messages as $message) + imap_delete ($imap, $message); + + imap_expunge ($imap); + $deleted += count ($messages); + } + } + + return [ + 'processed' => $count, + 'deleted' => $deleted + ]; + } +} + +?> diff --git a/rest/tpv/confirm-post.php b/rest/tpv/confirm-post.php new file mode 100644 index 00000000..e124c458 --- /dev/null +++ b/rest/tpv/confirm-post.php @@ -0,0 +1,17 @@ +confirm ($_POST); + return TRUE; + } +} + +?> diff --git a/vn/tpv/soap-method.php b/rest/tpv/confirm-soap.php similarity index 73% rename from vn/tpv/soap-method.php rename to rest/tpv/confirm-soap.php index 967cac8f..a1fddd5e 100644 --- a/vn/tpv/soap-method.php +++ b/rest/tpv/confirm-soap.php @@ -1,17 +1,38 @@ addFunction ('procesaNotificacionSIS'); + $server->handle (); + } +} function procesaNotificacionSIS ($XML) { + global $tpvConfirmSoap; + + $db = $tpvConfirmSoap->getSysConn (); + $status = 'OK'; $requestString = $XML; // Processes the request try { - Tpv::init (); - $xml = new SimpleXMLElement ($requestString); $request = (array) $xml->{'Request'}; @@ -28,7 +49,7 @@ function procesaNotificacionSIS ($XML) $end = strrpos ($requestString, ''); $shaString = substr ($requestString, $start, $end - $start + 10); - $key = Tpv::$conn->getValue ( + $key = $db->getValue ( 'SELECT secret_key FROM tpv_merchant WHERE id = #' ,[$request['Ds_MerchantCode']] ); @@ -38,24 +59,13 @@ function procesaNotificacionSIS ($XML) // Confirms the transaction - Tpv::$conn->query ( - 'CALL transaction_confirm (#, #, #, #, #)', - [ - $request['Ds_Amount'] - ,$request['Ds_Order'] - ,$request['Ds_MerchantCode'] - ,$request['Ds_Currency'] - ,$request['Ds_Response'] - ] - ); + $tpvConfirmSoap->confirm ($request); } catch (Exception $e) { $status = 'KO'; } - Tpv::deinit (); - // Generates the response $responseString = file_get_contents (__DIR__ .'/soap-reply.xml'); diff --git a/vn/tpv/soap-reply.xml b/rest/tpv/soap-reply.xml similarity index 100% rename from vn/tpv/soap-reply.xml rename to rest/tpv/soap-reply.xml diff --git a/vn/tpv/soap-request.dtd b/rest/tpv/soap-request.dtd similarity index 100% rename from vn/tpv/soap-request.dtd rename to rest/tpv/soap-request.dtd diff --git a/vn/tpv/soap.wsdl b/rest/tpv/soap.wsdl similarity index 100% rename from vn/tpv/soap.wsdl rename to rest/tpv/soap.wsdl diff --git a/rest/tpv/tpv.php b/rest/tpv/tpv.php new file mode 100755 index 00000000..7018fa76 --- /dev/null +++ b/rest/tpv/tpv.php @@ -0,0 +1,38 @@ +query ( + 'CALL transaction_confirm (#, #, #, #, #, #)', + [ + $params['Ds_Amount'] + ,$params['Ds_Order'] + ,$params['Ds_MerchantCode'] + ,$params['Ds_Currency'] + ,$params['Ds_Response'] + ,$error + ] + ); + } +} + +?> diff --git a/rest/tpv/transaction.php b/rest/tpv/transaction.php new file mode 100755 index 00000000..9e832740 --- /dev/null +++ b/rest/tpv/transaction.php @@ -0,0 +1,66 @@ +login (); + + if (empty ($_REQUEST['amount'])) + throw new Exception ('Amount parameter not defined'); + + $amount = (int) $_REQUEST['amount']; + $companyId = empty ($_REQUEST['company']) ? NULL : $_REQUEST['company']; + + $db = $this->getSysConn (); + $row = $db->getRow ('CALL transaction_start_sha256 (#, #)', + [$amount, $companyId]); + + if (!isset ($row)) + throw new Exception ('Transaction error'); + + $transactionId = str_pad ($row['transaction_id'], 12, '0', STR_PAD_LEFT); + $urlOk = empty ($_REQUEST['urlOk']) ? '' : sprintf ($_REQUEST['urlOk'], $transactionId); + $urlKo = empty ($_REQUEST['urlKo']) ? '' : sprintf ($_REQUEST['urlKo'], $transactionId); + $merchantUrl = $row['merchant_url'] ? $row['merchant_url'] : ''; + + $params = [ + 'Ds_Merchant_Amount' => $amount + ,'Ds_Merchant_Order' => $transactionId + ,'Ds_Merchant_MerchantCode' => $row['merchant'] + ,'Ds_Merchant_Currency' => $row['currency'] + ,'Ds_Merchant_TransactionType' => $row['transaction_type'] + ,'Ds_Merchant_Terminal' => $row['terminal'] + ,'Ds_Merchant_MerchantURL' => $merchantUrl + ,'Ds_Merchant_UrlOK' => $urlOk + ,'Ds_Merchant_UrlKO' => $urlKo + ]; + + $encodedParams = base64_encode (json_encode ($params)); + + $key = base64_decode ($row['secret_key']); + + $bytes = [0, 0, 0, 0, 0, 0, 0, 0]; + $iv = implode (array_map ('chr', $bytes)); + $key = mcrypt_encrypt (MCRYPT_3DES, $key, $transactionId, MCRYPT_MODE_CBC, $iv); + + $signature = base64_encode (hash_hmac ('sha256', $encodedParams, $key, TRUE)); + $url = $row['url']; + + $this->json ([ + 'url' => $url + ,'params' => $encodedParams + ,'signature' => $signature + ]); + } +} + +?> diff --git a/vn/hedera/hedera.php b/vn/hedera/hedera.php index ad4d9392..1b537f79 100755 --- a/vn/hedera/hedera.php +++ b/vn/hedera/hedera.php @@ -1,7 +1,9 @@ diff --git a/vn/hedera/init.php b/vn/hedera/init.php deleted file mode 100644 index e33f2212..00000000 --- a/vn/hedera/init.php +++ /dev/null @@ -1,17 +0,0 @@ - diff --git a/vn/hedera/js.php b/vn/hedera/js.php deleted file mode 100755 index df3d5963..00000000 --- a/vn/hedera/js.php +++ /dev/null @@ -1,46 +0,0 @@ -'."\n\t\t"; - } - - static function includeLib ($libName) - { - $args = func_get_args (); - - $localeJs = 'locale/'. $_SESSION['lang'] .'/js/'. $libName .'.js'; - - if (file_exists ($localeJs)) - self::includeFile ($localeJs); - - for ($i = 1; $i < count ($args); $i++) - self::includeFile ('js/'.$libName.'/'.$args[$i].'.js'); - } - - static function includeCss ($fileName) - { - echo ''."\n\t\t"; - } - - static function isMobile () - { - if (self::$isMobile === NULL) - { - $re = '/(Android|webOS|iPhone|iPad|iPod|BlackBerry|Windows Phone)/i'; - self::$isMobile = preg_match ($re, $_SERVER['HTTP_USER_AGENT']); - } - - return self::$isMobile; - } -} - -?> diff --git a/vn/hedera/util.php b/vn/hedera/util.php deleted file mode 100755 index 8a738c1f..00000000 --- a/vn/hedera/util.php +++ /dev/null @@ -1,24 +0,0 @@ - diff --git a/vn/hedera/web.php b/vn/hedera/web.php deleted file mode 100755 index bd92b603..00000000 --- a/vn/hedera/web.php +++ /dev/null @@ -1,240 +0,0 @@ -getRow ( - 'CALL visit_register (#, #, #, #, #, #, #, #, #)', - [ - nullIf ($_COOKIE, 'hedera_visit') - ,nullIf ($browser, 'platform') - ,nullIf ($browser, 'browser') - ,nullIf ($browser, 'version') - ,nullIf ($browser, 'javascript') - ,nullIf ($browser, 'cookies') - ,isset ($agent) ? $agent : NULL - ,isset ($ip) && $ip ? $ip : NULL - ,nullIf ($_SERVER, 'HTTP_REFERER') - ] - ); - - if (isset ($row['access'])) - { - setcookie ('hedera_visit', $row['visit'], time () + 31536000); // 1 Year - $_SESSION['access'] = $row['access']; - } - else - $_SESSION['skipVisit'] = TRUE; - } - - /** - * Opens the system database connection. - **/ - static function sysInit () - { - global $conf; - - self::includeConf (); - - if (self::$sysConn) - return; - - self::$sysConn = new Conn (); - self::$sysConn->open ( - 'p:'. $conf['db']['host'] - ,$conf['db']['user'] - ,base64_decode ($conf['db']['pass']) - ,$conf['db']['schema'] - ,$conf['db']['port'] - ); - } - - static function isHttps () - { - return isset ($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on'; - } - - /** - * Obtains the version of the library. - **/ - static function getVersion () - { - return (int) filectime (__FILE__); - } - - /** - * Includes the configuration file. - **/ - static function includeConf () - { - global $conf; - - if (self::$confIncluded) - return; - - $configDir = _CONFIG_DIR .'/hedera-web'; - $customFile = "$configDir/config.my.php"; - - if (!empty ($_SERVER['SERVER_NAME']) - && preg_match ('/^[\w\-\.]+$/', $_SERVER['SERVER_NAME'])) - { - $hostSplit = explode ('.', $_SERVER['SERVER_NAME']); - $hostFile = "$configDir/config.{$hostSplit[0]}.php"; - } - - if (isset ($hostFile) && file_exists ($hostFile)) - $confFile = $hostFile; - elseif (file_exists ($customFile)) - $confFile = $customFile; - else - $confFile = "$configDir/config.php"; - - $conf = require ($confFile); - self::$confIncluded = TRUE; - } - - static function login () - { - global $conf; - - self::includeConf (); - - $wasLoged = Auth::isLogged (); - $useCookies = TRUE; - $success = TRUE; - - if (isset ($_POST['guest'])) - { - self::sysInit (); - $row = self::$sysConn->getRow ( - 'SELECT guest_user, guest_pass FROM config'); - - if ($row) - { - $_POST['user'] = $row['guest_user']; - $_POST['password'] = base64_decode ($row['guest_pass']); - $useCookies = FALSE; - } - } - - Auth::getCredentials (); - - try { - self::$conn = new Conn (); - self::$conn->open ( - $conf['db']['host'] - ,Auth::getUser () - ,Auth::getPassword () - ,$conf['db']['schema'] - ,$conf['db']['port'] - ); - self::$conn->query ('CALL user_session_start (#)', [session_id ()]); - self::$conn->query ('SET @lang = #', [\Vn\Lib\Locale::get ()]); - - Auth::login (TRUE, $useCookies); - } - catch (\Exception $e) - { - self::$conn = NULL; - Auth::login (FALSE); - } - - // Registering the user access - - if (!$wasLoged) - unset ($_SESSION['visitUser']); - - if (isset ($_SESSION['access']) - && !isset ($_SESSION['visitUser'])) - { - self::sysInit (); - - $_SESSION['visitUser'] = self::$sysConn->getValue ( - 'CALL visit_user_new (#, #, #)', - [ - $_SESSION['access'] - ,nullIf ($_SESSION, 'visitUser') - ,session_id () - ] - ); - - if (!isset ($_SESSION['visitUnknown']) && !$success) - $_SESSION['visitUnknown'] = $_SESSION['visitUser']; - } - } - - static function deinit () - { - if (self::$conn) - self::$conn->query ('CALL user_session_end ()'); - } - - static function logout () - { - $_SESSION['visitUser'] = nullIf ($_SESSION, 'visitUnknown'); - Auth::logout (); - - if (self::$conn) - { - self::$conn->query ( - 'DELETE FROM user_session_view ' - .'WHERE connection_id = CONNECTION_ID()' - ); - - self::$conn->close (); - self::$conn = NULL; - } - } -} - -?> diff --git a/vn/rest/encoding.php b/vn/rest/encoding.php deleted file mode 100755 index 938e6ba7..00000000 --- a/vn/rest/encoding.php +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/vn/rest/exception.php b/vn/rest/exception.php deleted file mode 100755 index 51bca234..00000000 --- a/vn/rest/exception.php +++ /dev/null @@ -1,30 +0,0 @@ -domain = $domain; - $this->code = $code; - } - - function getDomain () - { - return $this->domain; - } -} - -?> diff --git a/vn/rest/module.php b/vn/rest/module.php deleted file mode 100755 index 3678a753..00000000 --- a/vn/rest/module.php +++ /dev/null @@ -1,26 +0,0 @@ -conn = $conn; - } - - abstract function run (); -} - -?> diff --git a/vn/rest/rest.php b/vn/rest/rest.php deleted file mode 100755 index 3e6ffd94..00000000 --- a/vn/rest/rest.php +++ /dev/null @@ -1,10 +0,0 @@ - diff --git a/vn/rest/service.php b/vn/rest/service.php deleted file mode 100755 index a51a322d..00000000 --- a/vn/rest/service.php +++ /dev/null @@ -1,52 +0,0 @@ -data = $data; - } - - static function addWarning ($domain, $code, $message) - { - if (!isset (self::$reply->warnings)) - self::$reply->warnings = []; - - self::$reply->warnings[] = - new Message ($domain, $code, $message); - } - - static function setError ($domain, $code, $message) - { - self::$reply->data = NULL; - self::$reply->error = - new Message ($domain, $code, $message); - } - - static function sendReply () - { - header ('Content-Type: application/json; charset=UTF-8'); - echo json_encode (self::$reply); - } -} - -?> diff --git a/vn/tpv/tpv.php b/vn/tpv/tpv.php deleted file mode 100755 index 71c965e8..00000000 --- a/vn/tpv/tpv.php +++ /dev/null @@ -1,272 +0,0 @@ -open ( - $conf['db']['host'] - ,$conf['db']['user'] - ,base64_decode ($conf['db']['pass']) - ,$conf['db']['schema'] - ,$conf['db']['port'] - ); - } - - /** - * Deinitializes the class. - **/ - static function deinit () - { - self::$conn->close (); - closelog (); - } - - /** - * Gets transaction confirmations from the IMAP mailbox. - **/ - static function getFromMailbox () - { - self::init (); - - $imap = NULL; - - if (self::$conn->isOpen ()) - { - $imapConf = self::$conn->getRow ( - 'SELECT host, user, pass, clean_period, success_folder, error_folder ' - .'FROM tpv_imap_config' - ); - - if ($imapConf) - { - $mailbox = sprintf ('{%s/imap/ssl/novalidate-cert}INBOX', - $imapConf['host']); - - $imap = imap_open ($mailbox - ,$imapConf['user'] - ,base64_decode ($imapConf['pass']) - ); - } - } - - if ($imap) - { - // Fetchs and confirms new transaction mails - - $inbox = imap_search ($imap, 'ALL'); - - if ($inbox) - foreach ($inbox as $msg) - { - // Decodes the mail body - - $params = []; - $body = imap_fetchbody ($imap, $msg, '1'); - $strings = explode (';', $body); - - foreach ($strings as $string) - { - $x = explode (':', $string); - $params[trim ($x[0])] = trim ($x[1]); - } - - // Confirms the transaction - - $success = self::confirm ($params); - - // Moves the processed mail to another folder - - if ($success) - $folder = $imapConf['success_folder']; - else - $folder = $imapConf['error_folder']; - - $folder = sprintf ('INBOX.%s', $folder); - - if (!imap_mail_move ($imap, $msg, $folder)) - trigger_error (sprintf ('TPV: IMAP: Can\'t move message to %s: %s' - ,$folder - ,imap_last_error () - ), E_USER_WARNING); - } - - if ($inbox && ($count = count ($inbox)) > 0) - trigger_error (sprintf ('TPV: %d mails processed.', $count)); - - imap_expunge ($imap); - - // Cleans the old mails - - if (rand (1, 20) == 1) - { - $folders = array ( - $imapConf['success_folder'] - ,$imapConf['error_folder'] - ); - - $deleted = 0; - $date = new \DateTime (NULL); - $date->sub (new \DateInterval ($imapConf['clean_period'])); - $filter = sprintf ('BEFORE "%s"', $date->format('D, j M Y')); - - foreach ($folders as $folder) - if (imap_reopen ($imap, $mailbox.'.'.$folder)) - if ($messages = imap_search ($imap, $filter)) - { - foreach ($messages as $message) - imap_delete ($imap, $message); - - imap_expunge ($imap); - $deleted += count ($messages); - } - - trigger_error (sprintf ('TPV: Cleaner: %d mails deleted.', $deleted)); - } - - imap_close ($imap); - } - else - trigger_error (sprintf ('TPV: IMAP: %s', imap_last_error ()), E_USER_ERROR); - - self::deinit (); - } - - /** - * Gets transaction confirmation from HTTP POST. - **/ - static function getFromPost () - { - self::init (); - - if (self::$conn->isOpen ()) - self::confirm ($_POST); - - self::deinit (); - } - - /** - * Gets transaction confirmation from SOAP service. - **/ - static function getFromSoap () - { - ini_set ('soap.wsdl_cache_enabled', FALSE); - - $server = new \SoapServer (__DIR__ .'/soap.wsdl'); - $server->addFunction ('procesaNotificacionSIS'); - $server->handle (); - } - - /** - * Tryes to confirm a transaction with the given params. - **/ - static function confirm ($params) - { - if (isset ($params['Ds_Amount']) - && isset ($params['Ds_Order']) - && isset ($params['Ds_MerchantCode']) - && isset ($params['Ds_Currency']) - && isset ($params['Ds_Response'])) - { - if (isset ($params['Ds_ErrorCode'])) - $error = $params['Ds_ErrorCode']; - else - $error = NULL; - - try { - return self::$conn->query ( - 'CALL transaction_confirm (#, #, #, #, #, #)', - [ - $params['Ds_Amount'] - ,$params['Ds_Order'] - ,$params['Ds_MerchantCode'] - ,$params['Ds_Currency'] - ,$params['Ds_Response'] - ,$error - ] - ); - } - catch (\Exception $e) - { - trigger_error (sprintf ("TPV: DB: %s", $e->getMessage ()), E_USER_WARNING); - } - } - - return FALSE; - } - - static function transactionStart ($conn, $amount, $urlOk, $urlKo, $companyId, &$url, &$signature) - { - $row = $conn->getRow ('CALL transaction_start_sha256 (#, #)', - [$amount, $companyId]); - - if (!isset($row)) - throw new Exception ('Transaction error'); - - $transactionId = str_pad ($row['transaction_id'], 12, '0', STR_PAD_LEFT); - $urlOk = empty ($urlOk) ? '' : sprintf ($urlOk, $transactionId); - $urlKo = empty ($urlKo) ? '' : sprintf ($urlKo, $transactionId); - $merchantUrl = $row['merchant_url'] ? $row['merchant_url'] : ''; - - $params = [ - 'Ds_Merchant_Amount' => $amount - ,'Ds_Merchant_Order' => $transactionId - ,'Ds_Merchant_MerchantCode' => $row['merchant'] - ,'Ds_Merchant_Currency' => $row['currency'] - ,'Ds_Merchant_TransactionType' => $row['transaction_type'] - ,'Ds_Merchant_Terminal' => $row['terminal'] - ,'Ds_Merchant_MerchantURL' => $merchantUrl - ,'Ds_Merchant_UrlOK' => $urlOk - ,'Ds_Merchant_UrlKO' => $urlKo - ]; - - $encodedParams = base64_encode (json_encode ($params)); - - $key = base64_decode ($row['secret_key']); - - $bytes = array (0, 0, 0, 0, 0, 0, 0, 0); - $iv = implode (array_map ("chr", $bytes)); - $key = mcrypt_encrypt (MCRYPT_3DES, $key, $transactionId, MCRYPT_MODE_CBC, $iv); - - $signature = base64_encode (hash_hmac ('sha256', $encodedParams, $key, TRUE)); - $url = $row['url']; - - return $encodedParams; - } - - /** - * Tests the confirmation process. The corresponding record - * must exist in the `tpv_transaction` table. - **/ - static function test ($order) - { - self::init (); - - if (self::$conn->isOpen () && isset ($order)) - self::$conn->query ('CALL transaction_confirm_by_id (#)', [$order]); - - self::deinit (); - } -} - -?> diff --git a/vn/web/app.php b/vn/web/app.php new file mode 100755 index 00000000..d65ef633 --- /dev/null +++ b/vn/web/app.php @@ -0,0 +1,291 @@ +isHttps ()) + ini_set ('session.cookie_secure', TRUE); + + session_start (); + + // Setting the locale + + if (isset ($_SERVER['HTTP_ACCEPT_LANGUAGE'])) + if (!isset ($_SESSION['http_language']) + || $_SESSION['http_language'] != $_SERVER['HTTP_ACCEPT_LANGUAGE']) + { + $_SESSION['http_language'] = $_SERVER['HTTP_ACCEPT_LANGUAGE']; + $regexp = '/([a-z]{1,4})(?:-[a-z]{1,4})?\s*(?:;\s*q\s*=\s*(?:1|0\.[0-9]+))?,?/i'; + + preg_match_all ($regexp, $_SERVER['HTTP_ACCEPT_LANGUAGE'], $languages); + + foreach ($languages[1] as $lang) + if (stream_resolve_include_path ("locale/$lang")) + { + $_SESSION['lang'] = $lang; + break; + } + } + + if (!isset ($_SESSION['lang'])) + $_SESSION['lang'] = NULL; + + Locale::set ($_SESSION['lang']); + + // Registering the visit + + if (!isset ($_COOKIE['PHPSESSID']) + || isset ($_SESSION['access']) + || isset ($_SESSION['skipVisit'])) + return; + + $agent = $_SERVER['HTTP_USER_AGENT']; + $browser = get_browser ($agent, TRUE); + + if (isset ($browser['crawler']) && $browser['crawler']) + { + $_SESSION['skipVisit'] = TRUE; + return; + } + + if (isset ($_SERVER['REMOTE_ADDR'])) + $ip = ip2long ($_SERVER['REMOTE_ADDR']); + + $sysConn = $this->getSysConn (); + $row = $sysConn->getRow ( + 'CALL visit_register (#, #, #, #, #, #, #, #, #)', + [ + nullIf ($_COOKIE, 'vn_visit') + ,nullIf ($browser, 'platform') + ,nullIf ($browser, 'browser') + ,nullIf ($browser, 'version') + ,nullIf ($browser, 'javascript') + ,nullIf ($browser, 'cookies') + ,isset ($agent) ? $agent : NULL + ,isset ($ip) && $ip ? $ip : NULL + ,nullIf ($_SERVER, 'HTTP_REFERER') + ] + ); + + if (isset ($row['access'])) + { + setcookie ('vn_visit', $row['visit'], time () + 31536000); // 1 Year + $_SESSION['access'] = $row['access']; + } + else + $_SESSION['skipVisit'] = TRUE; + } + + /** + * Checks if the HTTP connection is secure. + * + * @return boolean Return %TRUE if its secure, %FALSE otherwise + **/ + function isHttps () + { + return isset ($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on'; + } + + /** + * Obtains the application version number. It is based on de last + * modification date of the main script. + **/ + function getVersion () + { + return (int) strftime ('%G%m%d%H%M%S', + filectime ($_SERVER['SCRIPT_FILENAME'])); + } + + /** + * Gets the configuration file name. + **/ + function getConfigFile () + { + if (!empty ($_SERVER['SERVER_NAME']) + && preg_match ('/^[\w\-\.]+$/', $_SERVER['SERVER_NAME'])) + { + $hostSplit = explode ('.', $_SERVER['SERVER_NAME']); + $configDir = _CONFIG_DIR .'/'. $this->name; + $hostFile = $configDir .'/config.'. $hostSplit[0] .'.php'; + } + + if (isset ($hostFile) && file_exists ($hostFile)) + return $hostFile; + else + return parent::getConfigFile (); + } + + /** + * Tries to retrieve user credentials from many sources such as POST, + * SESSION or COOKIES. If $_POST['remember'] is defined the user credentials + * are saved on the client brownser for future logins, cookies names are + * 'vn_user' for the user name and 'vn_pass' for user password, the + * password is encoded using base64_encode() function and should be decoded + * using base64_decode(). + **/ + function login () + { + if ($this->conn) + return $this->conn; + + $user = NULL; + $password = NULL; + $rememberUser = TRUE; + $rememberPass = FALSE; + $credentialsChanged = TRUE; + $wasLoged = isset ($_SESSION['user']); + + if (isset ($_POST['guest'])) + { + $sysConn = $this->getSysConn (); + $row = $sysConn->getRow ( + 'SELECT guest_user, guest_pass FROM config'); + + if ($row) + { + $user = $row['guest_user']; + $password = base64_decode ($row['guest_pass']); + $rememberUser = FALSE; + } + } + elseif (isset ($_POST['user']) && isset ($_POST['password'])) + { + $user = $_POST['user']; + $password = $_POST['password']; + + if (isset ($_POST['remember']) && $_POST['remember']) + $rememberPass = TRUE; + } + elseif (isset ($_SESSION['user'])) + { + $user = $_SESSION['user']; + $password = $_SESSION['password']; + $credentialsChanged = FALSE; + } + elseif (isset ($_COOKIE['vn_user']) && isset ($_COOKIE['vn_pass'])) + { + $user = $_COOKIE['vn_user']; + $password = base64_decode ($_COOKIE['vn_pass']); + $rememberPass = TRUE; + } + + if (!isset ($user)) + throw new SessionExpiredException (); + + try { + $db = $this->createConnection ($user, $password); + $db->query ('CALL user_session_start (#)', [session_id ()]); + $this->conn = $db; + + if ($rememberUser) + { + $cookieLife = time () + 7 * 86400; // 7 Days + setcookie ('vn_user', $user, $cookieLife); + + if ($rememberPass) + setcookie ('vn_pass', + base64_encode ($password), $cookieLife); + } + + $_SESSION['user'] = $user; + $_SESSION['password'] = $password; + } + catch (\Exception $e) + { + $this->conn = NULL; + throw new BadLoginException (); + } + + // Registering the user access + + if (!$wasLoged) + unset ($_SESSION['visitUser']); + + if (isset ($_SESSION['access']) + && !isset ($_SESSION['visitUser'])) + { + $sysConn = $this->getSysConn (); + $_SESSION['visitUser'] = $sysConn->getValue ( + 'CALL visit_user_new (#, #, #)', + [ + $_SESSION['access'] + ,nullIf ($_SESSION, 'visitUser') + ,session_id () + ] + ); + + if (!isset ($_SESSION['visitUnknown'])) + $_SESSION['visitUnknown'] = $_SESSION['visitUser']; + } + + return $db; + } + + /** + * Cleans the last saved used credentials. + **/ + function logout () + { + $_SESSION['visitUser'] = nullIf ($_SESSION, 'visitUnknown'); + + setcookie ('vn_pass', '', -1); + unset ($_COOKIE['vn_pass']); + unset ($_SESSION['user']); + unset ($_SESSION['password']); + + if ($this->conn) + { + $this->conn->query ( + 'DELETE FROM user_session_view ' + .'WHERE connection_id = CONNECTION_ID()' + ); + $this->conn->close (); + $this->conn = NULL; + } + } + + /** + * Deinitializes the Application. When init method is called, this + * function is called automatically at the end of the script . + **/ + function deinit () + { + if ($this->conn) + $this->conn->query ('CALL user_session_end ()'); + + parent::deinit (); + } +} + +?> diff --git a/vn/web/html-app.php b/vn/web/html-app.php new file mode 100644 index 00000000..45c890aa --- /dev/null +++ b/vn/web/html-app.php @@ -0,0 +1,145 @@ +init (); + $db = $this->getSysConn (); + + if (!$this->isHttps () + && $db->getValue ('SELECT https FROM config')) + { + header ("Location: https://${_SERVER['SERVER_NAME']}${_SERVER['REQUEST_URI']}"); + exit (0); + } + + $this->startSession (); + + // Getting the requested page + + if (!empty ($_GET['page']) && isHyphen ($_GET['page'])) + $page = $_GET['page']; + else + $page = 'main'; + + // Checking the browser version + + if (!isset ($_SESSION['skipBrowser']) && $page != 'update-browser') + { + $updateBrowser = FALSE; + + if (!isset ($_GET['skipBrowser']) + && ($browser = get_browser ($_SERVER['HTTP_USER_AGENT']))) + { + $browserVersion = $browser->version; + set_type ($browserVersion, TYPE_DOUBLE); + + $minVersion = $db->getValue ( + 'SELECT version FROM browser WHERE name = #', [$browser->browser]); + + $updateBrowser = $browserVersion > 0 + && isset ($minVersion) && $browserVersion < $minVersion; + } + + if ($updateBrowser) + { + header ('Location: ?page=update-browser'); + exit (0); + } + else + $_SESSION['skipBrowser'] = TRUE; + } + + // If enabled, requests the user to choose between two web versions + + if (!isset ($_SESSION['skipVersionMenu']) + && $db->getValue ('SELECT test_domain FROM config')) + { + $_SESSION['skipVersionMenu'] = TRUE; + header ('Location: ?page=version-menu'); + } + + // Setting the version + + setcookie ('vn_version', $this->getVersion ()); + + // Loading the requested page + + $basePath = "{$this->methodDir}/$page"; + + if (file_exists ($basePath)) + { + Locale::addPath ($basePath); + + $phpFile = "$basePath/$page.php"; + + if (file_exists ($phpFile)) + require ($phpFile); + + $this->printHeader (); + include ("$basePath/html.php"); + } + else + header ('Location: ./'); + } + + function printHeader () + { + header ('Content-Type: text/html; charset=UTF-8'); + } + + function globalErrorHandler () + { + $this->printHeader (); + include (__DIR__.'/unavailable.html'); + exit (0); + } + + function getUrl ($fileName) + { + return $fileName .'?'. $this->getVersion (); + } + + function includeJs ($fileName) + { + echo ''."\n\t\t"; + } + + function includeLib ($libName) + { + $args = func_get_args (); + + $localeJs = 'locale/'. Locale::get () .'/js/'. $libName .'.js'; + + if (file_exists ($localeJs)) + $this->includeJs ($localeJs); + + for ($i = 1; $i < count ($args); $i++) + $this->includeJs ("js/$libName/${args[$i]}.js"); + } + + function includeCss ($fileName) + { + echo ''."\n\t\t"; + } + + function isMobile () + { + $re = '/(Android|webOS|iPhone|iPad|iPod|BlackBerry|Windows Phone)/i'; + return preg_match ($re, $_SERVER['HTTP_USER_AGENT']); + } +} + +?> diff --git a/vn/web/http-request.php b/vn/web/http-request.php new file mode 100644 index 00000000..afa126d1 --- /dev/null +++ b/vn/web/http-request.php @@ -0,0 +1,42 @@ +run (); + } + catch (SessionExpiredException $e) + { + $this->httpError (403); + } + catch (BadLoginException $e) + { + $this->httpError (401); + } + catch (Exception $e) + { + $this->httpError (400); + } + } + + function httpError ($code) + { + + } + + function setError ($message, $code) + { + http_response_code (400); + } +} + +?> diff --git a/vn/rest/message.php b/vn/web/json-message.php similarity index 72% rename from vn/rest/message.php rename to vn/web/json-message.php index 16c36b9c..69dbf00e 100755 --- a/vn/rest/message.php +++ b/vn/web/json-message.php @@ -1,6 +1,6 @@ domain = $domain; $this->code = $code; $this->message = $message; } diff --git a/vn/rest/reply.php b/vn/web/json-reply.php similarity index 83% rename from vn/rest/reply.php rename to vn/web/json-reply.php index 9691adfe..9a7b7ea4 100755 --- a/vn/rest/reply.php +++ b/vn/web/json-reply.php @@ -1,6 +1,6 @@ getVersion ()) + throw new Lib\UserException (s('Critical version available'), 'newVersion'); + + // Fetchs the result + + $json = $this->run (); + $this->json ($json); + } + catch (SessionExpiredException $e) + { + $this->setError (s('The session has expired'), 'sessionExpired'); + } + catch (BadLoginException $e) + { + $this->setError (s('Invalid login'), 'badLogin'); + } + catch (Lib\UserException $e) + { + $this->setError ($e->getMessage (), $e->getCode ()); + } + } + + function json ($json) + { + $reply = new JsonReply (); + $reply->data = $json; + + if ($this->warnings) + { + $reply->warnings = []; + + foreach ($this->warnings as $warning) + $reply->warnings = $warning; + } + + $this->replyJson ($reply); + } + + function replyJson ($reply) + { + header ('Content-Type: application/json; charset=UTF-8'); + echo json_encode ($reply); + } + + function addWarning ($message, $code) + { + if (!isset ($this->reply->warnings)) + $this->reply->warnings = []; + + $this->warnings[] = new JsonMessage ($code, $message); + } + + function setError ($message, $code) + { + http_response_code (400); + $reply = new JsonMessage ($code, $message); + $this->replyJson ($reply); + } +} + +?> diff --git a/vn/web/rest-app.php b/vn/web/rest-app.php new file mode 100644 index 00000000..e8b5c37f --- /dev/null +++ b/vn/web/rest-app.php @@ -0,0 +1,76 @@ +reply = new JsonReply (); + + $this->init (); + $this->startSession (); + + try { + // Checks the client version + + if (!empty ($_COOKIE['vn_version'])) + $clientVersion = (int) $_COOKIE['vn_version']; + + if (isset ($clientVersion) + && $clientVersion < $this->getVersion ()) + throw new Lib\UserException (s('Critical version available'), 'newVersion'); + + // Fetchs the result + + $method = $this->loadMethod ($_REQUEST['method']); + $method->run (); + } + catch (SessionExpiredException $e) + { + $this->setError (s('The session has expired'), 'sessionExpired'); + } + catch (BadLoginException $e) + { + $this->setError (s('Invalid login'), 'badLogin'); + } + catch (Lib\UserException $e) + { + $this->setError ($e->getMessage (), $e->getCode ()); + } + } + + function errorHandler ($errno, $message, $file, $line, $context) + { + switch ($errno) + { + case E_USER_WARNING: + $this->addWarning ($message, $errno); + break; + case E_WARNING: + case E_CORE_WARNING: + case E_COMPILE_WARNING: + $this->addWarning ('Something has gone wrong', 'internalWarning'); + default: + return parent::errorHandler ($errno, $message, $file, $line, $context); + } + + return TRUE; + } + + function globalErrorHandler () + { + $this->setError ('An internal error has occurred', 'internalError'); + exit (0); + } +} + +?> diff --git a/web/unavailable.html b/vn/web/unavailable.html similarity index 92% rename from web/unavailable.html rename to vn/web/unavailable.html index 9ed80f0f..5d882273 100755 --- a/web/unavailable.html +++ b/vn/web/unavailable.html @@ -31,7 +31,7 @@ Estamos teniendo problemas; por favor, espera unos minutos e inténtalo de nuevo. -
+ Intentarlo de nuevo
diff --git a/vn/web/util.php b/vn/web/util.php new file mode 100644 index 00000000..f81c49ac --- /dev/null +++ b/vn/web/util.php @@ -0,0 +1,42 @@ +file ($file); + + if ($useXsendfile) + { + header ("X-Sendfile: $file"); + header ("Content-Type: $mimeType"); + } + else + { + header ('Content-Description: File Transfer'); + header ("Content-Type: $mimeType"); + header ('Content-Disposition: attachment; filename="'. basename ($file) .'"'); + header ('Expires: 0'); + header ('Cache-Control: must-revalidate'); + header ('Pragma: public'); + header ('Content-Length: '. filesize ($file)); + + set_time_limit (0); + readfile ($file); + } +} + +?> diff --git a/web/forms/cms/contact/captcha.php b/web/forms/cms/contact/captcha.php deleted file mode 100755 index cc5f256b..00000000 --- a/web/forms/cms/contact/captcha.php +++ /dev/null @@ -1,47 +0,0 @@ - 200 - ,'height' => 60 - ,'output' => 'png' - ,'imageOptions' => array - ( - 'font_size' => 20 - ,'font_path' => './' - ,'font_file' => 'IndieFlower.ttf' - ,'text_color' => '#559955' - ,'lines_color' => '#559955' - ,'background_color' => '#DDDDDD' - ,'antialias' => true - ) -); - -$captcha = Text_CAPTCHA::factory ('Image'); -$retval = $captcha->init ($options); - -if (PEAR::isError ($retval)) -{ - printf ('Error initializing CAPTCHA: %s!', $retval->getMessage()); - exit; -} - -$png = $captcha->getCAPTCHA (); - -if (PEAR::isError ($png)) -{ - printf ('Error generating CAPTCHA: %s!', $png->getMessage ()); - exit; -} - -// Get secret passphrase -$_SESSION['captcha'] = $captcha->getPhrase (); - -header ('Content-Type: image/png'); -echo $png; - -?> diff --git a/web/forms/cms/contact/contact.js b/web/forms/cms/contact/contact.js deleted file mode 100644 index 7e562d8c..00000000 --- a/web/forms/cms/contact/contact.js +++ /dev/null @@ -1,76 +0,0 @@ - -Vn.Contact = new Class -({ - Extends: Vn.Form - - ,activate: function () - { - var self = this; - var form = this.$('contact-form').onsubmit = function () - { self.onSubmit (); return false; }; - - this.refreshCaptcha (); - } - - ,refreshCaptcha: function () - { - var url = 'forms/cms/contact/captcha.php'; - this.$('captcha-img').src = url +'?'+ new Date ().getTime (); - } - - ,onSubmit: function () - { - var form = this.$('contact-form'); - - var request = new Vn.FormRequest (); - request.send (form, this.onResponse.bind (this)); - } - - ,onResponse: function (response) - { - var form = this.$('contact-form'); - - if (response) - { - form.reset (); - Htk.Toast.showMessage (_('DataSentSuccess')); - } - else - Htk.Toast.showError (_('ErrorSendingData')); - - form['captcha'].value = ''; - this.refreshCaptcha (); - } -}); - -Vn.FormRequest = new Class -({ - send: function (form, callback) - { - var formData = ''; - var elements = form.elements; - - for (var i = 0; i < elements.length; i++) - if (elements[i].name) - formData += elements[i].name +'='+ - encodeURIComponent (elements[i].value) +'&'; - - var request = new XMLHttpRequest (); - request.open (form.method, form.action, true); - request.setRequestHeader ('Content-Type', 'application/x-www-form-urlencoded'); - request.onreadystatechange = this.onSend.bind (this, request, callback); - request.send (formData); - } - - ,onSend: function (request, callback) - { - if (request.readyState != 4) - return; - - if (request.status == 200) - callback (eval (request.responseText)); - else - callback (null); - } -}); - diff --git a/web/forms/cms/contact/send-data.php b/web/forms/cms/contact/send-data.php deleted file mode 100755 index 42b1b9e7..00000000 --- a/web/forms/cms/contact/send-data.php +++ /dev/null @@ -1,39 +0,0 @@ -'); - - echo json_encode (TRUE); -} -else - echo json_encode (FALSE); - -unset ($_SESSION['captcha']); - -?> diff --git a/web/forms/ecomerce/invoices/download.php b/web/forms/ecomerce/invoices/download.php deleted file mode 100644 index 986bc458..00000000 --- a/web/forms/ecomerce/invoices/download.php +++ /dev/null @@ -1,36 +0,0 @@ -getValue ($query, ['invoice' => (int) $_GET['invoice']]); - - if (!$pdfPath) - throw new Exception (s('Invoice id not found')); - - Vn\Web\printFile ($pdfPath); -} -catch (Exception $e) -{ - error_log ($e->getMessage ()); - header ('HTTP/1.0 500 Internal Server Error'); -} - -Web::deinit (); - -?> diff --git a/web/index.php b/web/index.php deleted file mode 100755 index fb8efb50..00000000 --- a/web/index.php +++ /dev/null @@ -1,131 +0,0 @@ -getFile () - ,$e->getLine () - ,$e->getMessage () - ,$e->getTraceAsString () - )); - myGlobalErrorHandler (); -} - -set_error_handler ('myErrorHandler', E_ALL); -set_exception_handler ('myExceptionHandler'); - -Web::sysInit (); - -if (!Web::isHttps () && Web::$sysConn->getValue ('SELECT https FROM config')) -{ - header ("Location: https://${_SERVER['SERVER_NAME']}${_SERVER['REQUEST_URI']}"); - exit (0); -} - -Web::init (); - -// Getting the requested page - -if (isset ($_GET['page']) && Vn\Hedera\checkToken ($_GET['page'])) - $page = $_GET['page']; -else - $page = 'main'; - -// Checking the browser version - -if (!isset ($_SESSION['skipBrowser']) && $page != 'update-browser') -{ - $updateBrowser = FALSE; - - if (!isset ($_GET['skipBrowser']) - && ($browser = get_browser ($_SERVER['HTTP_USER_AGENT']))) - { - $browserVersion = $browser->version; - set_type ($browserVersion, TYPE_DOUBLE); - - $minVersion = Web::$sysConn->getValue ( - 'SELECT version FROM browser WHERE name = #', [$browser->browser]); - - $updateBrowser = $browserVersion > 0 - && isset ($minVersion) && $browserVersion < $minVersion; - } - - if ($updateBrowser) - { - header ('Location: ?page=update-browser'); - exit (0); - } - else - $_SESSION['skipBrowser'] = TRUE; -} - -// If enabled, requests the user to choose between two web versions - -if (FALSE && !isset ($_SESSION['skipVersionMenu']) && $page != 'version-menu') -{ - $_SESSION['skipVersionMenu'] = TRUE; - header ('Location: ?page=version-menu'); -} - -// Setting the version - -setcookie ('hedera_version', Web::getVersion ()); - -// Loading the requested page - -$basePath = 'pages/'. $page; - -header ('Content-Type: text/html; charset=utf-8'); - -if (file_exists ($basePath)) -{ - Locale::addPath ($basePath); - - $phpFile = $basePath .'/'. $page .'.php'; - - if (file_exists ($phpFile)) - require ($phpFile); - - require ($basePath .'/html.php'); -} -else - header ('Location: ./'); - -myExitHandler (); - -?> diff --git a/web/js/vn/http-request.js b/web/js/vn/http-request.js deleted file mode 100644 index 2c47b24a..00000000 --- a/web/js/vn/http-request.js +++ /dev/null @@ -1,30 +0,0 @@ -Vn.HttpRequest = new Class -({ - kvPairs: {} - - ,add: function (map) - { - for (var key in map) - this.kvPairs[key] = map[key]; - } - - ,send: function (file, callback) - { - this.request = new XMLHttpRequest (); - this.request.open ('post', file, true); - this.request.setRequestHeader ('Content-Type', 'application/x-www-form-urlencoded'); - this.request.onreadystatechange = this.requestStateChanged.bind (this, callback); - this.request.send (Vn.Url.makeUri (this.kvPairs)); - } - - ,requestStateChanged: function (callback) - { - if (this.request.readyState == 4 && callback) - callback (this, this.request.status == 200); - } - - ,getJson: function () - { - return eval ('('+ this.request.responseText +')'); - } -}); diff --git a/web/log.php b/web/log.php deleted file mode 100755 index 5e5032d6..00000000 --- a/web/log.php +++ /dev/null @@ -1,20 +0,0 @@ - diff --git a/web/pages/main/head.php b/web/pages/main/head.php deleted file mode 100755 index b25f3cac..00000000 --- a/web/pages/main/head.php +++ /dev/null @@ -1,19 +0,0 @@ -query ('SELECT name, content FROM metatag')) -{ - echo ''."\n\t\t"; - - while ($row = $result->fetch_assoc ()) - echo ''."\n\t\t"; - - $result->free (); -} - -Js::includeFile ('js/vn/vn.js'); -Js::includeFile ('pages/main/main.js'); - -?> diff --git a/web/pages/main/opensans.ttf b/web/pages/main/opensans.ttf deleted file mode 100755 index db433349b7047f72f40072630c1bc110620bf09e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 217360 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 !}#gv~NV!5|5YF|kE)J0y^zWbk4>=%|6F zy33ntw4%IFi~mIi5@F#H5DC=t8uf}S#Z!v&ic1RE28BXUsSJfa6)#wCtF~p^u#l?O z0eO(1tOyP?MELD=Km)RBA<)+2kmXB7xbwDcqlf4~djB)cr@zKqO|>VuQGqgCZaIE3 zPh2kU<-E;J^`bgJLs^!BadisA9M-epj#W!_dJhcpZBZu{FY81@5jOeF832a~R(03X2W)KY_>5w^fiM0iyS zq%u`hqg9fKkhPICljOuxNnP{%E5+Tkq7r3hd&klWarYQHQrI#Yr@Kef5#qz6X(g>3 zEAC`b-29f8QK|O_V%~l=vM$gI3^C z!Y60tXHxOrtB^`*qqJ4fEET*nk_K`bthO);LX)F!<(Xs2C;+<8w5srY( zu0@%q3gV+xX;sLVOLdx3Du!*r2e;hAbS6iRqa`(@O?lx=}0~I`prdz`0bPBzJ-?Iar*W^g&H3>}H%XNc%hQ z&qCOO`)I~fh@bt9jkl#Mb;>-SMTZT&V37&SK;U1z`MA2^}p#@GHK-TN4KYLihx- z&=`-y&Zf5NF{{N9=%EevXn7hv2H)xdTaB_JHijwG<0^W@NN@yZnJ7Ms9!%pz1R#Mv z!LKR^qfpz&-ZCrnCOYMswrx>A9AVQL%?7zDzP&0Y&lkqqj1f9Ld@vPnw@|*_%`I7$ z?M;UE{_ocr@fs~jPs8TEJtHn&hD3FIhD}Oen|LPAfn7=L_22mOQ@pUF`1j{yl$qzm zp9{VnR*}17+_mEKTOQqac!&7ZQ+u9znDdBVi*Hly=U-9z9O1new%=RZD`jRuQQbYW z*ND@_Z#FcFTOND%45O_d`Y}h6Hei&>X(>_-z)5rnuZ*@>FKGY&F!mmRQB~Rh_`9!6 z?=zW6pG-m$LI@!VA%svuZ!xrpgeD*$9T5Qm5fL#WAkvF~fDj=@mPMq=x*}MRMMQKJ z(M49#wPRTq$;`|DbMBj&B&grtpBR(Oyt(zwEic!yR+`hQ9v-nH+7mQ$5{Rw%jTou0W`yqqZpXl+JKp{;o`#6MGgfDxC6hJr~ zMf?5vWlsUlxa`9Y44%csDMRt_OJ1k6;g^0}9tpDLo{D=%Ek-cNmisDZk69G_TOqs9 z?_Pw1Y%EZ7d(C`ipB5L=V|MwHO-S%SXh_-IvZb4Tdv1dGXyHHK+dVF{u;4OL2KS@$ zogb?0{Ao@Z-pJ0~`u?1m{QW59-10u_=i=|DHTgW>S*`ua0qv}{;13WV=e}S*f)RWK zbF>!x`~jRr9>oH?iC0J!I+glUbO|1Z0}++Y(p-Ww!QwSa#$?1(dLe;)|YRv10P(7%!bcbo6Tf!QQ|Gx(fNYeC=T5r zoHeeKvfIL%kElsAXhXXj$KnZo_p;mm%TJ4TvEhB*g1#u)Lb;I5lY z|D3mw9@!N^?W#DH6Iu(G75pAPLrLEu=@rd`k4W=3Z9@b=#lR~0890MjiO9AskM>XcoaJu=E2HvNuY%&r-P)a4CO0<7zy-ICJf~* zh*4_*=AkUsc`%Az^n}<>vS1Xjy`;f6#%(WQO%N9QHF!sh6uSrtj~6n9aivA+I+smI zPL7H5#yNCy^Q`!oSYS}~s*JHa{mxt`iVHZMMmG*M{MM;Fk~pE^=FxNr4(Jn65o5zq zf~50ndViCs;*3J>X)K5-h=Kh3r_se`wUoV5y>;s!h8Pd-vvl#%ql@d(8={OsHC)H% zl+N{YP&(=7Sj{M%(!JwSh|;-Cz;1&~fO{p%U3d$e(zO=K1&7vxrO|$&1)_AVh4MPy zLPCV@v=(SLv=;gUZ@!Sm5VbRCV<4)b7KmzK5ui~-C7Uy9SIS7$+Tf>RmL@T&V`M~8 zYoFw=Pe5GM@2nr7k?^Q}O-9YBOdEBXHtMK!Ou{ieC-pPw7^$RYoYvY-a^-=Ezo(>TIes1(^`n0SUv`R z-lzpyIX_=Hsb91WwS=-@wKm|}C}ub{SfN`+FSh60Lh2d$9Gx;hpFh+JwA@eFp!FTK z{cwp!UxSumALUQ@*)rN!QYEt~!vg=5FQF5n({U3@T- zc};M7Q3jvehc9MvxR8Ps_G^%vJPhbY%3|1TMyH5tjBdna1n|wz4bO*7D`bU~w255U zH{YbJ*fa9%penz71OHamou~X*Id7%<_*Y*+UxaOdM^GmVm8JP!52AamMjU&W(JcE@ zeBOA3u({0^bFWH=g?zxd7ReiLvBY~NBZMn0v>GC2E(I0*p;B^7oHdL>G+umBh6V1y zaJ=>Y?Ksrc?4;T`5_P>Dv8?ZhzLYO7I(~f7=?V(Gem67%@;Ov6@hxr<;#Mv;2#I){ zrXpvl{z*J>KbP~kY>g)#;}ikdys+K}S`r`TJV9&YHZ`QR5#b4>1&H~aCunWlrarH= zp^vnYj3*xFTtRE2T>VXJBf=Hx|A8mkaoX0}D353Xa-@w4wJT*OgILgppko6k5?vOm zUD;wz(Pi4J4tf>*05(KA30i;sg#nG{O}am5a0on0k?3jEN7drc$;QAft>Nftxi__^ zE|MLfOs#LdkR$Hpr(zd0v#E${&k(40y>J_D2=q@m&f<7}8gevRSHsrS$XTYSb+JEj z1Fxa+2=mM)DEjjIW2@}U==!+1`szS3l^lO$#$Dj zFC)`YX8;boK>+RroF{O-aqlCyQ8lbB7hemU2yKFa3gB*(8$PKUQi!vXa2nbj*!0LefP=<1Y3VA!DeNmzth05~Y z7^13RUgBM{AQP_;CA)IBRhoyCgYGv`Vvw9Z%!*okQe^R)e8qPBxgc{RVQ zxb`W`K~X5|U&AerTLSrvS__;u5e!D_3EJ$=?^k?|_I1b~^oQHETI(-z8Z>RUp+8oJ zYYF{DWl^|ZWr}~y6b1@a7&EZvKpNQLL{0(Nu`}u-8WFPd+Lb0ctX7-Bpzt`-W+=BA9NbI-+Bb-s9kBY+irL06B0xRLN$4^mc#9E+8tW_ zc{no#J4%Md#!feFG(6sv0yo2v==>J&=%n-^MIAb=2&Xid+8mmG_Kg)hO{G?v7tL%K zH1zN923KxD{awv!&$)O$?Kvd7H~1ciQOhq$Rbx39A4Dt6ZsS^=7_}ymeDX5q;aUsj zVM$z!`rWh^NV3yfD95!2sZ2A{M8?4BPHSN>^I!~QHOS^74(XP>4NeJK8-sx%L{GHj z*8oWg7>DjlWZ8QVi8Q#hRjkhLb|(o|XOd1y3D{k**V_fN8G?dYG9rH+VRT3xms|pz zZjqzPlypsJ$KyU0SeM&fD}CH)38hAZNS>OL|6p@d3G{x9oVb%eq@s- zLsrWZZZFO88*HN2o1PmJlbCLh^9!<@o14S>jNB7Zv6)-7Qk-T-EWqKB_kqmP#x_nD zS*@BFIK$RWC578AHGCNY5Nm4MY@Dn@3N>t+$_DlF!cG^KT|s!F?wcj&I<UW8$9=ej~OO58uQn@g{WQqmKNX@{aWLG1%J{4>$j1&5VgEd z1~&mN0_KM?K+2dOmdWutWu4%4^h~b{@AG-z+GAP$=UR`g|E$Nd&Adm=u!|LSVV!|- zfR-Vh&^pJ_I{T3*j|>vLdWZJv!}O{PyE=@okS58L)qkw@7WFz&=E(>AcE;!Eb{@-l zHv$@PdxKl@7QnlaMZj-clx;OyY@*_DnrwE!7U}JF$>P$95&)+N_?4Rr!7+0i`%^U* zu3;^3A1Vdpva1^A0&A!@6p;6+lmFPK=6O$;E!6xWVNU#{hm^g#U zrb|k;dEMS#mGLICsaK`XY}PqT-F6)^WRND!@B8?3kr6aHdl&_7l60O{3*#`4t8Pe_ z;j+BwyS+oo}7TakgiX&A~>fi(wO`w3&Kg@h_jy`f5Hq@}_cs8`gG) zw!Tr$%`JLdhUXSLHt2tRH>0;TZ-MiEt%ci!)mjS?EkLs=a^A1Ca9bR2AvPj=YhxhY zRBNGJSgy4YwSZ}3Al|RFP>xN-If`l8!Uxe71_)cx0@>NLK@jiPER##4Z47|@g`Uuc zK~LP`zhr}jtKn8O6}O=kvW#mZ89Y&ICG2IQR$xm5@`g4RZUumellq4(ZM@uD`y_w; z7ydd-+xjw2;q8eBuzm#fOtWhqIZr+uk~Gc(a9z<8gx*e1XhuY|jem_jqTm9bYHdU< z47XTSSwARIXd!CT&{`m6xdZiqoUwmR zB%T1bf*gfj+>w3KS|H7dw*ZN_`yaKyH7;raGP7_+o9iuYkbJ4NQC9z*)<%@xZW#qD zd$bX?ko*K$_%b}RaK@I}5JhO!0nDstCGahHtRG@xNa*D$t_>OE$aQ6Rj~aGaeQEN7`52;b3jEWjoE1`p?xoG*lann5SE9irDuL7_lf~4t5=y#5aNwo|0AZtS zVQ!d%TcYXlZX_r2jCJx)`1D$u2Tug>zyRH&v}eaVZ~NE3b{)R`es9c#4r2$fc=hY; zs>i+DH35ax`*m1;>R@(hmy}5ltX~`~I{Ftx0pp+I(bpg*I2LyER`7ndaVm1G&I43^ zy&+A=f)T`+>Jfz`$=EtK!`4zX#v%g6=&{A7+G1mEsgfa4HV_62IkI47;A!jdtdMxy zAX(BMNCe})3#1!!RDMQ5*^n&V1knedyE__|>4uLh9Gu=(nmAGP>^~6NUcF!ROrC$& zxP=J^<8p1Sjep&gH^Fx{WpCFR7rPb|bnQ@FSgLGT+O95>tyX8qAGCRF{Jpb-ZP|hL zt6Nvasul9mlJzYdt#;<9|1Iv&p}44HM?_I``!{B9gpEBHzTaNL-K9l2uC8r6w9bl& zF*j?bYb~@*a_M{bL1cI5;vNM~vn3|0SEU7r8!0Jp+@v_{>2Tk8O);{NtHpzcH;|*x zBBk(jzLSS4hOI(Tu^;(RMF9#zWe5`G!EF&V4&5KYaWsxb1R#ENdDsW7CVQD2v-=?? zMgTkF4$WOU`q^GZ74M9{a3+G-!D<#v7(Z{``0)=+>%y0-O{wmZqs9Hm>6z61x6B4W zkB8^CNm-O#&=k=_={R=oeRqwWHFs3Ijvd?K8=OmvIO81ZF*=jN97L89hib5KbI&?I z_j|P`7+`epgw!K)@_9@QZ(~dNi8$Vdq=n>wyKpZWZ{s+g0Pld*Kk zYS0l^#jA~^6uf#2A7&O{vFwMx)`px+qh4^>&GJJwO4o=F=WF1c5fvhZDkhB(gwl{N zGr?Ewowji9(4~(dH2eBv4`sDj`mnEP$)jz4*CIme5u*E$WNzAG0YMNI#OTo+z+RYT z*1eM+9zM70ldYiJGjeP zjyN>5R~fqu&!*$q)yg$(J{F13$3WFOBEjdxH!?B{l0}N4EYRu1AuF~TC+f2L+&+G^ zX`<;_`O>l_dF|p$yFK^>`WAL6B1bha1FHr$CE&SZaiT!^jpKrMMQ{<6nGs+DZAfheNOo)|DL2uz zl|0#l`u9oAFR+cZ&KlloNO|v+yw>)+tTW}y={e~gI?h{$A0?gUEyFb5oS+EC>&m&*~pFFIPXamy7>PVm{&01TAPfl zyrQ&>HtbO3H)ZL*M?KwM=qR^o)uxq}2E~7B(hNMJCfxANFg<`)s44Xu$z$e_Shkb+A>hGTU9MVg7{!B~M zCD7XW&n@kI4*P(}d&)=RGR79to)8lo_q3F^(t(+p_GFDbgPwE+)C!x^xp6Bj;uEa@ z3R=xtlByYm7xZ(x`Zi91RtDf~@3Fi>srcRJo`z)n?2(vf6Y zKpqj)9N@JQ%ov%32!sVY2`faJQ@RmaP@^2)eDgD?OK1(g8F?DDCN__>&h4r?@}1#* zF3s`YAc<+c6NV^yhk+FAjN5czOVMI9fH)ya4nQ$`WdbeaD3=1lG@{6b1Y8)&6+}d9 zWOSNHfiZ$7rX%E0v!0|h0d-`bQO3G-`S;L{H-8~$$N$zz1?xNi4&3oW^&hM?3R|~e zt+2e9K?RO1c>#1}+1F;ot>ijxC1;qGAYa7daI`yvU@@a05whS(EP}?!my^UsMpp{V z-Uaf-!|LHXyn$Zo(ZizSuhNd-u;ph6Pg84~@H^2L4sm$($m*#hyD8SJH~LCPUxc-7 z2C71mNiT^y190fHr86Pl1ySBESx?Y_zgs%aRIp@JQwZBzcnX>7af77g!P(NGV4Bo> zgCuXPo408bdJgXsdd^4BoN5%RU!tc>BZh((f?@#O6Lf#-b6m50^V+4%xDDOvLN3EA~M*yXx1S|Rk7Oi1{pAQmZc~cIWbY!#KGwkRK^H0`n)t}p3l`SU9W}?WYy*zP}Mb6!RNZw#+|wH_ObT0#fLBa>#bPj?4ieQJYB7Z9=>|@ z5hm~4eq(vC$K_MU-hJ=LYnNztkOl~`5VI@cYmMtp`3Y;CL@_cZy%U)`EG8C3J76XT zU??`zi3lk#fwdAVAVi5Kx(GM=hn1kTR6-^|WDF3fNUp{3=`S57CM~JSIZ*%P{`2o8 z)FfRzf8a?q^p_m=^8EkpW}m5n6KAAx!L6^qgx~#p{&>r{eTuw{K)qLWhs+`%NiS>qA%77am!3ojnfxYM!&|r=E%19p8v_!Bw1|^85E*NRy|`CtGow8-MwXLOlk8G<%UFA6^X6WQ z%LTX{mxHwCo|Vlk4Mt+F2jLcphLwcwRjUdrfoW2M!rB5c8nb+6&FzjTqmu(&n-7jbuv6z{yfl9ZHLAM?xAb+_p4Z znprR-NXD#T65>{l-aEK>fHKi&E=2GkIk?9iiU#TqK^y$84M!z(a^MMyy^bU`ifcdq zO?`vSQ*V4fZAbs=(C6E?jodlpx#wU0>pdf$+J%7dcaEqZ6&PBmt1n#jXM{e}wYmE1 zirPKFWqIivwr$(}#M)&G2pQUhnb_b#b|L4~VV9XA17g@{WHx}4z^lU}N;R&7!KJl9 zr6i8`(n$o~i%t|hhf1^6&b8M^xeZEI_Sd!Ql-7l+XEe*WSMCrx`pwX z8LQ5oD7oj%PtDaIm8zAC4*}}=O7++|ebW8YhOghfb4t68@y#y3dha`@u6=~-q`}YV zf!DtgN}2|dW-*$eC?NK>GdYZ-vSj$UG{W;EG@@v9Nh6Fj5cprCzC=PvtLuYXnfPU2 zT{bw83paD0(oCO1N`lq?i3_!2oFeykJc!8ogS0VwXwrnfmAc32!Zf8m^^LC)3!x_Rh7 zunL^4yw4r!;}iUo@^`G3dk1e$9M93M_U@C+xL*$7PDj)Q?(~~MtE#|iGm z5we^GR28rGa{OS2;jd3upTBw>08R(Hec$OX>~Cx!%8WLP zGfyX92PPkg!DAe9r$8EV@WA`|cUDzAQPsBF*21o{R=xSg_J=MluYPD&cky_^!=EmC z_AfQ!PY0hEFt%eeSJL!hUDn^#Yi*mNj&Z4P9$4{irls`K?CtrMl}iRZdFQOD*l+Hg zhR01uniXalhyDHqbVWH#NhY)24UAZ`Rq^^V^9ahP`!PUk<8)?HlJGd3w{62vh%2{pYBT@2Qt%KavCe>V;kBFR1$`yz{Sr zLWS43O%~kt0q1hZCZx@1{bG&!!8*D36QK=Ptons^7YbS|>f4?A`Wxn9wri2$P7i_&YFjY&HnTOWLk++UwT=+eDk1M_oPA1kTZ{6 zzW?6P8ppTb-{0a)4Uo%0yTzpesJu!{Y_dMp7f@miF(^Hp;KYEP2|7E6-vooy&NL1- z#eKmk#Z`LZ-EJU5fnPT8Zwx^q{3I~rI@?@?EYV}e07aeiOJV*8w@*^manNN9OfePmcb;-dvFY_bBm8OzOg z-{+Kuoj4nxUfo%R*tZ*X27awRbX4cMIm!OzKkol#uX_C#^;`9Ahnm4YGO|<@ukeR1 zpZdtEY$h%M-Tee;E)%0mHc1(7H=sdN9Fo*LE5qp&5_NVj-~)SBrU@W*UYwYNJ^~^) zvi+KePf3MNPPJV%5H(G&)i@L{$_i2-Tn`=lE@1HVi($2{vr`%uEqqa-& z*~1@qH+BJjwYrtD&0FiYo&0dsLRO@nd1%FlCpR*A+Zy$^Z9(;)hsoY!Bu$MnK{QPb zo(qsO*A}&uhKP50CVz(OYQp4V?TLnL5q?LIK1g>2>5BobPe$_*G;NRcK~3AMfDsSc zpq4$O-7(4uu1|)opky;VgR2W4=|oa_d6R(hRT7 z2F%z5k7#!SI?fB&0k7AN7&jM68o4C978w_|?KQcA8^xn3k?1(kN*XsOk)a1Qvw$9q zc(n7Q+ZGKUKXJ(lbxDnSKsus!V=K;ma@ynF;C|qqB@fLEB~aZ9b=2Pvu6p?*W~t4A zR$&aE!yI84_cnzy4KM@PyyVYdhlr&ZI-TV7S`?=o7car*DWR~I2c`%pU@$|#;M1TT zHbirgPM9i_&B28$gtUW5RF^(O>iTc>=Vb9>D9gmmzwJ7+^WUh-w2RGS<=-9bwNELy z`Qrxldz4y1iLFPFczq{ZJ#^h5jG9N*AQDGMkvRDKR%_({51T}!{t?>9!M=)U=PP|0 zb}Am3=)HjRmyjU)A(B~v%p9B6r!qFy?Db;KUdaq(0kca^XoM{AXEAIjg+fRXBB12L za4($z6-BrL(L8B=n))5M<}r0`am9e;Q+kxY&|zUwZo3$;*7O4Hd1lK`vWJH=qkPEjkTus!%4N60=TGTvj`7UANtV@3B(ncim8FFzUJU)hetj@Z@*1tn*T}O< zNIf{ObA(+Qt$QNzBMG4O8~Rar;&1eX*j5NfU1-rEn86u!3Agx~Ne4xl47dZSE-h+G z13ZN4hbS(Nf>}UUQiD`Q<0gCwD*Hv>ibc&mpmwSef2aZ6>q4qjr6h)JuMK_*ZC_=) z4Qa^>4xZu?j41Rc>jhL~FnSSnU__lQbo;xya*YcPpi4T0+E#*BkX93=KY5`V!Zub& zqe5k$o&4#(;IBWt{QQB-=UL51?U%)+VCZm+L!(_8C*wIXSMe)R#95BSgHlFIX=r{+#HWTIX8m}$X4 zdr(0!Y@8$n94mcy1r57qZn;uoyo=I8Q~pF)*ihezDt ziNXHioa;_tgicfz_Uo)x$!0Pdm`!l%T@d+DvguZKE_r?u~pO}rLLpl^(% zFKDe0R`uqzQi)oHW?z~`m(>D$8;cr>v9YF%41eFs4A}&ZWBMI;ZKRiR!8lr>xd93? zYHNdl7LK8ie)j5>k1m|Mx@+0=gR?8f*HvAumq$N&DAo{n zX!W^k{kONu->~x0$5*X=WXePNeedme+iMv4S)AfQSVKE}EwMIHwCjvURB>=1OvYjb zf3drCuulMysvxZ5L_}I`Q{9v~ilA;f!YHPecJ^tTL27e+htn85dmJED7q1?cPosod z`k7Dac-9~9kDtne;ZsS`X1IwpEFwCUpv!9*kx9rY^`d&aj4J7}YzEPZdKoZbjVlpF z_K_b+zIl8f~e`quSZ}o!2YsGsOE%d{Nr-#F<1Lo6hetx(HBWY0kM%Tgpz8W!V>DqO6GlIakM344 z4e{Nh7@b+jFO5S%K|umwQkd@w2F?OC#v2x|8?h3^ffB8OfoPn!c4yr|V!T^IUqv}D z=3j&Lcq6>aUbDf8q`V-!TND++VLd&%8D@cz&qHz@DGKGC9;(7t8>br#5P)U1Df z^7$(@i&l;K>%JOsL}BL3FNi%t=jYvra^7!g6ssrP6*JXUkQvPgWs~?lB1#4nr3#}^ zY05$a&4w=$?KZ}g^z(ijP$Le-f3?~r!Y>kjPodZ_ozap~*hX;*%r>hP2{ba$=~9j8 zidR$*`w+t%xRFw#9aWM8!s~|L(wwNO*sE6TT~oWOp|hKx(>fCOr`z3!KB=M|?keCU z%kZYjI$)IZ3;-jlC_o57jW(Q_i1dNQ{KLBnvMsz;O(10ypBnm2?S*pfH-7;toGbX> z;EVhIa`sbAINBI`@|+sKe8ppMAMvWSIupiX!m0Hko;gKARVX`ZE_mqfjKkqY9s+`x zy238VR&(|Wjo_l1!hBVWKx-Xw(=5YH!)w{c z#=t`5wM%kBq7MRu&u39A7=p#EK#*6OR(@{G%vdVNi3JKSA`9r$dkazoH#rsscCmI> z@7ixKvEp6oI<@Art%Gatf}-y+g!065UYO7e%ATw^pdSB3eN3HNygnwC1(;*gH3rOO z;SBOGD2s%ADv-LVzKGkZL)f#qApbFfTbRG%}W=u-_F=L4{pAB<~A-Hz|S{QA3Z{`1v!)VJKO z&P2xZ?OI`0zz~+JGY}R*fe`r!gP=f&^B6z;^>R7()vD2ajKyL`guG5N%Racw`c{&B zC;}y&z{o5js4QB*@plj>*hq4iG~;rjlT0d(K!LbGU3`XZ*|`P_>Sk+dK0ER5Dh}ietr-4?dxO0xrsdfOs zhimS8U$Eql{OX?dt5@qSolZ}A>)-0lufJ4*r;dW4-;}MKol-5XMk>zQ{EiuG+NTD7 zeXnA)dhv4F^a!No> zbSJ`^pO|R2Sm2$s*v%-qMMW#Z^bqDKjU*(EpTT^nNl7|lFDZl^)97b@TRCgNj1`No zeyAp~t8CMfs;%lp_%Zzc1qPB(PfNttpq@D6; zX^Bu$c?^+=>a=>D%wWpYN^V7N4bUf71f=e&t6E$q9S`=zXG9@OT`Et+Z~uqvjEY(I zi0lkk4$b%fEjyFcL9%liWM_He&XBlc$fKK(>a|Th^{aLDRCOuA*@>pZ>}zn5UQ*kC zsl}^FJ|O!E<>>1uz6P_C!QHPQvz1HEAZe!w6_$_~Vx@AKW~f3as*Cs~yGd`w!2Vov zZXz`ka=W;DGkfi@+LrzJikiGx_5Yn+M{PoOO70o@PIQO93!M|QL+|tN0{R5f={ zMX+q9k{467!V_q<2Mn<~7&TJ^sc>7`Q~jy%eWj*)O3vZAxcqR*T>h)Y=E-GTsHp&p-H1PaWk`g*_9)#HEaIsWfcU0W|$iu-A=mfjR z`_oyV$-axt(}`_6a@&=S+pfanvEWfIF`ICLk*2IiQBu*QnDm0dF6(I%we-ve=>sbi z(Rd1+Qtn|jQxslRE!A`yen6E?>=Sx0w`PyQMDIg7U4uo0pD}Of2 zy13TUUcI(ly;kU1cb56HcZ{4PUaUJVEo;9y)K@(EXusfGkZGUkjds`!n{_e_J_>^; zNHJM040vd{tTU2(QOetF*P-H(wz9b+BRqk)6ODv%X-iXj*${C;b#-V9)>bWKXX}ol zK7os8!QblrqP^~owdPT1C^!S@(O?wewg;>YEi%7yqFx1pwj^;FX&Ta|y&Zm|1 z(G0BasCtDHKbXtl=!fH->4ct~17tz4B7X_5xJ&#^LF_A2ba0gDB0R3KpM-aV(w}S9 zt<~xdX)>`o>G%`qiRaiL!$&8KK+DL&gblqXJo`>q8Iuu@lIb!g+GRP$qCgT*ND{CL z30@0QL+lnuBFeph`{}$&V|%(L_ebTnhUhYnK*`w1RBR(q3b+^99bO+qcEynni@Sn! zdUf{=^;71r-(JU(>n?;;#2D zsa?yqYSgWp!RG^g#h?gACd)>ye~ECzKmmhu75#;^uLh36&sRi+z)$Ha`(p3SF4gQ> z^(yID-BE2q{Pt9<^x)E(#)33|D?0i^2?;cMl_h%O2Q~7!chN8Oxt& zEDfVU*Cd0D9DEufxX#a*Q4esT@rysPOeDaKb%7zAfs05ZitE zA|xMH`pAmK>)}J0i*Lp*N zUjYXRGGgOh0eDkmy@gvSxQT*v74rOLBFculAlQ&+=X6*xeE;7}5HGSE`*z;FF}G;< z0O0+Y)GMCiwZ3M@kFBiT(RM|AntB;7wx3mA8xV2r1sES`ECWk(ey6dJQ`G|I%gc|L zQ5uPd|486ngknc4MN37aY;yHQZUB<2#Y|$IP`xQ0s7WzHU4dHv>H9Zr>ecFM7Vrem ze~hGt@7L_yzJATloof&i@U!|JGyjh+3bpX_IwZT_MDq8gcR&0P`-w<*2?ZV@VRBk` zg0gME&lgRyH^vH*5)BA+H5edR8|>!j#X++4t-4Bqrm6s0pWh@Na&n}8`6??}RQ1-2 z>_64&H|npPZ)Ee5z50Kq5i?>KXRGO9+AoDzO4ae#S!Jhdn2KqyClaa*ui@2cE25z zPvKoUa6uFp#vSpxea%uNHU_XE9fx>vDe7^HhP4F1icsD4UbJu_6w->48H*iBmz#> zZgEnMp&qh)gx~xLBj)!fMbRNdggkEzk|gnDoT?P*z%Liis{PdQs@nX;=h}tE$^q=# zh1Ql!R1ZqWLpRkH!dN)Oi5*;u z+3f}=iS+y^h1ui(>1E^YTRvdz+#>{~fb(l)+6tG>s^#iv)l^%{ZdPAso`*IA1E^#( z2FWGDo>WIZv|nS|*clJFHqH)K`76Ft#KkR~>flAkX`2I+1#IV@h!t1hk< z`&O%~s+E)`q10 z_B;=V#!4qlS%#KSDMS%SMnyh`EF;7%qJ;~wj@P5|5Z&6u!628AHqO4Urqb3ZY}|!t zJfUg6xzG(oin!k)n(^<0HKifn9O$pJ_}WEd&TnmD4m+T=kQVVcHf;euNyIGkHlm1j zS{sya-d;OdjL_sLc0M~MzBkpHsNJFssBHp)bl5?%Hb!G zI|bhxsx}1GJgL0?BKpt^iKVbu!&nXbxK0e$kAkX(uYB6NLjEO{2lq>Z=v&QOzG691 zRGf5@b%#|>FSrgf1tpd#?T2S=QccXvwiL*sPq%o-wp-9OT{`I<#wi_O#NgooubXIS$X~Oq7d3MZ18%59XC`6F7 zL~TV!;q|3uh?zxK(z`CmnHFmUa?#CEEO9&>_9Bg6Jj6d~7vf7TGUHOPV2~_mL93)j zAx1*kBOBlXQa7 zV>UZ&h@^EHZB{+L6cjio|B!|VR@|soAs=3&F=CYTSM*yOZA@gmkwN1HfIf~!dSb~3VGJ8OMBzdo2y@vVhX1|D|q|d;!!&%F4 z;r(&e^6r^aC*3z|@|1hUZ|6Puz=FApm(c!gs{c&cFZ={gAsjf6!kn;NgBc1=nX)DI zR4L6^0*`_bw@qvqDWIn?ytK98P)w}>77&;1PfyS85YyGRqUliR$Kj&BB{U8eL>J>6~j{IJD$ib2=c$pj;Z#tPla3?@foW(ilCd z(OZq{6E%AI+rc9b9U3{9eYbP#`e#_XO?$*i!S~lm+2W4DBZpU34yU(vJ+O8QgRd^k>I*$m7C`%}!1hPjY1gB$ch`1^^ZK z5Ie89cK?;CA1^;^x5i@ zLb4Ewc`6eu>14fV;3ULFD6|gPzEl>5g6xnWdX%+M|51J5faDCV7rTc}u;q)P>zEeH z*&9P&ZNy06d69dgK2*AJPid*u=yawg$D8djqCGw_1+_af9f?Va<(1YXOG+RGm16_; zfIrYV&_5uP29p%<2|iC*rSJE3WNDC59Y)h+!eb3H6AU*}FFgh$Ihz8Hu(0N_=g&^1D5ovT6}zQ_2K|8GTZv+H2i*^s?18l z7DSU$MJ=xoKnB$4(xTMF#H0+L!-JCUqRZ$rC+V_VCZzVObhyhar3ACXW^ooS0Pui%fNe3<6gTPNg4ef06=CRr%gJ#?0g~^XS&dv|$@%M|1)n2y^ zk~V(!bqMuHE{48ey=yf`eCQnZmSzYuOFJj|klz)LdJ+2gW=`1@@6%;AHzPWyywVVh zStXTMipln5e{yaz6wuh@*kpHVs!&#$s(0H^3^+W`D2@H;_C>fHOQ9rWeGCEKMWdDl z3Hz2=ScLym1SM!lN>ESsXKLsdQDo=UF6n1$wr*bY+;{4gR@IwCantTh*6h18dwNwP zgLB&A;?kVOhhFQtp$h}f|Kb)c2P}rmy4jfJLvXTJ*581a{3LeP4j*B*(4(|jdO}JI zhslEscvA~8LDw=TEm`N%$9k=qu~vK$U!rpp=GnM`@fD>*ng_^`vt`buIoyE)gCqG> z(y@{B0%nkw8l&YkDt^v?*`j^xme)MHZe@)cbMU}{gQ2&o51)8$;?Tgr0iS+6b{IUY z#7*ipJ$>ZZw(UocZ~gxJZ!Z6J=iV36?)HEGO<;UFWG47JrLDM=5^*0P5<4wE-fm3t zN?xNyPR~fQTjNZM#VuMyi_Y%`)1_LZ+9VpVLiruUVZ#vTOk`K6L!5X~q~3w32l2Tv z5d^z86Bq7x-D%kT#D*QCN0;Bbp=x&3+kY9fe^IwiOqlV0^}!eS{ha2V8I!?&di?2~ zj~`Rt>8oCwxIoT+b;wk;-!iZW9RZ{|g^($x=kDaNLz#{dJV*2&U7AfJ>1bC12(@aAr`Z^8 zr15Pj6$WDDH(m;r85|p56>AK(O=588+U2|GTTR84*uVeq5rc+^Kmt`iof^d9scZk= z$E9AuBhMUtX~#1!zO?P$IkRWYy62uyN>vs1C0)FxEX6$akQDltqK=^*ai30)2R=I; zla#o4pBLFqPJ}g5;1H%>%iz)0n8A#T#v z@HE}b*2o*8MoWy9033_*m^o+dvLwLOj67CYzN(l%dJih6tl)?Ho^ zF+=Z%NlWnPrK}d_)LxY~*=&xLV_|uZMTAP@G$0xelnv46fn=Tk-meC>Q}J z7Js-{J~S3uXr8ek7e1?g`+V(7kNs!km^In5`bDQFTjxI2_uUUeyY8&M-y8SPfbo0A zkC&>|n`+@#XI|OI3U-d{H;k=s8F<>4u6|qh`jbrBFlOo_Hy@hwFlLd70}Q+mNNyIP zd8yl|m}Et^A)1*f2!uxwLC~)zT7YCV*Gpb&ijji=fg>J(myw;XW*6#?i-C^K)u4Dm zRl84A%5NT+AS10isEWV6MKa+T)u9B?kLKA!;1mkm!P8FhzDRhy)w9RAT_oU?=LUl{ z@=(>Gx8C?!Uwva3S}Ic=@+WAC;?3gqsJkN=M3WAO7!jKqECvQn2|&NIN|R=&(lGkIFgqTtzBJ|{FX&G7wYAXrns{JqWMwd#&5|Mg!DLz+$t9$ic@EF+nZA&EZ9C+3g`Td zxgr4DC9Swe|oSEK*bYXR`{PBW+(>4Tf%IQ%Xcw!b&^{}3%o2uNtT8E zTjq5-u;-b+B^}!z)_EMuyg%Q(df+8@mG@`G&n6Qu8_TNTEA)ex<&sp|+@2uWrM%Xe z$;q(;Dx>mCa*NUy%?4B^v?#Sh#l;&szb;oto8m%!*a4`Bi(=|2E-2r*BTr`w@v)9` z+>POgJstnATV7~H_q1?4l@|G;TG||rEK&-kKY5)EXuGI*>bh?C483i5PT@ms$8YX7 zV`!h@dBqPEPTtVtzCk_i%qv=4Fm6kaIsGec7lqQ|4bv0T194r8H%?1RPmW_7x)-jW zmXewj-?eDN^b|ld(Mg&pRLfbY3how=hodlu*=#h~5P!!Ez?gyydqAbhVAlc3T!-*g zaX_UDa4xw8r@23q#O~J{D+gT2f$fRH-`qZuut{u_G7*IS4XaqB=7{d9h0~Z%ty#=I z2z|9=Av?K@IhHYh@fXX~>&w(@Mc~O=_3BHo>mkhqoErp->ea>F&&B($6ejED@O5BRzs^@k60&6Qq<6cv5FKfR7Mz6^A&mjQ5Q z6@VoNUxm#iKcpuTz6E;P`9|3rVx0jc|uUkO^tUk$q=Lk8b6Ckdqr%<+=S1IaudVPoOo_zdk3< z#t9?jum8LLwL8E-SO|mbl0G= z_;y~WIR^V{!}>ZcPRLAdzhu+uh&SHfNU|syN^l!$c9H{wMvWRWWYnlZa2TB4zKxY^ z-!2P#tM@!tvwP1zwdmVV*lYhmPaf1wKct+12iil~5grBJUI|QGRKSgxq8RNSzen_V zB%9tZrQn9+Qcoj;4OlAvBe4uHK0y7&AA!O)MK(#V7Y{95txji~mM>I)g65r^Y~Cw* z-g;|1u90)69_?qz%*k>73K}XAi^OG04Lm~Gr7;dE5h=m(lI%}*!_uA*n{350hJ$A! zY>{`Ux!%E6C@xj=HG{ikx^XP^ZCUTt2WqPOF3)PWqV1j2r%fm>^OpqJ59$(6Cwbzk z1uLHN`NI4r9TUH>5YNoQy6?ie`-C*AjG5pHz?O;F$@FH)2qr?hk_b5D z*qDGpqDtA?TA<1yHY2RXf;3TkJl{twI~+EtMU!PHkrCor$+~>GZ(f_hD>s-7Ni%O> zxUPET=I2@Wfp-lZa{E1#rBh6)x8Lj9T%BFA?!hN_zkAonyZR3wR#N!@ows7_7ujNT zxHVwIC4YzBAWF#s-<$A2FbXo1$FN+^%luP6)rDU;sAmfsN}9?0J06(|vC5TfD8XV#u(HkpmNZ_pI&Sulv9i z<;oj#CO%x&cl*p`58c<}zE-V9cAxNIXhMfReL8gRpJ+<0U_W#y&g~UwJEph;b}J1t z*$N4lYMp_0s=2Iu9CWXNYqyRXZV&HEnPbU-~i@Xp)ssF-y(oO3_b+u=y1SxY;mAxPSZr!6exjj7XF=n7KDEnPVQa zhbA&dpVeEpu3q!hmbI_Fc6v;=!FgSAb9OHrSjonwLMHlbOLlr+^`>cpVF+8J-h1a= zBt2KCC-pVB8zq5ojarq)F|#in9(WW?%Wl~`*<(vhw%L+XB@uUduD03OQ@)3Jt&NgG zN1f-c6QA?ZX`zLM-W3x)`*=rErP^RcaESCx%Px2Kd1+7oI3#$7w688Vzf0br2ZvT|Y1iW5fcCkC{n~cFr*Db+UFY6?I+gZ8Eg+H) z#5>5Z9j@F{rtX6j0?&06Ej{c7gl7>_2zZ1Emc1)L%*jF4@PyLh1ijDPCcTy4pDpHy z>1Mr4SJcj9>s2WPS_OJlX1B7p^0z|G7f&lsE2Vk!yq=ZKnUd6iA@X~x9$ty?evOjB z5(%+^5;lr>{1e?t+WP3hP73gPW=1p3C?>cIV$w4Zu7EdWd5EljioDFZ4tukdxVHAd z;5&zov^&0HbLA`QnH`7szQcqTtJF6Vk1QBDhPkEkR$bJmalH;LUNGO6n`Sr8$s9Q{ zZOJ3;&x`kTZYfSWvE<2T)N|?wix*#H!kztAqRtIggi!uYf%i8r^&sKV@Z6n&ZZXWM%UNYo?@%~yh?YMXjCcvVp zt?gC1b~}UL-X8i)%$2HW4_vSo%!O3v;kaX&NT&+~k~6I)YqF#R?wA|sJcbxEz#AzD zsab*m8-N3BGXhOO@;E3D#;(YyH0HvsEro3$kP~!^b_Hdo>0pEib8S@c3bXG_G3)pn zRqAI?C?DLM{pPVxx*NKy=R0?uI(y{QT~kKRo;Jht<@M`K4}h0o-SsaIAC}&JL{;zJ zzjxKb6DQ`c+4sEq16fqgKo*#(pAG4~HLhav+iyknJ5XP=njvBlbZ3b^$+E)%35ksp&4^9RJ^e9x%}Epj-9+GT)7v2b zpP++cJh)lefu4zf%bJ^4uKwq{dH!_&$f9m?)r<2z<+a6gp6S>-tI*?i#3uqf1#1GG zLw6B6N2bt6#L7l>k1}OiL?_Xm`h)lT)B6}LvL$unxQ91D@_|=pcRCYccrxqc)HDxD z)ENCpk4KRjfUHImj412`&Y{Mq8gt>vMO0Bf#n(wJEPz1|q3j&BhnGhcl@mxxejSKm zJJ}f4jrDjTzkR}CThfw=qw8h^WA)en{>1CaQ+iRjHq8f?ZWAVXpL#wMh?eR<)whvy zlFc%aHFJSRj;JstPQD(IY<$SIabY!LEP7zL#8@PgDFtW5^z zX&8EA(=RWOyY}-3P#yQuvV!*UhwT1&6M6;zw*C3PYA{_wdoU&`K=d z*UTT1_6K_&Ieqd3qS`Sc;Cv_>KqhViD|nsU0(8mI@aVeZU)cXJ9uLG3+A40zmnHmHt#@+@SKkE*kDs~|<dXVS{Os&3-8d84 zE>U-=V*NsrQD4*v0w5zOd?0L$<6;y=I;UoYN=jNZZ{NOoi;|y;+qNw(Dk`G03f>4@ z6hdBU&N*MV`VSe8o3chCjm|sK2>v*nbw~5&Ze5(*GTog{ z*^fwW4kI67)p8prz|qEI5yMwEg;ZkVe8VY-*u~vhSXhz&&NB>PeFiH~c6S(+)8oMn zpEIUjtDjms*f3z&^V0Qn2HU2ErtNIoBiU-Ts8MUYkbx&F&<+HhVhwCVMJqdR>E^n(%0j^8} zBzhOp-@QP_!)Todgk8Yh$bumr24@3OjYPo?G!mfS@Ph{p0?y#3 z&UnrJ1APF2dfX8Y$w@=Ah{9O-Sm#={OC5Da%v1jdJd26yN%qbAue^Btqr>t|6#e*O z9R#Xz?|dXr2xc#P^6~k^S!tYG6-2in;ug85um-yAW-n|NW-Fp@C94g%NHSt?fh6D% zY<4pOqa!(nU=K(>Z4@sM86uAuhy=cqzny~Lwb1*$Y^b^yc|b2B9U$<{H`SC`ShZE| zy+VCWJ%?m~6DzI+&uL+tu>6C51Mp_1AkGvOk=!0#Y?4KZg(?zAO+cn@f~<4-khd%O zd>)9|uEqd75ZN?@;>K_U8WG=u!y{321D4b!q?1=RLs|8i8uW{Q4|PN#vHxv(b<@Ap zlj!`Hzo(=2?dr8~VbyZ+FMJ zW2bwV=?0INFZkwH3VPmMv+~4?-t@I(d&574{5*uQ*`_oB_7#g{MPQhl0crs}#DJQ( z2FWaOPb?2cBM((HhyLL*q&pmxcz zrD9EJ2z`^MTk3rN$#G+M6OF=(AyZZejR08Siq2%wSyA~C0W>H$02DN2z?zU$Ci1MZ zKO6#T%kWX)*h|QO0P7O>vJ186XKtKzu9jU0Fne~pRAVA#f3UAqAAKWxAZP01lSj}9 zz|Hl*VTa{B9=7vzo5^GrB^PMUpf~Fi5|QRcwC9Pn*lcEpMRMyUGx?<{0Tgryi&$7@ z=dxg!nMPJ6On%zxh*%w+vUJs!wd!ZbS*m&`i0&%WZ5Jn;2u)y}<|JC&X#^`2`6ikZ zr(?Bxv%(>{-6mqJxD|9Btd<)m8kwO0?zSm97N?6vrh`5{!5~`*IW9KFo$KuE6rG6R zvm;?uC)&U!X~cALU=#YIAvdfdxDY=yZXa%aeL(KX-mZCP=BDWvYA*mKwwjH4ZKA=H zQi;+kw4zAbi+p2M3)s0?sdrwYbw!-EvLEZ}hs6ppODW9m2qY&bIYg${HA_oo0lz;0 zVab&Q=9nrbCB^zBhar|PEkEFVkWD1i@Z!cWKy$j&Bw(2Gb*B7mDa{R>TUMw97ywy^ z&Dk<8f9d{ZY2C+HCe*|azpG11)v?EN?^-`c9WT8cGBKdPFIAno-phBR6zrK9qccKX z#g{YhoPkjD*Pec&kDmRobhBDavw*2op%qVo6|20o1&GO!>W}p&(=_zy&HOAiB?U;* zPMa$k*&1mgJWeTg%!4m@!#psVMxu7ZM5I5MhosFzUas!HV@996r)rm`wy!8NZ8rBC z)Go8CW=U-8KGW|||0<<~4xt=O?@8(oed_^}AZ`!1qgP_+SJ4z-I!fKo26UX%Ki|Mc zPgeaUU|`8-R!Muy41c>jh!$or|mo4mpx#L z^y=bL>~zbG+3D!m*Dw-)Xhj96gC`!`fGZat@#a_hpC~A{4cvc)4tF>}P)5F7L2+0rPoDNgs)n z6n$CtpJOIVm)qm{=4X>GTD*AJ{lmv@8FJ~Rm;Pqgi7(!G+HQ3GIn8-)?u6}oYpKyPLFO+RDbJjIzG* z6@GtiypiPVA8f2IiyuB>NdJMF8|Jj+f!zmI4n(sK>|cyEY5{C$N!7vXAe;>sR96=i z8@c`a_k+2ozdtuWrRVTTDbd-Vq~M$nBt4X)mHqFaRk1A#w&>KXIQr=9vq%%+-oCU` zl4JY{h2(F=1+lhLWL7#9~<@E$uY4{#|vi%(BW^y{=t*?7P2zJoSp+qb5zb z_Sefw(#D5=bHkK79^AWAHEnwE?nUqcFmm0*y6b*EW!BPBYbW01Zc3hSp4~s^mdkMU zfB3<>w;Os!kDgWKZg4xs!UF-OnAG_4FxtC~KYY+PXV%Ywm@6 z2d3NxBc6QG)!-VZrDGMJtTK`_6ERID`rRrShFL^UiG42*YqkK^Y$?%iiRc|KOdFh$v2b8?K_O!&U1Si-$y)UYOOiAKcXQFL;I8_}X2MY4lItth%!MZ5;k zWyIlF$UPoTGvCM3cn_>>J<%0IPo4bm#2-$+|NB3D?3(w)znW5g@#lW_gk3)L`I|?N z3=NugbwL9JcZ)rbf;$s#>gVIX5DJ?1wlY;|zdf++)*~}}p3+yI%6(?DwJKrOq)lj# zg?6fMDdd=*WFfp$To|dCN0*&m?eTkhLApzE6SzmJS)Ay#^7D-x9O%gLW|;1>9)N~glo`VPXbf3Eb|3(YEZ7=LO zZ(f zZS0YmkQ`T@U6f`Z0GE-Q9hZPj;?kn>3MBh;yJg40W{*=t)DHezEx95^G#csD z;u07p;a^zhy7Y|nfcR+Oya%(DzsPw5&H#>l^hR7`zuJblL!W>2mal(pzs9(OpR|r$ zwkDyz&#cUwuCrSc8>;)%C#+ef7kz1eSk$*ydA~wc{P~wEx3FK2^4eni{g0n~yL*rP zk=@_^wYso>kKEjz-C<=V%X*jl>M-br!kg@QjTM7K-OI~W@vu>2N7N^T%=0Fs={N=M zPZ-xYBAnkCZaiyJY1oyMUIT|z6*V2KM^fWV|L?lI|IXo{tiwABI6UGrOkNs}M~D>- zf%1gD!DA@tbP=ih$huKEkghb`GC_9yHm&2AYz>X&ovR{K+>KHIotSoyU2yB~R5 zzy5y~cQ5QdrQcxhYfB2t3u~(VIkV;#_ALBv_n-l_BUF>>C8nnG?!OpE~=-wK`8-Gwv7N%Mnf;VrTF4%-%|yeZcCHbJmau|9jxW0egxAv?gszV|9u*r?j+Z ze&f)@k%Rhr&9lb_!*ILZcl02$u{$i-xPcD;@4BnV^mj>f$^B;W0?z?LzM#DYiq!}2 zzk^+6#;2r>7UntJ@`n^THn@l#02hFR(zNuJmd{)NY-J3K{QmO>t6p;#4xdz8x~TtiZ~prn|M+!_FDbul*~0nZ1=p-> zvcLIyQMbZwXvx%p1Hnc~xT#Z`n{{jT?|x@b8{4B;ZT;Qvs&CE81>yV|GvyyVk1Q_i zQ8?4;K4V@{dC|#-`j05>mugvA+2Si+7f)W^<+%Nps5RnbcunuZ+P?iWGE|^%Swf+A z;Gm>lCB4p?)GZXsD{;rgB{s$-k4VJAyD_!IRac!?eb%Hdc^zc3%Ll>W;d0rDheUQX zP(*ZrG}wm=BLD9bwRA!vDTQL%{(%@mPwi;xymf4DaCcQ+)$^5kV~xS}Q+o}&?!M1X z+n?BNSM3-b*R*54BX^%~__<^Fe0%S}8>(Ao-ue7Hk9b|#J7(dZ9ocqy%m#X^eR1#J zRh4Rsx>Cd}W&?$o6&E{3(2?LSF@mD4@QlS>zs(aP*!ER&Kj*=GIO-ssr2?e{) zu$#KKMJw4_bb-A=45;%SD>z5p{9^`GXa$&E;dA?ta4tNKCdZj+Ce9jVrNHo)f}?k0 zur|f{jkE0NFooumJAxsxI-%2Q0>B@zCX@p6o*@w=GBrfCNk*)KxOBt7dHw8&2LhNz zp|?aALG2g6WjIPXVkS9f>s1P+Uv1m1I5~0lw%%2@&wlc;#~$l5wzfGH?)L&JRh8#w z+*W<~ zf9Lw#c+Y(t`Qs$C7m*d5(ycylCnV|C}IDPn`>$rZ{(}xjp5mhDu;d7IrXk(WsGBu&hG8v_% z%6bVaCH3Lpep5hYi@tX6>Nj+Bc9uVo+P8FMBl7wfc^!%7h11EVj=U1|PI-0WQvFDj z72UfYY8+YGH#OkT${sxwhW|30I(f-`Csqe?7XY5NaRc%KtcI>{JnMqeA(Qj_Cv@?q zj_Z5H=-#vZbLVN^@Q4uu&mKCY|L6%9Up!^b%nK%8(XD6CqUy^0Qlqaw!+ZAVIagHo z&A{=KE9Q(o+v|%?-@O#RQ_B{AvJnNw7HukwMp176 zuv?Y&?4A?s6PM^8&{$XQt>~MT*43&kNiM8Tf*D=T`o{*XTei~+`i2bbSIQlIg&7nd#1Qh=a1q~5*XuPnI%DUZvMLmS48F)+HaE0QnVTBjB=xd)Hw*TVRFZH1>*AENstC2Yg{)%yZ zcN(m``Pc!eOf(a`I3kgPcypXtz-t(@~6e+=Om}8w5))* zGmO-N-tf;nFv=QWJ6#+bMvIUA65JB(P<%Dogr~zNR_s`Izpw4_!|E$JG47pw)vOt& zoERU`Hs|J>jpo+j;?+yvvUzsvWY>s0*KM0Qe)5GlMh<4e`da+w%O2mD#xiFwGEIta zVUN#;(;l(?NXRnI^l~c_t|+2SFW2g*g0?SJQCzk?&J^JsB0RM?n~~5IsB0EfZfsE# z?3Nexk#HLIH+$YjHRPmPy6eDkSL^QG8)P5y?cd8jq{_PSdXW|J*fJXXr4mC1I{_{& zHPxSx0apVFN!TxSVXw?cN|u9Zh!y05CmcA%fzMOuFf#pfzx2mT= zL6z7iRO5%oKRRjWi6Q-~6-DmtVei`O61icO@)8 zQ2W667qjK+?(w$2o41X7V#HIpzALgyABNCb%CL&7>KYGMo4%4jAT2$$C?mhHz-RU- zFUrr#O-4u_xK?weVpW~&hfB3=4aaDr>I^o5WM%P#LQB89A)ijDu4*S>9~5QQ!@#6L zO($9l{qf75tWQX2UY+G@eDsPx{LixsXRI84#r6&Q#+J&mC399>vLW^Cad+q24W60} zlgHxZ&p+(P@7y%@@l4~>-G_?)^jgB^u`RRya~$haMLG7N2NLDKF#ejT}f~! z8IMT7aES)zUAP#Qh~OSk+0E<}r`8#6&MkIP53w`t^0i&2w%Ze1Hf}^PYg^yYwn$&I zL6=+X@b_SdZzg^Z-Ynzc0s!MaDcK!o#tomOo2EA*0nTj`;8Xj*eUF#sBcIDN1|ba8 zWV^X}^Je`Q#`E^}<#x9Ee7X8eYIwlbT<@WV*&1S1#o;PwR#K7|MbfIq^__ z(P7bW7aeNZSqpYHy5(@949 zIs8(tOK1aI+}GA>;v~j?Y|KBBmUC~Fvi~U-P4R_f8sDQ;SVmt~YEn{ivL48Cbgvl z?Syf4%CEei*=GIv0SAwN_?Bg3XX|$R*#ubfPsnmoN~dGa`3^0ZCQRqCEF+MZkN|HB zno9E`6kb{&#m@j2$toEllN?CQk43p~iU?lAKUix=G(&1i7^v8vMVWzMYDkU(oDuLs z{bA?UX+IkBV!L>UkA=NJDP8tzPj|Fons6P$NT(&m`QWNPDUf2Jlxc{&rUwG?hL)0? zWZ@*JoVkdj$44<5V$~*gL;2^7GX9`^om>mge`)Kq&d!BLIL?Lb$(%WQwH?#t|9$9S z7&gC=_8^JQ0bgxTVtMH`maB=h&JVE%iRWQF$FSscAO0=UyV6~bwikcZv7;YvUzqxy1|Bq>ZI>L;e;06p=_y} zwn_LM15;0^RLy_Q9->aXW-nW|ZIgTQ?%m7VzBoUWIkLA}W%p{kRd>y?XS&`)IsMpc zS&4Q_#JQGi%qQ?G=RuSTOff!P^Tr1ZtgdlF42>oHF8c-10y$#^$1vK~1;U30&5f|9zHhU|S(ZA?v@K=6FhKcb!z9*~z6$Kd%X)F|0NW?8IFoPCn_$?=_ zfjjBPnZXG&B3elFe^GkiEpHs!!o8O6Ter5f+AS@H?nE{!#M?NWpW|L30_nod7Pi%?Ou(vT_zY)zB%*zH zo-;`qay&x*FAb3AnP)$-qfJ8tXsXrS_4`jdGywU*?f5&z-lKxAM%@Ruf;hqjr}fE7 z+{s4kkE82p^vN9Qc?et7Lu;qXJ5?9G!YPDQTzA_KwY%wFi@i{%+S2=)uPbWZm8T2c zm?%_6VqyT^*1C1~V^hqZW8w@X`o!bGsR9qeVv#ASb)x2w`t~)4w6_ych@XzBH4&|b zdk2Uu)HbBW57Y&PbN8uTyaIZFLTJ@nyQX?B^hs})Yo?UE!| z%>RTfhWDV|FFU=%{V{eOOSKy8MfJ?KDhtZ6Y%|hx3oMxMi+hfoln^W~MpQy9>{79B zi{{1ErP!HsKW?eBRmG_-RwW%e7hQ|JD6E<#LZR#?(B_>-XEnLb*MMnvv0 z_I2;N<*GrGn;QC^|J2A&=?m@sAkub+PDiCI&p&6;}d z%!PXM)ApeW-O}&Nno)>_%>=br-BNI8PTOWI3*R(nshlm}!u#;QZ2QSK4m`2eK5sC# zY-JDbHPCTpIMSVQCZolX52QHgdGk8!{iTeArhx+u~Johil+AbbbdaJz+4rY6& z-;#3lPj9{*XWaequU^{oR5Uab+3icy>1oV3ujIo z-D@RvFTcG~B3WTCI@p-)iHGhL7q8&hLLwf<2jcRf4ym&y$+XMOIdV(;t}`zaI%K9k zw5wbr?W(O?ceuOWci*XHPGlp@8}@1gVaM?WoC59e1t)LpSvkg!$dcUoN=&vOSslLt zXN1OVdo$<~Cw|wq9uxgjYK?zz9}DL|w0hP`!%9}iHxsq8Mw}E#Q1C^V?1QgCaRaQU z!A~e+MQ~P(s>1k?=nOpC9ZEr9jq%O)xE)`eo8rqG_T>(H92Q?+xJI|#|G`DKJgr}H zYNw3*$X78Nha0=OeDE%=d*b4gVVUyAC&bG+ZMf@+Q_0X?@jcg zQOg@@hIMauKcG&BNCmiVRzW=7XM<-^{U_~XV zR<7!;SZ^${=kHX1wCkQ%m#Mi=+jWlmzOrqZ-m33z+k>m`qw)0;L<$I@pOZDjIyU3t zaMmPIQxZ-u8FP}B=t6jAxD!uEGxJ>v^Ak>~$_#;XQPCY2^t{TUa!(K#N%7rm-aN#<|Uee)F0!=vz_&CY|Mv2HW6)rQ_fzjU6K$c z%m@E4J_8#EI9L>kZs|z)8FC(5z+hs=1zaFB6uV{Xsh#!&SEXH~e-jD0#-W99mmF8_ zd*NFc)oMh%7MvRJ;Y*0z4*i73@3Dl^<8@~Z=!8dU|8#7CMf8HGPQuR{OAwl8So5al z*2VS<##n@&c-M$H|2KB8m0Bb4rW^6`V6(1k?2akT(35eECIQ=Q0oY@42{Jv=IAg&k z;@@%3h^^RuECSp^4|R$G=XCy=f#6V%P3Zr9=>K#nhf0g{BtiO<(%|ynzy=!zy*E8M z2|los(h{PYS?6*%LogQA!BNYcT_`IO*#TtJIkp27G!cOI_zo>#ABldKj{641ZaqFN z&6l2NS$==Ij*_Hek_DIg(tU{Zh)qB%kOcJ{qUh|coZ*d-W&?IgZX|v=1}yiB5pe>l z05$>pw5;B^?52lz?AX3ynXah?5*u&PHEN38l31@FK}@TO11+xcHlbW{!zDw?rP4h( zfN9~>J-n}`qo)vL8}=3iB{p0xKtfywyl#`HBG;5fS~|!Hnu_JJQZqUh3A<^S_4=T- zUSG6eRde(8*DOlkf=~$d{M{aq*U8LDPBe`3yL|WOmi3H>A*)}BI0;`kjTtye9)RQq za3~*37Civ(lYxM&To3^hd?_O1Y!AxEVY8RZ3Xur5uo+qf2U?W&3Zn&HwtIaGw6twg zUU;%?w_dgQn*3lJ?sYnAU9rdUds;x^`v!ceDM?t^$0sHE;2K2&Lh$_m8Q;sZc*+qZ ziB5p}g)bW$PfXl|CGG{guY7o~y6vT^kv1ZU*hxeCZ@*NgtF+AO=7myKi0GPnc0zV4uA`(R;IMi^$MA9DkdBlcYk#)Bv_K6u zCUE_^I>gv)mJ=CT?rVtFW#D3HK71PciyN}Km+|RgSo9!|he}x}mrt_}A{`n@YODTlVN{^aA^z z|50(LM3<_@E%1}B$yoaq%k3o7hk;(0mev)c-Ca_e4j0QfqnhANfVW!R{jaRsQs=-V^Zm0& z{??Y@+3~AO9-Kb$fh{-PlcYDSO;z1mT_=YIE9+(z9Q?@s_a~R`-QU~6eEnM4;#t_;5C=l z1>p{HI3%VC$2tnD>{wq##;{bYP`aeOUT5|hsaZrJm~!s8!Opkxp~FtvpjSf0_NuB!%HVSt|-!R za^=A3xR_4XvEw?|)agAqA-<5`#$#w zb|Eyr@eoJc_kqUOllm=eFrMeV7s9p(%NFi;_f>x9PI(}DD-uR%_lJz?^_KI7wham# z?vw|j9@??ybZ3E=aMdDDg3$`8M&J)f`9W%NYn*{MV)hZDv5gAt^PExJI7R?z8 zPN)^|QW&vBhMeV)V@3}K5T;O{wiY*Z^fiauR&`Nl!;ci~(BrNfcI~~-y>9a- z;@+ZvI1J@(O~No4Q9a=&%Y)*ujlfWdu=b&BuQuCH=S;izns82f&Vn`h`igb3E-`l5 z_u4aFG?#nS3H2{2g~%785W{*e(a5p?k%C}68p3~Jg8_42Ab?0MMlwQ|U{5Ni-Hg^r zZIW5A$T?ibJ(-w22L>(skM^l?*N$1bTCI&3wl>%=+uKvRZKzWJ)(f1gEIQ+@L4Kw~ ze$rsED3M4Ua2=Wg2d^lJ1mTDUOi5rUj!yeAqCeppK}S`NYC&{IroBKgRp`fVoH}pj zvTNEl;Rec#?MG}gyuM-o5w*t&vV+KMxMOI4%C=eQK906&xAsNE=Ksywhpi22DN*6! z5Tvzl*PX9!{_placYxY7tc_ytgR4jrK4s0Qz3;yn`q~>K`h6t|d}L={j5oCMQB=gv z$FL(#G%Xsuuq3BWO)WA*qyy@-kp_FG24;>b)e1_rk*}iBjlnn^((NC2s*d3-13IF_ zc8aUKb!*4S$_)Dc@(-dbi%u=E(bAx`cHXgt6{qO%SJtk*6B&sKTIydHG-^NXWNk#E+ zi!*?ze#vlhC3fLt$1u#39MV=|n2sJibi|cW6dl3?WB(wMqDW4sXo_XM7){ZUp)(>X z_L}=6^CPA@9QB(9`%fW?j`>lmrPlz2IV{%7``{Ohe=GB&cwvV(irGyj@mSvufT6bqVET?eshwIGVxmKS%T{D7#P#)HG_kQ}x!nbdN zH-UL}vwf&-hpW=E|FiGy|M**1zv1pPdUJ8Ey}-WT-fAz<|1u1RN0Ux9sli7SI56!key!8+LTla68r$2JRq^%oQZA@s}cbjX9{SI#Ve`g<1 z2_Ikj#&daPca`S1W^mB5-NR?bd;F2t@v9Ul)Nkcq7BP%7{=kAi7l`f&YH5^?+ zi8BmO0?yz>G<>mGoUsUoP$0A>{3qmg(2{VDRE#zV)|{aVVJ-Tzefr@GKbZ5{!H+*& ztG;e)GFBS{;*P!a<`-vgt_a?D$4$5^_`!X*qNrLnP6;DMX@_#TTqsvuq+IBJ+-QQi zHUnW_5xpyNCgR7-C60k046>;qKG@`zo>QzH>;Jgi{{3J7e9N=1KlJMF4lYrzwyiPx zsUzMi58nKN{q?Yo6ZUS|)^eq?Z(l0?PyZsGo#++%7g1w0+{Y3om+8{`77L+-tjixzZx zUOUQM482z@7vX~GUJ z$G#%J5&1$`DHC48d&jKSXfO8aW5GuZWh{LO1zuiZsi z4cJ%9xiUOQyTMiQimOGUeR%r-TBum7bKW+b(>5h|UIT6^*3Rei75YB>TfyV0=GuVw zEzCXn$-1TdiHHgn=ZS}QWzxTlHxU72H9a9Y;BG%}0r!;cb{lD5$83&f7R!Bs%3H3g z?L}g)zx-KyzN)u(t35A?8UGpeg1y@quTO7#4wlNz_u_iJnDL*NvXr1Ki2VDLWx*mg zT9z~{W20w3{@1cxtpfJWh!OuOm1%#XWVlaLA71r^cgV4SQe%)`8F<>eNt$mU=5 zO8EK7-QQwgjB{q+8s_c~UVi4#3AOE=H}(17k9=3XcirvlZj7)}h;avpqmNJ)Xhn-S zUlqV_NMSc46Wja+2y0nj7==Zi?6W3i;`XFpf|})Oxg#f~iBT%(nD=?8wZrx-^i5fy z;pim{4=kX>Fs64f*{>||q)1_L;j3>Sz3G!LVFk>;v*nL7mb4t%bw)8b&|CZk7;XOcTWXO;4WM`1ZD~LKUuJSnAF-ShL)vr<$dLiS|9=eZg=Nzc`Di~L1!Yf*%wf+Huvmsq>vCT2ob zFQ)c$&D_~%0qx7;Rn?Wk6X@;r#l5Y^54`l^yBn{c_2jJaQ~!0t@BaDJCNYY4%=n>UpxBxhC5M{v6xj~ zh3;7-H3@Vx3*r5&uv>0Yrl+_hFBwOrvHHicGhcQ#>`2*uAB-ZtGwruOtVvOjn-wrY z%bkyo?g5-i!Knb$EZ3lu&Ck7J-{g1ScK6zOD(~;3R*$JY@8Q|Ij=gyCQg_@UbO1W! z;663x;)%HHUzoqTwDA6$;1nSB+BwIh7cdtbMK2U!Kch6OOSgi&+}!jo1unm*u&9e0 z`BdohnAZyedHE?&HL72Qbc8fm02PjJ5E?p<}_ytF;;&5$%&(f zKi;khSP)va{<5FT{p$fj3*x%SyCU)FE#w(aQd_gGk- z{II`vlQMe)S>1B7v(vf-j6_dvcf><+VWx4p5C#c~f48)pd|F>3D*t~gv$(sUXRLe_ znB|owhWlNt{R{MW?L!-`R<)}Z-M69Pp+hgcd+6u$A81~$dcAhrj&Wm$tsc2?^)t2c zMQdhm;{G{WRy+MAJZ3$EmJK&{O)coswJS~$Bb-sT7w*SknKCk98y-0+7bo(fTgj2p z8WU(}#x&JMjbnZL24EkHIs9YTh2lQ01bamH^3mtsFk@(Aa6naK&we9A`d{ZQoWEfE z;pbm@-3{yA@|0or?kc6#k`Plh zDc$Ja&ErYU$-yz3oMa;_6=(F~Q-8oM9ZM^|L?Tiv`&W6L?RrOMFM7B6xxLRHvS00J z+FPJju33roT%E}2D~I%kAK3VC_f$MSWod&O3o^?nK<3t!>y;7i3$TU5nCKtT@==u$&tfc@$g=3WF}{%`QaW* zs5xrgfnT{F82vD*IA*TSE!ihx?;6`YN1E`(-G|$rz#0c$We&A9tXUNubyTM{-1LPP5#}_Fe!h4h~H|byWEJoPm@`XCiKt$>o{;6mJs56rX)e=5hQf+w~#imYj<^{TNB|X!j%Spfqv!p;glTsPr=NgptM9c z|EaljXgG-~B9i<6rlCaYND{z}HnE1-tJ!50jFd2=iBBq&av1pu?83vte%GM2W{W@p3nWz-xrFu zuioYJ72-o2zt`+7ojf1Ua(&6?({MJbqvzvUt|iXt?hy-$XBA z{XFU&X>p@Jvy8U5FC|v8rLM0cHO%PP;%KRtVkKMZ+88OB<0f0IDEPFwCd$gCGJSwAksBx!1bMkP8RWuLx$w(d^HSR6uP}m^{*F3L`OqK$p?j^RT zuAGf;kpU^k6pkpC1MfVJa>z)?i?!!e+TGjpS?t>PgM7q_8t9PEVi&9#XXJw#xoSBw zo$@R}L7fusknrbI9oNY-n}MI_4+@pe0Idp?VQB%g~|8kswsd=~#yK9nq{ zJWJe5f3!T)DOpZFOMWsR;e02bYu!sC`Sk5nuj!O5C!cFwj+M^P+nJ1gLdiltA}`V> zlq?y6;PR?iTSKy@Q?ihoyy-fOHz8R`l&oNf7Wd4cf3XWBC&Wc?W)HnQmJ>APEXhf~ zP;$_&!L238urt9r{oW~u!P;t;MKAcN90qgV(PMmqUPlg)9Gzuomz?6xIe^tzh7OYB zY}&+10akPJKnb=urRZD_VKt{7YTQ3r56Ac~IoMky;((I_<(DJpSLunJ8=Prl4;c4HU#W9TcMf%-{OOBRQ>Csxk^S!H<;{(6s z_z*1&Z^Ufv^w!Vby2$A*?Q18G7^Bd8K6?wJSb7Un4ss}t_V<}N4Av$)ImF^%oSDPm z=a@rm{%~@T-eMV0j|-g~ay!(+y+P`sOBtlM-gD~VxT8axI(bNMF%SHH`H$6uy~TQ9 zmSQQo#p;3HLfir;2ev-g3pu0pC3=AKZT8kvd=71ir}c|@S|7b7ni<~b&IEgFN~9Mz zpKil*{Nq~6-l~t(p~Wd-%qKp7$=<>*S<5+2ExSa^=;VP~$~Q4e$DMxJ$s=|?%-I)_ znO5?^OnXb`wq9tz>N+O1)Q%xDuQo^nXKVVY&k=86rxT%0gMS+rF3ljqM6&1lc-(KS z?gCd^a?}7;S*&*o#1jYnOJulXDSPLIHBT1p&bheC-gIHV$BUjr%5|d0!2xLvj}OV} z`8xlN@3byJ6obb-%WCW7FneeC0*c`pmC+V$eNf&+5D5+{G8VPK-MLl7U(EOUF!We);_Q zX>%`>+HFMbjz_-QqcMP+nUXOr>2lpp(Sw5A=tTU5YmXV}N5U3BG~OC#TH`}%^# z<9F1Ia-A4>$%Vr*_~9MX=BHhLQKYs@J>Q|W5j1d&Ziz18U1Fx@3j+b!-Z?bXM1MR>tKP7iD?I zdQh_2Xpuj8{W#lJ1WN$o>cz#SrIloN%kP$D#lc#UuO%dC`9|7{SqO9ZM&vBD{}tI8 zh;)q8LXJB-$2$(3**P9ZQaY8|?o~8=@PM4s9!cjXUNWlatik=WOM4_tj=y+X$9DAe z=~mRODmZ5W{0>!B&0c74Yj01K7i%N?HP1_s*i@~sG1&`CMF4?28oiczeUeY4=49|4 z#A9ri(ukC#i zxOnYPe$UmYe)4+}=`cEd@94Be6CfOYI)Crv)GHw$_UC7Q51#T6%LDPZ(tKE8BpRtO z1?D22hbuEPJN0@T{Khz}wrVR8LXGtldkkdc2U5|g40hFW&p5MoP;Jkm!u0+xuJ2S7 z&ypEk%O=O=78P~zH2K<&btsV|AqkL>LaldWT9C1VC}DYE`{6YT!+V(Mp_C1s~qJbo0!M2L^Nd7FB;eYxUwA z&!6SL-0Tgy)UxcW)dFoJZh0YosfkU-1j#Ito9vO{*rMf+98bV)fd!xSt1oMqw$c93 zZp~bqGDCI9W!?X4F6(gQ!pWsb=8+l@*I-ywAn~Uc3rBMWl;K*4d^5nEsp4BU{KCsXwt3LK2`)_Z3@#i<+`07h(n_ehF$TbZ&5R1|M3YVs|ctjwA z1Bp1l!r`%qADZZ1BCo2}ggjnv2||R09`X(DzhSakeyd*f*R_Lt&%aU?AkQ+a*N&q` zSz6D=Ot~nZf%E-cvi;_$N&ezYcy$^*NwSU^{b(me&WJ3EFhRV88QnR67ovh zb>{;MdfvKd;-)E+U;O+2Kisg}{;jU>U8O1)%|3VF&t^4@ykh(I4GW*U{!iFKRj&<5qQ(Be{^wOMoqxgc3)ND4+8w`m?De~TeqqZM z<0t>+hIhX*ylbE8=1brCi=!VG^xRxoh5bEq-90y5c5ThD`NPk_MmQpv*xOw**((8U zP-7k(9qKxQwrYmkNJ+(YV)q!FFo2H|Y=IbFzfs73!i^M+*Y=HYSm}k>MY?&R+lkwX zkaYz(sojlO!X zKdCqjw13|)?5#_l*k`Yqwq-&{Ki>9i5zcsg{@SOuefE}K)y)s6VAqho<39VW3>if@ z2j;58O;QhJ%<1n(UF9gHN9*3`k48*2^wENaMQ2{$p~_G{Fn)MDK` zW)g0*M#rhh&<|tU;}VA)fC|I{km53KdO$_(>@tLlT}5rPuNpFT<~RS0PY6A8<;$O) zerx@Qi|y2Po9?*l{QD-3yG#AGwK;WN7YI%Dxj*~jt>$)@X`;(%s^I3H#vH+T_NHp1pfl^e8SaHMJbeZKZ3a6`npd zqXOj@ ztQf1B5BNNbp5J$9=W>tln6YE}6?vDJ&d4jx>)!MH(GxB$xwxpJv}<8bVQ{kjm5!4W zXizxh89AU0Zg{W8e`L|K2g^Ts=;$Om^hs`(eEwte;0u+2Rx9{mMs z&05GB&wy1}*7V>;tjHY$RP^s+eT@9Q$vLeWTe0)^V)5bMy|@fA0j+}^V)mvpzMzK} z@$Z#f*?>J@@lgvg+Zmem3@-g*t4FS-pk1I$i1-}9$*1o}ip09{=Iyd#H8vpS)dt(w zIcp$ybhY>!bWDARH?BF|qw`AZH0(S2rR{I1QTB6ZtfTN1y`P+dihN~`{TAMkQ(am7 z3~WNDAHzF$d9fOE-a!PchtK#9ENA*CISUtgV~oAudBYni>*+t?jdQ)B*c(lDWJTwS z)@A~9oUI~}l85F|=Tu26UzMi6o!?3}5W( zF|`srZ;=*6^rkOP-=le-QqVdF^pV^ny`g*Lw@#b?Z>{nFC2M9WhpdQ= zJDpnkqOG$Fw#MbL*1;;=ScX=@%bNB~P*Z1luGh4rzJ-vQ!qW?YA?O@#t(F)j)?-EC z)`pyZ960RsD&TP92;#`o`|xBe@f_kfK0lY~@l2n`^aSEW;tl-PO5%;gRm7W!tBDWt zyIYyV!~FU-;v>Xn;xCEYiI4Kl7UE;X9mHP|cM_i_K0|z#xQn=(_#DgjJaG?kFY#rT zXCJ@v3e&GLy`SmVm_EQ94iOI%j}VU%j}hM`9w(k4zDGPs{E*-JnD{C2bK>`c%0u)K z6N$<4D`gQ=h-t(O{xyr(m6%5?l-^Xu#Bx6AMXV%N5vz%Ph<*8HKj{S(CJvVRDoTPH zCbd?S0Yw>56ZqE)h|`Ie5|{AJYfm4?`%8&G=aUuu$_;$7l6WI=HE|7bE#JJIZ?0qd z4&q(J`-t0E>lS|Nai-bJ>L7D?lh4@~>RqOP&v)4J>I0_#O#C0>*ZkJs`R4a*fmWg| zs3ROI@MrRlK2hG$CrKIf3+1=^bUvTM^p*VULL#iK`0H{$UqxI^TtmE#_!N;+s=vwf z5&rfB@efiL{XM4NXZj@5A29t9-~WW^&xqgf$=`|J3L0_pzF{&Q&vXLQlpiC&C+U3B zg_upu;q$J>Z2(=|-@WvTiR!^C=GBXJOM2yrBFG_i?DUNXo?#sof@NSsWZLYziqZyM}PV}|sp zF_So(IEQ#SaV~M5NQJS0xRAIG(qfWPO){!UMm05IR1>zzRG^F_lZqnes9s;LR1nwl`GsR^T+S_@Ga)zpMhO-&fp)I?TIO~#t338R{t zFsi8uqnfZc3ksu}nlP%V38R{tFsi8uqnes9s;LR1nwl`GsR^T+nlP$~_>Pi;Fsi8u zqnetGVp9`FH8o*WQxirtHDOd!6Gk;P8P}#JjB0AasHP^2YHGr$rY4MPYQm@{85O!7 z)555x5=J%2sHPG|HI*=`sf1BYC5&n+VN_EIqnb(>)g+^uN*L8t!lUql`yKQgi%c;jA|-jR8t9~no1beRKlpH5=J$ZFsiA9QB5U`YARt=QwgJ* zioHxmHI*=`sn{1}R8t9~nu;w?Mm5!+`9v7iRKlpH5=J$ZFsiA9QB5U`YLZb+GO9^N zHOZ(Z8Pz1Cn))2cM;AslbzxLf7e+P7sHQHAYU;wMrY?+X>cXg|E{tmGlu|OPsSBf; zx-hD#3!|E3R8tp5HFaTBQx`@xbzxLf7e+O8VN_EWMm2R|R8#*}kc?`QQB6Y_)ii`r zO+y&fB%_*!Fsf+?qnd^=s%Z$Lnuai{X$Yg5WK`1-Ml}s#RMQYfH4R}@(-1~A4PjK% z5Joi(VN}x)Ml}s#RMQYfH4R}@(-1~A4PjK%5Joi(VN}x)Ml}s#RMQYfH4R}@(-1~A z4PjK%5Joi(VN}x)Ml}s#RMQYfH4R}@(-1~A4PjK%ATNHU&6W0?r5bq)0OWa7jpE+zIK0w?|e31FP z&UX$H-ypt8{DAlo@e|@_f+~sVCkBYA#6l^pDkk=j{8dk41+h0VNUR}BPbDkqsbs}^ zso~6LCi*d1T|r#H+^*z13;EZpnO;m>#e5#%I}h@&%}noN`Z?nBe6p9hy>xmCau$A0 zR`2t#A2T1PUf(m_O0)%ajVLozvVMWQuU{lz)GufHI>}A{In&qkog0WZ^2tran~Ap& z*AgFe66GC(y=llyk!-L}jWl`F$dK z_p9fLuMmX^{Yn_muRkhJ(DIUgn(1el-ox}>Nu$8%qAAcrp2*oX)-n~O~$5$ zk}Lqq*t9q{Esjl#W7Fc;v@{u;mL_A<(qwE}nv6|Lld)-OGBzzu#-^po*t9emo0cYH z)6!&YTAGYaOOvr_X)-n~O~$6B$=I|s8Jm_SW7E<^hAoawT#aH{#-^oYY+7hBl$K-D zQZhCzj!jF+*tC?4O-sqxw3LiZOUc-@I5sVgO^ajGQZhCzj!o=^Fi#nqmXfh)DH)rV zlCfzi8Jm`pv1ut8o0gKXX(<_-mXfh)p{L}Dj7>|4JX;)_7RRQgWNcdKJ9$&arln+T zT1uqX;@Grw8JiZzrp2*oaco+;j7^JU)6!*ZTDpu)OP8@}=`uDgUB;%R%hn{?9GjLQW79HZY+8nl zP0Nt6X&Ev$EknkpWysjH3>ll2A!E}rWNcc7j7`gsv1xH^S{$1e$EIb-*t858o0cJC z(=udiT84~G%aE~Y88S94jFbhirMrnHu^4X_V$=x20tpo9D#X|kl(AEYQS&%3Oq3a| z5Ti!^dN*-BaRc!l;=RO;L>V207#;HdLE;<4H;JP26k>D;iq2Dr(E-Hh5cCrR#8je; z4#bQj_LcHb@(U^Xg^+yt)%SefO0)$jfrYwPex-}PR0ui5o9Ge2QN%ICvx(;r&n2Em z{26f)@qFS`qLYubb0OQgknLQ^b}rJA@%19jA{OHPBDCi|Aa3dc!^Ap1uV=b}C|Yz8 z)>DEv5@m!IVLc@%8g&skM{;46p6wqGeJsAF{Py#<5!-Dv=n3f3W~H8WBdw=v=n3f z3W~H8WBdwAJ|&cj5=uo0*6H#@q@sjUQ9`LG(L^drFhhL>l>REgDqEh2RFqIEO0de7 zv`9q>rJ{sVQ9`LG!P-`yi&T_QDoQ97C6tO1N<|5!qJ&aWqWBd`MG4l1@+*;w5{xE6 zk%|)VIgnCOLa8XBRFvo<6(y945=uo0Rul3>q@o1t2tkpG6098rMJh_LUJw+iD8U** zP^6*+tc9;oDoQY#BrQ@=3JrWIG;z^?%Fud(;$N+dZCJ+kDP#MTv3<(eK4om5GPX|{ zTc(UHQ^uAlV@=CY7vzSz2ufYbSeG)^rHpkcV_nKvmonC+jCCnvUCLOOGS;Pxbtz+A zDk#Ynl;jFZas_#{f|6W8Nv@zIS5T5GD9II+B_v$ZVPZY{w36*m$#$q@J5;hAD%lQ| zY==s=LnX8?$zc=m0pe!jgUm<9dnH?`lC4z9R;pwxRkD>T*-DjcrAoF^C0nVItyIZY zs>Db^J{T#2JtTi?>S$sVa>k5sZpDxDsIZXmf`OuU3Ri+CyV zGU64)c~TyXGQow!btq4e>;$(jVEZ6PR*>uzBs&GkPC>F$kn9vBI|VuVf*gH8j=msA zUy!3O$k7)hI|VrggB*iFj=><=DM)q-lAVHNry$uWNOlU6oq}YiAjfQw>=YzB1<6i9 zvQv=k6eK$Z$xcCz=paXQkRv+C5gp`+4st{XIiiCc(Ls*rAV+kNBRa?t9ps1(lAVHN zry$uWNOr2$lI?$CKi(o1LQkt^D^;_7s?k33WF=8F+iJ9rpy;>NXdl6siLVg%3$pIj zta~-`u%h77&YwCB!mfIk6Y9l2}Eo2G+3mYuNiW?EM<{ zehquShP_|IdeyM^YgoG)_I?d}zlObE!``o9@7J*RYuNiW?EM<{ehquShP_|I-mhWr z*Rc0%*!wkXff}|z4O^gwy?f?pk?h(?a5T~+iVyh3Krvz^#img6`o)Q#WeTbYKA}5E)$suxb zh@2cECx^(%A=vZf{fAlpZNx{2&BR|4w-aT(7J@xr@G;^J;;)E1iL!PJ!JaSpEO8fc zH&NE1A=vW;_Yh?@7t&r}?Zm1df>mEy@)f3EWqLo;uQ4riLy zc792VmKcJyU(!d3$B43j7lO54P^`EiSo;M}5=E;F!R9YdM7IpV@-Jyw(S%_Cm-J^$ zf6nyxQgY=X`iO}{S@ncevb@8&DWoi>MI#NV6sAQl4XHGyGx)14Vpov?><$RZ?m&pU z10n1V$hTy?hm?%>kdpBpQZn8{*c}j*IXa~3MM6}6Vk1%Z2twE+K&xVpKu~745OxaW zxmaaG>J*=}3F^B1N;iluqG(njYE~gw+VL%nNBkC+cI3txFa&$MJee+k#W+P8)@l3| zqgB$mOpA3o1naas7wdEgBUiAPPsBPMGD?{)W4Z^^Vx0~dJ((8kbO_dI$)S?z-b`09 z9b{Up(;--=<(V_kE{_wMibMrQV4N24;dWA zoYO-FM=@vi5bW6UD_J{)V9k~^$Feb*X^v%M3e&Qh2*JKB?}!!=f|Xm+P8-f(OU@+D zCe9&>Ei?oxx8QvKN-W#`z+K0I7O@bzK|k=hAbi9CZzQfF-b7qYe3|$Palas#83^u0 zZs>8riSh(}D%hQvM=T%~5le`;>5X^FiMXGObS1HhSPiU2IX40=qOfZ%*!6K>G5;#s zS}oXBP;|3e@al2kFrvt9tu}&)TZTx(PYLiG;y6A(m+A3LpU3nBqST@mZ6e=VNxYG` zig*)oHE|8!yqmb5xPf>N@m}Ia;#Pj;Vd6I8BgAInFNxcUj}lvmj}dnee?{C$e3~dW z(poU5;4b2B;&c4s^Ta*Gy~LMU=6!reY_PT136g7NTIj1fuaGM&eCKGOwE z7ZF95sD;KNZyFimlzb$gjAD8;(_@%!V)|^RIljPnk`Koh7*En1Utl~*vz5Sj zlAgq0iS|;9)s1{bw3k|}aU?yBX|^F4Po6t%ID>zkNyPbIJfB0noH!R4CVPa*9%1Tc zVX{Y<>=A};ChrJ)gvlOZvPYQg5r$TF9M7ef!{X@?DC`j?dxW8t$#bb)7+RU6rFLOx zWrD&UVX{Y<>=6c|K8`2C9%1NRg2EnQ=w0%rutykrm!Pmm7{M;PZQB$65r)Pk&xJk0(6}Tm z>=A~>B`E9>#`y|CVUI90E{M;L1y{0jOK$_#x;(!w5L=u7fM*dt8#2xHYFX=7n=gvlOZvPYQg5r)1be--u!lRd&@k1*LIjNN>BF6=7n=gvlOZvPT&DlH?%l5hi{M;Q8& zJQwx|lRd(Qut(Ss_6XxtfS|BP7^eaRg+1!P632nkN_AifLE+3gu9fPzR;uG#sg7%< zIbT;l<65JR7OFa~8tS-SsN+hZjutA!m6fkR8U<5{!bNq| zoa<;cs-wCmMwF8P_25Q9nGx#2jr)LdeykqcD9`2mSUtE=(sF*R z9^CjiP|lClYf_SWFr<8OCGke0oUW+{Lkh|nn|ii(JzKk;tzFO7u4il4v$gBl+Vx;a z`PRe4ZNx{2&BR|4w-X;F$}WFB7*cQt@mIv1#HWd}t5^?)6qLQudN8D*oHVQFNwaz| zq@?AfSv?q1%Dj*7yu$RWOz&ss zXQBKhx|HcMrh715&U8GvzBa zO!p=BBZi6f#75#EBJ0kPUJuTc97ajYfHNgMhUq4z&u01@BF7yWpx)rPBM;PrGv!yZ z#;gZtN?P>NdT^$sg&FF>nUdzH1ZPTG)|mC+Oi4R!C}&ga!I^?`lByn@DJUnY>cN@& zv<9%pS3uFM8o(ZcHAK;K8mQ+qP|sJJUn92%%IG*DY;;OyVP zdB1@(ego(F2F~UUoW~m=pZE$SQ&6<@2F{)hoP8QN?=*16Y2aMbz`3S@vrGf$mj=!( z4V+UNIGZ$Z9%?(tY$TrI^EN@|KU8P_T)z*)?T0dL7*3S}buTddZ~lX`868Hc?+~qQ2TheYJ`DY7_O< zChDtA)K{CRuQpL%ZKA%~L~XMPmOaT?G|VRImQBK90|E9}2xW zj=leXNP7SHIIp|Tcb<8;EEh^vh;oCN-WR)&PM)^LbqfeLy}Z0H#1ggzdK-5V8l_E~ z+w0qO*UidlShJK;^s_3V?WXz_#nNP{B)hW5FDEOzMjlD7JRJ=}Q50dX;@^e3wrK?m zQXOVS&y4Qp^X@;N*Y|bw%yZ89e9!ru?>W!WIS=9ehw%PGc>f{1{}A4P2=70H_aDOh z58?fX@cu)1{~_N0&=22__xF;^UUJz>E_=ykFS+a`m%Ze&mt6Le%U*KXOD=oKWiPqx zC6~SAvX@-;l1oNy?4d+PZOrKCF+(fLB;1NJw4w|%vJ7o0LtDzwmNLwbGR%)M%#Sk6 zk21`UGR%)Mw6_fHEkk?D(B3k%w+!tqLwn26-ZHee4DBsLd&@8b$}soIFzdJXK48uT7HI>pP}VvX!#jheukF+2>SL2 z`t}I=_K0fqj>Jc46(6Nl=oEFu03TKCYV@k$N2&Wq6%{B220p6T;6&n4e)TB7dX!&1 z%C8>fSC8_mNBPyG{OVDD)k=G7rM~nO53ND{ZEgHq%O*X{F7y(q>v|Gp)3ZR@z1@ zZKIX8(Mo%0#rv)Jt`*<4;=5LS*NX32@m(vvYsGi1_^uV-wc@*0eAkNaTJc>gzH7yI zt@y4L-#rG~z7tuB1KZj$Coen(+mFHaW3c@gY(ECuA7@l;m$tMe+NCW<&q3N1MHsz5 ztv&HxY`4btg!iYlC%iwcJ>mUn?FsKsYiFj=&P<`5nL;}=g?45N?aUO~nJKjEyQH6Y z9Ny0Ctex3eJF~NPW@qih&+W|4+L@iTE7H*O#KY}@BjI*M8b*KbYuDFIqxYw^2i`T^ zuCJL!t5&T4(7YbVlcSFGZ6$9V0ERg4+X z5nVg6Tsu)*JMmjPkz0HCwBH}Lf!+t$uCJDDI*;BwcffN8Ja@oz2RwJcb4S8FcffN8 zJa@oz2RwJca|b+kz;g#YcffN8Ja@oz2RwJca|b+kz;g#YcffN8Ja@oz2RwJca|b+k zz;g#Y>(G0b9G*MixdWa%;JE{yJK(tko;%>V1D-qJxdWa%;JE{yJK(tko;%>V1D-qJ zxdWa%h@3m%xdWa%;JE{yJK(tko;yPG+yT#>@Z1T{o$%ZV&z>W2WZ{sg6A%H?tdr;cfoTPJa@r!7d&^ta~C{!!E+ZpcfoTPJa@r!7d&^ta~C{!!E+ZpcfoTPJa@r! z7d&^ta~C{!!E+ZpcfoTPJa@r!7d&^ta~C{!!E+ZpcfoTPJa@r!7d&^ta~C{!!E+Zp zcfoTPJa@r!7d&^ta~C{!!E+Zpcf)fxJa^NcyWzPTp1a|>8=kx2xtsRf4bR>1+zrp& z@Z1g0-SFHE&)x9c4bR>1+zrp&@Z1g0-SFHE&)x9c4bR>1+zrp&@Z1g0-SFHE&)x9c z4bR>1+zrp&@Z1g0-SFHE&)x9c4bR>1+zrp&@Z1g0-SFHE&)x9c4bR>1+zrp&@Z1g0 z-SFHE&)x9c4bR>1+zrn?@Z1B>J@DKE&pq(m1J6D1+yl=&@Z1B>J@DKE&pq(m1J6D1 z+yl=&@Z1B>J@DKE&pq(m1J6D1+yl=&@Z1B>J@DKE&pq(m1J6D1+yl=&@Z1B>J@DKE z&pq(m1J6D1+yl=&@Z1B>J@DKE&pq(m1J6D1+yl=&@Z1B>J@DKE&pq(m1J6D1+yl=& z@Z1B>J@DKE&tG6?X)g@-!f-F#_QGv19QMLtFC6y5VJ{r^!eK8Q_QGB-?DfK4FYNWg zUN7wR!d@@z^}=2+?DfK4FYNWgPcL=vrS84dy_dT8Quki!-b>wkse3PV@1^d&)V-Iw z_fq#SQpZ07p9B9Kd_Lj$`T2xnv*)$yyC(E*9sVDkL^VY{s zxjuHv^}$;oy!F9bAH4O!TOYjj!CN1^^=a)?Z(yffAH4O!Tc7%x-Vbkm@YV-!eel)? zZ+-CA$4xZ{~cxZ{~cxZ{~cxZ{~cxZ{~cxZ{~cxZ`icpHGX0eBmLw*hz?fVTm78-TX~cpHGX0eBmL zw*hz?fVTm78-TX~cpHGX0eBmLw*hz?fVTm78-TX~cpHGX0eBmLw*hz?fVTm78-TX~ zcpHGX0eBmLw*hz?fVTm78-TX~cpHGX0eBmLw*hz?fVTm78-TX~cpHGX0eBmLw?TLt zgttL>8-%w(cpHSbL3kU4w?TLtgttL>8-%w(cpHSbL3kU4w?TLtgttL>8-%w(cpHSb zL3kU4w?TLtgttL>8-%w(cpHSbL3kU4w?TLtgttL>8-%w(cpHSbL3kU4w?TLtgttL> z8-%w(cpHSbL3kU4w?TLtgttL>8-%wZcpHMZA$S{tw;^~Ng0~@f8-lkXcpHMZA$S{t zw;^~Ng0~@f8-lkXcpHMZA$S{tw;^~Ng0~@f8-lkXcpHMZA$S{tw;^~Ng0~@f8-lkX zcpHMZA$S{tw;^~Ng0~@f8-lkXcpHMZA$S{tw;^~Ng0~@f8-lkXcpHMZA$S{tH~l}Z zMk4)}9_aB@yX~ZV+6^Q<9EP`Hc+t4a3_oybZ(KFuV=J+c3Nh!`m>t z4a3_oybZ(KFuV=J+c3Nh!`m>t4a3_oybZ(KFuV=J+c3Nh!`m>t4a3_oybZ(KFuV=J z+c3Nh!`m>t4a3_oybZ(KFuV=J+c3Nh!`m>t4a3`u;%zPQqIfgjCr(}zC&mu26YK)J z!5(lPEPzF$YA00r^&XYq=p8sOs{F>E2fgF#MU~(9cJO}i9pJk_?*w~MbA)n^P|gv`IYK!{DCY>}9HE>elyih~j!@1K$~j6o zM=9qhPw1q@g9k+m@#^f zL{`igy+)S@}k;t+~BFi3$EPEuf?2*W_M^%}$ zdDFJ{NMz+x+ukFQWmc8d3b}3Xk;rPD+_v{fWVKpu+j}IkS~IupJrY^1nH#-FBC9oX zqxVQ;wPtSg9*JzidnB^#k;pPT%j%npQ~nP84tNvv9*Hcc_hbX_k;t+~A{%&*M3#A6 zHt-&aEVH?6;5`yq=5*P>dnB^V?6QIPNMr-=k;n$#BascfMK(SdM zy+T$NcMEb zmOT>L&@1X$_DEzye?iNJ-XoC>y+BFij0%N~g=dnB@<_ef+z?~%x| zMR*yF0dQy0q4O2STr)? zzr=|D5+nXgL5tJ*ud$c-ud$cpeWl3DM*r8?OY*Go7s0oK_k-^M-v#~>_-^n$;4cgR zLhDrPLVt1oi{!roy-VS1q<@X{uaW+>q|?VpA0vH?^fA)MNgpSDob++hCrF*OZF2~8`IJq1rm*eDeoLr8R%W-l!PAoa-3X_lgn{(IZiIe$t6cF zIdaL7OO9M}vJDE~m-mG`XB6m(%2Onp{qk%V}~sO)jU& z2#|fH|np(pAb%y`!u;vllwHePm}vJxlfb(G`UZc`!u;vllwHe zPm}vJxlfb(G`UZc`y5}2=lD`Qrzq=0Vop(((NWeMUyA26ekp}7#d8|PP9)AzwsVy2 z9A!I4+0Ie6bCm5IWjjaN&QZ2=lF%wr^6lZ&J2zQnqhW zHlMxyj>I=9+czoOH!0gUDciit)|Qx8*^G`4=ZO#JS+}1jN}MN3oY&mY&-gpkyyk{R ze}|eUikoN6d7d@rdDfigS#zFe&3T?R=XuQv{k*?l&l4TZ6Bo@B5zQ0f%oE$p6V=SK z@;pz(GEb~BPn0rGd@`@Oq{^eYq|x86=L3Jgp4VK`_@HyqoYCq2em$=_qfm23{Z;Jg zS7OiTh+>`*d7iO&o>6$7@pqo_cb<`Vo-ucx(RQA3cAgP-p0RbFQFT7__v`u4->>I2 zXEgfzwNA&>XreRQjQH+6zAM0g0saf{Ux5Dt{1@QA0RIK}FTj5R{tNJ5fd2yg7vR4D z{{{Fjz<&Y$3-Din{{s9M;J*O>1^6$(e*yjr@Lz!c0{j=?zX1OQ_%FbJ0saf{Ux5Dt z{1@QA0RIK}FTj5R{tNJ5fd2yg7vR4D{{{Fjz<&Y$3-Din{{s9M;J*O>1^6$(e*yjr z@Lz!cZ^8e!;Qw3j|1J10!haF|i|}8B|04Vs;lBv~Mffkme-ZwR@Lz=gBK#NOzX<(U+FT#Hj{)_Nmg#RM^7vaAM|3&yO!haF|i|}8B|04Vs z;lBv~Mffkme-ZwR@Lz=gBK#NOzX<(U+FT#Hj{)_Nm zg#QKjUx5Dw_+Nnk5}cRdyad}N*e=0p306z6T7uOQtd?N41gjQV50;ZCD-6FMHq;`wcZjst8QoBWJw@B?4sof&ATcmc2)NYa5EmFHh zYPU%37OCALwOgcii_~tB+AUJMMQXQ5?G~xsBDGtjc8k<*k=iX%yCrJ3MD3QS-4eB1 zqIOHvZi(70QM)B-w?yrhsNE8^TcUPL)NYB|Em6BAYPUq~mZ;qlwOgWgOVnXXrgqEJZkgIGQ@dqqw@mF;h!9qY5LPssTT84Yy!N}2@Y?T+^v&pR zf-6!v+g|%!(Jap?{wBDhRUMzoo8do@n&9)D_JW zjlT%`Tk1;aZ-OhD?;HJ1a7A-`qrauDXkKshH^CL@nBFfPGx}TV3TwZw6J@-ciwb;Va>!heVT@AcmTuO~hT{vP-t@Cp8U8~g9I^Za$~>Sj88s_+k}btm2DRe6flzR`JCuzF5Tx)F!7a5^0GD2M>y8fT!rPJlr5_HZn=#`c=@>(OWHS$^` zuQl>oBd;~`S|hJD@>(OWHS$^`uQl>oBd<5e>k@fgBCku->k@fgBCkv2b&0$#k=G^i zxE|J$I^14i3SIFxMd0io|E97;BysnVf74o`5URTKL3VB^2 zuPfwrg}kni*A?=*LS9$M>neF&Bd=@Zb&b5Pk=Hfyx<+2t$m<$;T_dk+Sa{DjH;JW^)jkn zM%BxxdKpzOqv~Z;y^N}tQS~yaUPjf+sCpSyFQe*ZRK1L=CgZ{sj3Om3n>;SK@1H8fx@JjfA{~G##?kem6udoBWqSaKV z`2SWa>;SKXzlTk&!;fJ5|5hsO0I!7pf7?pv|I@Fq1H8fx@G87j;jId9Rd&u-;jId9 zRd}nyTNU1_@K%MlD!f(UtqN~dc&ox&72c}wR)x1Jyj9_?3U5_-tHN6q-m36cg|}+L zyj9_?3U5_-s|Mz+3U5_-tHN6q-m36cg|{laRpG4)Z&i4!!dn&Is-bzS!dsP{^Hq4O z!dn&Is_<5Yw=MOu#}ZrWWyZ9AyG761qGxTtM&mpEeoocf3U*@qRJ|>oX>9a=2ySWg^pieSZ%d=6 z(Yqd=|`m3}^TuF>tW(;7al;nNyEt>M!e zKCR)?8a}Pz(;7al;nNyEt>M!eKCR)?8a}Pz(;7al;nNyEt>M!eKCLNkIj@p__T&kYxuN=Piy$JhEHqww1!V>__P+-r!{<9!>2WTTEnL` zd|Jb&HGEpbr!_@BDjPnn;nNyEt>M!eKCR)?8a}Pz(;7al;nNyEt>M!eKCR)?8a}Pz z(;7al;nNyEt>M#}PEl5wb&9glKCOlJX-$!mc*CbPd|Feaw3g6qXKHWT_;eeeZsXH! ze5yM_dB**88=r3D(`|gZjZe4n={7#y#;4o(bQ_;;uHa^|Pr`z~+8=r3D(`|gZjZe4n z={7#y#;4o(bQ_;;uHa^|Pr`z~+8=r3D(`|gZjZe4n={7#ywoi32nf~8UsQ+3LY9=E5 z1yC~)*_w$6H4_nPCL+{KM5vjFP%{zX-`n;~M5zD2(`Bq`Cqn7DP#P%Ie=`Z+3#y&S zRyz?&&xO)+q4ZoRJr_#Ph5Dv1)Hi*hzUd1GL4DJgJq*6c8xDigbEQkqh3fl4^?jkf zp$ql(T&VBnLVX7p>XZPXzI_XC8r@EWI)g&k2)-4Ro-2jAxShz}0ZPwhtM3b?=R)bZ zP^`GyuKLmal+zV#F zM?lRc^o+jP3iYj4$lKgbWdA>)^jx<3zEFK%sJ<^$-xsRy3#I2m>ABGDB*dp7J`M3{ zh)+X&8oKZ68T&NEry)KK@o9)pLwp+I(-5DA_%y_)q5HmmYoCVh`$GFPbl(@+ry)KK z@o9)pLwp+I(-5DA_%y_)AwCW9X^2lld>Xp%2ci4E&^`_EX^2ll_kE?Z1@5TAzlG{mQ&`+gAO)6jiiwtX79?+fkI(0yNM zpN9A}#HS%X4e@E{zOTR9ry)KK@o9)pLwp+I(-5DA`1Hr*({)|5sCj7cV=AptU#o+A z68a`3)Hf-iS-MA_JulR%j!-KtLapiuwW=f3s*X^rIzp}L2s=To>d5W}dqC~9|&Nf2sPN2paDp;mQ-T1gPz4{B9MwpMk7TGbK08`P?fY^~}DwW=f3s*X^rI>Ilj zI) z0B;TO)&Oq}@YVot4PJo>8sMz~-WuSo!7DIIH*XE_)&Oq}@aB6=&IgU~)(CHn@YV=# zjquh8Z;kNQ2ycz>)(CHn@YV=#jquh8Z;kNQ2ycz>)(CHn@YV=#jquh8Z;kNQ2ycz> z)(CHn@YV=#jquh8Z;kNQ2ycz>)(CHn@YV=#jquh8Z;kNQ2ycz>)(CHn@YV=#jquh8 zZ;kNQ2ycz>)(CHn@YV=#Z}mz@a4#eHy^P@Z`osXG{1)gD=U&f4g&&ZA@AYg{_!00g zz^{R0;5aw|9s!SnUk4|_W8iTx2Tp;fz|-J2z%$@9cpm%~xB&hY_}Ad8;A`OP;NO53 z!8Py_sJXw&uQ{yn1~vLy@H^mljlsY6UxS|le;WK55N3R0fc^?6L@f6bvE1tu1A==! z^9}Cxi2=fY1O5V-1|!gs%)Q|ba3`o!!j$6J=3edKGJ5pC*K=p#1EAI%WNY`D@Harp z6Mg{ucR;N<=&$%F#7CYxE5+J%Z}=#vH3!)r2VL4Gyx)ZPoA7=U-fv3S`%QSi3GX-I z{U*HM)!uLNc@aW;zscuC2<`nQpBEvt_nW+4A+-0Kyj~%+_nW+4A+-0Kyj~%+ z_nW+4A+-0Kd|rgm-f!}G5kh;v$txH_d%wvm7(#o$$txH_d%wvm7(#o$$txH_d%p?q zH~G8>+4g>u&x;6}@O~5CZwl=Froi5B@_7+Ld%p?qH{tyzyx)ZPoA7=U-fzPDO+GIo zXbSE9rqJGR((XQ^z2D^XB82vS6W(va`%QSi3GX-I{U)!R=ox#z3GX*~kM|`93{~i?6P$RyRd-$E$kw;&R|!1i6?aiyX-~mzs6p|)*0+d zU&ek7TW7EXHXP3jP@Qli)pmMtw)mGfTQpJ;-(=={kd5_FJ)a2D|Kg`Bf9BUDHa@9%-S@U>EAn zYoT_}3blJysNJ(d?Vc5C_pI<&!C&K@I)hy)I)h!PGuVYXgI!4bRG$@x%(L!O&vm-a zU>9!j+nO<{GuVY8_#>e9ek(?Q{>AxyYldZn5zbaa@ ztuxq#I)h!PGuVYXgI)M`P-n2qz8_m>u*=pN>_VNvE_@fZ&S00VGuVYXgI)M;Y@NX_ zTW7Efbq2doXRr%(2D?yaunTntyHIDa3v~v&P-n0Ubq2feH^Kklx=TZx@QOk2rlrxeG@6!1)6!^KS|ebao^hK=qiJb0Esdt7H5xkInwHj>Xxo~WPFT~@ zXj&RgOQUING%by$rO~uBnwCb>(r8**vk$+=nwHk=!)Q(8_Aa3{joZ6~)--PK5?a&J z8j=0HH7$*%rO~vsMr5a0)6!^K8cj>1X=#nf{*^T?ji#m1v^1KQM$^)0T3RErpRuN; z(X=$0miE08O0lM;(X_PYN`A(gmPXUk8oO;<)6yEjZClgQ8poYtO-pMuw{1;JYfQIo zO-pNJw{1;JqiJb0Esdt7HL^S1nwCb>(r8*5P21X=&x7mWigN z(X=$0mPXUkXj&RgOZzLcp0uW=(X=$0mPXUkXj&Rg1X=yYqji#m1v^1KQM$^)YbL3ex zEv;zBwlyt{rlrxev?3p;Thr2LS{hADD++SDH7$*%rO~uBnwCb>(r8*5O-rL`X*4a3 zrlrxeG%I6iG>u#5^fqf+8cj9;|4k*y%rA8n@I5t!ZgAEsdt7(X@1EO-qN?w6y-8#b`}Sht{-oXiZCp*0i*5Ob+fx)9y#p z?nl$^N7EuSEke^GG%Z5YA~Y=`PK(gA2u+L7vR(;_r2LenBNEke^GG%Z5YA~Y>R(;_r2LenBN zEke^GG%Z5YA~Y>R(;_r2LenBNEke^GG%Z5YA~Y>R(;_r2LenBNEke^GG%Z5YA~Y>R z(;_r2LenBNEke^GG%Z5YA~Y>R(;_r2B2J6YvCP zYr#9ETE_dd#_~?7gs}tEe}BvF0`=eDvU@=N_qS~Q_qS00{T;khtwku0>pk+g@%Nn~ zpBjH2{I}pQf^P@!2le0IdgfiA{`*_D{!3k`|56v~ztn>rlye8=+(9{aP|h8cbBEN- z&$ygBq-I8!bBC0{=yL9$oI5Dz4$8TMa_*pP8C}jDYGX#1a|h+z zp%!J^<=jCzcTmoqlyfKL+(|iiQqG-}b0_88NjY~?&YhHVC*|BpId@Xdos@GY<=ja* zcT&!slyfKL+(|iiQqG-}b0_88NjY~?&YhHVC*|BpId@XdU6gYd<=jO%cTvt=lyev5 z+(kKeQO;eIa~I{@MLBm-&Rvvq7vPDZ2s?mHQUl+(8;t_8kD z(dhQ+TNI6MpT0%WXutawMWg-hTNI6MpT0%WXutawMWfrN?-^VZx*z$TL8rK!zC+OH za{3NIqs!?#1dT4IZx1xOoW2cENI8AqpWa3}eczwbDW~uIv+Z*FzCWYO>HGeSE~oGN zGrF9<@6YIRHmjUEQ$yu6dNrw8r9B}`^H+cSZdR0H^q1~t#V2b*udFsFyyo1T_-)W% z9GVrM7(WbpWxF}C7yBdFx-~{A4})gAS)4ep4zLr{tuac`tuaE~8YArG$v#lG#wcX~ z)U7eHhrnUbtK7}3b2hWi*~~g;GwYnqtaCQA&e_a5XEW=Z&8%}av(DMfI%hNMoXxCr zHnYyz%sOW?>zvK3b2cjiaqf9=2Al*39cJ^Wj*iZ?6v zu!j@6?-_{>*URfJ^U+wD`{5jVfSx8!EU9=5&G-mKWew%6O66?@oj0^Ks3 z6?+)n_L>!M7~S@o1Gl|q#T&+71zXGvYqrg-*)}V#@Ly?HiYsKR{i}Vd{Tm-4MYqPt zcAVd=$idHeg}hmjgKYH<{gu_-X7v%<|Hgk+PqFQF{$}+T+qyMI=(W>k^%~m|wr-7) z?UjdS^&s0juyt#U?48)}#`YJ1X7wqjd)>8JJ7R+5_)IrweIv^A@(rOUgx*EK z-Jrp*vFiS7@|{vxd-pwwCj#Hcr_(?6q|utQTbg6rUf9jdXty-SwmIA_&C!WJ(j4Q1 z;BSNGYPU4!yig~N2zBCtP$!KDb>e|gCyfYo8;el4u?W4cZB2&P8t#F zq!FP`8WDOuXE$@7-OPPZB3b$H5$^lSY(s3e-s>vcCbI0jELT#-j8*sM}a%>oyjlP8t!O=NX+eB3mbo2zAnk zZ~?nSjdaq8QoNG0Tgqd53Hw!SujK5O@;Lo<@NdA2;2NltM)X&mG$PbVBSNoE@0Riy zzYXf75!qgy-mO`W(W}$DHS00zHkM$wl*g#sScE!hM0k(?s#%ZT$*gC$l*e`>=|7GA zR_vd_zL#I=q!B&iUcXz)W7KUdLfyt9d^f0*Mr7-x5#g_b?uolK$1%D;`i4hwB`tD} zv^VBByQM`=(QPb&?|;-YYRSe&{2qZB3b z`$65tB3mbo2z48aP`9xJ??a2;hZgxJ%@azo7QGLJc^_KzKD6k4XpwI)JP|yA7CnF# zJ;0N`HBYA!qeZ?oZ%wwf$hYPh&5v)*Gg^xtNVskI);#~!TI5^vjON6*=GitUzBSLb zwaB;T*>!7WwWxqqWF)=NYX^4)nxYmx8HGg^y$cb?H&W9O;1mvMGv4wzD-Zhphdn-&$j!KZ`0G0XpwKzvu!Q% zZF;t?MZQhXwzbH&={dz(^Z;7q+w^Q(i+r1&ZEKNl)3a?Y@@;yytwp{~&$hM5x9Qoo z7WpzD>_)E%I%8#{b}2qeZ?=&$hM5x9Qoo7Wp`8GYHwaB;W8LdUW zO>bTJPSCTb_e(vDp3C?)J)`F`zD>{Qxr}eqGkPxL+w_c{9r!jqqh|!ZP0#4q-nZ!) z9nbqVJ)>jw_p5yx9iP9SSlYMg$tJ?|ZF;sHRr)qPqvJ{6re|~v>D%;-jvIZOp3$+Q zZ_`^3xc5rv+Hvod(6#$@YRA1-vRymwy%M^1+})l z-5zSU2jA_Xc6;#M9(=b4-|eAxd+^;JYPSd9?V)yi@ZBD2w+G+tp>})l-5zS!qCLQE zK}$j>w+J0?x2UE@-8>@nNY|qJ8g+7uP$#ztb#jYPC$|Va616ZAwGb7zFcP&e616ZA zwJ;L3Xg8*xx6Zeq@GWS23##6NO1GfTEhuvfn%siwwxG8yVne?b8%FPPX$jJxPHvH{ zlUsy3xkYGgY|&m#r|aYvp-yfIT9P`sMfk7$tK?6B?$Ir%N(*|@f|9hLAuVV~3+mB= zZnTI`KX0vQK_yzyhZdBfC4AcN58FVU+#>tS%7uH=gg>s9^P9@u_!Gi^&mPVPiBBFR zK6y~_##->8*gh}x&fy2ew(d&l*IiC+iXN$CJP!7i{H>;bbpIgecci$<}h_lrHF zcU(Ux_Kf7k4%i3T0sCOEhx8VH^%8a!^v>Z2#i~%O8a=ankT~i=jXTOkDR}>3y#H|WBT8w7|5o^K4Ib9>t$|xbYw#rKnQv?G6!w3{Zd2~9 zdcV^@L;ADWhrllwVWSl`T9wOs;9G&Zgr4U8{0ND*1WgANaSy zA8Pb@Ecmag#bd!Ak^WimkHOFJ*FVMf8row)Cw4d31NMT?@#L4lFN0qJpXaY%#qP%* z0EfUANFT<2(MY7>JB(D?q}O&n7PP6%AA^&RiD#uy>yOJvYr)6mBcYf#{)F&xeD^rM zdmP_APOTr;d)k7>@!jM2?(x9BdmP_Aj_)4FcaP({C-B`9`0fdO_XNIs0^dD>*Pg&f zPvDU!@W?)Vv5#-E`|!v<{r0h7pMGn667-n9Pj7I_0qkeQ!#;V$>3^tl?vqEH@<-rj zRnC3EA7g)xzkXgd-51y|`+|1TJ3+5!?hAUbd%-XAYG2YjqxSK|Z699Shu8MWYbsUJanY0b;z@k*B))hOUp$E~ zp2QbV;)^Ho#gq8rNqq4nzIYN}d_uon4?dya8r^#LRkCqEhdH{ny% z?kQ^b6i+_IlTT5*r>Nai)b1&2_Y}2zirPIz?Vh4`2dK*d>T-a(9H1@-sLKKBa)7!V zpe_ff%K_?gfVv!@E(fT~0qSyqx*VV`2dK-_J|Q!B+9zZNPb-&U;p5jkeuJ+inZo zw%Y=??Y6*eyDf0rZVTMD+XA=kw!m$>EpXdz3*5HbXxnYH?KawW8*RIdw%tbCZli4< zgpGsna8NvS1qa20(W-lp_Ha-<*tY5(r2QO3bq}Jt2T|RFsO~}Wa9+qSgJQsF)jdev5326At-1$QcmLI@dr-BuZPh)fS{tpp2UTm^R^5Zt z@gQ|Pi0VG0+6@QKsCGiyw=x5xs zp3(dD9=+fA5v6|yem(;;pMjar(6c^6&w3VapM~3JmHUa{S>oriemA^dd+e;vYKhbYe>{B?*@9imi+@Yf;ybqIeQ z!e58**CG6M2!9>IUx)D5A^dd+e;vYKhw#@S{B;O_9l~FS@Yf;ybqIeQ!e58**CG6M z2!9>IUx)D5A?kaG`X0hxe;9m0>)U@MMOqg+8vG;ajM35HXO(_J_~S-+{wzFyR?jF! z&zuN8#~VH`mQDnp7fV8X_j%YD2Ozp00QL2nc4SL?#hfmWd}pfF$18=UUieL?TB z{T0x)`-0x)loyODgWjVubOm38$uGj>7h&>?F!@E8e2!W_N3EYj@tz~E=V0JD82A#; ze2Hhi#4}&wnJ@9omw4tY%4I$HigFR^{l>QlzshgF%5T5QZ@BxL{H%YQ{5-amb|g6nz6c%xzwS3DCwapuo#G zkA&9hk+1>#UgsYEte*6Z09``=ABXP+kR4>59*pVv(ZK(|FdCe|cD+Ue*JU&~3+AOK zqrt3y8!Yixuau4k%e=??Z%2a_o_rl#<*$DOx^|<%MV|bh*j_;$4c_2am#{B`-lIDz zuQ``%;B``N@Xl}Z%-@242Yv^<$&=s3z6IXq`8(KuFCIpN@9~~>QvLz^A1TiUxJmk5 z@J-(KFW42MTD8hU3@}Oz;M)+yo?5l>Q+`|WKl0>%a=uBA@1w~!QV#N0&(KGc&ywGGbqsdcl z3CYv^>I^sy=6Qw|l03&7=D`B!b@O-~KPs|A{C68G8eJ6Z;3))`Zby znYwsAXEf>coY7?6ZwM2hN2}5BNBv~zF=#aW-~HRr>sq6s*Lg<6w}AKXq{qk6&{5N9 z*ywtNZ^icRh0*Z;;K`qLF5%B%r}*pJ^kkO4nWYbA>4RDIzBQ#=$FfPcv@9(rOFPNZ zLb9}tY|^bFn{<1~Chf;;(jLspFGg!lHu)`Z0kraDlV&NKG(Xv-naQf|Le3rN;uR-&kOk9z&(a)ZhJ#Yd3~U zj|KL~7%Dx6N{^w^V@a#@7%DxMv`UYm(ql=h^jOj=J(jdekD=0INvqkITCCsp4Qwmh zSkfvzmb6NbC9Tq9Ni#f_v`UY`)mV~p!q^xpJ*L*^XROj=YAr^q^jOj=J(jdekE!Jt ztuqp24u|7#I1Y#7a5xT!<8U|*hvRTK4u|7#I1Y#7a5&CLHx7s6 za5xT!<8U|*hvRTK4u|7#I1Y#7a5xT!<8U|*hvRTK4u|7#I1Y#7a5xT!<8U|*hvRTK z4u|7#I1Y!t*Wg6pdkuteI01(fa5w>n6L2^IhZAr(0f!TCI01(fa5w>n6L9GJ5%f+t zoPfg#IGljP2{@d9!wEQ?fWrwmoPfg#IGljP2{@d9!wEQ?fWrwmoPfg#IGljP2{@d9 z!wEQ?fWrwmoPfg#IGljP2{@d9!wEQ?fWrwmoPfg#IGljP2{@d9!z1X=5%lK>`f~*R zIU>f^f+O&A1Qj|W9+ZL>9YKqZphZW}q9bV05wz$CT66?0I-=V7S5~AWs-4lgbVRx| zEc6(0L^XAad)yJ!=?Lm{1a&&1dO6)1bp(w%f<_%dk&d89N6@GvVUuFuqr^W)iF}T# zc1j`gIZEVnl*s33V68Z+TKliwYj;$&J}>+$>}7fXXz-eHJgRuc_8Zt&!0VtD?5N@m z}$=y_D5r)`g(M>Trd_K0~@ zBc>RT2UQo1l}`UT(4*wh@NN35ZzO3GdiwX*kdQ$z`zxDVsseauh{7Z0#XD9=G zd6L#XNnf6X?MYhuB&~gtemzNRpG;E1b!p7(qt7kECBlRo%8j!|>c2iu;HIqh0ie`$)WQ(<|8@OKF53{hvw&)kK~e`kK~w-@sxR}AT=E3zo{!`hJ90_SM{uh2 z19NC#j`>I~>G?=5>G?=5>G?>G`AClWNRF{Am-Kuj$B33odOnh4T+1arAIT*h{pOgD zW`so$MIc}}1?C+V{%>6<6%n!} z;)Ij5!;|RDN#cZ)w55}@qLZ|rleC~?JBdb} zL^)5w?MYZY37;p46HcO^Cy5hI5+|Ib7AJpL3m7;_obWQ5_A;9GGMe@>n)Wi9_A;9G zGMe_XbbdW}8BKc`O`C#^DcG2TjVaief{iKIn1YQd*qDNiDcG2TjVaief{iKIn1YQd z*qDNiDcG2TjVaief{iKIn1YQd*qDNiDcG2TjVaief{iKIn1YQd*qDNiDcG2TjWe)u z1~$%Ugk2BLNT1h)6WE^Fosm`>Pk<*uM;d3O+fMgBy)(qyX97okXJF%uMr1#;0D2$J z8ELX{!wBx^P- zzlV~*;hE$j>C512{MC`?8TD?Xqq{Te-Nx^Nw|V9+=$YUdV(&9V-DhCG8BIprD9-}k3sX&N4;sr9r}PH&US`ALs`)2grW8tD2?QQXjq=nePXv-D0?8AB*22qaGgk|zSm6M^K3K=MQ&c_NTJ5lEg0 zBu@mAN3runAbE5UXxiBAQq4Q)$)vjGo`+i9qs1Ao(BmM&8T-6J%683@38Ip`;2;rf93i63~hdfHb2AseMYTa&(OkW)WY?oTC!9A#BWgR zwcUm7`TLAouhTt$pHb_z?fLtR+O5&^_ZjBzGfB_iXVe0n?)m$STA*#u-)GRq8MJW* zZJbfNQms+Q8RqXZw51v5?=xuT3@vAdmNP@knPL7uqqgBU{}XTa{C!4k!?}3=KBKl_ zyKcnSGtA#-@bwJy_Zj>ph&Y~T@aHh39ybTLbGF&p^50A?8zXBAgCeF1b_F-u%AOI$HaTro>rF-u%A zOI$IlxI(`oqL?M3m}RV-P5yV%zYaR0m{mk!{7cXg#jGL_qOXpD0IrMW5<(xzD=Fqx1;-xuS+8j~S z9PMom9h*bJ=7>D!XkBwC%pBS>hpNmG7tPUf<`|df7?4Iw-XB0mb!%gMqCISqZU~8EvTK?_NsnC?Zkieicmpg ztI>VGpwZLl`B#Be-vXPyPpYDe!y+6O;jjpY zMK~j4PVG$0Ca9D)HA{-Xsun31mI4r_p5e|!RScJnO92ViQ2!};DEW%+C4vTPD zgu@~n7U8f6hebGCK+_h`v;}dv9xR|~3u4l?TjK(nwt%KBplJ)zH2>9_wt%KB!1Dr{ zwm>gl5ZivnGo}TNWk%1K7ErbYlx+cJTR_lVW1qXM~DjjBf!O{iGrmr~DlFHl-|6_hst7 zOx>5M`)j1XM*3@{zef5BapnpU<_Zz!3K8ZC3b{grxk7BYLiD&ol(<5CxI$#OLQJ?q z9JoT%w?e$Pg0iikX)DR1*j`DNK#vY9L~$#`Z!1J@E5vLo=-3L;+6r;n3Q^e#QQ7Nw z@B(GNK$$O4<_nbh0%g8HnJ-Z03zYc+Wxha}FHq(Sl=%W>zCf8TQ05Di`2uCWK$$O4 z<_oCt19%5#u2BS1Lr}n48Nh$I^CDO23*H`J+SLxSR z>DO23*H`J+SJkfcTeT~r`}I||E2I1MRr>W+>7n23etngGeU*NFm41DdetngGeN~#K zC+XK$>DO1KY3GA$j3Cz-L9VG@Yr!?u$mm(mHFW+OI)6=NbBgDW*Yq~y+l1Hg>2-X1 z9iLvur`Pf6b$ogqpI*nO*YW9fe0m+9UdN}`@#%GZdL5r$$EVlv>2-X19iLvur`Pf6 zb$ogqpI*nO*YW9fe0m+9UdN}`@#%GZdV`*RgPwkao_<4KTMKT`({IqzZ_v|k(9>_w z({IqzZ_v|k(9>_w({IqzZ_v|k(9>_w({IqzZ_v|k(9>_w({IqzZ_v|k(9>_w({Iqz zZ_v|k(9>_w)4vVF--h9D!`rvv?K`A@hxG4|{vFb9D!nVXsdOP8xhanf%f2R$-^3#~ zRnrr)Z<79|)Aa^DuQwPEh>e>`uRh&m_30*SN;mP;O?gUhlc$Vl`0X_4o_JGUbNV^I zUpyGC(l_DZCLX*gHk@uHxvBLTW0^Pjzrt_IkH)&6!H+lb<4yTdZa@t zTh#OxHN8bmZ&A}*)btiLy`{EyKDb3qZ&A}*)btiLy+uuLQPW%0^cFR}MNMx}(_4zS z{RY?c7B#&^O>a@tTh#OxHN8bmZ&A}*)btiLy+uuLsm1y|uIVjmdW)LgqNcZ~=`Ct{ zi<)vvX230(!EI`KTQyymZMDBmO>e8FwypNJ>1Euf8E~Jb(BB+y)5~tt%WhMP+w`*A zs)c?fDL;Ji#neR~M zJCykjWxhk1?@;DDl=%)V`3^1l4rRVWneR~MJCykjWxhk1?@;DDl=%*2zC)SsQ06<7 z`3_~iLz(YT<~x-64rRVWneR~M?@{LOQReSalJ8NH@00$0(!Wpo_kWnKH>?HU*BjP? zbw-MHMv8StigiYcbw-MHMhcCG;(48sVmv3+HQl79o78lZnr>3lO=`MHO*g6OCNL1Xme?Y7L0j>HjW9417+qK{>W9417TiaeQ zy31I3m$C9LW941O%Daq}cNr`1GFIMYth~!ud6%*BuIi{asE$UD5qGKMUDeLE_fy?v zth~!ud6%*BuIi<9#>%^lm3J8{?=n`tNj&o=@ywgVGj9^lyh%LsCh^Rh#4~Ra&%8-I z^Ct1ko5V9^y`d{8^Ifd0_sC{-vCMjVS+nUjrTDv8Iq>RMnN`O!tBz&9ia^UY`Wxk7*1FvzFRa!skojK*e-#E%*-oLtp?VUMgdBG{( znNwDqG1EtQ>e}PFZc$PkLugneSrdz$>w3zKfLu@60L7n|_bK zi`BdSXpfAS7O`vDZh>HVr5oh z%k+^l-^I#&H7Ls?e)3trlkZ|>zKfOlE>>pEwyf6W_c$^s)3eISPHg|DK$*4NvRa+( zFOcs46euUZi2Y}vcZQeM8lCQ)Ic2_!mH94KriYgKE>=!@XHJ>#VrBJN)tB#LL#khqC&(ZSTw}tNk0jGpEdYa#?-B zZ}85XvU-GV&t=Md7b|Ne#OeMnR_41{neSp{^%|$sX85{M*4l`F>;Duet2Y@Pah3Tl zR+eta<9rt@^IfdWs&!dC&QJa`PkLugnHB7^dY^5t440)gF28r?l%+OC@60LlU98M^ zu`J5A=DXZt&c0^Z3k;;5GDXS-{UVIlTvmRbn@Ai}4nNwCDx9y!d zW%bsspu(72Va%;C=2jSUD~!1n#@vc}(0Wi|%&n-W*!JwKq84uS?5x6=TVc$tFy>Ym zb1RIw6~^2OV{U~px5AiPVa%;C=2q0A^ft!a3S(}CF}K2)TVc$tFy>Ymb1RIw6~^2O zV{U~px5AiPVa%;kyDIgna#B`RCs&*Zs+^ZnO}tY%Ruk_9e+B$ad51f)g%4u?HuwSl z`hSBT1|K4QFZM^UGuRJ!t|odw&rGX{KCmAg00+S#a2WKr z<|-$JRuf~`ef+7&&eN>8bBQfO5tljv8R6k6ph9d0~V%9H*rCxuoyDYP2;q|mBP z#8R0#DYP2?0=7>It#VRmHB6IoKPeHmPYSJaQfM`N7xoU)eNt$ZlR~RH5zF>2(%*yq zUTmKfS`B{%yBXXKJ^=n-;J*WZ1Ef!J77+Ka>$e}I7Qe$^e;51rus?)N{|f0}A^j_) ze}(ifP71AtkMQL0^Q(_yKZ@Oo{TTMgus@FdIQA3RKjiQer0fSj34RLnSNJL?h3d}t z#6yAZdQPK@TnXikjg#Ar^8=EP`D%<052niB`soH+2_^%%{GgP+2- z=EQ+DCq{GP;AgO{IWd|O2iBaJ(}`nFCyqItI1a2iabV4fbuORLniB`soEXiC(VRH2 z=EMQ*3eAbpoEXiC(VQ5~iP4-G&53mipGt-1#Ar^8=EP`DjON5>PK@Tnp*1H)b7C|n z4y`$HXw8X3Yfg;j#Ar?&T65yiniHcrF`5&jIdN#si9>5n99nZ?G$#(NIdN#si9>5n ztW)@m)|^Nayh33R)PK@TnXikjg#Ar^; z>BMnp&51*6PRw~_acIqnLu*bPT65yiniF$6am?w&u}TOQqK1;x(3~2YQ$urV^5BV}j^@S#_K&8ed~bu_1r=G4)gI+{~QbLwbL9nGnuIdwFrj^@S#_K&8ZXT z)X|(eaZVl0siQe{G^dW{)X|(eno~z}>S#_K&8ed~bu_1r=G4)gI+{~QbLwbL9nGnu zIdwFrj^@S#_K&8ed~bu_1r z=G4)gI+{~QbLwbL9nGnuIdwFrj^@+ zi4a1_<8d_a^L+Zxv%YK3ne#p8+0Xv&@7`yhvxzzL#GH9z&O9+^o;+usm@`kznJ4DV z6LaQ?IrGGvd1B5yF=w8bGf&K!C+5r(bLNRT^TeEaV$M7-HW$P=%LVbl;xSu2c8T=CXW$Q}8b73wR*!cmUV z8Z+5?r&Xx05DPV@A^a{^`#tP)*!l{w%Fko#{Uh0W7Ae%qe4*Yy5^D9hP_rCD&2k7e zCnnU2eW6zD3pFz-)U$8luRzUG%DxEdjY8R%z{{YX!UQoz9;3e2BGgxig__kDYDI@o zbNfQA=nyW!F2P=keG9g}Labl)6=I>jLM+r*h=uwJu~1(j7S@7wU_JOrP`$r?T@5M+ zkgcx}3(=cmk^O2cFGO#OMLM(etYf5P#Ih-H5WTVElTt*;OZZ>L0GA(s6S>?&-1g;*u}3bF8`*!l{w?2lpBVt*XF z4*L_>_1Je}-vzD!SAwg+HQ-v1d-wN3b>{VyG+=MQZp8iz>?Z7Hkank7X{u%h^ z;Cj_#0r9+mcwV3!(#JTS7bu6c?RZ|G9Mb4`UZ5P(z8(elfSQq3NjIn&Y1vQW_p6*? z0Pjb@qo6r2P?R=41L`{-vQL0t1HTSF3w{IC`%pS&1l0T2vR?pS1RbRdlph)$r3;AC z1&Y$Xo>9EKiv1e4W}a34I`;QC!yDlDLCrbq*M9|n4C-lxO2)to;5hh8@Za$`0ZxLK zK}X#JqHY0Ew}7Zypm?jZDbgBCz*|5^*8-wzfugHzeOFVc-H?UaIaKIKTR@~OAkr2n z$8(7zZGpe{F1(8)SGX4R1$v|QK^CF}MOrbh7;EonAg({i=80gw%4} zePw~>w_Q$MXnx!Fzi|xAYku3u{|5Xm_&a=QCST?6z`(oUyixt3c%TOJ{`N7Rsr z8WK^%m?LT!b3_e^s38$GB%+2fx28~|@=>8PZ1UYDh#4iKrnF zHB@eFzmBLO5j9k9Y}*kv)QH<&98p7!xQ&jep+?+BN7Rsr8fwJtBTs;isG;&+qa$jl z5x3E8EhM6b%6n})qJ|oA8y!(YB5FuP4T-2B5j7;DhA~IfPpTQ9| z)cD%yRvZ#hL*=)&9Z^FfYN-6yw%c{6{MP7*8fr9cbVLm`f;Kv$hD6kmh#C@6Ln3NO zL=B0kp+?F&PuvkTB%+2y)R2f85>Z1UYDh#4iKrnFH6)^jMAVRo8WK@M?JT5PAfkpu z)R2f85>Z1UYDh#4iKrnFHHZ1v zG4zp+s38$Gj60%+dM0jPj;J9KHPo!CT7l-VghbSkh#C@6Ln3NOL=B0kArUnU98tr- z5j6}PQ9~kX7&xMaMAVRo8WK@MJzI1+DkY+ZMAVRo8WK@MB5FuP4T-2B5j7;DhD6km zh#C@6Ln3NOL=B0kArUnsqJ~7&kcb)*QA0hW)HUcCrO^>JB%+2IU+6A~s38$GB%+3z z>u|XvYN)vm+m5KA#uqMeL=82*u6UFP~!{Rj;NvLI&3?lhD6j* za~-xFQA5pj_^KRHL(O#<9Z^FfYN)vm+m5KAMixd#)KD`UM&c3?H6)^jMAVRo8WK@M zjShUIBWg%Q4T-2B5j7;DhD6kmh#C@6Ln3NOL=6*;sG;|M4GLo(XBEagsw#|mtW>Dk z2BUU@5NeiK_($?p81uap#(Xb@niKFb{|tT!)Jg`GJPsZN`@nwAa0omMeg%Az^L&?M z&VlDatuD}c-UNRIUIZ^0H7+)41*UKbxD<51P^hflc!$p)*W9@9W1ybF$@W}IVcc^m zh1v~4cM*3T6?!iTp=VSI47Q%1kHwhh?3pKLvuM?c-Kkw@u?03O=V-N$~w-#zNt>c5w*`wC3*nY@o z3%am(b4&`{LrFK-1NMRkz~lC=QH;;)=l~#yv=()^hl4)8GvFdw%8a^v;Wp@#+hqv+hE#!4P^jqfjF$U5`dm zw(kZTz(%kMYzAAvR`AoH=N}3+zi0d`2zv?GOZ*RWnE1cI{~P?D;Qs>u7HsEw9sqZO zU(oeL>R z$UP!*kBHnOBKL^MJtA_Ch}>R$UP#>x%nEL zdqm_O5xGZ1?h%oDMC2Y3xkp6q5s`aD>R$UP!*kBHnOBKL^MJtA_Ch}>R$UP!*kBHnOBKL^MJtA_Ch}>R$UP!*kBHnOBKL^MJtA_Ch}>R$UP!* zkBHnOBKL^MJtA_Ch}>R$UP!*kBHnOBKL^M zJtA_Ch}>R$UP!*kBHnOBKL^MJtA_Ch}>R$UP!*kBHnOBKL^MJtA_Ch}>R$UP!*kBHnOBKL^MJtA_Ch}=ml6xe{J(A=eNpg=Qxkr-RBT4R&B=<;?dnCy{lH?vqJqhg#l6n$qbncPV zlTf2`k7UfbM>6KzBN=n=1Lq#e zz_~{h#=N?JTpy~?AJ(A=eNv&3OxpR*sxkr-RBT4R&B=<;aX4S_y_eg5B zs=YY(NRoRb1Lq#ez_~{k6J(A=eNv$3A8Jv401MZI8BT4R&B=<;?dnCy{ zlH?vqa*rgrM^aBAb%um65uBbjjSk<<*o(YZ%5;oKuh?vW(-NNNt>CC)vP z65uBbjjSkxV%ENG6(wP1g|2v)Y z9`#3k!UvVL-sAl>gb#ragU&hcp>MiJeUp#Tekj6jQ2U|C)_y2L*ZV!{n~YxozX<-n z{Q7^ezl5#*P;|^e@CnNMu=|a=FI}hZ%cymOL7UzhctEJtyh1-MZBq;}YCk)n^ZYhN z5~D{kZHgg7!j+)MFKs;2Y*P&JF@C1m=Kbu1ex})`7-IA@%{F318&3?|6f0cfr-W@h zA8g}!UmH*Q+IYs-rdXk06)TK>a@VFelRk}p4%NmJs5a@-wx2q+NuNeP zX=;-`jaFS7s%t}aZK&=uemf)hjCdBxyHW3(2OFiXA)%iuZIrskgg(zkWi>{v(h*wQ z8{?nHen9oO5%q42cTnC*xs|*z-eXiP>ujoJqqV&ycDJ5SZHavv{7mdV*&D&X1~-AP z7~>T_CSD1Cijo}odt-2?%Y#pXp9MD?6QB35iGRZWqVQgMyifRP&>ru_xud*#vg7lm74cq&Je^)^mf<>TK45~zH1%+C-Bh<=3 z;rl7MRW^Hm39aY9RX#i>{3&?d2q)~`C3`0&KQ!uW##@EkRgXi$$f){KiE7H|Cz#vS z{~BMVyRKR2cY=hTmuQdwQfF@WyF5a@r7Luv(C)X) zf_7cAj@LCC-FLM6T^ONfN85wPz^6dZGqlsQw+Aoq-xtBN{OX>)-EWx*wL(?+9m>5n zquuYD2=$h(@Cx>Cz_&SrXPeuDcR@$U_C$eyO%#HjRcNPAZ>Jysyx*S+KCkS^Xf=Lb zd699#sI11=1?~a6!5**|JODlqo(8`Oej9uZd>yoMKCcYKI1SE#^G1y_jEg|`5uev} z8gCKqP>nnwbicMkD(Vv+13izlgKOR)ExG(v&|2ETUF=XD$yV*?NY##UJ0%bKNablm zLig7@0{3w{f_`ui^lF?P%FSHvd~63w+d)3IgM4g`*>t z+iPrgNP$MPvBTff7EXe{r`&ApNF=}_d-NNB!uMdClO1ZOIs;nW2{SukW~augW5G_1 zQjO!Fb-NSY?$n6Y<$gl36W#9A=+z~^1+C$ou(T7Fc4{=LUs3W-#-Tek4t0rDy%SaM z)R@%vK5##1o$u7h)M%aW)cDl)H$cy%?Ud$S@*-%p?-XP9{%z1|-|6=ag+Ha_SJ>A; zN1mM;nHsJ6oq;vK6V2~b9xGd8RsE__s&TQ}<4$SG_+Cmpd$vOfZ==&A!O@za=&F-g+KH|@ z(N(8->(jrit4?&)NfhlwSDompQ?nmFvvt*}84sg%)rqb;(N!n9>O@za=&BQ4b)u_I zbk&KjI*F*A=<4sp@YUe&#O>AKAF%%c`$4jo2kB2Ar1yM~jN(D50_!NHbTqon1UcAN>%0^h277(!badsxDE z!FeP7-NW>E537z`qW7?b%Y|L=-v$3&YVRr`d+buHxBZOH+(q`-C01>p1f4y0iD8#G zd+Z{6?DAK+WPb~E_SogGatWP1cBvMO&K|p{>n`fLi|nzB?6HgNu}cv{=RpHqXrL=_ zzuXl#d+buIFuH!b&_);9=puXUQk3woTnX7@7ujPM*<%;kV;9+DmulJPbidH0IY6Vc z$1bwRuE5!2SK#ci%U|UZ=0InUU1X14WRG2FvI|Xikv(>iJ$8{jc9A`HNg?_I0t(rM zLUy5$T_|K13fV;-wF`ypLLs{pEA%fEvI~XmLLs|Q$SxGJE3iU#p^#lDWS3gE|7C^j zLLs|Q$SxGJ3x(`LA-mLybtDSeg+g|rkX+U`kJe3x2)aLfNl54yNR5;iI%%{*Di7YyW3xL6}lJRtvO_$ zOT9ln_qEiONI6FL$h(!5=@_X<*CQ3_NM&d)*~PDWu-z~3){K+O-8=8rypwIm z(%nHX_5sj6^=^O7Rj9AI3a$3tMAzM#iL&j!dpEt$Zu*_w>UUhCuel0e$Nnz1=LvU9 zb-pTRIJ=pJ-YwPnYJUkj>h4w^=rcR^?p8Kv+wp3*W~FR94)3PV+Rgm)Zes6l=AU;H zfp<%L@+Ixbm$F3ti#WWS2)tW5^sl$-*GFjekI?ELAwoVvgnWbu`3P#KuR6 zijNTS9wFAHP(=z=q)OANqona_Or=t0ILeQm7&&ze6gqDpIH-g(_00 zB84has3L_bQm7(@DpIH-g(_00B84has3L_bQm7(@DpIH-g(_00A{AH_DSFiusz{-V z6sky}iWI6yX-?8dS`{f&kwO(IRFOgzDO8a{6)9AaLKP`gkwO(IRFP6|JF4?o6)9Aa zLKP`gkwO(IRFR@DPN9kvsz{-V6sky}iWI6yp^6l$NTG@psz{-V6sky}iWI6yp^6l$ zNTG@ps(2JtJc=qFMHP>tibqk!qp0FhRPiXPcobDUiYgvO6?-_t9?r0bGwk6EdpN@$ z&aj6w?BNW1IKv*!u!l2v_t>GpyT=MS!(Ps?mow!wHRrbp|hN9(3X>!wHR4&0-4)1!6Mqjl4x zbbnP)H97=|LeqD5M94^q`O)6w-r2dQeCY3h6;1Jt(9H zh4i419u(4pLV8e04+`l)Aw4Lh2Zi*YkRBA$gF<>xNDm6>K_NXTqz8rcppYIE(t|>J zP)H97=|LeqD5M94^q`O)6w-r2dQeCY3h5!|=|LeqD5M94^q`O)6w-r2dQeCY3h6;1 zJt(9Hh4i419u(4pLV8e04+`l)Aw4K$KML88LiVGO{U~HV3fYfB_M?#fC}ckh*^ff@ zqmcb5WIqbok3#mNko_oRKML88LiVGO{U~HV3fYfB_M?#fC}ckh*^ff@qmcb5WIqbo zk3!f3I$#gzpcjSoqL5w`(u+cRQAjTe=|v&ED5MvK^rDbn6w-@AdQnI(3h6~5y(pv? zh4i8jcA5^@X;$$p%jF|rzt>!UW&11y;$B6ll5%V7-<{x0z?f|oP z2jXY+-vi8493X!eG#$wL3sRet>@b0R8v@ zdhi2Mmw%lCJ!^MBeX-H=2?v<9JHV{n0qM#me*oSh{F1+j9(>7PL=V2iuV3QVFVjZ8 zOdI(!%KtLT_fFhHfp_8-N{3^@W1#1XAD5zxuTt_0&@+3F>kKN_8H}DQeq5Rv6?(4t zap}azc&6oXsl~r~uK00j#=m;5_;IPlB`<@XD}G#>F?z1}an-d@_1h=(T=Cv&zW@o#;ez_V%xnf*A( zT*pD;z(HNP{-tX+dan4O<~NKU2OZQkyWDfd2UT}Q&z>Dr-evTd=%8xQdWXEvnRX<( zPtXRRpbb93ti=<|T0EgPsQ;?f=t#9b+qcT@LwkK_uaElbBR=;LpZln%2azv^izEG{qd)M|*nagy;!v^I$8=Ki_x$>g z*nZaEPjv0q*ve;cjP2Lh%C;kIzs6R!9dG+JwzBQ0+fUT(*VxJ>ezM=M$e~)$SI%sI z1@xR)fACe%vwZ#f%9-&Qjyw*2of6Oc^#>>|K7)IxevJ)XzRb*MglPNypku`$ zwYyQF=RXfAni)NQKctvu+p{`{;+{`CB%K=_T@Nv4KO}wX81?4HB)HYTN>?uNT+JcI z0uA6hxLCm;7gRdhdr#U%xCx}w)@$`WF3d;Z4XOPKE{3SVRDSa zWLAe&n>sW3)nV1C?PZ{Q;jeIyU*R6V!qt9-tNjWZ_zD_e=lbADauW8hm+joi``3>O zeb?T_en{xMW-oi;|Bn5M@L|Pp_O%zfy|b^q&~2Q3?S;;%o`eT>x0mgf_#|vRsouf1 zdus1=Z+y*u>93zuyR+?H`$;k2U)?&`^4E$44rt!B%#XaLLP+u~ay${s);$;65cnbUm=y~|3=+U0iwb}j^cn$Pyz*ADA z(etZMNt4DT=$!B=_njH9PGTx`jc%LTQf0}InX|npK$?Bg*15Z=? zU-gav!2o^V0JS+lA2&d44p5r|)aC%SIY4a=kQEP5n*-G505N=k+8iKm4^W!}#OeWR zbAZ|$AWt5kHV3H90cvxA+8m%Z2dK>fYIA_v9H2G_sLcUtbATu}Ky40Cn*-G50Q?M4 zn*-G55o+@YwRwcvJfaA5H8?_Ma)jDELTw(QHjhx7M-)$V47GVg@x-=k^N8Y!(Y1Mm z{NxC=d4$?LLTw&VZ1JzI%_G$25o+@YwRwcvJi^r;;cAain@6b4qtwMwYT+ogaFp@L zQO1Bri6lqi|0rX+qcDFI=8wYsQJ6mp^G9L+D4ZXK^P`O8juJ7BGMYQ8>mLh_it|39 zpQ;~aGde~dVPj5vRcD?diGKSs1aMw~xJoF9b$LHHkp|3Ua4g#SUVc@X{w;eQbR2jPDZ z{s-ZI5dH_@e-Qo$;eQbR2f6Y=_#fo@2jPDZ{s-ZIkh>U!|3Ua4g#SVKALK3u;eQbR z2jPDZ{s-ZI5dPWAK42Gnp?lb8;Qtx!g^yY9e#DxeTFM%r+C@dDDm@%XW;)CuACj=1NMR!dMyDvzX!+R|2X^~hyUa7 ze;odgbIr%$|2X^~hyUa7e;odg!~b#kKMw!L;r}@NABX?rT={YMKMw!L;r}@NABX?r z+{JPDKMw!L;r}@NALlNP!~b#kKMw!L;r}@NABX=F=>G)zKLP(I;Qs{oasvIIfd3Qd z{{;M>fd3Qle**oVfd3Qle**s5Yd&C?d7=3~f&STFUbgd`6Yzfm{hxq;c9{=Op#Kx- z{{;M>K>uH(7x)_U3}54pzQ!GWow4568S8zW5!}}q!Fh-GzQ8-Yj|n}VdY17N`@GBc zcVhj*jL zQ_sddp7P%A{;$VV-r?OP9#46PciSFMd53q~9#46nciSFMJsbCU$~(O4Y>cP8!@F&d zr@X_v(c>xa@a`i$p7P%AwmqKm-tIoe<05F^a(9WxQ_nJ<@_z2NJ)UAeccI5q-p}17&U>F_JoRkg@sxLUcgYaw z@f5qd3q77w2DJob_DXD;1y9IP1@a z-%>q3r*W1`ej#R_BceVRzhql6O8-@iGCt%Zl@C84^cQTN(>P22Qby_{hkZ8XqPEkN zXTX=hmnnaRGkBc!oO%tP%~{iP(&wnqvG+OY)3$rS=hTDv7-vw=slTx8eCavm-twi| zmoH`Dw*LUzs}P@4zB&|~)V)6-^!m(`y01Q=S2eaY5+sa*GE{9Bg?p6xuzZ0AX4 zJ5TDqe5B_&PX>;$Ct1gJGVl!NN&3E%T>nX~{3O?WlB+$*b)M7}>ioJkqh~CiS1pVQ zkAWWNKF{p&^Ncc{XO!_g^TW@JPyNb><9S9L&od|dJmZe%8FxI-tnVrMlvDI6r zrTf)>9?Tz}ihHK(lsRJOPSJi(i3gW>)zc~Qa5XqhesY?g>oh&rY4VfP z)X`~T^=TsTX>yX&wqCMP*fPI8(WIZch6CgPnY)}5wCPLqM0CIdN5 z26CD@I!*3zn%v_w@#Hk|Vzn;|`rWYPoFYIG}40=WGu;P!8{2BHbsQn#O;+f}R z^}M?Gi`MVItnJ`e@tKzUDk_d(LxMG2CbKOv|t$xoyvR z4ig)P6-ms=i=bQCuv(c*JPSH3^%@4)ln1SpANV^jzq$dLP@K z`59IpWZQG0!-@dDe!mGdtO#IqZ$9k(9fSc`;3J6!!)kH*ulg^eBk-_#G2>#6^z)rz z_2$MUzAx|ZAoR@Au=+S3=?Fipp3b&cRSm1Z+Z&9~n~%_&kIsy%}40XN9fH*=*>sSDo5zeN9fH*=*>sy%}40XN9fH*=*>sy%}40X zN9fH*=*>sy%}40XN9fH*=*>sy%}40XN9fH*=*>sy%}40XN9fJd#G*7&C`}YfGcHIo zB1khLNGl2r1!>}HnkbZJERc?$qugVGG-H9ZnCX-4d@rrY<8tSF>A3U%w77D)^ZzvY ze_Fh`#QA@k{68%YUGgUA%s;I-WAD!V(`5c>MHt)8{L|$8X~mW?*}vgm&ivD4{%P^= zv;B@UIP*`F`KQVJ(`5c>GXFH0e_A!NH%Jpt(y9?1PoAG9o}|h1)8zSS^87S;ewsW# zO`e}tp06vRmr1K0eFo2?rd6A^9X-;jQ`?RnY1OQ4M~^hUPg=F?66g78^87S;ewsW# zO>Uniw@;JXr^)KmiWolLS$&#_k(N$;9!HF{)MDGSvS~#FqjUJQ;(+b%g3j2}WbA1& z_B0uLnv6ZIw(lc7YD<%`r}f6YOPsf-1Lt^YviEf0v0GZ2v`1$MX}x#v674P_bRUr> zpHGv|r|Cn}Qm>D9Oh`+^wjC4FQnKxN|BFmMO(vgKdv{6XU)A1iC$XKqr|E6eWbbLR z_cYmin)aSnEAYQO1C~}>uP6bri?pd1X;UxKre35?ouM6_VFv6Bt>z4^ z<_xXoj55`+;0&rhqbyW5>N>-7kTX07IfH)Apqw*k<_u~%gHFz%lQYV}{9k8WXQ<^f z%CBs{3_5!h%ZvnHW+eCu$G^hyuW;jBvG|Fy(#|XB4iqYbzx;U7~a93_7RL&vUhkA3Ftl#ndP@t}NAOrmoe$sYg)s z1-)Wwl-eKF?6l8dK1VgrVB4&YYCgfXxgBNPI?A|plyU2*W*GddxgFIgTQ&@gYOHPB zvrMCmxJOaKtGf5T;8oqbkh^9mzn}G*co6E!jqeeDhg$m%we}rq z?K{-k>zwCx&ht9wd7bmT&Us$vJg;+}*E!F3InQ@F&v!Y`cR9~FTKYNK_&M76IkoYz z;2cjG&Z(AV)4I>`l;Irh`W)^09PRoX?fM+;`W)^094-1BE&3c!8P2I5eV%WDo-aDb z$mkqnqH{cDIHx*wxyLN$Xv^nl%jZ<5E}1tn(m%&Y{~R@YjygR@>pn+3d_%2!EOV(}eJ^jQbsPPZ=MA-Pqo4A;q1J8O2l{=MH`Ka~e#-WSTDQ@6@rHD0bS!#< zDD(zb{)Sq*ORj-_%JYU=y3tquhFZEY3Hm9|8*1HS!FgKWd0O9jwcPuH^VIBlYT-Ps z@4S>bs&Zfdc_~viZS6d5?Yzd_S5@K`cV2qXF~K90q_7{wehfUpf33Ik(y-6t)fDHY zWS_xnD$YyKw*BAoTnw8=ibjV-*sN~ zrE@atbzZe*d%5uY+}HQ<@_o+#ea`TG{`&)>*$;?jKcL2cK#l(pJ^v6r{}4U@5Iz5h zL2uV~+nZ$N!Auf5!1YX|*|u&k(C#kK?k=dlT<&&v zfp>c^@NVw~)t$?&+Y7wgdqFiQkMMIrHE7$h^nzlkjwG`E9L9bQV?T$npTpQVjE%$C zIE;Rq!6Tvy~2cXA*6Z9Gr%H;j4G5LN1|@ODN1hNpb0F za0!K6LLrw>$R!kV358rH54=nsc$qx#GLiW*wS1Xqe3?A(GPQP@Jn(X`M{Hjv54=ns zc$qx#GI`)-^1#dFftRVN%S6}9)YoOA>t&+rWuoh4>g%%Z#piS$c$qx#GI`)-YUDC8 z_A+_kW%9tw#MsM3*URLAm&pUKkOy8N54=JicqRU(&UuAeN zOTR`-zlNV*!_O36rtmUF9GD^wOc4jBhyzo^fhpp^6mejRI50&Vm?92L5eKG-15+qu zia0Pu9GD^wOc4jBhyzpH(G+(yMI4wS4ondTrcl%rcRIzLP7w#Dhyzo^fhpp^6bwwk zz!Y&{ia0QZx~9<86mejRI50&Vm_k=m#DOW|z!Y&{ia0Pu9GD^wOc4jBhyzo^fhkls zMI4wS4ot!P6wFT%2d0PvQ^bKO;=mMf;2Je@jT*T|9JodtxJDefMjW_C9JodtxJDef zM%`Vb?yeCBt`P^W5eKdj2d)tZt`P^W5eKdj2d)tZt`P^W5eKdj2d)tZt`P^W5eKdj z2d)tZt`P^W5eKGG$TSL>Mj_KEWEzD`qmXG7GL1r}QOGn3nMNVgC}bLiOrwx#6f%uM zrcuZ=3YkVB(Mj_KE zWEzD`qmXG7GL1r}QOGn3nMNVgC}bLiOrwx#6f%uMrcuZ=3YkVB(Cls3YkG6Gbm&Rh0LIk85A;u zLS|6N3<{Y+Au}js28GO^kQo#*gFCls3YkG6Gbm&Rh0LIk85A;uLS|6N3<{Y+Au}js28GO^kQ*rE z1`4@>LT;dt8z|%k3b}zoZlI7GDC7nTxq(7%ppY9VLT;dt z8z|%k3b}zoZlI7GDC7nTxq(7%ppY9VGK)fHQOGO`nMEP9 zC}b9e%%YH46f%oKW>Ls23YkSAvnXU1h0LOmSrjshLS|9OEDD)LA+soC7KO~BkXaNm zi$Z2m$Sew(MIo~&WEO?YqL5h>GK)fHQOGO`nMEP9C}b9e%%YH46f%oKW>Ls23YkSA zvnXU1h0LOmSrjshLS|9OEDD)LA+soC7KO~BkXaOR6NTJFAvaOTO%!qyh1^6TH&Mt< z6mk=V+(aQaQOHdcaubEzL?Jg($W0V-6NTJFAvaOTO%!qyh1^6TH&Mt<6mk=V+(aQa zQOHdcaubEzL?Lrh$lhR13K1&vyejnCj5(>|0pSq#FzC6dxwyZ4GN+7mRQNq?uXUUw z$D5M|Y+jE9<%6?t$nZr5dz_y(?&M6bN?Ju9qkwebuS(ttKdpL8- zja}~9#W`ijwmru@7Z1kGXIc3PUz2-74NIjPR* z*~mF%(LS^1B=PKu_3PWT`nPHIZ>w#N1#hcfjQ038ZS!r~=G)@aC7!2!TW2=jD$JsaEUL(& ziY%(gqKYi4$SOYc1zC+#t_rP+EUL(&imdz&sl;c_qKYi4$fAlYs>q^>EUL)zJ)A76 z$fAlYs>q^>EUL(&iY%(gqKYi4$fAlYs>q^>EUL&dg2q^>EUL(&iY%(gqKYi4$fAlYs>q^>EUL(&iY%(gqKYi4$fAlYs>q^>EUL(&iY%(g zqKYi4$fAlYs>q^>EUL(&iY%(gqKYi4$fAlYs>q^>EUL(&iY%&l2UWa-D&9dA@1Tlz zP{li_;vH1+4yt$uRlI{L-a!>PRFOj!IaHBD6**LqLlrqxkwXocTvT=sKWa`?+x;->h$i7rk(V~cbfn){&r2ag!t;tJc~*7ibtOKJS9Rv;N%Qf4<#?~^%*VYd zFCX`ud0toRBfY9KANLBqycFesc~xg#>p+Z-#(DL{_Tp8Yc`3~$o*~S~y<#UX)fv62 zGta8dy!vP#=~bQixL0-N<8N`iS9Rv&Ue%eGN_`%$^vg@7w!Nw|FZPUH)tT4I5TjRh z=CwY=wpVrLS=E_mRcD@6o!%*1|3c4s=~-uERcD^ro;<5M^Q`L3qwu_H#K(7Xw!a6x zsxzCm}t(5QcJc9iw=$WFtT7k>EvAwD@&#X~it-y9KExNS%B!vU3|`flS6j2~+1fm-I`g! zys9&=RVc=vf@p@8n5QM?X^DBYM4!hqy?Iu3=2_L5XH{pORh@Ze#`0>XK608Py{a?M zELmRd)V7~o=arlJUc9O^uiVV&Rh@aQLNR((XP!JQPo9>iUFX%Vbq3mXUhUfUVvh8x z&OB{Aua>C$VpV6JIk&u8x{vg#&b->YZRZAgwbs1}@4en9)H5TYGKxe@ZEaMjnS9|- zvHuNQ?`WvxO;9T_WNRgcQ156YVqVoL)H@o&1)$#1kge5d!mU11`t*@{6IrM=8$zww z5NgeaP-`}XTC*Y4nhl}e(GY5#hEVTl2(N>BMk z1b3Ipx{{{ijf|NT@fzgumgxTK_3qZwv|b=9lny*jiO6dj?x?e#xH2 z)|+3l_2yS1L2V|e%>=cXP%P5FsLh0GQ)lz)HQ_e<_3Aa@4s)nl_K}^G=*=(Ldh<)D zH@}36LPEXyB~;`Q>dh~qB9BmSehIZARH!$u#T=pD{1R$Ks8CWt2l7>*x zMyO~b)T&XTMgc;N0)!d`2sH{2D%uFqhN6wnrj@`#z4;|X4~{mn(SV|jdD99~q2Bxw z>dh~qqK)uBK5-QFJHDVHKrKnJEehC$4go-K&H3R?4YukhcE_YNB z>Ps5J$j2+H*w%VZ;bMMuOh_oIxMT^x>di0Nw^06G%Jn4;mHZ*L){e^7n_r0qYImc; zVk7Znfpa|BjwcJ8;|Vn$6ly#u)JRaMwI4#qlLgY7F$rqiC)?3ufipLu#&^PfpvH8v zwI)QUQJYZXHKC)&0%uS{jkAOr?+7)vN-S`WB-BVs=;*P)8Ie$HKZK4R3yBg7y$(UP zqrpO=!9wD|Lgf!G(W-3WCEK)xgI=pa-naUy(6PNhbzyXDFVGzs9pMX9BSNBg0dc#4xa~crUGBJDAm)vZ+Xck!0<{#| zdQK|T6H=jLxOa{=I);1aXrrEgCA@RA(UH7>t1aMa3y9|h#Pg842&sjTS_oAOV~NnS zPeRQnBtrNPJ)0!kaVCWM5avUe4`Dup`4G-SI1fF8q~kTl7jjNrzwOtg=g_%?@F$dL z>@3@Chp-*OcIcTRmCPH}vW$yBx2BLg3gJKWQ?NuK{1?K1A^aD@zjwp*ujaoH{tMy1 z5dI6{zYzWl;lB|63*o;I{tMy15dI6{zYzWl;lB|63*o;I{tMy15dOUr3r1?YJ?n4)8{?Pb)(5hIZSwxi(ffs2m(YE98BF`ua&HN(ID+kiJ9n-JylY|ZLEann3;N8TG zzH9FwW^^BvRK9A|`bputpzkQjy(GB{_7PKwa#5kLxrl2n;+l)lOc9zXLNi5ZrU=ax zp_w8yQ-o%U)UI^~%_uvluoO!^2`2Sj@dI=B^iW zzl*uA#b{yO9v10fshM!`XDTbM1 zm??&nVmK*AW5sB!7>yO9v0^k4 zOJHdU{49ZuCGfBW29|K|OStPL-0u?ZYY7@#g2tAhu_fHm67FRQcd-PGEkR>TxaJbB zxrA#jK{F+2rUcEDpqUahQ-Wqn&`b%MDM2$OXr_ewE#ZDkxYH8uw1hh?;T}u4#}YJC zf@Vt4ObMDPK{F+2rUV{J&`b$zl%SasI4MChC1|Du&6L1W37RQ^s}eL*0%Ij;rUc$f z&`b&Jm7tjtI4nUkC1|Du&6J>-61XivGbL!I1kIG7nGzT-K{F-rT!LmwV7mm(l%Sas zG*g0RO3+LR{4a(7rSQKL4wu5=QZ%y^CYQqGQkYzdX0%VcV#QMUTnbl9VQDG+EQO7w z@URpHmU8b)x$C9e?^5n-DVkY|W|pFvrQFd{?qw-=u@ucLMKepe=36wP8A{xu5sgp^ zxhg!VUgj1l#OUnt7SE0fJ%+kPHLhb+%f=M=B*zScdZ$3;dZ$3>8HQU_N5%`3I2*r3 zHDbK%ahnyMIEE{ zii!7%0b?QPY~;Pv-7RpCzmr1cYvub}Vu^h!NN3qLM>~a*l9K|k2 zvCC2HaumB9#V$v&%Terd6uTV7E=RG;QS5RQyBx(XN3qLM>~a*l9K|k2vCC2HaumB9 z#V$v&%Terd6uTV7E=RHN<9go5ncv5m-^V%M$A8~XKl^_A+4s|0-%nlNsyn@!xK(#5 z)b$(P&)%l;2ZWk|6y7dQZj0RkYNt`zpTNEo)J~%+(N3enmEbDPY24g;Sz8us9lLwayxjJ zug5!$3Ri-E#xa_SRf%R|g&sBE=AA}`dLuxnr>?@k@sZwXRM-GEf=ysE*aEhKp9Vhz z{x$en@ITMf?(-)e05xwf`wQ~&0r>v_{C@!cKLG!w@Lvl5rSM-0|E1pPHBk!xrQYdP zw)roG|5ErbjhX*a_%DV3(wO-#^-ixs^Ir=8rQYdPw)roG|5Erbh5yo+`7e!`|I(QG zFO8Z1(wO-#h5u6cFNOb7@ARs2^Ir=8rQYdPw)roG|I)bmFO8f3Qur^0|5Erbh5u6c zFNOb7_%DV3(uDah^-ixs^Iw`U|D_4@Uz#xgr3v$2>YZMN=D##y{!0_)zZCvUz0<2~ z^Z!Bk{~-K-5dJ?1|7GxB2LEO7Uk3kW@LvZ1W$<4H|7GxB2LEO7Uk3kW@LvZ1W$<4H z|7GxB2LEO7Uk3kW@LvZ1W$<4H|7GxB2LEO7Uk3kW@LvZ1W$<4H|7GxB2LEO7Uk3kW z@LvZ1W$<4H|7GxB2LEO7Uk3kW@LvZ1W$<4H|7GxB2LEO7Uk3kW@LvZ1W$<4H|7GxB z2LEO7Uk3jlg8vV}|A*lJL-1b?|K;#s4*%uwUk?A}@Lvx9Uj_eF@LvW0 zRq$U0|5fl`1^-p>Uj_eF@LvW0Rq$U0|5fl`1^-p>Uj_eF@LvW0Rq$U0|5fl`1^-p> zUj_eF@LvW0Rq$U0|5fl`1^-p>Uj_eF@LvW0Rq$U0|5fl`1^-p>Uj_eF@LvW0Rq$U0 z|5fl`1^-p>Uj_eF@LvW0Rq$U0|5fl`1^-p>e+T^E0snWv{~hpO4gb~fUk(4&@Lvu8 z)$m^p|JCqc4gb~fUk(4&@Lvu8)$m^p|JCqc4gb~fUk(4&@Lvu8)$m^p|JCqc4gb~f zUk(4&@Lvu8)$m^p|JCqc4gb~fUk(4&@Lvu8)$m^p|JCqc4gb~fUk(4&@Lvu8)$m^p z|JCqc4gb~fUk(4&@Lvu8)$m^p|JCqc4gb~fUk(4&@c&Wx|0w)_6#hR7|26Pm1OGMf zUjzR&@LvP}HSk{p|26Pm1OGMfUjzR&@LvP}HSk{p|26Pm1OGMfUjzR&@LvP}HSk{p z|26Pm1OGMfUjzR&@LvP}HSk{p|26Pm1OGMfUjzR&@LvP}HSk{p|26Pm1OGMfUjzR& z@LvP}HSk{p|26Pm1OGMfUjzR&@LvP}HSk{p|26Pm1OGMfUjzRiga41g|Ht6}WAI-K z|F!U63;(t7Ukm@W@Lvo6weVjH|F!U63;(t7Ukm@W@Lvo6weVjH|F!U63;(t7Ukm@W z@Lvo6weVjH|F!U63;(t7Ukm@W@Lvo6weVjH|F!U63;(t7Ukm@W@Lvo6weVjH|F!U6 z3;(t7Ukm@W@Lvo6weVjH|F!U63;(t7Ukm@W@Lvo6weVjH|F!U63;(t7|8e;LIQ)Mc z{yz@?b?{#Y|8?+R2mf{OUkCqn@Lvc2b?{#Y|8?+R2mf{OUkCqn@Lvc2b?{#Y|8?+R z2mf{OUkCqn@Lvc2b?{#Y|8?+R2mf{OUkCqn@Lvc2b?{#Y|8?+R2mf{OUkCqn@Lvc2 zb?{#Y|8?+R2mf{OUkCqn@Lvc2b?{#Y|8?+R2mf{OUkCqn@Lvc2b?{#Y|8?+R2mhad z|4+dGC*c1R@Lv!A_3&R0|Ml=+5C8S>Ul0HF@Lv!A_3&R0|Ml=+5C8S>Ul0HF@Lv!A z_3&R0|Ml=+5C8S>Ul0HF@Lv!A_3&R0|Ml=+5C8S>Ul0HF@Lv!A_3&R0|Ml=+5C8S> zUl0HF@Lv!A_3&R0|Ml=+5C8S>Ul0HF@Lv!A_3&R0|Ml=+5C8S>Ul0HF@Lv!A_3&R0 z|Ml>HC;Z#8-oBz#QeCf4d7Wcj4u(#OGD=DSWNK*9v^Cz}E_Vt%%vz3Vf}I+1Cnut-#lc zxP7g_*NV7(t%%##inx8Pz}E_Vt-#kG;cF$nR^n?VzE_*#pvwfI_#ueJDEi?6l#T8po>_*#pvwfI_#ueJDEi?2V$*E)Qy!`C`| zt;5$ke67RRI()6e*E)Qy!`C`|t;5$ke67RRI()6e*E)RN9rN>ryJLR7aChv(((2uc zW23@9l7{bA95engv)BGz`bBMxDV7@Jo@$9*sp?KL3Fp`lFqNV zWW3AAC@vZC75`&wyu|+t_Mh@EKTWt>@yh6@26ro72^Fu5egbkgPeASt+I)QCHn0>d z1Ixh*uoA2StHBzu7OVs7!FHct@ye+04GO=YD_>9TtfzL?Q#eu zSx@b(r*_s;JL{>P_0-OKYG*yQv!2>nPwg~NI}OxM1GUpY?KDt34b)BpwbP)!=4zsW z+G&Wnb{eRi25P4v=Gtk9xpo?2uAK(;H9p?8(-3p*G{jsx4b)BpwbMZDG*CMY)J_An z(-3#pQP)XoNKX9Kmff!f(X?QEcSHc&eosGSYe&IW2{1GUpg?KDz5jnqyfwbMxLG*UZ_ z)J`L{(@5*P9wF`NbNLIJB`#%Bel~=?KDz5jnqyfwbMxLG*UZ_)J`L{(@5*P9wF`NbNLIJB`#%Bel~=?KDz5jnqyfwbMxLG*UZ_)J`L{(@5*P9wF` zNbNLIJB`#%Bel~=?KDz5jnqyfwbKM|P4LzPZ%y#l1aD37)&y@&@YV!xP4LzPZ%y#l z1aD37)&y@&@YV!xP4LzPZ%y#l1aD37)&y@&@YV!xP4LzPZ%y#l1aD37)&y@&@YV!x zP4LzPZ%y#l1aD37)&y@&@YV!xP4LzPZ%y#l1aD37)&y@&@YV!xP4LzPZ%y#l3~$Zw z)(mgW@YW1(&G6O?Z_V)53~$Zw)(mgW@YW1(&G6O?Z_V)53~$Zw)(mgW@YW1(&G6O? zZ_V)53~$Zw)(mgW@YW1(&G6O?Z_V)53~$Zw)(mgW@YW1(&G6O?Z_V)53~$Zw)(mgW z@YW1(&G6O?Z_V)53~$Zw)(mgW@YVuvE%4R?Z!PfF0&gww)&g%W@YVuvE%4R?Z!PfF z0&gww)&g%W@YVuvE%4R?Z!PfF0&gww)&g%W@YVuvE%4R?Z!PfF0&gww)&g%W@YVuv zE%4R?Z!PfF0&gww)&g%W@YVuvE%4R?Z!PfF0&gww)&g%W@YVuvE%4R?Z!PfF3U96O z)(UT}@YV`%t?{jw3U96O)(UT}@YV`%t?{jw3U96O)(UT}@YV`%t?{jw3U96O)(UT}@YV`%t?{jw3U96O)(UT}@YV`%t?{jw3U96O)(UT} z@YV`%t?{jw3U96O)(UT}@YWW)JNB1}w%Dh^&&2MNy%GFta1;27F<#+g;+5d1 zD9M4pHwJgQJoqH|S#Yy4@p=E6_$TZy3OC|$BOW)#>~SL=H^%I7W6T~m#_Vw;9yj7~ zW85A$#_e%q+#WaLaU&i#2KKlyu*Z#f+=$1G347dx$4z+LgvU*I+=RzXc-(}?O?cdd z$4z+LgvU*I+=RzXc-(}?O?cdd$4z+LgvZTz+>FP~c-)M~&3N35$IW=$jK|G*+>FP~ zc-)M~&3N35$IW=$jK|G*+>FP~c-(@=EqL65$1Ql=g2yd*+=9m~c-(@=EqL65$1Ql= zg2yd*+=9m~c-(@=EqL65$Iq$7jU_&(7H9mha+}YoH5v8IMxov@7y1pR&Ty&nE^ zYDdOb!S5K=E`(CP&Lia;+gu{$8%x15upF!aE5RzT8ms|p!8)*Bc%PWLPxxujdb-tL2$`(WliF{2VOWBe?**$6ZDi5c5p6yA@=`|)@`b#Xr) z@5kf)c)TBv_v7(?Jl>DT`|)@`9`DEF{dl||kN2xCbbdVEkH`D*xD}6E@wgR_Tk*IR zk6ZD$6^~o-xD}6E@wgR_Tk*IRk6ZD$6^~o-xD}6E@wgR_+wiyzkK6FL4UgOKxDAin z@VE_++wiyzkK6FL4UgOKxDAin@VE_++wiyzkK6FL9go}bxE+t%@wgq2+wr&^kK6IM z9go}bxE+t%@wgq2+wr&^kK6IM9go}bxE+t}Quy9PyA*ExP)yHbq;uQ1OQr41t+g|& z*3PV2du*Ln-?hj78~A77pM&c;{=aK1)*fpH|B~_+?0c|VvHwbA!}eGkwpU`bt4-PC zqu?HJFW3$41HEdfomsnfX6@RUwQFbAuAN!Cc4qC`V_(JB0H`-l^{=C#z5*(H5PSyI z7dusQ0{j}N_fl2zEcgv@7#so9;0xf3pjU>s$GqmPJ?0f??J=*SZ&w8H9gT9#tJr>j zq+PwL%U{R#x~BHn_prUXsXg`vw%0hd$F%c^&?{})V}5I_J*Ib5g?dL-=(on&V|qtb zs5hF0+9yKzOVBHG+GGC?dVNlN%x?s=GfUYXo5a2ZUIyRsHOC7;zi-tZF9N-isy*&E zL))3pY>)fR&~|1u+v6qJUfa_izXjVX<=W%#18;LJ$IHNKN@~Dbunw#TKMAhlJgdPq z;GdeSIC_htH|9v&s%x;sY*G z)V2LV>@w^RVV7f9fVWdpiTx4mD(pM3tFb?dU4#8G>{{%PW7lDS0=pjjPVBqD72ry6 z6}Sdm3v%zw^tLC~Q{wez?THQ8UiH+T_zP^WeQIa!w>?3-V+OcALAzrfxIOV#9O>0i z?f-vuXCB^Eu|EDYOVTB6DU`A=0a4bLleTG7K_qQcC>Dy8T|v?|Z3Ai2lSzPr3lwEj z3@ErSAc%m7xL)P5C@v^ocX8v2;&Sz?UKd1h_xH|wCTUUc{odz3&-afXJe_%G&dj{; zY@ahT=Okg%QI;pSAvP0bd72tx7ov=_lFddL+mK-!GP4cquqEr!ZA5o2x&d^9;5KU( zSd%nssp!fRt!7-cHX~u0X_Ab`bzn2Kp)B8(HIPLHvdF-c2C~RN78%GQ16gDsiwtCu zfh;mK$s$9OW5duSiwsS&$Uqhunrst8lPoec*(Qc2S!8IEMFz6Sfb$2LOR~s778!7V zm$GD$0rz+5N){RT1i?TS8OS07S!5uK3}lgkEHaQqh9+5LXp%(+vdGXRiwtCup-C1Q znq-lIEHX67B14lbGLS`vCRt=?l0}9lS!8IEMTRC>WN4B_h9+5LAd3uSk%25SkVOWv z$bdD8v|qBwKo%LuA_Jds7|0?6pL7_=A_Jdy7|0?6S!5uK3}lgkEHaQq2C~RN78%GQ z16gEfl0^ox$iQbM2C~RN78%GQ1D~51nq-loNfsH%B7;a48OS07pQ;$hA_G}uAd3uS zk%25S@HvZtEHa2>k%25Sh-8t0EHa2>kwGMj3?f-%5XmBgNER7HvdDmQC$I$0oun&S zWWf3j+6`G`Ad3uSk%25SkVOWv$Uqhu$RYz-WFU(SWRZa^GN_zK@FuA&6IlfBMWQTO zWWWwc#!D6%un&^5WRbxniwxKeNm;VUfIX3vC5sH$8A(~P$bkKklqHJ{*d<9>vdDnF zl9VNj4A?PAS+dArl0^oSEHap6k-;R33?^A*Fv%i=NfsH%A_G}u;Ik(KS!Cc7C<9q! z;BzPgS!5uK3}lgkEHaQq2C~Rtl0^ox$Y7F12C~Rtl0^ox$Y3}tkwpeRu`-ZF2C~Rt zl0^oSEHap6k-;R33?^A*Fv+4YvM7u!3IkzwL5w_I4Q3P4E268QiJzJ`DA&qox;KqcG3ovV-AB;f zgYI9kc6-r<-)?|3`_Vms)*i$(PoS%ZmZcWQ^S9#eil~mb<(d z&`ip5mlp$?N%>`TUq$x_x^JKh-yaB9;Tx;Kh3^jpSFWsLKr<=JU0w`mCgt~0{s3jU z%ZmZcWc-iPa-f-XlhI8_SMKs+Kr={#G>ZYvq%1!>69bw_S?=;;Kr<=Ab(qT?e}P=sMAr?}WsFZ!kiDZ_*u&ZYgTP@d6~)X1wqKahcb za24n$Wjo6KQ0|ZN87QBL?pYW!5amHA4@P+i%0p2ehH?(dxhM}uSx4D{avsY0C>Nky zh_Vaav(X)i?r3yN&@Dr^Le?GVC#{vc!Whs`%5qm21Nuo>?h0c_zZlR@#>mgb#DIQM zmYvZhaQ0+DH&wd8H0j#3!J7QngN)J$N}5&-z9|ze1wy7wwIr=X$xQ15 zr)Fk6ZQLdmfA)D|l_S?jDluVkCnOFORQG%Z*AMak(}E*Yxi3~dOR zp}|*O@f5HtOqMB`Xr0KnN~Rioa$d+#CvfBmPh@x2o9}v{!qBVv?^R8t{hQqShCz^M&m>_QWN7 zNz@;xvpaNssxK@cm)();(B);Bu`QWj*uC~h*jwjo@`mTxL-lcm-e8@*$=hPD@!7+^ z2ET~-!eFUCXs`8!BVO?5M#Fwl=dYC}iQI$@?F?;H!? z{NG)Rv^4wbe8S%l1k-aHBTa!yKh#iw{wUTn(&)3ho4vK*sVl?m@oMJf>g~(MRJoyW z!|;Gvh8SL1QRf)8v}UbE3uCHAh_!3m z;V)0qH3$5`E7T}Cv|$iC22zKhv;dT2*GfSSLvHEH^86qLVW?I?oDU?sRt@n%80wQC z+@M7vpBK`)A*L2n)PWm@bUE<%$6R)pR8c53fHq5ObZsi;5K5OFY|KSFMN&z+9+-Y+C{4_@UPERuW+MAKT&2TU7Q+1lsg$Z8-d2fd6wr!|AOkds6mBF7{~? zr2KF5MWC*-2W9)nmTrKW$XZF8WtmOTBb8Vi*~sn40%9rwzonW-n*gKFgX340sZo>QztuxG|H(hL zgHXZix*$T)HysU+jc1X4vNlJm(VQcWh4DP$^{My8V)WG1X1sU>y9N9sufX(WC!m&_vp(nNwJM4E{~!bFe=iIVwb0a-{|$Re_sTud$@ zmy*lK60(%El4ay_as^pVR*;os6dko*|ZDoO1shSv)wH&!7Y7ne;3=kPf1Q=@2@U z4x>3Vmky^obqQ&%VI)aX*=g?8~TsoS%X$dW*Wz<8<=@>eeR?uxtI*m@JGw4iu0flGcbT+++&Y@mfLu+Xr_0f9TKpUx_ z&ZYBcfHu(}4bf(5&@dG=LZfs(T|gJo7P^QorWeyo=%w^Bx`ZyJt#lc^oL)hf(-m|j zT}4;ZE9q5q4ZWJi=vumtUPG^?>*)r19lf63KyRcs(VOWl^j3Nsy`65Po9G>MGu=Y( zq+97-bQ|4HchI}(PI?dBMen7%>3#Hm`T%_pekcB6_`T>y=%aKG{3h#Ox{vOs2k2w; zae5Gbhx1AJMa!q@A^Hq`7Jk9;Irv4v=jjXdMfwtbnZ80_rLWN=^mX`Uy*J_4=H7;1 zZ2LQXhaRKv!ta_Lhu^#UfPM(S0Q3*~G5v)85B-#WMn9+jq+if4=~wh?dV+pKPttGc zckm77-_sxHkMt+{GyR4B3g0=ZF#=yJ$>1CIEX)euik8e$SSozSRT_iuGJ9?+y0advC+h{DkM9GY(YCXGtUo)04Pa-ov)Dj3hz({#*ibf%<*-~f zoaxNL@>o7AU`|%ZikOQPv$NR_Rq+&1M&|Iq=lJhSjn<=7T5V4e-3$&*rju zEWnyr5T2tn!|7v~2^L{dHlHnE3t07$>^62g+sHPtJJ@Enh26=v zvb)$eww>)@ce9=B9=40!%XYK-*!}DQ_8@zRJW*x%Um>;?8Bdx^cwUSY4Y*VqyEI(vh?$=+gbv!m?q>>YND zz02NX$JzVr1NI^Ni2Z|o%syfN!#-u7vCr8**%$0f_7(e@onYUvlk8je9XrLoXFsqX z*-z|e_6z%!{l+y;IOU9UZsAs*#FKdnPvthA#?yHQ@4z#8N8X8N@yOx-U%{926?`RM#aHty`Bi)kznaJRTE327!>{G* z`38O+zn15op0ou_#J#R-@@S z>MSDQ6^(q6FC1c_ppQisge;N9un*cV6bfqT|Km`Z07U^*xUttO(AT7)Ig}gU+WFPXiAC({krZh zOKsb-rG)0gu#k1P*7=|hU`RlxLpf1lgKia3?D23qc5ggn@zzEoKH3zOc&^k6 zOe2R|Y6Yf~Vuy;hv@)Dt5l=5e%oAy}PC)h6DpN(3siLYao3+ZcuPUB1xhWcm_?rVQ z)+!vO)+uJzDQ4CwZCO*M#Pe8Z;6=;i#!xtz+TaT}!L+Uk2&?Rh`97=H%co7yaHjCGnTpMo|=zW>lXJ+=bWln*vG>4njZ>I5^Y1I6Y?VjR~r(r&5hM?ID zAv1Z%Ode`0(i$@D3B_|+>-_Wmbv|pzY=o$pF=}Rvwq;C-CUUgkMc@uJLP|?KI?3JS ztqq5QNnX>px?#r2HbF1R9cqB#H806)`qok`#9C`ADs59_t8J5cXPv`89%Y?RS?4he z_MvAR(`J#ap-r}qF-vYhkB^bIHh_~h2FYz|No!~qu#IiYZEI|k`B-2KZP zHn&YqJFlJ5Y4c7CNK^#_Fz)@e)=IMz1L&nywoeym7qC{E%^5(CSIUM8fMcyR2VKDQ zCYYrK&C({cDF98;zug+J|VBhlYICNv0)mV*%QxO=_n+E!-|(on%@PHoa;ymq5=}-PW8o zxaGR>0^Nt!eB%Cl=d}GkG2mbO;HmfYWlWmZ8fkhXeZBTC%3f8DKp|& zu+B7FWf6L*GZRBHbx}gJ&NOSb2t5m|R2qb}J`e&cQ}Hfh=0$R%nB+F^AxT~ZO%vgG z&1RAe<+SQ{?Ux2OTUb!3$=_zH#Z+!Kmj#xEM1sChk}6(cQ}pVvTgOM|SWrOp?Kc#~9Fup)*k z%8PIW9r1Emm}MST4_4_=J=4&VQW}iXh5n?Fs$;XCg&RXwShhEL9TxOh1gfe`V9ij? zTKEHtEFswkX|m+FWgUKJX__k5>_Bx91F4u9#T0M7-w((CdHHe4=}1U<390RBLAuJ} zbjp@ZgbHOSk-jJ)xe`)wTq@KPQbJc@T$iK38NcdCl;TK~;z*Q|mnbDKQA%FC6g{sX zUP@k~yu89hT%zQ>M9F!HlJgTK=O;?ePn4XWXp8)Wj{Jm<{DhADgpT}#j{Jm$WfTcQIxQ%C}B%c!j__h zEk%ivixMRlB}y(zlw6c3*_9~Sm8h>Pp~IEX;Y#RmC3LtFI$Q}Iu7nO(LPv2zM{z<& zaY9FNLPv2zM{z<&aY9FNLPt?sDRCVzQ`8u8=<%x#J+8x{$8|XLxDJON*Wu9PIvjdj zheMCo!=Wd1I1)PAY<9-u^kSEFnz<}qV0zQ==3-rdUdpsM4pJ7xCF=|`VT#GSyyp^0}e2RB(o_YVavGj|#4o@mIpX&Q z>iqTfmNL9wG>1cV(b`Cgh{8QYT5Q1`cM?2km0R^>f3O~Q@{tx0B643Au)$3v99oD+ zCCTz`F3(I-ad8n}htJK#g-5$Z ziLIU7v7H>2w?4z(CHZEFdcIjA`1!ms6q+Zyti~4zEx=R-Dpi4Q>ML-X_7^x+xKM=)&3Y6Rn)N6s zL@V@yLTpFyu^qw3`hkz_2tKwW_}Gr%V>^P6?FhcvP6dT=eb_D#kL{ut6e;~hN`H~k zU!?RGDg8xCf05E(r1Tdl{Y6TDk(qE+XyOe&H((h9GT}r=8>31pp zE~Ve4^tzN@m(uG}dRzp^tn|%-Kw5$rQfaeyOn;o((hLK-Acb(>31vrZl&L?^t+XQx6=p-kCOrfeuvHk2tF%9IUdsvXKyKX{aWk7@&t zY6Fkb?@{_aO20?7fk)~0DE%I#-=p+IARcRI}WcRI}aI~`{IoetFR@R;)y ze7p`mUI#yZ9qofK+6O+`2R_;dKH3L9+6O+`2R_;dKH3L9wh#DdANXjW!(+}<@RfdZ zoTk|b2&?*+7Rk8=VOM;vfn2QO-0k9&9p+qxG|G-r)efb~4s)J5Jmx$FU)f>KQwS?N z%y|l7WrsOWA*}kroTm_0{b0^h2&;ZD=P87hesi8WJmx$FU-g4IPa&-O!JMZMR{dbk zQwXbmFy|?RRX>>X6vC?h<~)V4s=ql;A*||e&QpiSoTuQc`kM0+!m7UJyo9i-uQ@OC zbah|I*UPioj<0YN0*l3(c5%4vka3;b(#dtq?~>tpmW<25g=wNBGngnO9k0gon->#V zGvjMpd0lQ2I>sYv;OQg8O)33-Ol4^@EaY>W;gM;QT+`-;gjGg>2M@l$OUBhb2uX64 zi#{xH<#kxw%ImnSl>)A4WdgaF1)tW}%iB?&BTrAB96xA{D8bSohir#-C-^d)Y98N9 zFkoO+m7RD#kdrC zVulAoTuN!uiEkg(hF5pSH?q1DM}}Tt&Sdc8Gh2<2Qnvxb z5C4#F5auhv94Tmx4bo?59pMe(u38U_PX!CC@P=_3SkXc2q-AT}w4UmU1>Q)O_EWGV z3+(O=HuMho8@$?XbRR}{ZvY04b`afX(0w5gststbq5F17UVRVUPtg5J4m9n1bbpmD z;X-z4D!QG}?IDEjApOxDf^HtTdE{(#N26N~Za%3*cM`hOBeJyF=+>hf#P*TzHOn`x z+uS6S+q=maBVBln3)D9+R$o8&LM$f9kjOb6cOwID(~^E`@iXE5g+TPKD zutggO|26Gh_)p+X^5YQq0sLp$NARCRC>O@kFzsqBrmfZ1X`gDJYhP$zX(zOk@Md8H zyd$`Y+yQT4y$Nq5je*nz-uu~(wd30TA{k1{x4HXPtC9Q(*tB`&reBy~}71RlC z6)ga_Qfh}Q@}HE<@t|eThHz($)v~ARt=W^TDMOZzU4AN^B+-qn*`*M5E+xca(^IUL zp&5+!uxPs1nmW`9ub;LSQNlM?>*wpk+Qsy`qtB9F+DQCg1#ck>c>h(tgDu}b9wq z?_Ifk&fqTNE*O5^x_K+sedC-w-TCRug|lnMPddNAIJmgJ_o`>!8S>=Z)bEPkx*@Xe zyK8pserW!6UvD2*>lu?f&vwm(^M+pa#q@DkzLxZ1k73`p?wJ18^CjQpJQh8+=I%pR z_r57mnY^LTv7=u$91kC?IC$Hfk;mWP-(_>{LVxGQ_vBCpgJ|>8C-tR|>jlFducv(JQhWheh`Vf84 z#Er-iO|_{JQe!*X!0jFtx|%t)E@9-&MRjS{OO|hN=&X_T0GY@P?A!yB|HY zam}>%emqjgOPmwP%lUV7eP;ZQfrm~UUtURF zf1ve>C*~Y~_ntv-9=h|qy0;JYykOtX;^ZT){+sfz9KQOd&-NzuJGac8lJt{o(o;v9#-=;A{I1FLrB}9_2{YY}Y&}ahadKALG&slgg@g7| zZ?n(QS??sHld^1O(Qu77IA6Xu74MJKEbHV(?}CWW(Od5+li9L5n-TU>IH~s6!%?j~ zyLI%{dz<~&MO~H?Sj6YAnzs2cQ{l)iK5b<%KR#{$Pgv1P`nPWtIbB;x2TgA!sZ@@r z?T7E*^0(*h_oiO5YUhgRR}W73`rXGn9BA4S_ppO5Z!>7(h#&OP+tyDRoxv}mp)m)*EDYugz63l5P!E$8`#1^F8~-Pq~T zV~xXi{NsaztFIdJ#FhP4)bCq1eOf4bVC0UoR?Iq_nLYCM%Rim`cxv#;U!NNH&Z9{k zukU~H(NP0m?z8ao+a1q-{g3|Lk3RXpn9`eiT(q&z+7D-c`^CjyUvhU1iG4fXcI>78 zQ@3q+e%H$RyS~_y{>_Ku-`e<72 zXHVC_Q|FG;TlvrM=Tr08H|eb7_vdyyKBL3nD|Yt(_`=^=tY6e_8vnbyXp!!O27wux zTMDnH3VXhNVzdSxb=W6{;h{~q<@6bAcSq%GWAK0l@2JJPGY=l{#iynW!gF!+j=J>W z|Ih*j0b5p=wp(gADkAm?KG;r%=Q&2`#iogQli`g$AwNqO6+XK+VwZOop*{)M{+2X6 z-0ZavsvWEsgLSzwGs_y7C_P@$(oh|&7T_)>7Yp#Tq&O!}E*1W_>A%0B_k(kGz#9`& zyIx%X?Cj;~N50;9m$B^XD_4CFFED3Y_vBpOZ^MT#-!ifCr&s##d;7%w&JlfLPo(_x zb5`!m1FJ4RXT+I(zWZkS;#*FVhn`M-WXTKr2S&UN1IN$(=<}uC=`EYz>zdgqd*JTl z;|neuI>ui1=&||%^{bz++SB(b*E5sX9uI%ly*@hk(Tc_wT`lQ5^le9n%^7>!8#_9a z?aSV9t<#IMu489kJbLoO_q;c}=d!o{o?ec+9uzw~?ft_wGJux;O(IWeOkcl=#1 zJUjc$*RI<8P4MEud&#Vy9V=!Yx$26B=_|W$JmCE5)1jODeZ2O&Wgl((=bVMJ7tdMt z%QV|8cY5vQIj@)Y`_i2Lt>h@Q)Ejsk`2AFFmQ&2m{d$A$v)bk?A4`^h?;%NDnLbq? z6u-Mu(xunG?7!M(p$|!5>AY zy1_TR!Cw!n*S>m^S`72fv5#Kuv3%#6tLHuO;*z*S=)D|0^llIVW4|K~`TWuZ;GCw(8St@!&ey**Z`)bT&ult(ec$AqC!IHM z+0^I6?`R_VcO`r5o%L_J@9_F}XK!10NPl|m$V*F34S4v&Wuhy*%b$76ruTnbI{dT8 z4wro#esAK#Q!?$#g4bR1;Z5hyeXz*!_d9bwyGlFMyXxcdd3&z-e!~7A8>aZan!A6| z;W}53%*=(J`HpXvFJc|$9DHEbt>0Z)Kfkr-jN{8b+E;O>YwAbG+zT?MchFlcS+I`z zN%61#gRdG|4rh01nphoL*}ccI-&w5xe~Ta3sQ|Q!@`~HI3hx@|t^`+KI-RR>&_O3B zXQht^e#2*XfsK)fh_A(xvaHiWHSoCy2aE`rFtu~`czEeeeiqmc2VD&kez>0+rH_=? zZCU0AsJ#JuMVUR$${hQ6`Bs?-)ko~r;4FZTKiH>w1Ah33HLT?9^Ya|ta23yOojXjH zWy43I&5u=!xMub*H2>S}(fYED8~hhfNq^~Rmo<6L)s^{o&$e%>d}GK8*Bdw7Ir^*a z6}J9;s;dr`ZasYE_NiY6$6B{pvWxrFju_Bs?V~rmcsSX4N%(^?(|&1rZuPj2M>pp< zYcJci5GI^;lKSzh#)yATY&gJ>>eUGTkhpmacz2y91 z>XufQ#xLRw#!~ENDW{_oI1oq5zeT6S;h!vom>!L1hs~Wt^MAIvJ2#$7r+-=_uitw* z7Eh~@FRb^K?Q#Z((Xr&uQPa_yV%{Q3z%bb6@k|&}~(C z!?h_d_3l2ktm_>szxip+t-DU8JCBV_+gY}Lj%Uctzup|G9C2SkLv!Zx-)0tHIP-%* z>)pnm$JZ>H_t1i}eQEccoOR}~51wDGk2;Ut(sFp~gk83Se;bfwdwhNC zcbQ-BS^MzKH@$h`$gHnFrPgi($B$eU%3uBJ@?-xqJwJNRXV?1QFAGi30xur9;_azh zZ`yk9bCvxX*PfWO=lCbqS;hUb^8V>)WetGET1tq%^tu0Uu}3ri0Q9zVs*TNhX1fuQ z=8)$M-4mxqDa?`9?lK3?wGAJeBLfa7+QQlT8EqN41MYugKlt=$*V@?A_hnBTX#b1v zWcTU~-P(^d*#GgROFSd?zP9Jfw|gF_8F8%B=i{uGdkpup^w->s4d1M~Z_-KkXH9v- z#vT~FZtwlWXVncT$lY_@gAb1r*T47O?e0^j8Xx|4iFKiSfA!kOE?qe3f?hi^`jz~B zf66WSua-|-JHm2f=Fl1b&#!p1_T`)>tk)I%v-9R#PJBIi^pP=LH`=tmSJi)cY*f!p z5|eI6pL_ACTOPk`@wIa%^n7yYv<>T@>vH_2hWwX@4$gY! z^Zk2g+{d;IzVY+kD{maIVnK(S4|o3Qwbv>tBN@+}lN+)>%bx$_qYf|iD}G>V_ai^; j+_!VPYv1l8X`A1wy=V7^2OFn9@%|fwe_OZZkf!}Vb520^ diff --git a/web/pages/main/roboto.ttf b/web/pages/main/roboto.ttf deleted file mode 100644 index 8c082c8de090865264d37594e396c4d6c0099fe4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162876 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 diff --git a/web/rest.php b/web/rest.php deleted file mode 100755 index 3f4754fe..00000000 --- a/web/rest.php +++ /dev/null @@ -1,119 +0,0 @@ -getFile () - ,$e->getLine () - ,$e->getMessage () - ,$e->getTraceAsString () - )); - myGlobalErrorHandler (); -} - -set_error_handler ('myErrorHandler', E_ALL); -set_exception_handler ('myExceptionHandler'); - -Rest\Service::init (); - -try { - Web::init (); - Web::login (); - - // Checking the client version - - if (isset ($_COOKIE['hedera_version'])) - { - $clientVersion = (float) $_COOKIE['hedera_version']; - - if ($clientVersion < Web::getVersion ()) - { - Web::sysInit (); - - $row = Web::$sysConn->getRow ( - 'SELECT critical, changelog FROM version LIMIT 1'); - - if (!$row || $row['critical']) - throw new Rest\Exception ('Version', 'criticalVersion', $row['changelog']); - else - Rest\Service::addWarning ('Version', 'newVersion', $row['changelog']); - } - } - - // Getting the action - - $action = NULL; - - if (isset ($_REQUEST['action'])) - $action = $_REQUEST['action']; - - if ($action && Vn\Hedera\checkToken ($action)) - { - $actionFile = 'rest/'. $action .'.php'; - - if (file_exists ($actionFile)) - { - Locale::addPath ('rest/'. $action); - require_once ($actionFile); - - $module = new RestMod (Web::$conn); - Rest\Service::setData ($module->run ()); - } - else - throw new Rest\Exception ('Rest', 'invalidAction', s('Invalid action')); - } -} -catch (Vn\Web\SessionExpiredException $e) -{ - Rest\Service::setError ('Auth', 'sessionExpired', s('The session has expired')); -} -catch (Vn\Web\BadLoginException $e) -{ - Rest\Service::setError ('Auth', 'badLogin', s('Invalid login')); -} -catch (Rest\Exception $e) -{ - Rest\Service::setError ($e->getDomain (), $e->getCode (), $e->getMessage ()); -} - -myExitHandler (); - -?> diff --git a/web/rest/image.php b/web/rest/image.php deleted file mode 100755 index 8c360fe0..00000000 --- a/web/rest/image.php +++ /dev/null @@ -1,30 +0,0 @@ -getCode (), $e->getMessage ()); - } - } -} - -?> diff --git a/web/rest/login.php b/web/rest/login.php deleted file mode 100755 index 7b6af57c..00000000 --- a/web/rest/login.php +++ /dev/null @@ -1,11 +0,0 @@ - diff --git a/web/rest/logout.php b/web/rest/logout.php deleted file mode 100755 index b3fb57df..00000000 --- a/web/rest/logout.php +++ /dev/null @@ -1,14 +0,0 @@ - diff --git a/web/rest/tpv.php b/web/rest/tpv.php deleted file mode 100755 index e4ce989b..00000000 --- a/web/rest/tpv.php +++ /dev/null @@ -1,36 +0,0 @@ -conn - ,(int) $_REQUEST['amount'] - ,empty ($_REQUEST['urlOk']) ? NULL : $_REQUEST['urlOk'] - ,empty ($_REQUEST['urlKo']) ? NULL : $_REQUEST['urlKo'] - ,empty ($_REQUEST['company']) ? NULL : $_REQUEST['company'] - ,$url - ,$signature - ); - - $result = [ - 'url' => $url - ,'params' => $params - ,'signature' => $signature - ]; - - return $result; - } -} - -?> diff --git a/web/tpv/imap.php b/web/tpv/imap.php deleted file mode 100755 index f945cf3d..00000000 --- a/web/tpv/imap.php +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/web/tpv/post.php b/web/tpv/post.php deleted file mode 100755 index e5a494b4..00000000 --- a/web/tpv/post.php +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/web/tpv/soap-request.xml b/web/tpv/soap-request.xml deleted file mode 100644 index ddd87542..00000000 --- a/web/tpv/soap-request.xml +++ /dev/null @@ -1 +0,0 @@ -21/10/201417:561D7241978000000007216329744999001000001563451b97d1aba50aac5efc0915f59a70e24fc94cb3ffe diff --git a/web/tpv/soap.php b/web/tpv/soap.php deleted file mode 100755 index 817a8e1d..00000000 --- a/web/tpv/soap.php +++ /dev/null @@ -1,7 +0,0 @@ -