From 680c5f748e6b1b9a35f418293cff3ab4b92317ec Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=ADt=C4=9Bzslav=20Dvo=C5=99=C3=A1k?=
Date: Thu, 8 Apr 2021 00:51:12 +0200
Subject: [PATCH 01/29] Basic translations
---
.gitignore | 17 +
.gitmodules | 3 +
Dockerfile | 25 +
Makefile | 72 +
admin/includes/application_top.php | 1 +
admin/includes/configure.php | 62 +-
admin/includes/languages/czech/index.php | 12 +
composer.json | 33 +
composer.lock | 2444 +++++++++++++++++
includes/application_top.php | 1 +
includes/classes/Order.php | 66 +
includes/classes/Payment.php | 274 ++
includes/classes/application.php | 2 +-
includes/configure.php | 54 +-
includes/languages/czech.php | 414 +++
includes/languages/czech/account.php | 64 +
includes/languages/czech/account_edit.php | 21 +
includes/languages/czech/account_history.php | 28 +
.../languages/czech/account_history_info.php | 41 +
.../languages/czech/account_newsletters.php | 23 +
.../languages/czech/account_notifications.php | 37 +
includes/languages/czech/account_password.php | 23 +
includes/languages/czech/address_book.php | 30 +
.../languages/czech/address_book_process.php | 47 +
includes/languages/czech/advanced_search.php | 58 +
.../czech/article_manager/article-submit.php | 43 +
.../czech/article_manager/article-topics.php | 19 +
.../czech/article_manager/article_blog.php | 48 +
.../czech/article_manager/article_info.php | 35 +
.../czech/article_manager/article_manager.php | 23 +
.../article_manager_search_result.php | 23 +
.../czech/article_manager/articles.php | 59 +
.../czech/article_manager/articles_new.php | 24 +
includes/languages/czech/article_reviews.php | 21 +
.../languages/czech/article_reviews_info.php | 21 +
.../languages/czech/article_reviews_write.php | 24 +
includes/languages/czech/article_rss.php | 15 +
.../languages/czech/checkout_confirmation.php | 31 +
includes/languages/czech/checkout_payment.php | 35 +
.../czech/checkout_payment_address.php | 35 +
.../languages/czech/checkout_shipping.php | 37 +
.../czech/checkout_shipping_address.php | 34 +
includes/languages/czech/checkout_success.php | 18 +
includes/languages/czech/conditions.php | 17 +
includes/languages/czech/contact_us.php | 25 +
includes/languages/czech/cookie_usage.php | 22 +
includes/languages/czech/create_account.php | 63 +
.../czech/create_account_success.php | 19 +
includes/languages/czech/download.php | 12 +
includes/languages/czech/gdpr.php | 15 +
includes/languages/czech/images/icon.gif | Bin 0 -> 175 bytes
includes/languages/czech/index.php | 39 +
.../languages/czech/info_shopping_cart.php | 27 +
includes/languages/czech/login.php | 14 +
includes/languages/czech/logoff.php | 18 +
.../action_recorder/ar_admin_login.php | 15 +
.../modules/action_recorder/ar_contact_us.php | 15 +
.../action_recorder/ar_reset_password.php | 15 +
.../czech/modules/boxes/bm_best_sellers.php | 16 +
.../czech/modules/boxes/bm_categories.php | 15 +
.../czech/modules/boxes/bm_currencies.php | 16 +
.../czech/modules/boxes/bm_information.php | 20 +
.../czech/modules/boxes/bm_languages.php | 16 +
.../modules/boxes/bm_manufacturer_info.php | 18 +
.../czech/modules/boxes/bm_manufacturers.php | 16 +
.../czech/modules/boxes/bm_order_history.php | 16 +
.../boxes/bm_product_notifications.php | 18 +
.../czech/modules/boxes/bm_reviews.php | 19 +
.../czech/modules/boxes/bm_shopping_cart.php | 17 +
.../czech/modules/boxes/bm_specials.php | 16 +
.../czech/modules/boxes/bm_whats_new.php | 16 +
.../account/cm_account_braintree_cards.php | 30 +
.../content/account/cm_account_gdpr.php | 18 +
.../account/cm_account_sage_pay_cards.php | 30 +
.../account/cm_account_set_password.php | 26 +
.../content/account/cm_account_title.php | 21 +
.../cm_cs_continue_button.php | 20 +
.../checkout_success/cm_cs_downloads.php | 20 +
.../cm_cs_product_notifications.php | 17 +
.../cm_cs_redirect_old_order.php | 15 +
.../checkout_success/cm_cs_thank_you.php | 24 +
.../content/checkout_success/cm_cs_title.php | 22 +
.../cm_cas_continue_button.php | 16 +
.../create_account_success/cm_cas_message.php | 20 +
.../create_account_success/cm_cas_title.php | 18 +
.../content/footer/cm_footer_account.php | 24 +
.../footer/cm_footer_articles_manager.php | 20 +
.../content/footer/cm_footer_contact_us.php | 20 +
.../footer/cm_footer_information_links.php | 29 +
.../footer/cm_footer_information_pages.php | 24 +
.../modules/content/footer/cm_footer_text.php | 22 +
.../cm_footer_extra_copyright.php | 21 +
.../footer_suffix/cm_footer_extra_icons.php | 17 +
.../gdpr/cm_gdpr_contact_addresses.php | 19 +
.../content/gdpr/cm_gdpr_contact_details.php | 24 +
.../modules/content/gdpr/cm_gdpr_intro.php | 17 +
.../content/gdpr/cm_gdpr_personal_details.php | 28 +
.../content/gdpr/cm_gdpr_site_actions.php | 25 +
.../content/gdpr/cm_gdpr_site_details.php | 28 +
.../content/header/cm_header_breadcrumb.php | 19 +
.../content/header/cm_header_buttons.php | 15 +
.../modules/content/header/cm_header_logo.php | 15 +
.../content/header/cm_header_messagestack.php | 15 +
.../content/header/cm_header_search.php | 15 +
.../content/index/cm_i_article_manager.php | 17 +
.../content/index/cm_i_card_products.php | 21 +
.../content/index/cm_i_customer_greeting.php | 17 +
.../modules/content/index/cm_i_text_main.php | 20 +
.../modules/content/index/cm_i_title.php | 21 +
.../content/index/cm_i_upcoming_products.php | 22 +
.../index_nested/cm_in_card_products.php | 21 +
.../cm_in_category_description.php | 15 +
.../index_nested/cm_in_category_listing.php | 18 +
.../content/index_nested/cm_in_title.php | 17 +
...m_ip_category_manufacturer_description.php | 19 +
.../index_products/cm_ip_product_listing.php | 14 +
.../content/index_products/cm_ip_title.php | 21 +
.../modules/content/info/cm_info_text.php | 14 +
.../modules/content/info/cm_info_title.php | 14 +
.../content/login/cm_create_account_link.php | 19 +
.../content/login/cm_forgot_password.php | 22 +
.../modules/content/login/cm_login_form.php | 21 +
.../modules/content/login/cm_login_title.php | 21 +
.../modules/content/login/cm_paypal_login.php | 64 +
.../modules/content/navigation/cm_navbar.php | 40 +
.../product_info/cm_pi_also_purchased.php | 21 +
.../content/product_info/cm_pi_buy_button.php | 20 +
.../product_info/cm_pi_date_available.php | 20 +
.../product_info/cm_pi_description.php | 19 +
.../content/product_info/cm_pi_gallery.php | 18 +
.../content/product_info/cm_pi_gtin.php | 20 +
.../content/product_info/cm_pi_model.php | 20 +
.../content/product_info/cm_pi_modular.php | 15 +
.../content/product_info/cm_pi_name.php | 21 +
.../product_info/cm_pi_options_attributes.php | 22 +
.../content/product_info/cm_pi_price.php | 22 +
.../product_info/cm_pi_review_stars.php | 26 +
.../content/product_info/cm_pi_reviews.php | 17 +
.../cm_pinf_message.php | 21 +
.../czech/modules/content/reviews/write.php | 36 +
.../content/shopping_cart/cm_sc_checkout.php | 28 +
.../shopping_cart/cm_sc_no_products.php | 28 +
.../shopping_cart/cm_sc_order_subtotal.php | 27 +
.../shopping_cart/cm_sc_product_listing.php | 34 +
.../shopping_cart/cm_sc_stock_notice.php | 28 +
.../content/shopping_cart/cm_sc_title.php | 27 +
.../content/testimonials/cm_t_list.php | 24 +
.../content/testimonials/cm_t_title.php | 22 +
.../modules/header_tags/ht_canonical.php | 15 +
.../modules/header_tags/ht_category_title.php | 15 +
.../header_tags/ht_datepicker_jquery.php | 15 +
.../ht_google_adwords_conversion.php | 15 +
.../header_tags/ht_google_analytics.php | 15 +
.../modules/header_tags/ht_mailchimp_360.php | 15 +
.../header_tags/ht_manufacturer_title.php | 15 +
.../modules/header_tags/ht_opensearch.php | 15 +
.../modules/header_tags/ht_pages_seo.php | 18 +
.../modules/header_tags/ht_product_meta.php | 15 +
.../header_tags/ht_product_opengraph.php | 19 +
.../modules/header_tags/ht_product_title.php | 15 +
.../modules/header_tags/ht_robot_noindex.php | 15 +
.../header_tags/ht_table_click_jquery.php | 15 +
.../header_tags/ht_twitter_product_card.php | 21 +
.../czech/modules/navbar/nb_account.php | 26 +
.../czech/modules/navbar/nb_brand.php | 20 +
.../czech/modules/navbar/nb_currencies.php | 16 +
.../modules/navbar/nb_hamburger_button.php | 18 +
.../czech/modules/navbar/nb_home.php | 17 +
.../czech/modules/navbar/nb_languages.php | 16 +
.../czech/modules/navbar/nb_new_products.php | 17 +
.../czech/modules/navbar/nb_shopping_cart.php | 22 +
.../modules/navbar/nb_special_offers.php | 17 +
.../czech/modules/navbar/nb_testimonials.php | 17 +
.../modules/order_total/ot_loworderfee.php | 15 +
.../czech/modules/order_total/ot_shipping.php | 17 +
.../czech/modules/order_total/ot_subtotal.php | 15 +
.../czech/modules/order_total/ot_tax.php | 15 +
.../czech/modules/order_total/ot_total.php | 15 +
.../czech/modules/payment/braintree_cc.php | 38 +
.../languages/czech/modules/payment/cod.php | 27 +
.../languages/czech/modules/payment/csob.php | 21 +
.../czech/modules/payment/gpwebpay.php | 19 +
.../czech/modules/payment/moneyorder.php | 16 +
.../czech/modules/payment/nochex.php | 15 +
.../czech/modules/payment/paypal_express.php | 39 +
.../czech/modules/payment/paypal_pro_dp.php | 40 +
.../czech/modules/payment/paypal_pro_hs.php | 34 +
.../modules/payment/paypal_pro_payflow_dp.php | 41 +
.../modules/payment/paypal_pro_payflow_ec.php | 46 +
.../czech/modules/payment/paypal_standard.php | 31 +
.../czech/modules/payment/paypoint_secpay.php | 20 +
.../czech/modules/payment/pm2checkout.php | 20 +
.../czech/modules/payment/psigate.php | 22 +
.../modules/payment/rbsworldpay_hosted.php | 23 +
.../czech/modules/payment/sage_pay_direct.php | 54 +
.../czech/modules/payment/sage_pay_form.php | 22 +
.../czech/modules/payment/sage_pay_server.php | 31 +
.../modules/pi/product_info/pi_buy_button.php | 16 +
.../modules/pi/product_info/pi_gallery.php | 19 +
.../czech/modules/pi/product_info/pi_hall.php | 19 +
.../pi/product_info/pi_img_disclaimer.php | 16 +
.../modules/pi/product_info/pi_model.php | 16 +
.../pi/product_info/pi_options_attributes.php | 18 +
.../languages/czech/modules/shipping/flat.php | 16 +
.../languages/czech/modules/shipping/item.php | 16 +
.../czech/modules/shipping/table.php | 18 +
.../czech/modules/shipping/zones.php | 36 +
.../languages/czech/password_forgotten.php | 36 +
includes/languages/czech/password_reset.php | 30 +
includes/languages/czech/privacy.php | 17 +
includes/languages/czech/product_info.php | 31 +
includes/languages/czech/products_new.php | 21 +
includes/languages/czech/shipping.php | 17 +
includes/languages/czech/shopping_cart.php | 29 +
includes/languages/czech/specials.php | 24 +
includes/languages/czech/ssl_check.php | 25 +
includes/languages/czech/testimonials.php | 17 +
.../english/modules/payment/csob.php | 15 +
includes/modules/payment/csob.php | 353 +++
.../versioned/1.0.7.10/cart_order_builder.php | 2 +-
phinx-adapter.php | 54 +
221 files changed, 8455 insertions(+), 86 deletions(-)
create mode 100644 .gitignore
create mode 100644 .gitmodules
create mode 100644 Dockerfile
create mode 100644 Makefile
mode change 100644 => 100755 admin/includes/configure.php
create mode 100644 admin/includes/languages/czech/index.php
create mode 100644 composer.json
create mode 100644 composer.lock
create mode 100644 includes/classes/Order.php
create mode 100644 includes/classes/Payment.php
mode change 100644 => 100755 includes/configure.php
create mode 100644 includes/languages/czech.php
create mode 100644 includes/languages/czech/account.php
create mode 100644 includes/languages/czech/account_edit.php
create mode 100644 includes/languages/czech/account_history.php
create mode 100644 includes/languages/czech/account_history_info.php
create mode 100644 includes/languages/czech/account_newsletters.php
create mode 100644 includes/languages/czech/account_notifications.php
create mode 100644 includes/languages/czech/account_password.php
create mode 100644 includes/languages/czech/address_book.php
create mode 100644 includes/languages/czech/address_book_process.php
create mode 100644 includes/languages/czech/advanced_search.php
create mode 100644 includes/languages/czech/article_manager/article-submit.php
create mode 100644 includes/languages/czech/article_manager/article-topics.php
create mode 100644 includes/languages/czech/article_manager/article_blog.php
create mode 100644 includes/languages/czech/article_manager/article_info.php
create mode 100644 includes/languages/czech/article_manager/article_manager.php
create mode 100644 includes/languages/czech/article_manager/article_manager_search_result.php
create mode 100644 includes/languages/czech/article_manager/articles.php
create mode 100644 includes/languages/czech/article_manager/articles_new.php
create mode 100644 includes/languages/czech/article_reviews.php
create mode 100644 includes/languages/czech/article_reviews_info.php
create mode 100644 includes/languages/czech/article_reviews_write.php
create mode 100644 includes/languages/czech/article_rss.php
create mode 100644 includes/languages/czech/checkout_confirmation.php
create mode 100644 includes/languages/czech/checkout_payment.php
create mode 100644 includes/languages/czech/checkout_payment_address.php
create mode 100644 includes/languages/czech/checkout_shipping.php
create mode 100644 includes/languages/czech/checkout_shipping_address.php
create mode 100644 includes/languages/czech/checkout_success.php
create mode 100644 includes/languages/czech/conditions.php
create mode 100644 includes/languages/czech/contact_us.php
create mode 100644 includes/languages/czech/cookie_usage.php
create mode 100644 includes/languages/czech/create_account.php
create mode 100644 includes/languages/czech/create_account_success.php
create mode 100644 includes/languages/czech/download.php
create mode 100644 includes/languages/czech/gdpr.php
create mode 100644 includes/languages/czech/images/icon.gif
create mode 100644 includes/languages/czech/index.php
create mode 100644 includes/languages/czech/info_shopping_cart.php
create mode 100644 includes/languages/czech/login.php
create mode 100644 includes/languages/czech/logoff.php
create mode 100644 includes/languages/czech/modules/action_recorder/ar_admin_login.php
create mode 100644 includes/languages/czech/modules/action_recorder/ar_contact_us.php
create mode 100644 includes/languages/czech/modules/action_recorder/ar_reset_password.php
create mode 100644 includes/languages/czech/modules/boxes/bm_best_sellers.php
create mode 100644 includes/languages/czech/modules/boxes/bm_categories.php
create mode 100644 includes/languages/czech/modules/boxes/bm_currencies.php
create mode 100644 includes/languages/czech/modules/boxes/bm_information.php
create mode 100644 includes/languages/czech/modules/boxes/bm_languages.php
create mode 100644 includes/languages/czech/modules/boxes/bm_manufacturer_info.php
create mode 100644 includes/languages/czech/modules/boxes/bm_manufacturers.php
create mode 100644 includes/languages/czech/modules/boxes/bm_order_history.php
create mode 100644 includes/languages/czech/modules/boxes/bm_product_notifications.php
create mode 100644 includes/languages/czech/modules/boxes/bm_reviews.php
create mode 100644 includes/languages/czech/modules/boxes/bm_shopping_cart.php
create mode 100644 includes/languages/czech/modules/boxes/bm_specials.php
create mode 100644 includes/languages/czech/modules/boxes/bm_whats_new.php
create mode 100644 includes/languages/czech/modules/content/account/cm_account_braintree_cards.php
create mode 100644 includes/languages/czech/modules/content/account/cm_account_gdpr.php
create mode 100644 includes/languages/czech/modules/content/account/cm_account_sage_pay_cards.php
create mode 100644 includes/languages/czech/modules/content/account/cm_account_set_password.php
create mode 100644 includes/languages/czech/modules/content/account/cm_account_title.php
create mode 100644 includes/languages/czech/modules/content/checkout_success/cm_cs_continue_button.php
create mode 100644 includes/languages/czech/modules/content/checkout_success/cm_cs_downloads.php
create mode 100644 includes/languages/czech/modules/content/checkout_success/cm_cs_product_notifications.php
create mode 100644 includes/languages/czech/modules/content/checkout_success/cm_cs_redirect_old_order.php
create mode 100644 includes/languages/czech/modules/content/checkout_success/cm_cs_thank_you.php
create mode 100644 includes/languages/czech/modules/content/checkout_success/cm_cs_title.php
create mode 100644 includes/languages/czech/modules/content/create_account_success/cm_cas_continue_button.php
create mode 100644 includes/languages/czech/modules/content/create_account_success/cm_cas_message.php
create mode 100644 includes/languages/czech/modules/content/create_account_success/cm_cas_title.php
create mode 100644 includes/languages/czech/modules/content/footer/cm_footer_account.php
create mode 100644 includes/languages/czech/modules/content/footer/cm_footer_articles_manager.php
create mode 100644 includes/languages/czech/modules/content/footer/cm_footer_contact_us.php
create mode 100644 includes/languages/czech/modules/content/footer/cm_footer_information_links.php
create mode 100644 includes/languages/czech/modules/content/footer/cm_footer_information_pages.php
create mode 100644 includes/languages/czech/modules/content/footer/cm_footer_text.php
create mode 100644 includes/languages/czech/modules/content/footer_suffix/cm_footer_extra_copyright.php
create mode 100644 includes/languages/czech/modules/content/footer_suffix/cm_footer_extra_icons.php
create mode 100644 includes/languages/czech/modules/content/gdpr/cm_gdpr_contact_addresses.php
create mode 100644 includes/languages/czech/modules/content/gdpr/cm_gdpr_contact_details.php
create mode 100644 includes/languages/czech/modules/content/gdpr/cm_gdpr_intro.php
create mode 100644 includes/languages/czech/modules/content/gdpr/cm_gdpr_personal_details.php
create mode 100644 includes/languages/czech/modules/content/gdpr/cm_gdpr_site_actions.php
create mode 100644 includes/languages/czech/modules/content/gdpr/cm_gdpr_site_details.php
create mode 100644 includes/languages/czech/modules/content/header/cm_header_breadcrumb.php
create mode 100644 includes/languages/czech/modules/content/header/cm_header_buttons.php
create mode 100644 includes/languages/czech/modules/content/header/cm_header_logo.php
create mode 100644 includes/languages/czech/modules/content/header/cm_header_messagestack.php
create mode 100644 includes/languages/czech/modules/content/header/cm_header_search.php
create mode 100644 includes/languages/czech/modules/content/index/cm_i_article_manager.php
create mode 100644 includes/languages/czech/modules/content/index/cm_i_card_products.php
create mode 100644 includes/languages/czech/modules/content/index/cm_i_customer_greeting.php
create mode 100644 includes/languages/czech/modules/content/index/cm_i_text_main.php
create mode 100644 includes/languages/czech/modules/content/index/cm_i_title.php
create mode 100644 includes/languages/czech/modules/content/index/cm_i_upcoming_products.php
create mode 100644 includes/languages/czech/modules/content/index_nested/cm_in_card_products.php
create mode 100644 includes/languages/czech/modules/content/index_nested/cm_in_category_description.php
create mode 100644 includes/languages/czech/modules/content/index_nested/cm_in_category_listing.php
create mode 100644 includes/languages/czech/modules/content/index_nested/cm_in_title.php
create mode 100644 includes/languages/czech/modules/content/index_products/cm_ip_category_manufacturer_description.php
create mode 100644 includes/languages/czech/modules/content/index_products/cm_ip_product_listing.php
create mode 100644 includes/languages/czech/modules/content/index_products/cm_ip_title.php
create mode 100644 includes/languages/czech/modules/content/info/cm_info_text.php
create mode 100644 includes/languages/czech/modules/content/info/cm_info_title.php
create mode 100644 includes/languages/czech/modules/content/login/cm_create_account_link.php
create mode 100644 includes/languages/czech/modules/content/login/cm_forgot_password.php
create mode 100644 includes/languages/czech/modules/content/login/cm_login_form.php
create mode 100644 includes/languages/czech/modules/content/login/cm_login_title.php
create mode 100644 includes/languages/czech/modules/content/login/cm_paypal_login.php
create mode 100644 includes/languages/czech/modules/content/navigation/cm_navbar.php
create mode 100644 includes/languages/czech/modules/content/product_info/cm_pi_also_purchased.php
create mode 100644 includes/languages/czech/modules/content/product_info/cm_pi_buy_button.php
create mode 100644 includes/languages/czech/modules/content/product_info/cm_pi_date_available.php
create mode 100644 includes/languages/czech/modules/content/product_info/cm_pi_description.php
create mode 100644 includes/languages/czech/modules/content/product_info/cm_pi_gallery.php
create mode 100644 includes/languages/czech/modules/content/product_info/cm_pi_gtin.php
create mode 100644 includes/languages/czech/modules/content/product_info/cm_pi_model.php
create mode 100644 includes/languages/czech/modules/content/product_info/cm_pi_modular.php
create mode 100644 includes/languages/czech/modules/content/product_info/cm_pi_name.php
create mode 100644 includes/languages/czech/modules/content/product_info/cm_pi_options_attributes.php
create mode 100644 includes/languages/czech/modules/content/product_info/cm_pi_price.php
create mode 100644 includes/languages/czech/modules/content/product_info/cm_pi_review_stars.php
create mode 100644 includes/languages/czech/modules/content/product_info/cm_pi_reviews.php
create mode 100644 includes/languages/czech/modules/content/product_info_not_found/cm_pinf_message.php
create mode 100644 includes/languages/czech/modules/content/reviews/write.php
create mode 100644 includes/languages/czech/modules/content/shopping_cart/cm_sc_checkout.php
create mode 100644 includes/languages/czech/modules/content/shopping_cart/cm_sc_no_products.php
create mode 100644 includes/languages/czech/modules/content/shopping_cart/cm_sc_order_subtotal.php
create mode 100644 includes/languages/czech/modules/content/shopping_cart/cm_sc_product_listing.php
create mode 100644 includes/languages/czech/modules/content/shopping_cart/cm_sc_stock_notice.php
create mode 100644 includes/languages/czech/modules/content/shopping_cart/cm_sc_title.php
create mode 100644 includes/languages/czech/modules/content/testimonials/cm_t_list.php
create mode 100644 includes/languages/czech/modules/content/testimonials/cm_t_title.php
create mode 100644 includes/languages/czech/modules/header_tags/ht_canonical.php
create mode 100644 includes/languages/czech/modules/header_tags/ht_category_title.php
create mode 100644 includes/languages/czech/modules/header_tags/ht_datepicker_jquery.php
create mode 100644 includes/languages/czech/modules/header_tags/ht_google_adwords_conversion.php
create mode 100644 includes/languages/czech/modules/header_tags/ht_google_analytics.php
create mode 100644 includes/languages/czech/modules/header_tags/ht_mailchimp_360.php
create mode 100644 includes/languages/czech/modules/header_tags/ht_manufacturer_title.php
create mode 100644 includes/languages/czech/modules/header_tags/ht_opensearch.php
create mode 100644 includes/languages/czech/modules/header_tags/ht_pages_seo.php
create mode 100644 includes/languages/czech/modules/header_tags/ht_product_meta.php
create mode 100644 includes/languages/czech/modules/header_tags/ht_product_opengraph.php
create mode 100644 includes/languages/czech/modules/header_tags/ht_product_title.php
create mode 100644 includes/languages/czech/modules/header_tags/ht_robot_noindex.php
create mode 100644 includes/languages/czech/modules/header_tags/ht_table_click_jquery.php
create mode 100644 includes/languages/czech/modules/header_tags/ht_twitter_product_card.php
create mode 100644 includes/languages/czech/modules/navbar/nb_account.php
create mode 100644 includes/languages/czech/modules/navbar/nb_brand.php
create mode 100644 includes/languages/czech/modules/navbar/nb_currencies.php
create mode 100644 includes/languages/czech/modules/navbar/nb_hamburger_button.php
create mode 100644 includes/languages/czech/modules/navbar/nb_home.php
create mode 100644 includes/languages/czech/modules/navbar/nb_languages.php
create mode 100644 includes/languages/czech/modules/navbar/nb_new_products.php
create mode 100644 includes/languages/czech/modules/navbar/nb_shopping_cart.php
create mode 100644 includes/languages/czech/modules/navbar/nb_special_offers.php
create mode 100644 includes/languages/czech/modules/navbar/nb_testimonials.php
create mode 100644 includes/languages/czech/modules/order_total/ot_loworderfee.php
create mode 100644 includes/languages/czech/modules/order_total/ot_shipping.php
create mode 100644 includes/languages/czech/modules/order_total/ot_subtotal.php
create mode 100644 includes/languages/czech/modules/order_total/ot_tax.php
create mode 100644 includes/languages/czech/modules/order_total/ot_total.php
create mode 100644 includes/languages/czech/modules/payment/braintree_cc.php
create mode 100644 includes/languages/czech/modules/payment/cod.php
create mode 100644 includes/languages/czech/modules/payment/csob.php
create mode 100644 includes/languages/czech/modules/payment/gpwebpay.php
create mode 100644 includes/languages/czech/modules/payment/moneyorder.php
create mode 100644 includes/languages/czech/modules/payment/nochex.php
create mode 100644 includes/languages/czech/modules/payment/paypal_express.php
create mode 100644 includes/languages/czech/modules/payment/paypal_pro_dp.php
create mode 100644 includes/languages/czech/modules/payment/paypal_pro_hs.php
create mode 100644 includes/languages/czech/modules/payment/paypal_pro_payflow_dp.php
create mode 100644 includes/languages/czech/modules/payment/paypal_pro_payflow_ec.php
create mode 100644 includes/languages/czech/modules/payment/paypal_standard.php
create mode 100644 includes/languages/czech/modules/payment/paypoint_secpay.php
create mode 100644 includes/languages/czech/modules/payment/pm2checkout.php
create mode 100644 includes/languages/czech/modules/payment/psigate.php
create mode 100644 includes/languages/czech/modules/payment/rbsworldpay_hosted.php
create mode 100644 includes/languages/czech/modules/payment/sage_pay_direct.php
create mode 100644 includes/languages/czech/modules/payment/sage_pay_form.php
create mode 100644 includes/languages/czech/modules/payment/sage_pay_server.php
create mode 100644 includes/languages/czech/modules/pi/product_info/pi_buy_button.php
create mode 100644 includes/languages/czech/modules/pi/product_info/pi_gallery.php
create mode 100644 includes/languages/czech/modules/pi/product_info/pi_hall.php
create mode 100644 includes/languages/czech/modules/pi/product_info/pi_img_disclaimer.php
create mode 100644 includes/languages/czech/modules/pi/product_info/pi_model.php
create mode 100644 includes/languages/czech/modules/pi/product_info/pi_options_attributes.php
create mode 100644 includes/languages/czech/modules/shipping/flat.php
create mode 100644 includes/languages/czech/modules/shipping/item.php
create mode 100644 includes/languages/czech/modules/shipping/table.php
create mode 100644 includes/languages/czech/modules/shipping/zones.php
create mode 100644 includes/languages/czech/password_forgotten.php
create mode 100644 includes/languages/czech/password_reset.php
create mode 100644 includes/languages/czech/privacy.php
create mode 100644 includes/languages/czech/product_info.php
create mode 100644 includes/languages/czech/products_new.php
create mode 100644 includes/languages/czech/shipping.php
create mode 100644 includes/languages/czech/shopping_cart.php
create mode 100644 includes/languages/czech/specials.php
create mode 100644 includes/languages/czech/ssl_check.php
create mode 100644 includes/languages/czech/testimonials.php
create mode 100644 includes/languages/english/modules/payment/csob.php
create mode 100644 includes/modules/payment/csob.php
create mode 100644 phinx-adapter.php
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000..698f5dca4
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,17 @@
+/debian/ce-phoenix-installer.debhelper.log
+/debian/ce-phoenix-installer.substvars
+/debian/ce-phoenix.debhelper.log
+/debian/debhelper-build-stamp
+/debian/ce-phoenix.postrm.debhelper
+/debian/ce-phoenix.substvars
+/debian/.debhelper/
+/debian/ce-phoenix/
+/debian/ce-phoenix-installer/
+/.github/
+/debian/ce-phoenix-admin.debhelper.log
+/debian/ce-phoenix-admin.substvars
+/debian/ce-phoenix-admin/
+/deb/
+
+/vendor/
+/ext/composer/
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 000000000..13618ebe6
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "includes/apps/gpwebpay/gp-webpay-php-sdk"]
+ path = includes/apps/gpwebpay/gp-webpay-php-sdk
+ url = git@github.com:PureHTML/gp-webpay-php-sdk.git
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 000000000..028a76b2c
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,25 @@
+FROM debian:latest
+
+ENV APACHE_DOCUMENT_ROOT /usr/share/ce-phoenix/
+ENV DEBIAN_FRONTEND=noninteractive
+
+RUN apt update ; apt install -y wget libapache2-mod-php; echo "deb http://repo.vitexsoftware.cz buster main backports" | tee /etc/apt/sources.list.d/vitexsoftware.list ; wget -O /etc/apt/trusted.gpg.d/vitexsoftware.gpg http://repo.vitexsoftware.cz/keyring.gpg
+RUN apt-get update && apt-get install -y locales php-pdo-sqlite apache2 aptitude cron locales-all && rm -rf /var/lib/apt/lists/* \
+ && localedef -i cs_CZ -c -f UTF-8 -A /usr/share/locale/locale.alias cs_CZ.UTF-8
+ENV LANG cs_CZ.utf8
+
+RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
+RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
+
+ADD deb/* /var/deb/
+
+RUN echo "deb [trusted=yes] file:///var/deb ./" > /etc/apt/sources.list.d/local.list
+RUN ls -la /var/deb ; apt update
+
+RUN aptitude -y install mariadb-server
+
+RUN aptitude -y install ce-phoenix-admin ce-phoenix-installer ; a2enconf ce-phoenix
+
+
+CMD /usr/sbin/cron
+CMD [ "/usr/sbin/apache2ctl", "-D", "FOREGROUND" ]
diff --git a/Makefile b/Makefile
new file mode 100644
index 000000000..96b7b3a47
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,72 @@
+repoversion=$(shell LANG=C aptitude show ce-phoenix | grep Version: | awk '{print $$2}')
+nextversion=$(shell echo $(repoversion) | perl -ne 'chomp; print join(".", splice(@{[split/\./,$$_]}, 0, -1), map {++$$_} pop @{[split/\./,$$_]}), "\n";')
+
+clean:
+ rm -rf vendor composer.lock db/*.sqlite src/*/*dataTables*
+
+migration:
+ ./vendor/bin/phinx migrate -c ./phinx-adapter.php
+
+autoload:
+ composer update
+
+demodata:
+ cd src ; ../vendor/bin/phinx seed:run -c ../phinx-adapter.php ; cd ..
+
+newmigration:
+ read -p "Enter CamelCase migration name : " migname ; ./vendor/bin/phinx create $$migname -c ./phinx-adapter.php
+
+newseed:
+ read -p "Enter CamelCase seed name : " migname ; ./vendor/bin/phinx seed:create $$migname -c ./phinx-adapter.php
+
+dbreset:
+ sudo rm -f db/multiflexibee.sqlite
+ echo > db/multiflexibee.sqlite
+ chmod 666 db/multiflexibee.sqlite
+ chmod ugo+rwX db
+
+demo: dbreset migration demodata
+
+hourly:
+ cd lib; php -f executor.php h
+daily:
+ cd lib; php -f executor.php d
+monthly:
+ cd lib; php -f executor.php m
+
+postinst:
+ DEBCONF_DEBUG=developer /usr/share/debconf/frontend /var/lib/dpkg/info/ce-phoenix.postinst configure $(nextversion)
+
+redeb:
+ sudo apt -y purge ce-phoenix; rm ../ce-phoenix_*_all.deb ; debuild -us -uc ; sudo gdebi -n ../ce-phoenix_*_all.deb ; sudo apache2ctl restart
+
+deb:
+ debuild-pbuilder
+
+
+dimage: deb
+ docker container stop $(docker container ls -q --filter name=ce-phoenix*)
+ rm -f deb/* ; mv ../ce-phoenix*.deb deb
+ cd deb ; dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz ; cd ..
+ docker build -t purehtml/ce-phoenix .
+
+drun:
+ docker run -dit --name ce-phoenix -p 8080:80 purehtml/ce-phoenix
+ firefox http://localhost:8080/ce-phoenix?login=demo\&password=demo
+
+vagrant:
+ vagrant destroy -f
+ vagrant up
+ firefox http://localhost:8080/ce-phoenix?login=demo\&password=demo
+
+release:
+ echo Release v$(nextversion)
+ docker build -t purehtml/ce-phoenix:$(nextversion) .
+ dch -v $(nextversion) `git log -1 --pretty=%B | head -n 1`
+ debuild -i -us -uc -b
+ git commit -a -m "Release v$(nextversion)"
+ git tag -a $(nextversion) -m "version $(nextversion)"
+ docker push purehtml/ce-phoenix:$(nextversion)
+ docker push purehtml/ce-phoenix:latest
+
+
diff --git a/admin/includes/application_top.php b/admin/includes/application_top.php
index d1f7aafae..3429f218b 100644
--- a/admin/includes/application_top.php
+++ b/admin/includes/application_top.php
@@ -18,6 +18,7 @@
include 'includes/configure.php';
// autoload classes in the classes or modules directories
+ require '../vendor/autoload.php';
require DIR_FS_CATALOG . 'includes/functions/autoloader.php';
require 'includes/functions/autoloader.php';
spl_autoload_register('tep_autoload_admin');
diff --git a/admin/includes/configure.php b/admin/includes/configure.php
old mode 100644
new mode 100755
index 395bf58fc..3db783c79
--- a/admin/includes/configure.php
+++ b/admin/includes/configure.php
@@ -1,51 +1,29 @@
0,
- 'domain' => '',
- 'path' => '',
+ 'domain' => 'phoenix',
+ 'path' => '/admin',
'samesite' => 'Lax',
- ]);
-
- define('DIR_FS_DOCUMENT_ROOT', $DOCUMENT_ROOT); // where your pages are located on the server. if $DOCUMENT_ROOT doesn't suit you, replace with your local path. (eg, /usr/local/apache/htdocs)
- define('DIR_WS_ADMIN', '/admin/');
- define('DIR_FS_ADMIN', DIR_FS_DOCUMENT_ROOT . DIR_WS_ADMIN);
- define('DIR_FS_BACKUP', DIR_FS_ADMIN . 'backups/');
+ ];
+ const DIR_WS_ADMIN = '/admin/';
- // leave blank or omit to use MySQL sessions
- define('DIR_FS_SESSION', '');
+ const DIR_FS_DOCUMENT_ROOT = '/home/vitex/Projects/PureHTML/PhoenixCart/';
+ const DIR_FS_ADMIN = '/home/vitex/Projects/PureHTML/PhoenixCart/admin/';
+ const DIR_FS_BACKUP = DIR_FS_ADMIN . 'backups/';
- define('HTTP_CATALOG_SERVER', '');
- define('DIR_WS_CATALOG', '/catalog/');
- define('DIR_FS_CATALOG', DIR_FS_DOCUMENT_ROOT . DIR_WS_CATALOG);
+ const HTTP_CATALOG_SERVER = 'http://phoenix';
+ const DIR_WS_CATALOG = '/';
+ const DIR_FS_CATALOG = '/home/vitex/Projects/PureHTML/PhoenixCart/';
-// set default timezone if none exists (PHP 5.3 throws an E_WARNING)
- date_default_timezone_set(date_default_timezone_get());
+ date_default_timezone_set('Europe/Prague');
-// define our database connection
- define('DB_SERVER', '');
- define('DB_SERVER_USERNAME', 'mysql');
- define('DB_SERVER_PASSWORD', '');
- define('DB_DATABASE', 'Phoenix');
+// If you are asked to provide configure.php details
+// please remove the data below before sharing
+ const DB_SERVER = 'localhost';
+ const DB_SERVER_USERNAME = 'phoenix';
+ const DB_SERVER_PASSWORD = 'phoenix';
+ const DB_DATABASE = 'phoenix';
diff --git a/admin/includes/languages/czech/index.php b/admin/includes/languages/czech/index.php
new file mode 100644
index 000000000..832cfa4d6
--- /dev/null
+++ b/admin/includes/languages/czech/index.php
@@ -0,0 +1,12 @@
+
diff --git a/composer.json b/composer.json
new file mode 100644
index 000000000..cdc49da9d
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,33 @@
+{
+ "name": "purehtml/ce-phoenix",
+ "description": "eShop",
+ "type": "project",
+ "license": "GNU",
+ "authors": [
+ {
+ "name": "Vítězslav Dvořák",
+ "email": "info@vitexsoftware.cz"
+ }
+ ],
+ "minimum-stability": "dev",
+ "require": {
+ "chillerlan/php-qrcode": "^4.3",
+ "vitexsoftware/ease-twbootstrap4-widgets-flexibee": "dev-abraflexi",
+ "adamstipak/webpay-php": "dev-master",
+ "vitexsoftware/ease-fluentpdo": "*",
+ "ondrakoupil/csob-eapi-paygate": "dev-master"
+ },
+ "require-dev": {
+ "robmorgan/phinx": "dev-master"
+ },
+ "autoload": {
+ "psr-4": {
+ "PureOSC\\": "includes/classes/",
+ "PureOSC\\ui\\": "includes/classes/ui/",
+ "PureOSC\\AbraFlexi\\": "ext/abraflexi/",
+ "PureOSC\\Admin\\": "admin/includes/classes/",
+ "PureOSC\\Admin\\ui\\": "admin/includes/classes/ui/",
+ "PureOSC\\Admin\\flexibee\\": "admin/ext/flexibee/"
+ }
+ }
+}
diff --git a/composer.lock b/composer.lock
new file mode 100644
index 000000000..5ca582968
--- /dev/null
+++ b/composer.lock
@@ -0,0 +1,2444 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+ "This file is @generated automatically"
+ ],
+ "content-hash": "da2f3c7b05ba285b37b91ceb592c9734",
+ "packages": [
+ {
+ "name": "adamstipak/webpay-php",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/newPOPE/gp-webpay-php-sdk.git",
+ "reference": "6b90044e6d60f8f9de6b7c6a395d3ef3de4893d9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/newPOPE/gp-webpay-php-sdk/zipball/6b90044e6d60f8f9de6b7c6a395d3ef3de4893d9",
+ "reference": "6b90044e6d60f8f9de6b7c6a395d3ef3de4893d9",
+ "shasum": ""
+ },
+ "require": {
+ "ext-openssl": "*",
+ "php": "~7.4 || ~8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~9.5"
+ },
+ "default-branch": true,
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "AdamStipak\\Webpay": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Adam Štipák",
+ "homepage": "http://newpope.org"
+ }
+ ],
+ "description": "GP Webpay API Wrapper",
+ "homepage": "https://github.com/newPOPE/webpay-php",
+ "keywords": [
+ "php",
+ "webpay"
+ ],
+ "support": {
+ "source": "https://github.com/newPOPE/gp-webpay-php-sdk/tree/master"
+ },
+ "time": "2021-03-30T13:33:43+00:00"
+ },
+ {
+ "name": "chillerlan/php-qrcode",
+ "version": "4.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/chillerlan/php-qrcode.git",
+ "reference": "4968063fb3baeedb658293f89f9673fbf2499a3e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/4968063fb3baeedb658293f89f9673fbf2499a3e",
+ "reference": "4968063fb3baeedb658293f89f9673fbf2499a3e",
+ "shasum": ""
+ },
+ "require": {
+ "chillerlan/php-settings-container": "^2.1",
+ "ext-mbstring": "*",
+ "php": "^7.4 || ^8.0"
+ },
+ "require-dev": {
+ "phan/phan": "^3.2.2",
+ "phpunit/phpunit": "^9.4",
+ "setasign/fpdf": "^1.8.2"
+ },
+ "suggest": {
+ "chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.",
+ "setasign/fpdf": "Required to use the QR FPDF output."
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "chillerlan\\QRCode\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Kazuhiko Arase",
+ "homepage": "https://github.com/kazuhikoarase"
+ },
+ {
+ "name": "Smiley",
+ "email": "smiley@chillerlan.net",
+ "homepage": "https://github.com/codemasher"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/chillerlan/php-qrcode/graphs/contributors"
+ }
+ ],
+ "description": "A QR code generator. PHP 7.4+",
+ "homepage": "https://github.com/chillerlan/php-qrcode",
+ "keywords": [
+ "phpqrcode",
+ "qr",
+ "qr code",
+ "qrcode",
+ "qrcode-generator"
+ ],
+ "support": {
+ "issues": "https://github.com/chillerlan/php-qrcode/issues",
+ "source": "https://github.com/chillerlan/php-qrcode/tree/4.3.0"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4",
+ "type": "custom"
+ },
+ {
+ "url": "https://ko-fi.com/codemasher",
+ "type": "ko_fi"
+ }
+ ],
+ "time": "2020-11-18T20:49:20+00:00"
+ },
+ {
+ "name": "chillerlan/php-settings-container",
+ "version": "2.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/chillerlan/php-settings-container.git",
+ "reference": "98ccc1b31b31a53bcb563465c4961879b2b93096"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/98ccc1b31b31a53bcb563465c4961879b2b93096",
+ "reference": "98ccc1b31b31a53bcb563465c4961879b2b93096",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "php": "^7.4 || ^8.0"
+ },
+ "require-dev": {
+ "phan/phan": "^4.0",
+ "phpunit/phpunit": "^9.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "chillerlan\\Settings\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Smiley",
+ "email": "smiley@chillerlan.net",
+ "homepage": "https://github.com/codemasher"
+ }
+ ],
+ "description": "A container class for immutable settings objects. Not a DI container. PHP 7.4+",
+ "homepage": "https://github.com/chillerlan/php-settings-container",
+ "keywords": [
+ "PHP7",
+ "Settings",
+ "container",
+ "helper"
+ ],
+ "support": {
+ "issues": "https://github.com/chillerlan/php-settings-container/issues",
+ "source": "https://github.com/chillerlan/php-settings-container"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4",
+ "type": "custom"
+ },
+ {
+ "url": "https://ko-fi.com/codemasher",
+ "type": "ko_fi"
+ }
+ ],
+ "time": "2021-01-06T15:57:03+00:00"
+ },
+ {
+ "name": "fpdo/fluentpdo",
+ "version": "v2.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/envms/fluentpdo.git",
+ "reference": "8684e2d22ebbcdf4cdcdf7bbe7558459ceb31260"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/envms/fluentpdo/zipball/8684e2d22ebbcdf4cdcdf7bbe7558459ceb31260",
+ "reference": "8684e2d22ebbcdf4cdcdf7bbe7558459ceb31260",
+ "shasum": ""
+ },
+ "require-dev": {
+ "envms/fluent-test": "^1.0",
+ "phpunit/phpunit": "^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Envms\\FluentPDO\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0",
+ "GPL-2.0+"
+ ],
+ "authors": [
+ {
+ "name": "envms",
+ "homepage": "https://env.ms"
+ }
+ ],
+ "description": "FluentPDO is a quick and light PHP library for rapid query building. It features a smart join builder, which automatically creates table joins.",
+ "homepage": "https://github.com/envms/fluentpdo",
+ "keywords": [
+ "builder",
+ "database",
+ "db",
+ "dbal",
+ "fluent",
+ "mysql",
+ "oracle",
+ "pdo",
+ "query"
+ ],
+ "support": {
+ "issues": "https://github.com/envms/fluentpdo/issues",
+ "source": "https://github.com/envms/fluentpdo/tree/v2.2.0"
+ },
+ "time": "2020-09-30T14:24:57+00:00"
+ },
+ {
+ "name": "ondrakoupil/csob-eapi-paygate",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ondrakoupil/csob.git",
+ "reference": "451bb1ed6ab231d0fd22e0dfb8d0231dc70fa9a9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ondrakoupil/csob/zipball/451bb1ed6ab231d0fd22e0dfb8d0231dc70fa9a9",
+ "reference": "451bb1ed6ab231d0fd22e0dfb8d0231dc70fa9a9",
+ "shasum": ""
+ },
+ "require": {
+ "ext-curl": "*",
+ "ext-openssl": "*",
+ "ondrakoupil/tools": "~0.0.5",
+ "php": ">=5.4.8"
+ },
+ "require-dev": {
+ "nette/tester": "1.7.2",
+ "ondrakoupil/testing-utils": "~0.0.7"
+ },
+ "default-branch": true,
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "OndraKoupil\\Csob\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ondrej Koupil",
+ "email": "ondra@ondrakoupil.cz"
+ }
+ ],
+ "description": "PHP Client library for easy integration of ČSOB payment gateway",
+ "homepage": "https://github.com/ondrakoupil/csob",
+ "keywords": [
+ "Bank",
+ "cards",
+ "commerce",
+ "csob",
+ "merchant",
+ "pay",
+ "payment"
+ ],
+ "support": {
+ "issues": "https://github.com/ondrakoupil/csob/issues",
+ "source": "https://github.com/ondrakoupil/csob/tree/master"
+ },
+ "time": "2020-09-03T19:32:54+00:00"
+ },
+ {
+ "name": "ondrakoupil/tools",
+ "version": "v0.0.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ondrakoupil/tools.git",
+ "reference": "778c4931ba883d86a338ea9591d48eb9bb24eb13"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ondrakoupil/tools/zipball/778c4931ba883d86a338ea9591d48eb9bb24eb13",
+ "reference": "778c4931ba883d86a338ea9591d48eb9bb24eb13",
+ "shasum": ""
+ },
+ "require-dev": {
+ "nette/tester": "^1.4@dev",
+ "ondrakoupil/testing-utils": "^0.0.7"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "OndraKoupil\\Tools\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ondrej Koupil",
+ "email": "koupil@optimato.cz"
+ }
+ ],
+ "description": "Just a bunch of tools for myself",
+ "support": {
+ "issues": "https://github.com/ondrakoupil/tools/issues",
+ "source": "https://github.com/ondrakoupil/tools/tree/master"
+ },
+ "time": "2015-07-27T20:41:18+00:00"
+ },
+ {
+ "name": "pear/console_getopt",
+ "version": "v1.4.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/pear/Console_Getopt.git",
+ "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/a41f8d3e668987609178c7c4a9fe48fecac53fa0",
+ "reference": "a41f8d3e668987609178c7c4a9fe48fecac53fa0",
+ "shasum": ""
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "Console": "./"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "include-path": [
+ "./"
+ ],
+ "license": [
+ "BSD-2-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Andrei Zmievski",
+ "email": "andrei@php.net",
+ "role": "Lead"
+ },
+ {
+ "name": "Stig Bakken",
+ "email": "stig@php.net",
+ "role": "Developer"
+ },
+ {
+ "name": "Greg Beaver",
+ "email": "cellog@php.net",
+ "role": "Helper"
+ }
+ ],
+ "description": "More info available on: http://pear.php.net/package/Console_Getopt",
+ "support": {
+ "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Console_Getopt",
+ "source": "https://github.com/pear/Console_Getopt"
+ },
+ "time": "2019-11-20T18:27:48+00:00"
+ },
+ {
+ "name": "pear/mail",
+ "version": "v1.4.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/pear/Mail.git",
+ "reference": "9609ed5e42ac5b221dfd9af85de005c59d418ee7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/pear/Mail/zipball/9609ed5e42ac5b221dfd9af85de005c59d418ee7",
+ "reference": "9609ed5e42ac5b221dfd9af85de005c59d418ee7",
+ "shasum": ""
+ },
+ "require": {
+ "pear/pear-core-minimal": "~1.9",
+ "php": ">=5.2.1"
+ },
+ "require-dev": {
+ "pear/pear": "*"
+ },
+ "suggest": {
+ "pear/net_smtp": "Install optionally via your project's composer.json"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "Mail": "./"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "include-path": [
+ "./"
+ ],
+ "license": [
+ "BSD-2-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Chuck Hagenbuch",
+ "email": "chuck@horde.org",
+ "role": "Lead"
+ },
+ {
+ "name": "Richard Heyes",
+ "email": "richard@phpguru.org",
+ "role": "Developer"
+ },
+ {
+ "name": "Aleksander Machniak",
+ "email": "alec@alec.pl",
+ "role": "Developer"
+ }
+ ],
+ "description": "Class that provides multiple interfaces for sending emails.",
+ "homepage": "http://pear.php.net/package/Mail",
+ "support": {
+ "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Mail",
+ "source": "https://github.com/pear/Mail"
+ },
+ "time": "2017-04-11T17:27:29+00:00"
+ },
+ {
+ "name": "pear/mail_mime",
+ "version": "1.10.10",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/pear/Mail_Mime.git",
+ "reference": "ede6128af4c1474394a65f44bf20358c0bf1977f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/pear/Mail_Mime/zipball/ede6128af4c1474394a65f44bf20358c0bf1977f",
+ "reference": "ede6128af4c1474394a65f44bf20358c0bf1977f",
+ "shasum": ""
+ },
+ "require": {
+ "pear/pear-core-minimal": "*",
+ "php": ">=5.2.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "Mail": "./"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "include-path": [
+ "./"
+ ],
+ "license": [
+ "BSD-3-clause"
+ ],
+ "authors": [
+ {
+ "name": "Cipriano Groenendal",
+ "email": "cipri@php.net",
+ "role": "Lead"
+ },
+ {
+ "name": "Aleksander Machniak",
+ "email": "alec@php.net",
+ "role": "Lead"
+ }
+ ],
+ "description": "Mail_Mime provides classes to create MIME messages",
+ "homepage": "http://pear.php.net/package/Mail_Mime",
+ "support": {
+ "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Mail_Mime",
+ "source": "https://github.com/pear/Mail_Mime"
+ },
+ "time": "2021-01-17T08:30:22+00:00"
+ },
+ {
+ "name": "pear/pear-core-minimal",
+ "version": "v1.10.10",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/pear/pear-core-minimal.git",
+ "reference": "625a3c429d9b2c1546438679074cac1b089116a7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/625a3c429d9b2c1546438679074cac1b089116a7",
+ "reference": "625a3c429d9b2c1546438679074cac1b089116a7",
+ "shasum": ""
+ },
+ "require": {
+ "pear/console_getopt": "~1.4",
+ "pear/pear_exception": "~1.0"
+ },
+ "replace": {
+ "rsky/pear-core-min": "self.version"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "include-path": [
+ "src/"
+ ],
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Christian Weiske",
+ "email": "cweiske@php.net",
+ "role": "Lead"
+ }
+ ],
+ "description": "Minimal set of PEAR core files to be used as composer dependency",
+ "support": {
+ "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=PEAR",
+ "source": "https://github.com/pear/pear-core-minimal"
+ },
+ "time": "2019-11-19T19:00:24+00:00"
+ },
+ {
+ "name": "pear/pear_exception",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/pear/PEAR_Exception.git",
+ "reference": "b14fbe2ddb0b9f94f5b24cf08783d599f776fff0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/b14fbe2ddb0b9f94f5b24cf08783d599f776fff0",
+ "reference": "b14fbe2ddb0b9f94f5b24cf08783d599f776fff0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.2.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "<9"
+ },
+ "default-branch": true,
+ "type": "class",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "PEAR/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "include-path": [
+ "."
+ ],
+ "license": [
+ "BSD-2-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Helgi Thormar",
+ "email": "dufuz@php.net"
+ },
+ {
+ "name": "Greg Beaver",
+ "email": "cellog@php.net"
+ }
+ ],
+ "description": "The PEAR Exception base class.",
+ "homepage": "https://github.com/pear/PEAR_Exception",
+ "keywords": [
+ "exception"
+ ],
+ "support": {
+ "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=PEAR_Exception",
+ "source": "https://github.com/pear/PEAR_Exception"
+ },
+ "time": "2021-03-21T15:43:46+00:00"
+ },
+ {
+ "name": "spojenet/flexibee",
+ "version": "2.0.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Spoje-NET/php-abraflexi.git",
+ "reference": "6159c26a864340810dfc5066d248ca61ffa3cf5d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Spoje-NET/php-abraflexi/zipball/6159c26a864340810dfc5066d248ca61ffa3cf5d",
+ "reference": "6159c26a864340810dfc5066d248ca61ffa3cf5d",
+ "shasum": ""
+ },
+ "require": {
+ "ext-curl": "*",
+ "ext-gettext": "*",
+ "ext-json": "*",
+ "vitexsoftware/ease-core": ">=1.9"
+ },
+ "replace": {
+ "spoje.net/flexibee": "*",
+ "spoje.net/flexipeehp": "*"
+ },
+ "require-dev": {
+ "phing/phing": "^2",
+ "phpunit/phpunit": "^9"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "AbraFlexi\\": "src/AbraFlexi/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Vítězslav Dvořák",
+ "email": "vitex@arachne.cz"
+ }
+ ],
+ "description": "Library for easy interaction with czech accounting system FlexiBee.",
+ "support": {
+ "issues": "https://github.com/Spoje-NET/php-abraflexi/issues",
+ "source": "https://github.com/Spoje-NET/php-abraflexi/tree/2.0"
+ },
+ "funding": [
+ {
+ "url": "https://www.patreon.com/VitexSoftware",
+ "type": "patreon"
+ }
+ ],
+ "time": "2021-04-02T09:22:39+00:00"
+ },
+ {
+ "name": "vitexsoftware/ease-core",
+ "version": "1.12",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/VitexSoftware/php-ease-core.git",
+ "reference": "cd2ab87958c5ec73511816a42d13e81ea364102e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/VitexSoftware/php-ease-core/zipball/cd2ab87958c5ec73511816a42d13e81ea364102e",
+ "reference": "cd2ab87958c5ec73511816a42d13e81ea364102e",
+ "shasum": ""
+ },
+ "require": {
+ "pear/mail": "~1.3",
+ "pear/mail_mime": "~1.10",
+ "php": ">=7"
+ },
+ "conflict": {
+ "vitexsoftware/ease-framework": "*"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9",
+ "roave/security-advisories": "dev-latest"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Ease\\": "src/Ease/",
+ "Ease\\Logger\\": "src/Ease/Logger/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Vítězslav Dvořák",
+ "email": "info@vitexsoftware.cz",
+ "homepage": "http://v.s.cz/"
+ }
+ ],
+ "description": "An PHP Framework for writing Applications",
+ "homepage": "http://v.s.cz/ease.php",
+ "support": {
+ "issues": "https://github.com/VitexSoftware/php-ease-core/issues",
+ "source": "https://github.com/VitexSoftware/php-ease-core/tree/1.12"
+ },
+ "funding": [
+ {
+ "url": "https://www.patreon.com/VitexSoftware",
+ "type": "patreon"
+ }
+ ],
+ "time": "2021-03-02T10:59:13+00:00"
+ },
+ {
+ "name": "vitexsoftware/ease-fluentpdo",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/VitexSoftware/php-ease-fluentpdo.git",
+ "reference": "10bb044f142bb04eb4be6e299611d1151dd19266"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/VitexSoftware/php-ease-fluentpdo/zipball/10bb044f142bb04eb4be6e299611d1151dd19266",
+ "reference": "10bb044f142bb04eb4be6e299611d1151dd19266",
+ "shasum": ""
+ },
+ "require": {
+ "fpdo/fluentpdo": "^2.1",
+ "vitexsoftware/ease-core": "^1.1"
+ },
+ "conflict": {
+ "vitexsoftware/ease-framework": "*"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9",
+ "robmorgan/phinx": "^0.12.3",
+ "vlucas/phpdotenv": "^3"
+ },
+ "default-branch": true,
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Ease\\SQL\\": "src/Ease/SQL"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Vitex",
+ "email": "info@vitexsoftware.cz"
+ }
+ ],
+ "description": "SQL/PDO support for Ease Framework based on FluentPDO",
+ "support": {
+ "issues": "https://github.com/VitexSoftware/php-ease-fluentpdo/issues",
+ "source": "https://github.com/VitexSoftware/php-ease-fluentpdo/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://www.patreon.com/VitexSoftware",
+ "type": "patreon"
+ }
+ ],
+ "time": "2021-04-05T22:22:46+00:00"
+ },
+ {
+ "name": "vitexsoftware/ease-html",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/VitexSoftware/php-ease-html.git",
+ "reference": "d980f432b8283420f8ed91da938cf83ce826b2a8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/VitexSoftware/php-ease-html/zipball/d980f432b8283420f8ed91da938cf83ce826b2a8",
+ "reference": "d980f432b8283420f8ed91da938cf83ce826b2a8",
+ "shasum": ""
+ },
+ "require": {
+ "vitexsoftware/ease-core": ">= 1.8"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "*"
+ },
+ "default-branch": true,
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Ease\\": "src/Ease/",
+ "Ease\\Html\\": "src/Ease/Html/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Vítězslav Vitex Dvořák",
+ "email": "info@vitexsoftware.cz"
+ }
+ ],
+ "description": "Set of HTML rendering objects",
+ "support": {
+ "issues": "https://github.com/VitexSoftware/php-ease-html/issues",
+ "source": "https://github.com/VitexSoftware/php-ease-html/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://www.patreon.com/VitexSoftware",
+ "type": "patreon"
+ }
+ ],
+ "time": "2021-03-28T18:25:11+00:00"
+ },
+ {
+ "name": "vitexsoftware/ease-twbootstrap4",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/VitexSoftware/php-ease-twbootstrap4.git",
+ "reference": "5d38eed09a14c9d895d9b762abaa5c24fc622268"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/VitexSoftware/php-ease-twbootstrap4/zipball/5d38eed09a14c9d895d9b762abaa5c24fc622268",
+ "reference": "5d38eed09a14c9d895d9b762abaa5c24fc622268",
+ "shasum": ""
+ },
+ "require": {
+ "vitexsoftware/ease-html": ">= 1.25"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8"
+ },
+ "default-branch": true,
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Ease\\TWB4\\": "src/Ease/TWB4/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Vítězslav Vitex Dvořák",
+ "email": "info@vitexsoftware.cz"
+ }
+ ],
+ "description": "Set of Twitter Bootstrap 4 rendering objects",
+ "support": {
+ "issues": "https://github.com/VitexSoftware/php-ease-twbootstrap4/issues",
+ "source": "https://github.com/VitexSoftware/php-ease-twbootstrap4/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://www.patreon.com/VitexSoftware",
+ "type": "patreon"
+ }
+ ],
+ "time": "2021-04-04T15:55:23+00:00"
+ },
+ {
+ "name": "vitexsoftware/ease-twbootstrap4-widgets-flexibee",
+ "version": "dev-abraflexi",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/VitexSoftware/php-ease-twbootstrap4-widgets-abraflexi.git",
+ "reference": "b7d4fe49932fd3845542d66996d059f62f23291e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/VitexSoftware/php-ease-twbootstrap4-widgets-abraflexi/zipball/b7d4fe49932fd3845542d66996d059f62f23291e",
+ "reference": "b7d4fe49932fd3845542d66996d059f62f23291e",
+ "shasum": ""
+ },
+ "require": {
+ "vitexsoftware/ease-twbootstrap4": ">=1.1",
+ "vitexsoftware/flexibee-bricks": "dev-abraflexi"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9"
+ },
+ "default-branch": true,
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "AbraFlexi\\ui\\TWB4\\": "src/AbraFlexi/ui/TWB4"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Vitex",
+ "email": "info@vitexsoftware.cz"
+ }
+ ],
+ "description": "php-abraflexi extending classes and widgets",
+ "support": {
+ "issues": "https://github.com/VitexSoftware/php-ease-twbootstrap4-widgets-abraflexi/issues",
+ "source": "https://github.com/VitexSoftware/php-ease-twbootstrap4-widgets-abraflexi/tree/abraflexi"
+ },
+ "funding": [
+ {
+ "url": "https://www.patreon.com/VitexSoftware",
+ "type": "patreon"
+ }
+ ],
+ "time": "2021-03-06T23:37:26+00:00"
+ },
+ {
+ "name": "vitexsoftware/flexibee-bricks",
+ "version": "dev-abraflexi",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/VitexSoftware/php-abraflexi-bricks.git",
+ "reference": "f3c388284d6358d9f9fae4098bd1808c68309013"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/VitexSoftware/php-abraflexi-bricks/zipball/f3c388284d6358d9f9fae4098bd1808c68309013",
+ "reference": "f3c388284d6358d9f9fae4098bd1808c68309013",
+ "shasum": ""
+ },
+ "require": {
+ "spojenet/flexibee": "2.0.x-dev",
+ "vitexsoftware/ease-html": ">=1.25"
+ },
+ "require-dev": {
+ "codeception/codeception": "*",
+ "phpunit/phpunit": "*"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "AbraFlexi\\Bricks\\": "src/AbraFlexi/Bricks",
+ "AbraFlexi\\Bricks\\ConvertRules\\": "src/AbraFlexi/Bricks/ConvertRules",
+ "AbraFlexi\\ui\\": "src/AbraFlexi/ui"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Vitex",
+ "email": "info@vitexsoftware.cz"
+ }
+ ],
+ "description": "php-abraflexi extending classes and widgets",
+ "support": {
+ "issues": "https://github.com/VitexSoftware/php-abraflexi-bricks/issues",
+ "source": "https://github.com/VitexSoftware/php-abraflexi-bricks/tree/abraflexi"
+ },
+ "funding": [
+ {
+ "url": "https://www.patreon.com/VitexSoftware",
+ "type": "patreon"
+ }
+ ],
+ "time": "2021-03-25T10:01:44+00:00"
+ }
+ ],
+ "packages-dev": [
+ {
+ "name": "cakephp/core",
+ "version": "4.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/core.git",
+ "reference": "e4a19ad27b5a3e58db65d5dbb6f9b2e41eeec3ec"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/core/zipball/e4a19ad27b5a3e58db65d5dbb6f9b2e41eeec3ec",
+ "reference": "e4a19ad27b5a3e58db65d5dbb6f9b2e41eeec3ec",
+ "shasum": ""
+ },
+ "require": {
+ "cakephp/utility": "^4.0",
+ "php": ">=7.2.0"
+ },
+ "suggest": {
+ "cakephp/cache": "To use Configure::store() and restore().",
+ "cakephp/event": "To use PluginApplicationInterface or plugin applications."
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Cake\\Core\\": "."
+ },
+ "files": [
+ "functions.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "CakePHP Community",
+ "homepage": "https://github.com/cakephp/core/graphs/contributors"
+ }
+ ],
+ "description": "CakePHP Framework Core classes",
+ "homepage": "https://cakephp.org",
+ "keywords": [
+ "cakephp",
+ "core",
+ "framework"
+ ],
+ "support": {
+ "forum": "https://stackoverflow.com/tags/cakephp",
+ "irc": "irc://irc.freenode.org/cakephp",
+ "issues": "https://github.com/cakephp/cakephp/issues",
+ "source": "https://github.com/cakephp/core"
+ },
+ "time": "2019-11-26T02:27:16+00:00"
+ },
+ {
+ "name": "cakephp/database",
+ "version": "4.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/database.git",
+ "reference": "44b6164a6a22c086f9b26733c7981b8cc378ddb1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/database/zipball/44b6164a6a22c086f9b26733c7981b8cc378ddb1",
+ "reference": "44b6164a6a22c086f9b26733c7981b8cc378ddb1",
+ "shasum": ""
+ },
+ "require": {
+ "cakephp/core": "^4.0",
+ "cakephp/datasource": "^4.0",
+ "php": ">=7.2.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Cake\\Database\\": "."
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "CakePHP Community",
+ "homepage": "https://github.com/cakephp/database/graphs/contributors"
+ }
+ ],
+ "description": "Flexible and powerful Database abstraction library with a familiar PDO-like API",
+ "homepage": "https://cakephp.org",
+ "keywords": [
+ "abstraction",
+ "cakephp",
+ "database",
+ "database abstraction",
+ "pdo"
+ ],
+ "support": {
+ "forum": "https://stackoverflow.com/tags/cakephp",
+ "irc": "irc://irc.freenode.org/cakephp",
+ "issues": "https://github.com/cakephp/cakephp/issues",
+ "source": "https://github.com/cakephp/database"
+ },
+ "time": "2019-11-21T22:47:36+00:00"
+ },
+ {
+ "name": "cakephp/datasource",
+ "version": "4.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/datasource.git",
+ "reference": "19c486bd2176bd1d3fa30114492552a8bf9f443c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/datasource/zipball/19c486bd2176bd1d3fa30114492552a8bf9f443c",
+ "reference": "19c486bd2176bd1d3fa30114492552a8bf9f443c",
+ "shasum": ""
+ },
+ "require": {
+ "cakephp/core": "^4.0",
+ "php": ">=7.2.0",
+ "psr/log": "^1.1",
+ "psr/simple-cache": "^1.0"
+ },
+ "suggest": {
+ "cakephp/cache": "If you decide to use Query caching.",
+ "cakephp/collection": "If you decide to use ResultSetInterface.",
+ "cakephp/utility": "If you decide to use EntityTrait."
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Cake\\Datasource\\": "."
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "CakePHP Community",
+ "homepage": "https://github.com/cakephp/datasource/graphs/contributors"
+ }
+ ],
+ "description": "Provides connection managing and traits for Entities and Queries that can be reused for different datastores",
+ "homepage": "https://cakephp.org",
+ "keywords": [
+ "cakephp",
+ "connection management",
+ "datasource",
+ "entity",
+ "query"
+ ],
+ "support": {
+ "forum": "https://stackoverflow.com/tags/cakephp",
+ "irc": "irc://irc.freenode.org/cakephp",
+ "issues": "https://github.com/cakephp/cakephp/issues",
+ "source": "https://github.com/cakephp/datasource"
+ },
+ "time": "2019-11-20T03:49:13+00:00"
+ },
+ {
+ "name": "cakephp/utility",
+ "version": "4.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/utility.git",
+ "reference": "4a6ec7e9738a33f4d3fdc267f8a76781384445cc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/utility/zipball/4a6ec7e9738a33f4d3fdc267f8a76781384445cc",
+ "reference": "4a6ec7e9738a33f4d3fdc267f8a76781384445cc",
+ "shasum": ""
+ },
+ "require": {
+ "cakephp/core": "^4.0",
+ "php": ">=7.2.0"
+ },
+ "suggest": {
+ "ext-intl": "To use Text::transliterate() or Text::slug()",
+ "lib-ICU": "To use Text::transliterate() or Text::slug()"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Cake\\Utility\\": "."
+ },
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "CakePHP Community",
+ "homepage": "https://github.com/cakephp/utility/graphs/contributors"
+ }
+ ],
+ "description": "CakePHP Utility classes such as Inflector, String, Hash, and Security",
+ "homepage": "https://cakephp.org",
+ "keywords": [
+ "cakephp",
+ "hash",
+ "inflector",
+ "security",
+ "string",
+ "utility"
+ ],
+ "support": {
+ "forum": "https://stackoverflow.com/tags/cakephp",
+ "irc": "irc://irc.freenode.org/cakephp",
+ "issues": "https://github.com/cakephp/cakephp/issues",
+ "source": "https://github.com/cakephp/utility"
+ },
+ "time": "2019-11-23T03:57:00+00:00"
+ },
+ {
+ "name": "psr/container",
+ "version": "1.1.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/container.git",
+ "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf",
+ "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Psr\\Container\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common Container Interface (PHP FIG PSR-11)",
+ "homepage": "https://github.com/php-fig/container",
+ "keywords": [
+ "PSR-11",
+ "container",
+ "container-interface",
+ "container-interop",
+ "psr"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/container/issues",
+ "source": "https://github.com/php-fig/container/tree/1.1.x"
+ },
+ "time": "2021-03-05T17:36:06+00:00"
+ },
+ {
+ "name": "psr/log",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "a18c1e692e02b84abbafe4856c3cd7cc6903908c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/a18c1e692e02b84abbafe4856c3cd7cc6903908c",
+ "reference": "a18c1e692e02b84abbafe4856c3cd7cc6903908c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Log\\": "Psr/Log/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for logging libraries",
+ "homepage": "https://github.com/php-fig/log",
+ "keywords": [
+ "log",
+ "psr",
+ "psr-3"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/log/tree/master"
+ },
+ "time": "2021-03-02T15:02:34+00:00"
+ },
+ {
+ "name": "psr/simple-cache",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/simple-cache.git",
+ "reference": "5a7b96b1dda5d957e01bc1bfe77dcca09c5a7474"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/5a7b96b1dda5d957e01bc1bfe77dcca09c5a7474",
+ "reference": "5a7b96b1dda5d957e01bc1bfe77dcca09c5a7474",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\SimpleCache\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interfaces for simple caching",
+ "keywords": [
+ "cache",
+ "caching",
+ "psr",
+ "psr-16",
+ "simple-cache"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/simple-cache/tree/master"
+ },
+ "time": "2020-04-21T06:43:17+00:00"
+ },
+ {
+ "name": "robmorgan/phinx",
+ "version": "dev-master",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/phinx.git",
+ "reference": "a96c5465a8f3dd64e39c9115a5d383b8d01928ce"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/phinx/zipball/a96c5465a8f3dd64e39c9115a5d383b8d01928ce",
+ "reference": "a96c5465a8f3dd64e39c9115a5d383b8d01928ce",
+ "shasum": ""
+ },
+ "require": {
+ "cakephp/database": "^4.0",
+ "php": ">=7.2",
+ "psr/container": "^1.0 || ^2.0",
+ "symfony/config": "^3.4|^4.0|^5.0",
+ "symfony/console": "^3.4|^4.0|^5.0"
+ },
+ "require-dev": {
+ "cakephp/cakephp-codesniffer": "^3.0",
+ "ext-json": "*",
+ "ext-pdo": "*",
+ "phpunit/phpunit": "^8.5|^9.3",
+ "sebastian/comparator": ">=1.2.3",
+ "symfony/yaml": "^3.4|^4.0|^5.0"
+ },
+ "suggest": {
+ "ext-json": "Install if using JSON configuration format",
+ "ext-pdo": "PDO extension is needed",
+ "symfony/yaml": "Install if using YAML configuration format"
+ },
+ "default-branch": true,
+ "bin": [
+ "bin/phinx"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Phinx\\": "src/Phinx/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Rob Morgan",
+ "email": "robbym@gmail.com",
+ "homepage": "https://robmorgan.id.au",
+ "role": "Lead Developer"
+ },
+ {
+ "name": "Woody Gilk",
+ "email": "woody.gilk@gmail.com",
+ "homepage": "https://shadowhand.me",
+ "role": "Developer"
+ },
+ {
+ "name": "Richard Quadling",
+ "email": "rquadling@gmail.com",
+ "role": "Developer"
+ },
+ {
+ "name": "CakePHP Community",
+ "homepage": "https://github.com/cakephp/phinx/graphs/contributors",
+ "role": "Developer"
+ }
+ ],
+ "description": "Phinx makes it ridiculously easy to manage the database migrations for your PHP app.",
+ "homepage": "https://phinx.org",
+ "keywords": [
+ "database",
+ "database migrations",
+ "db",
+ "migrations",
+ "phinx"
+ ],
+ "support": {
+ "issues": "https://github.com/cakephp/phinx/issues",
+ "source": "https://github.com/cakephp/phinx/tree/master"
+ },
+ "time": "2021-03-17T03:50:36+00:00"
+ },
+ {
+ "name": "symfony/config",
+ "version": "5.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/config.git",
+ "reference": "6105c88534b857c14191af17c1fbe60a1abd30ad"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/config/zipball/6105c88534b857c14191af17c1fbe60a1abd30ad",
+ "reference": "6105c88534b857c14191af17c1fbe60a1abd30ad",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1",
+ "symfony/filesystem": "^4.4|^5.0",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-php80": "^1.15"
+ },
+ "conflict": {
+ "symfony/finder": "<4.4"
+ },
+ "require-dev": {
+ "symfony/event-dispatcher": "^4.4|^5.0",
+ "symfony/finder": "^4.4|^5.0",
+ "symfony/messenger": "^4.4|^5.0",
+ "symfony/service-contracts": "^1.1|^2",
+ "symfony/yaml": "^4.4|^5.0"
+ },
+ "suggest": {
+ "symfony/yaml": "To use the yaml reference dumper"
+ },
+ "default-branch": true,
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Config\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/config/tree/5.x"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-04-07T16:09:00+00:00"
+ },
+ {
+ "name": "symfony/console",
+ "version": "5.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/console.git",
+ "reference": "5198e2322c7c403048423b5a0b7c134a92630ebe"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/console/zipball/5198e2322c7c403048423b5a0b7c134a92630ebe",
+ "reference": "5198e2322c7c403048423b5a0b7c134a92630ebe",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php73": "^1.8",
+ "symfony/polyfill-php80": "^1.15",
+ "symfony/service-contracts": "^1.1|^2",
+ "symfony/string": "^5.1"
+ },
+ "conflict": {
+ "symfony/dependency-injection": "<4.4",
+ "symfony/dotenv": "<5.1",
+ "symfony/event-dispatcher": "<4.4",
+ "symfony/lock": "<4.4",
+ "symfony/process": "<4.4"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0"
+ },
+ "require-dev": {
+ "psr/log": "~1.0",
+ "symfony/config": "^4.4|^5.0",
+ "symfony/dependency-injection": "^4.4|^5.0",
+ "symfony/event-dispatcher": "^4.4|^5.0",
+ "symfony/lock": "^4.4|^5.0",
+ "symfony/process": "^4.4|^5.0",
+ "symfony/var-dumper": "^4.4|^5.0"
+ },
+ "suggest": {
+ "psr/log": "For using the console logger",
+ "symfony/event-dispatcher": "",
+ "symfony/lock": "",
+ "symfony/process": ""
+ },
+ "default-branch": true,
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Console\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Eases the creation of beautiful and testable command line interfaces",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "cli",
+ "command line",
+ "console",
+ "terminal"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/console/tree/5.x"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-04-07T16:09:00+00:00"
+ },
+ {
+ "name": "symfony/deprecation-contracts",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/deprecation-contracts.git",
+ "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627",
+ "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.4-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "files": [
+ "function.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "A generic function and convention to trigger deprecation notices",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/deprecation-contracts/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-03-23T23:28:01+00:00"
+ },
+ {
+ "name": "symfony/filesystem",
+ "version": "5.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/filesystem.git",
+ "reference": "2a7311756f4ffa7ea39a4c31422c9d08013099d0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/2a7311756f4ffa7ea39a4c31422c9d08013099d0",
+ "reference": "2a7311756f4ffa7ea39a4c31422c9d08013099d0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-ctype": "~1.8"
+ },
+ "default-branch": true,
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Filesystem\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides basic utilities for the filesystem",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/filesystem/tree/5.x"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-04-01T10:43:52+00:00"
+ },
+ {
+ "name": "symfony/polyfill-ctype",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-ctype.git",
+ "reference": "c6c942b1ac76c82448322025e084cadc56048b4e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e",
+ "reference": "c6c942b1ac76c82448322025e084cadc56048b4e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "suggest": {
+ "ext-ctype": "For best performance"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.22-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Ctype\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Gert de Pagter",
+ "email": "BackEndTea@gmail.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for ctype functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "ctype",
+ "polyfill",
+ "portable"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.1"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-01-07T16:49:33+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-grapheme",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
+ "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5601e09b69f26c1828b13b6bb87cb07cddba3170",
+ "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.22-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's grapheme_* functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "grapheme",
+ "intl",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.22.1"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-01-22T09:19:47+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-normalizer",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
+ "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/43a0283138253ed1d48d352ab6d0bdb3f809f248",
+ "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.22-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ],
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's Normalizer class and related functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "intl",
+ "normalizer",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.1"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-01-22T09:19:47+00:00"
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "5232de97ee3b75b0360528dae24e73db49566ab1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1",
+ "reference": "5232de97ee3b75b0360528dae24e73db49566ab1",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.22-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for the Mbstring extension",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "mbstring",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.1"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-01-22T09:19:47+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php73",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php73.git",
+ "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a678b42e92f86eca04b7fa4c0f6f19d097fb69e2",
+ "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.22-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Php73\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ],
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php73/tree/v1.22.1"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-01-07T16:49:33+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php80",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php80.git",
+ "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91",
+ "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.22-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Php80\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ],
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ion Bazan",
+ "email": "ion.bazan@gmail.com"
+ },
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-01-07T16:49:33+00:00"
+ },
+ {
+ "name": "symfony/service-contracts",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/service-contracts.git",
+ "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb",
+ "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "psr/container": "^1.1"
+ },
+ "suggest": {
+ "symfony/service-implementation": ""
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.4-dev"
+ },
+ "thanks": {
+ "name": "symfony/contracts",
+ "url": "https://github.com/symfony/contracts"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\Service\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Generic abstractions related to writing services",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/service-contracts/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-04-01T10:43:52+00:00"
+ },
+ {
+ "name": "symfony/string",
+ "version": "5.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/string.git",
+ "reference": "01454c66c88a6bb4449dcdeb913e463e075f331b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/string/zipball/01454c66c88a6bb4449dcdeb913e463e075f331b",
+ "reference": "01454c66c88a6bb4449dcdeb913e463e075f331b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-intl-grapheme": "~1.0",
+ "symfony/polyfill-intl-normalizer": "~1.0",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php80": "~1.15"
+ },
+ "require-dev": {
+ "symfony/error-handler": "^4.4|^5.0",
+ "symfony/http-client": "^4.4|^5.0",
+ "symfony/translation-contracts": "^1.1|^2",
+ "symfony/var-exporter": "^4.4|^5.0"
+ },
+ "default-branch": true,
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\String\\": ""
+ },
+ "files": [
+ "Resources/functions.php"
+ ],
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "grapheme",
+ "i18n",
+ "string",
+ "unicode",
+ "utf-8",
+ "utf8"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/string/tree/5.x"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-03-17T17:12:23+00:00"
+ }
+ ],
+ "aliases": [],
+ "minimum-stability": "dev",
+ "stability-flags": {
+ "vitexsoftware/ease-twbootstrap4-widgets-flexibee": 20,
+ "adamstipak/webpay-php": 20,
+ "ondrakoupil/csob-eapi-paygate": 20,
+ "robmorgan/phinx": 20
+ },
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": [],
+ "platform-dev": [],
+ "plugin-api-version": "2.0.0"
+}
diff --git a/includes/application_top.php b/includes/application_top.php
index ecbca5956..9053b8002 100644
--- a/includes/application_top.php
+++ b/includes/application_top.php
@@ -19,6 +19,7 @@
// autoload classes in the classes or modules directories
require 'includes/functions/autoloader.php';
spl_autoload_register('tep_autoload_catalog');
+ require 'vendor/autoload.php';
// include the database functions
require 'includes/functions/database.php';
diff --git a/includes/classes/Order.php b/includes/classes/Order.php
new file mode 100644
index 000000000..0fa20c2dc
--- /dev/null
+++ b/includes/classes/Order.php
@@ -0,0 +1,66 @@
+customer['id'] = null;
+
+ if ($order_id === false) {
+ $this->set_id(null);
+ } else {
+ parent::__construct($order_id);
+ $this->set_id($order_id);
+ self::updateTotals();
+ }
+ }
+
+ public function updateTotals() {
+ $order_total_modules = new order_total();
+ $order->totals = $order_total_modules->process();
+ }
+
+ public function getStatus() {
+ return array_key_exists('orders_status_id', $this->info) ? intval($this->info['orders_status_id']) : 0;
+ }
+
+ public function setOrderState(int $code) {
+ if (tep_db_query("UPDATE orders SET orders_status = " . $code . ", last_modified = NOW() WHERE orders_id = " . (int) $this->get_id())) {
+ $this->info['orders_status_id'] = $code;
+ }
+ }
+
+ public function addStatusHistory(int $orderStatusId, $comments = '') {
+ tep_db_query("INSERT INTO orders_status_history (orders_id, orders_status_id, date_added, comments) VALUES ('" . $this->get_id() . "', '" . $orderStatusId . "', NOW(), '" . tep_db_input($comments) . "')");
+ }
+
+ public static function redirectForOrderStatus(int $orderStatusId) {
+ switch ($orderStatusId) {
+ case intval(MODULE_PAYMENT_CSOB_CANCELED_ORDER_STATUS_ID):
+ tep_redirect(tep_href_link('shopping_cart.php', '', 'SSL'));
+ break;
+ case intval(MODULE_PAYMENT_CSOB_PROCESSING_ORDER_STATUS_ID):
+ tep_redirect(tep_href_link('account_history.php', '', 'SSL'));
+ break;
+ case intval(MODULE_PAYMENT_CSOB_DONE_ORDER_STATUS_ID):
+ tep_redirect(tep_href_link('checkout_success.php', '', 'SSL'));
+ break;
+ case intval(MODULE_PAYMENT_CSOB_PROBLEM_ORDER_STATUS_ID):
+ tep_redirect(tep_href_link('checkout_payment.php', 'payment_error=' . 'csob' . '&error=' . $resultCode));
+ break;
+ }
+ }
+
+}
diff --git a/includes/classes/Payment.php b/includes/classes/Payment.php
new file mode 100644
index 000000000..8802721f9
--- /dev/null
+++ b/includes/classes/Payment.php
@@ -0,0 +1,274 @@
+get_id() ? json_encode(['orderId' => $order->get_id(), 'customerId' => $order->customer['id'], 'payment' => $_SESSION['payment'], 'sessiontoken' => $_SESSION['sessiontoken']]) : [];
+ parent::__construct($order->get_id(), $merchantData, $order->customer['id'], $oneClickPayment);
+
+ $lang_query = tep_db_query("SELECT code FROM languages WHERE languages_id = " . (int) $_SESSION['languages_id']);
+ $lang = tep_db_fetch_array($lang_query);
+
+ if ($lang['code'] == 'cs') {
+ $lang['code'] = 'cz';
+ }
+
+ $this->language = strtoupper($lang['code']);
+ $order_total_modules = new \order_total();
+ $order->totals = $order_total_modules->process();
+
+ if (!empty($order->totals)) {
+ if (isset($order->totals[0]['value'])) {
+ $this->addCartItem($order->totals[0]['title'], 1, $order->totals[0]['value']);
+ }
+ if (isset($order->totals[1]['value'])) {
+ $this->addCartItem($order->totals[1]['title'], 1, $order->totals[1]['value']);
+ }
+ }
+ }
+
+ /**
+ * obtain Current Payment status
+ * @return int status id
+ */
+ public function getStatus() {
+ return $this->status;
+ }
+
+ public function setStatus(int $status) {
+ $this->status = $status;
+ }
+
+ /**
+ * API Client
+ * @return \OndraKoupil\Csob\Client
+ */
+ public function getApi() {
+ if (is_null($this->api)) {
+ $this->api = new \OndraKoupil\Csob\Client(self::apiconfig());
+ }
+ return $this->api;
+ }
+
+ public function saveNewPayment() {
+ if ($this->getPayId()) {
+ tep_db_query("INSERT INTO csob (payId,paymentStatus, orders_id) VALUES ('" . $this->getPayId() . "', " . $this->getStatus() . ", " . $this->orderNo . ")");
+ }
+ }
+
+ public function savePaymentState() {
+ tep_db_query("UPDATE csob SET paymentStatus = " . $this->getStatus() . " WHERE payId = '" . $this->getPayId() . "'");
+ }
+
+ /**
+ * Initiate card payment
+ *
+ * @return array payment gw response
+ */
+ public function requestPayment() {
+ $paymentData = $this->getApi()->paymentInit($this);
+ if (array_key_exists('paymentStatus', $paymentData)) {
+ $this->status = $paymentData['paymentStatus'];
+ }
+ $this->saveNewPayment();
+ return $paymentData;
+ }
+
+ /**
+ * PayGW Configuration helper
+ *
+ * @return Config
+ */
+ private static function apiconfig() {
+ return new Config(
+ \Ease\Functions::cfg('MODULE_PAYMENT_CSOB_MERCHANT_ID'),
+ \Ease\Functions::cfg('MODULE_PAYMENT_CSOB_SECRET_KEY'),
+ \Ease\Functions::cfg('MODULE_PAYMENT_CSOB_PUBLIC_KEY'),
+ \Ease\Functions::cfg('STORE_NAME'),
+ tep_href_link('ext/modules/payment/csob/welcomeback.php', 'ceid=' . session_id(), null, true),
+ // URL adresa API - výchozí je adresa testovacího (integračního) prostředí,
+ // až budete připraveni přepnout se na ostré rozhraní, sem zadáte
+ // adresu ostrého API. Nezapomeňte také na ostrý veřejný klíč banky.
+ GatewayUrl::TEST_LATEST
+ );
+ }
+
+ /**
+ * Obtain return code meaning
+ *
+ * @param int $code
+ * @return string
+ *
+ * @throws Exception
+ */
+ static public function resultCodeMeaning($code) {
+ switch ($code) {
+ case 0:
+ $error = 'OK'; //(operace proběhla korektně, transakce založena, stav aktualizován apod.)
+ break;
+ case 100:
+ $error = 'Missing parameter {name}'; // (chybějící povinný parametr)
+ break;
+ case 110 :
+ $error = 'Invalid parameter {name} '; //(chybný formát parametru)
+ break;
+ case 120:
+ $error = 'Merchant blocked'; // (obchodník nemá povoleny platby)
+ break;
+ case 130:
+ $error = 'Session expired'; //(vypršela platnost požadavku)
+ break;
+ case 140:
+ $error = 'Payment not found'; // (platba nenalezena)
+ break;
+ case 150:
+ $error = 'Payment not in valid state'; //(nesprávný stav platby, operaci nelze provést)
+ break;
+ case 160:
+ $error = 'Payment method disabled'; //(operace není povolena, obchodník si o nastavení musí smluvně zažádat)
+ break;
+ case 170:
+ $error = 'Payment method unavailable'; //(nedostupost poskytovatele metody, služba není v tomto čase dosažitelná)
+ break;
+ case 180:
+ $error = 'Operation not allowed'; //(nepovolená operace)
+ break;
+ case 190:
+ $error = 'Payment method error'; //(chyba ve zpracování u poskytovatele metody)
+ break;
+ case 230:
+ $error = 'Merchant not onboarded for MasterPass'; // (obchodník není registrovaný v MasterPass)
+ break;
+ case 240:
+ $error = 'MasterPass request token already initialized'; // (MasterPass token byl již inicializován)
+ break;
+ case 250:
+ $error = 'MasterPass request token does not exist'; // (nenalezen MasterPass token, nelze dokončit platbu pomocí MasterPass)
+ break;
+ case 270:
+ $error = 'MasterPass canceled by user'; // (zákazník nedokončil výběr karty/adresy v MasterPass wallet)
+ break;
+ case 500:
+ $error = 'EET Rejected'; //(EET hlášení bylo odmítnuto FS)
+ break;
+ case 600:
+ $error = 'MALL Pay payment declined in precheck'; //operaci mallpay/init nelze dokončit z důvodu zamítnutí žádosti v systému MALL Pay
+ break;
+ case 700:
+ $error = 'Oneclick template not found'; //(šablona pro platbu na klik nebyla nalezena)
+ break;
+ case 710:
+ $error = 'Oneclick template payment expired'; //(šablona pro platbu nebyla použita více jak 12 měsíců, platba expirovala)
+ break;
+ case 720:
+ $error = 'Oneclick template card expired'; //(karta pro šablonu pro platbu na klik expirovala)
+ break;
+ case 730:
+ $error = 'Oneclick template customer rejected'; // (šablona pro platbu na klik byla zrušena na pokyn zákazníka)
+ break;
+ case 740:
+ $error = 'Oneclick template payment reversed'; //(šablona pro platbu na klik byla reverzována)
+ break;
+ case 800:
+ $error = 'Customer not found'; //(zákazník identifikovaný pomocí customerId nenalezen)
+ break;
+ case 810:
+ $error = 'Customer found, no saved card(s)'; //(zákazník identifikovaný pomocí customerId byl nalezen, ale nemá žádné dříve uložené karty na platební bráně)
+ break;
+ case 820:
+ $error = 'Customer found, found saved card(s)'; //(zákazník identifikovaný pomocí customerId byl nalezen a má uložené karty na platební bráně)
+ break;
+ case 900:
+ $error = 'Internal error'; // (interní chyba ve zpracování požadavku)
+ break;
+ default:
+ throw new Exception('Unknown Payment response code: ' . $result_array['resultCode']);
+ break;
+ }
+ return $error;
+ }
+
+ /**
+ * Meaning of given payment status code
+ *
+ * @param int $status
+ *
+ * @return string
+ */
+ public static function paymentStatusMeaning(int $status) {
+ switch ($status) {
+ case 0:
+ $meaning = 'Payment does not exist yet';
+ break;
+ case 1:
+ $meaning = 'Payment established';
+ break;
+ case 2:
+ $meaning = 'Payment in progress';
+ break;
+ case 3:
+ $meaning = 'Payment cancelled';
+ break;
+ case 4:
+ $meaning = 'Payment confirmed';
+ break;
+ case 5:
+ $meaning = 'Payment canceled';
+ break;
+ case 6:
+ $meaning = 'Payment denied';
+ break;
+ case 7:
+ $meaning = 'Wait for Accounting';
+ break;
+ case 8:
+ $meaning = 'Payment accounted';
+ break;
+ case 9:
+ $meaning = 'Refund requested';
+ break;
+ case 10:
+ $meaning = 'Payment refunded';
+ break;
+ }
+ return $meaning;
+ }
+
+}
diff --git a/includes/classes/application.php b/includes/classes/application.php
index 488d2ce19..476005c09 100644
--- a/includes/classes/application.php
+++ b/includes/classes/application.php
@@ -83,7 +83,7 @@ public function set_session_language() {
}
public function set_template_title() {
- $GLOBALS['oscTemplate']->setTitle(TITLE);
+ $GLOBALS['oscTemplate']->setTitle( defined('TITLE') ? TITLE : 'Title not set' );
}
public function ensure_navigation_history() {
diff --git a/includes/configure.php b/includes/configure.php
old mode 100644
new mode 100755
index 11dd26d22..3bcd703f5
--- a/includes/configure.php
+++ b/includes/configure.php
@@ -1,53 +1,23 @@
0,
- 'domain' => '',
- 'path' => '',
+ 'domain' => 'phoenix',
+ 'path' => '/',
'samesite' => 'Lax',
- ]);
- define('DIR_WS_CATALOG', '');
-
- define('DIR_FS_CATALOG', dirname($_SERVER['SCRIPT_FILENAME']) . '/');
+ ];
+ const DIR_WS_CATALOG = '/';
- // leave blank or omit to use MySQL sessions
- define('DIR_FS_SESSION', '');
+ const DIR_FS_CATALOG = '/home/vitex/Projects/PureHTML/PhoenixCart/';
-// set default timezone if none exists (PHP 5.3 throws an E_WARNING)
- date_default_timezone_set(date_default_timezone_get());
+ date_default_timezone_set('Europe/Prague');
// If you are asked to provide configure.php details
// please remove the data below before sharing
-
-// define our database connection
- define('DB_SERVER', ''); // eg, localhost - should not be empty for production servers
- define('DB_SERVER_USERNAME', '');
- define('DB_SERVER_PASSWORD', '');
- define('DB_DATABASE', 'Phoenix');
-
- if (DB_SERVER == '' && is_dir('install')) {
- header('Location: install/index.php');
- exit();
- }
+ const DB_SERVER = 'localhost';
+ const DB_SERVER_USERNAME = 'phoenix';
+ const DB_SERVER_PASSWORD = 'phoenix';
+ const DB_DATABASE = 'phoenix';
diff --git a/includes/languages/czech.php b/includes/languages/czech.php
new file mode 100644
index 000000000..3d37925a2
--- /dev/null
+++ b/includes/languages/czech.php
@@ -0,0 +1,414 @@
+ tag
+const HTML_PARAMS = 'dir="ltr" lang="cs"';
+
+// charset for web pages and emails
+const CHARSET = 'utf-8';
+
+// page title
+define('TITLE', STORE_NAME);
+
+// header text in includes/header.php
+const HEADER_TITLE_CREATE_ACCOUNT = 'Založit účet';
+const HEADER_TITLE_MY_ACCOUNT = 'můj účet';
+const HEADER_TITLE_CART_CONTENTS = 'košík';
+const HEADER_TITLE_CHECKOUT = 'pokladna';
+const HEADER_TITLE_TOP = 'shop-name.domain ';
+const HEADER_TITLE_CATALOG = 'Home';
+const HEADER_TITLE_LOGOFF = 'Odhlásit';
+const HEADER_TITLE_LOGIN = 'Přihlásit';
+
+// text for gender
+const MALE = 'Muž ';
+const FEMALE = 'Žena ';
+const MALE_ADDRESS = 'Pan';
+const FEMALE_ADDRESS = 'Paní';
+
+// text for date of birth example
+const DOB_FORMAT_STRING = 'mm/dd/yyyy';
+
+// checkout procedure text
+const CHECKOUT_BAR_DELIVERY = 'Dodání';
+const CHECKOUT_BAR_PAYMENT = 'Platba';
+const CHECKOUT_BAR_CONFIRMATION = 'Potvrdit';
+const CHECKOUT_BAR_FINISHED = 'Dokončeno!';
+
+// pull down default text
+const PULL_DOWN_DEFAULT = 'vyberte';
+const TYPE_BELOW = 'Napsat níže';
+
+// javascript messages
+const JS_ERROR = 'Ve formuláři je chyba.\n\nOpravte následující:\n\n';
+
+define('JS_REVIEW_TEXT', '* The \'Review Text\' musí mít nejméně ' . REVIEW_TEXT_MIN_LENGTH . ' znaků.\n');
+const JS_REVIEW_RATING = '* Přepočítat zboží\n';
+
+const JS_ERROR_NO_PAYMENT_MODULE_SELECTED = '* Prosíme vyberte typ platby.\n';
+
+const JS_ERROR_SUBMITTED = 'Formulář může být odeslán. Zmáčkněte Ok a vyčkejte.';
+
+const ERROR_NO_PAYMENT_MODULE_SELECTED = 'Vyberte způsob platby Vaší objednávky.';
+
+const CATEGORY_COMPANY = 'Společnost';
+const CATEGORY_PERSONAL = 'Osobní';
+const CATEGORY_ADDRESS = 'Adresa';
+const CATEGORY_CONTACT = 'Napište nám';
+const CATEGORY_OPTIONS = 'Nastavení';
+const CATEGORY_PASSWORD = 'Heslo';
+
+const ENTRY_COMPANY = 'Společnost:';
+const ENTRY_COMPANY_TEXT = '';
+const ENTRY_GENDER = 'Pohlaví:';
+const ENTRY_GENDER_ERROR = 'Vyberte pohlaví';
+const ENTRY_GENDER_TEXT = '';
+const ENTRY_FIRST_NAME = 'Jméno:';
+define('ENTRY_FIRST_NAME_ERROR', 'Vaše jméno musí mít nejméně ' . ENTRY_FIRST_NAME_MIN_LENGTH . ' znaků.');
+const ENTRY_FIRST_NAME_TEXT = '';
+const ENTRY_LAST_NAME = 'Příjmení:';
+define('ENTRY_LAST_NAME_ERROR', 'Vaše příjmení musí mít nejméně ' . ENTRY_LAST_NAME_MIN_LENGTH . ' znaků.');
+const ENTRY_LAST_NAME_TEXT = '';
+const ENTRY_DATE_OF_BIRTH = 'Datum narození:';
+const ENTRY_DATE_OF_BIRTH_ERROR = 'Datum narození ve tvaru: MM/DD/YYYY (eg 05/21/1970)';
+const ENTRY_DATE_OF_BIRTH_TEXT = '* (např. 05/21/1970)';
+const ENTRY_EMAIL_ADDRESS = 'E-Mail:';
+define('ENTRY_EMAIL_ADDRESS_ERROR', 'E-Mail musí mít nejméně ' . ENTRY_EMAIL_ADDRESS_MIN_LENGTH . ' znaků.');
+const ENTRY_EMAIL_ADDRESS_CHECK_ERROR = 'E-Mail je špatně, opravte jej.';
+const ENTRY_EMAIL_ADDRESS_ERROR_EXISTS = 'Váš E-Mail je již v databázi.';
+const ENTRY_EMAIL_ADDRESS_TEXT = '';
+const ENTRY_STREET_ADDRESS = 'Ulice:';
+define('ENTRY_STREET_ADDRESS_ERROR', 'Ulice musí mít nejméně ' . ENTRY_STREET_ADDRESS_MIN_LENGTH . ' znaků.');
+const ENTRY_STREET_ADDRESS_TEXT = '';
+const ENTRY_SUBURB = 'Čtvrť:';
+const ENTRY_SUBURB_TEXT = '';
+const ENTRY_POST_CODE = 'PSČ:';
+define('ENTRY_POST_CODE_ERROR', 'PSČ musí mít nejméně ' . ENTRY_POSTCODE_MIN_LENGTH . ' znaků.');
+const ENTRY_POST_CODE_TEXT = '';
+const ENTRY_CITY = 'Město:';
+define('ENTRY_CITY_ERROR', 'Město musí mít nejméně ' . ENTRY_CITY_MIN_LENGTH . ' znaků.');
+const ENTRY_CITY_TEXT = '';
+const ENTRY_STATE = 'Stát:';
+define('ENTRY_STATE_ERROR', 'Stát musí mít nejméně ' . ENTRY_STATE_MIN_LENGTH . ' znaků.');
+const ENTRY_STATE_ERROR_SELECT = 'Please select a state from the States pull down menu.';
+const ENTRY_STATE_TEXT = '';
+const ENTRY_COUNTRY = 'Země:';
+const ENTRY_COUNTRY_ERROR = 'Vyberte zemi v menu.';
+const ENTRY_COUNTRY_TEXT = '';
+const ENTRY_TELEPHONE_NUMBER = 'Telefon:';
+define('ENTRY_TELEPHONE_NUMBER_ERROR', 'Telefonní číslo musí mít nejméně ' . ENTRY_TELEPHONE_MIN_LENGTH . ' znaků.');
+const ENTRY_TELEPHONE_NUMBER_TEXT = '';
+const ENTRY_FAX_NUMBER = 'Fax:';
+const ENTRY_FAX_NUMBER_TEXT = '';
+const ENTRY_NEWSLETTER = 'Newsletter:';
+const ENTRY_NEWSLETTER_TEXT = '';
+const ENTRY_NEWSLETTER_YES = 'Přihlásit k zasílání';
+const ENTRY_NEWSLETTER_NO = 'Odhlásit zasílání';
+const ENTRY_PASSWORD = 'Heslo:';
+define('ENTRY_PASSWORD_ERROR', 'Vaše heslo musí mít nejméně ' . ENTRY_PASSWORD_MIN_LENGTH . ' znaků.');
+const ENTRY_PASSWORD_ERROR_NOT_MATCHING = 'Hesla nejsou stejná.';
+const ENTRY_PASSWORD_TEXT = '';
+const ENTRY_PASSWORD_CONFIRMATION = 'Heslo znovu:';
+const ENTRY_PASSWORD_CONFIRMATION_TEXT = '';
+const ENTRY_PASSWORD_CURRENT = 'Původní heslo:';
+const ENTRY_PASSWORD_CURRENT_TEXT = '';
+define('ENTRY_PASSWORD_CURRENT_ERROR', 'Vaše heslo musí mít nejméně ' . ENTRY_PASSWORD_MIN_LENGTH . ' znaků.');
+const ENTRY_PASSWORD_NEW = 'Nové heslo:';
+const ENTRY_PASSWORD_NEW_TEXT = '';
+define('ENTRY_PASSWORD_NEW_ERROR', 'Vaše nové heslo musí mít nejméně ' . ENTRY_PASSWORD_MIN_LENGTH . ' znaků.');
+const ENTRY_PASSWORD_NEW_ERROR_NOT_MATCHING = 'Hesla nejsou stejná.';
+const PASSWORD_HIDDEN = '--HIDDEN--';
+
+// constants for use in tep_prev_next_display function
+const TEXT_RESULT_PAGE = 'Celkem stránek:';
+const TEXT_DISPLAY_NUMBER_OF_PRODUCTS = 'Zobrazeno %d to %d (of %d produktů)';
+const TEXT_DISPLAY_NUMBER_OF_ORDERS = 'Zobrazeno %d to %d (of %d objednávek)';
+const TEXT_DISPLAY_NUMBER_OF_REVIEWS = 'Zobrazeno %d to %d (of %d hodnocení)';
+const TEXT_DISPLAY_NUMBER_OF_PRODUCTS_NEW = 'Zobrazeno %d to %d (of %d novinek)';
+const TEXT_DISPLAY_NUMBER_OF_SPECIALS = 'Zobrazeno %d to %d (of %d slev)';
+
+const PREVNEXT_TITLE_FIRST_PAGE = 'První stránka';
+const PREVNEXT_TITLE_PREVIOUS_PAGE = 'Předchozí stránka';
+const PREVNEXT_TITLE_NEXT_PAGE = 'Další stránka';
+const PREVNEXT_TITLE_LAST_PAGE = 'Poslední stránka';
+const PREVNEXT_TITLE_PAGE_NO = 'Stránka %d';
+const PREVNEXT_TITLE_PREV_SET_OF_NO_PAGE = 'Předcházejících %d stránek';
+const PREVNEXT_TITLE_NEXT_SET_OF_NO_PAGE = 'Dalších %d stránek';
+const PREVNEXT_BUTTON_FIRST = '<<první';
+const PREVNEXT_BUTTON_PREV = '[<< předchozí]';
+const PREVNEXT_BUTTON_NEXT = '[další >>]';
+const PREVNEXT_BUTTON_LAST = 'poslední>>';
+
+const IMAGE_BUTTON_ADD_ADDRESS = 'Přidat adresu';
+const IMAGE_BUTTON_ADDRESS_BOOK = 'Adresář';
+const IMAGE_BUTTON_BACK = 'Zpět';
+const IMAGE_BUTTON_BUY_NOW = 'objednat';
+const IMAGE_BUTTON_CHANGE_ADDRESS = 'Změnit adresu';
+const IMAGE_BUTTON_CHECKOUT = 'Pokladna';
+const IMAGE_BUTTON_CONFIRM_ORDER = 'Potvrdit závaznou objednávku';
+const IMAGE_BUTTON_CONTINUE = 'pokračovat';
+const IMAGE_BUTTON_CONTINUE_SHOPPING = 'Pokračovat v nákupu';
+const IMAGE_BUTTON_DELETE = 'Smazat';
+const IMAGE_BUTTON_EDIT_ACCOUNT = 'Upravit účet';
+const IMAGE_BUTTON_HISTORY = 'Historie objednávek';
+const IMAGE_BUTTON_LOGIN = 'přihlásit';
+const IMAGE_BUTTON_IN_CART = 'Koupit';
+const IMAGE_BUTTON_NOTIFICATIONS = 'Zpráva';
+const IMAGE_BUTTON_QUICK_FIND = 'Rychlé hledání';
+const IMAGE_BUTTON_REMOVE_NOTIFICATIONS = 'Smazat zprávu';
+const IMAGE_BUTTON_REVIEWS = 'Hodnocení';
+const IMAGE_BUTTON_SEARCH = 'Vyhledat';
+const IMAGE_BUTTON_SHIPPING_OPTIONS = 'Doprava';
+const IMAGE_BUTTON_TELL_A_FRIEND = 'Dejte vědět příteli';
+const IMAGE_BUTTON_UPDATE = 'obnovit';
+const IMAGE_BUTTON_UPDATE_CART = 'Obnovit košík';
+const IMAGE_BUTTON_WRITE_REVIEW = 'Zapsat hodnocení';
+
+const SMALL_IMAGE_BUTTON_DELETE = 'Smazat';
+const SMALL_IMAGE_BUTTON_EDIT = 'Upravit';
+const SMALL_IMAGE_BUTTON_VIEW = 'Zobrazit';
+const SMALL_IMAGE_BUTTON_BUY = 'Koupit';
+
+const ICON_ARROW_RIGHT = 'dále';
+const ICON_CART = 'v košíku';
+const ICON_ERROR = 'chyba';
+const ICON_SUCCESS = 'správně';
+const ICON_WARNING = 'Pozor';
+
+const TEXT_GREETING_PERSONAL = 'Vítejte zpět %s! Chcete se podívat jaké máme novinky od Vašeho posledního nákupu?';
+const TEXT_GREETING_PERSONAL_RELOGON = 'Pokud ne, %s, prosíme přihlaste se na váš účet. ';
+const TEXT_GREETING_GUEST = 'Vítejte návštěvníku! Chcete se přihlásit ? nebo teprve zaregistrovat ?';
+
+const TEXT_SORT_PRODUCTS = 'seřadit';
+const TEXT_DESCENDINGLY = 'sestupně';
+const TEXT_ASCENDINGLY = 'vzestupně';
+const TEXT_BY = ' by ';
+
+const TEXT_REVIEW_BY = 'od %s';
+const TEXT_REVIEW_WORD_COUNT = '%s slov';
+const TEXT_REVIEW_RATING = 'hodnocení: %s [%s]';
+const TEXT_REVIEW_DATE_ADDED = 'přidáno: %s';
+const TEXT_NO_REVIEWS = 'žádná nová hodnocení.';
+
+const TEXT_NO_NEW_PRODUCTS = 'žádné nové produkty.';
+
+const TEXT_UNKNOWN_TAX_RATE = 'Unknown tax rate';
+
+const TEXT_REQUIRED = 'je nutné vyplnit ';
+
+const ERROR_TEP_MAIL = 'TEP ERROR: Cannot send the email through the specified SMTP server. Please check your php.ini setting and correct the SMTP server if necessary. ';
+
+const TEXT_CCVAL_ERROR_INVALID_DATE = 'The expiry date entered for the credit card is invalid. Please check the date and try again.';
+const TEXT_CCVAL_ERROR_INVALID_NUMBER = 'The credit card number entered is invalid. Please check the number and try again.';
+const TEXT_CCVAL_ERROR_UNKNOWN_CARD = 'The first four digits of the number entered are: %s. If that number is correct, we do not accept that type of credit card. If it is wrong, please try again.';
+
+// category views
+const TEXT_VIEW = 'Zobrazit: ';
+const TEXT_VIEW_LIST = ' Seznam';
+const TEXT_VIEW_GRID = ' Grid';
+
+// search placeholder
+const TEXT_SEARCH_PLACEHOLDER = 'Vyhledávání';
+
+// message for required inputs
+const FORM_REQUIRED_INFORMATION = 'Nutno vyplnit';
+const FORM_REQUIRED_INPUT = ' ';
+
+// reviews
+const REVIEWS_TEXT_RATED = 'Hodnoceno %s s %s ';
+const REVIEWS_TEXT_AVERAGE = 'Hodnocení %s recenzí %s';
+const REVIEWS_TEXT_TITLE = 'Co říkají naši zákazníci...';
+
+// grid/list
+
+// moved from index
+const TABLE_HEADING_IMAGE = '';
+const TABLE_HEADING_MODEL = 'Model';
+const TABLE_HEADING_PRODUCTS = 'Název zboží';
+const TABLE_HEADING_MANUFACTURER = 'Výrobce';
+const TABLE_HEADING_QUANTITY = 'Množství';
+const TABLE_HEADING_PRICE = 'Cena';
+const TABLE_HEADING_WEIGHT = 'Váha';
+const TABLE_HEADING_BUY_NOW = 'Koupit';
+const TABLE_HEADING_LATEST_ADDED = 'Poslední zboží';
+const TABLE_HEADING_DATE_AVAILABLE = 'Nejnovější zboží';
+const TABLE_HEADING_CUSTOM_DATE = 'Podle data';
+const TABLE_HEADING_SORT_ORDER = 'Pořadí';
+
+// product notifications
+const PRODUCT_SUBSCRIBED = '%s bylo přidána do vašeho seznamu';
+const PRODUCT_UNSUBSCRIBED = '%s bylo odebráno z vašeho seznamu';
+const PRODUCT_ADDED = '%s přidáno do vašeho košíku';
+const PRODUCT_REMOVED = '%s odebráno z vašeho košíku';
+
+// bootstrap helper
+const MODULE_CONTENT_BOOTSTRAP_ROW_DESCRIPTION = '';
+
+// sorting product_listing module
+
+/*
+************************************************************************
+************** Custom Filenames can be defined below here **************
+************** Raymond Burns **************
+************************************************************************
+*/
+// SEO Header Tags Reloaded
+ //header titles
+const HEADER_CART_CONTENTS = ' %s kusů ';
+const HEADER_CART_NO_CONTENTS = ' košík ';
+const HEADER_ACCOUNT_LOGGED_OUT = ' přihlásit se/registrace ';
+const HEADER_ACCOUNT_LOGGED_IN = ' %s ';
+const HEADER_SITE_SETTINGS = ' Site Settings ';
+const HEADER_TOGGLE_NAV = 'Toggle Navigation';
+const HEADER_HOME = ' Home ';
+const HEADER_WHATS_NEW = ' Nové zboží ';
+const HEADER_SPECIALS = ' Speciální nabídky ';
+const HEADER_REVIEWS = ' Hodnocení ';
+// header dropdowns
+const HEADER_ACCOUNT_LOGIN = ' Přihlásit';
+const HEADER_ACCOUNT_LOGOFF = ' Odhlásit';
+const HEADER_ACCOUNT = 'Můj účet';
+const HEADER_ACCOUNT_HISTORY = 'Moje objednávky';
+const HEADER_ACCOUNT_EDIT = 'Moje údaje';
+const HEADER_ACCOUNT_ADDRESS_BOOK = 'Můj Adresář';
+const HEADER_ACCOUNT_PASSWORD = 'Heslo';
+const HEADER_ACCOUNT_REGISTER = ' Registrace';
+const HEADER_CART_HAS_CONTENTS = '%s item(s), %s';
+const HEADER_CART_VIEW_CART = 'Košík';
+const HEADER_CART_CHECKOUT = ' Pokladna';
+const USER_LOCALIZATION = 'L: %s C: %s';
+
+// CCGV
+const VOUCHER_BALANCE = 'Voucher Balance';
+const BOX_HEADING_GIFT_VOUCHER = 'Dárkový poukaz účet';
+const GV_FAQ = 'Gift Voucher FAQ';
+const IMAGE_REDEEM_VOUCHER = 'Redeem';
+const ERROR_REDEEMED_AMOUNT = 'Congratulations, you have redeemed ';
+const ERROR_NO_REDEEM_CODE = 'You did not enter a redeem code.';
+const ERROR_NO_INVALID_REDEEM_GV = 'nesprávný kód';
+const TABLE_HEADING_CREDIT = ' ';
+const GV_HAS_VOUCHERA = 'Máte finanční prostředky na vašem účtu dárkového poukazu. If you want you can send those funds by to someone';
+const ENTRY_AMOUNT_CHECK_ERROR = 'Nemáte dostatek finančních prostředků.';
+const BOX_SEND_TO_FRIEND = 'Zaslat dárkový poukaz';
+const VOUCHER_REDEEMED = 'Voucher Redeemed';
+const CART_COUPON = 'Kupon :';
+const CART_COUPON_INFO = 'další info';
+// MailManager
+const BOX_HEADING_MAIL_MANAGER = 'Mail Manager';
+const BOX_MM_BULKMAIL = 'BulkMail Manager';
+const BOX_MM_TEMPLATES = 'Template Manager';
+const BOX_MM_EMAIL = 'Zaslat e-mail';
+const BOX_MM_RESPONSEMAIL = 'Response Mail';
+//pure:new link to advanced search
+const IMAGE_BUTTON_ADVANCED_SEARCH_LINK = 'podrobné';
+//VAT numbber
+const ENTRY_VAT_NUMBER_TEXT_2 = '';
+const ENTRY_COMPANY_NUMBER_TEXT_2 = '';
+
+/**** BEGIN ARTICLE MANAGER ****/
+const BOX_HEADING_ARTICLES = 'Články';
+const BOX_ALL_ARTICLES = 'Všechny články';
+const BOX_ALL_BLOG_ARTICLES = 'Všechny blogy';
+const BOX_ARTICLE_SUBMIT = 'Odeslat článek';
+const BOX_ARTICLE_TOPICS = 'Všechny kategorie';
+const BOX_NEW_ARTICLES = 'Nový článek';
+const TEXT_ARTICLE_SEARCH = 'Vyhledávání v článcích';
+const TEXT_ARTICLE_SEARCH_STRING = 'hledat článek';
+const TEXT_DISPLAY_NUMBER_OF_ARTICLES = 'Zobrazuji %d až %d (z %d článků)';
+const TEXT_DISPLAY_NUMBER_OF_ARTICLES_NEW = 'Zobrazuji %d až %d (z %d nových článků)';
+const TEXT_ARTICLES = 'Níže je seznam všech článků od nejnovějších k nejstarším.';
+const TABLE_HEADING_AUTHOR = 'Autor';
+const TABLE_HEADING_ABSTRACT = 'Shrnutí';
+const TEXT_PXSELL_ARTICLES = 'Příbuzné články';
+const BOX_HEADING_AUTHORS = 'Články podle autora';
+const BOX_ARTICLES_BLOG_COMMENTS = 'Diskuse k článkům';
+const NAVBAR_TITLE_DEFAULT = 'Články';
+const BOX_RSS_ARTICLES = 'RSS Feed k článkům';
+const BOX_UPCOMING_ARTICLES = 'Připravované články';
+const BOX_HEADING_TELL_A_FRIEND = 'Poslat na e-mail';
+/**** END ARTICLE MANAGER ****/
+
+/*** Begin Header Tags SEO ***/
+const BOX_HEADING_HEADERTAGS_TAGCLOUD = 'Populární vyhledávání';
+const TEXT_SEE_MORE = 'více';
+const TEXT_SEE_MORE_FULL = 'více o %s';
+const HTS_OG_AVAILABLE_STOCK = 'Sostupnost skladem';
+const HTS_OG_PRICE = 'Cena';
+/*** End Header Tags SEO ***/
+
+//pure
+const HEADER_AUTHORS = 'AUTOŘI';
+const HEADER_NEWS = 'AKTUALITY';
+const HEADER_ABOUT_US = 'O NÁS';
+const XHEADER_CONTACT_US = 'KONTAKTY';
+const HEADER_ADVANCED_SEARCH = 'podrobné vyhledávání';
+const SUPPORT = 'Podpora';
+const CART = 'Košík';
+const CHECKOUT = 'Pokladna';
+const ACCOUNT = 'Můj účet';
+
+// noscript helper
+const TEXT_NOSCRIPT = <<<'EOT'
+Zdá se že máte JavaScript vypnuty ve svém prohlížeč.
+Musíte mít JavaScript ve svém prohlížeči to utilize the functionality of this website.
+Click here for instructions on enabling javascript in your browser .
+EOT;
+
+
+// sitewide is-product
+const IS_PRODUCT_SHOW_PRICE = '%s';
+const IS_PRODUCT_SHOW_PRICE_SPECIAL = '%s now %s ';
+const IS_PRODUCT_BUTTON_BUY = ' ';
+const IS_PRODUCT_BUTTON_VIEW = ' View';
+
+
+
+//static pages
+const PRODUCTS_NEW_PAGE = 'novinky';
+const QUICK_SHOP_PAGE = 'quick-shop';
+
+const PASSWORD = 'Heslo';
+const LOGIN = 'Přihlášení';
diff --git a/includes/languages/czech/account.php b/includes/languages/czech/account.php
new file mode 100644
index 000000000..5f563039e
--- /dev/null
+++ b/includes/languages/czech/account.php
@@ -0,0 +1,64 @@
+
diff --git a/includes/languages/czech/account_history_info.php b/includes/languages/czech/account_history_info.php
new file mode 100644
index 000000000..7946d5e19
--- /dev/null
+++ b/includes/languages/czech/account_history_info.php
@@ -0,0 +1,41 @@
+
diff --git a/includes/languages/czech/account_newsletters.php b/includes/languages/czech/account_newsletters.php
new file mode 100644
index 000000000..ac852037c
--- /dev/null
+++ b/includes/languages/czech/account_newsletters.php
@@ -0,0 +1,23 @@
+
diff --git a/includes/languages/czech/account_notifications.php b/includes/languages/czech/account_notifications.php
new file mode 100644
index 000000000..e69ebb5e2
--- /dev/null
+++ b/includes/languages/czech/account_notifications.php
@@ -0,0 +1,37 @@
+ Chcete-li být informováni o všech změnách, vyberte položku Všechny změny .',
+ true);
+
+const GLOBAL_NOTIFICATIONS_TITLE = 'Všechny změny';
+define('GLOBAL_NOTIFICATIONS_DESCRIPTION',
+ 'Upozornit při změnách u všech produktů.');
+
+const NOTIFICATIONS_TITLE = 'Vybrané změny';
+define('NOTIFICATIONS_DESCRIPTION',
+ 'Nechcete-li již být informováni o změnách vybraných produktů, zaškrtněte v menu a pokračujte.',
+ true);
+define('NOTIFICATIONS_NON_EXISTING',
+ 'Nemáte vybráno žádné upozornění. Chcete-li přidat konkrétní výrobek, zaškrtněte v menu zasílání informací.',
+ true);
+
+define('SUCCESS_NOTIFICATIONS_UPDATED',
+ 'Změna v zasílání upozornění potvrzena.');
+?>
diff --git a/includes/languages/czech/account_password.php b/includes/languages/czech/account_password.php
new file mode 100644
index 000000000..aa6c2a866
--- /dev/null
+++ b/includes/languages/czech/account_password.php
@@ -0,0 +1,23 @@
+
diff --git a/includes/languages/czech/address_book.php b/includes/languages/czech/address_book.php
new file mode 100644
index 000000000..f826ac6a8
--- /dev/null
+++ b/includes/languages/czech/address_book.php
@@ -0,0 +1,30 @@
+ Také se použije pro výpočet daně a způsobu dodání.',
+ true);
+
+const ADDRESS_BOOK_TITLE = 'Vložené adresy';
+
+const PRIMARY_ADDRESS = '(Hlavní adresa)';
+
+define('TEXT_MAXIMUM_ENTRIES',
+ 'POZNÁMKA: Maximálně zde můžete mít uloženo %s addres.',
+ true);
+?>
diff --git a/includes/languages/czech/address_book_process.php b/includes/languages/czech/address_book_process.php
new file mode 100644
index 000000000..da4bc2651
--- /dev/null
+++ b/includes/languages/czech/address_book_process.php
@@ -0,0 +1,47 @@
+ Pomoc s vyhledáváním',
+ true);
+
+const TEXT_ALL_CATEGORIES = 'Všechny kategorie';
+const TEXT_ALL_MANUFACTURERS = 'Všichni výrobci';
+
+const HEADING_SEARCH_HELP = 'Pomoc s vyhledáváním';
+const TEXT_SEARCH_HELP = '';
+// 'Klíčová slova můžete oddělovat AND a/nebo OR pro lepší výsledky. For example, Microsoft AND mouse would generate a result set that contain both words. However, for mouse OR keyboard , the result set returned would contain both or either words. Exact matches can be searched for by enclosing keywords in double-quotes. For example, "notebook computer" would generate a result set which match the exact string. Brackets can be used for further c. For example, Microsoft and (keyboard or mouse or "visual basic") .', true);
+const TEXT_CLOSE_WINDOW = 'zavřít okno [x]';
+
+define('TEXT_NO_PRODUCTS',
+ 'Produkt dle zadaných kritérí nebyl nalezen. Zkuste upravit vyhledávací dotaz.',
+ true);
+
+const ERROR_AT_LEAST_ONE_INPUT = 'Musíte vyplnit jedno z polí.';
+const ERROR_INVALID_FROM_DATE = 'špatně datum Od.';
+const ERROR_INVALID_TO_DATE = 'špatně datum Do.';
+define('ERROR_TO_DATE_LESS_THAN_FROM_DATE',
+ 'Datum Do musí být vyšší než datum Od.');
+const ERROR_PRICE_FROM_MUST_BE_NUM = 'cena Od musí být číslo.';
+const ERROR_PRICE_TO_MUST_BE_NUM = 'cena musí být číslo.';
+define('ERROR_PRICE_TO_LESS_THAN_PRICE_FROM',
+ 'cena Do musí být vyšší než cena Od.');
+const ERROR_INVALID_KEYWORDS = 'špatné klíčové slovo.';
+//pure:new
+const IMAGE_BUTTON_BACK_ADVANCED_SEARCH = 'zpět na podrobné vyhledávání';
+?>
diff --git a/includes/languages/czech/article_manager/article-submit.php b/includes/languages/czech/article_manager/article-submit.php
new file mode 100644
index 000000000..a0a228b56
--- /dev/null
+++ b/includes/languages/czech/article_manager/article-submit.php
@@ -0,0 +1,43 @@
+
diff --git a/includes/languages/czech/article_manager/article-topics.php b/includes/languages/czech/article_manager/article-topics.php
new file mode 100644
index 000000000..948e5a7cb
--- /dev/null
+++ b/includes/languages/czech/article_manager/article-topics.php
@@ -0,0 +1,19 @@
+
diff --git a/includes/languages/czech/article_manager/article_blog.php b/includes/languages/czech/article_manager/article_blog.php
new file mode 100644
index 000000000..2f5d43c60
--- /dev/null
+++ b/includes/languages/czech/article_manager/article_blog.php
@@ -0,0 +1,48 @@
+web page .');
+define('TEXT_DATE_ADDED', 'This article was published on %s.');
+define('TEXT_DATE_AVAILABLE', 'This article will be published on %s. ');
+define('TEXT_BY_AM', 'by ');
+
+define('BOX_TEXT_TELL_A_FRIEND', 'Tell a friend');
+define('BOX_TEXT_TELL_A_FRIEND_TEXT', 'email address');
+define('TEXT_TELL_A_FRIEND', 'Tell a friend about this article:');
+define('TEXT_TELL_A_FRIEND_SUCCESS', 'The email has been successfully sent to your friend.');
+define('TEXT_TELL_A_FRIEND_SUBJECT', 'Your firend thought you would enjoy this article');
+define('TEXT_TELL_A_FRIEND_MESSAGE', "Hello,\n\n, Your friend, %s, wants to share this article with you.\n\n");
+
+define('TEXT_COMMENT', 'Comments:');
+define('TEXT_POST_A_COMMENT', 'Post A Comment');
+define('TEXT_TOTAL_COMMENT', 'comment');
+define('TEXT_TOTAL_COMMENTS', 'comments');
+define('TEXT_TOTAL_COMMENTS_BE_FIRST', 'Be the first to post a comment');
+define('TEXT_XSELL_ARTICLES', 'Products related to this article:');
+define('TEXT_WHO_SAID', '%s said on %s');
+
+define('IMAGE_PRINT_ARTICLE', 'Print This Article');
+define('IMAGE_BUTTON_SUBMIT', 'Submit Comment');
+define('IMAGE_BUTTON_SEND_EMAIL', 'Send');
+
+define('BLOG_EMAIL_TEXT_BODY', 'A reply has been posted to the blog article %s by %s.');
+define('BLOG_EMAIL_TEXT_SUBJECT', 'A blog article has been submitted for %s');
+define('BLOG_TO_BE_APPROVED', 'Thank you for your comment. We will review it within 24 hours.');
+
+define('ERROR_EMAIL_INVALID', 'The entered details for the email are not valid. Please try again.');
+define('ERROR_EMAIL_INVALID_CUSTOMER', 'Please log in to send emails');
+define('ERROR_NO_COMMENT', 'A comment is required.');
diff --git a/includes/languages/czech/article_manager/article_info.php b/includes/languages/czech/article_manager/article_info.php
new file mode 100644
index 000000000..e84a210cd
--- /dev/null
+++ b/includes/languages/czech/article_manager/article_info.php
@@ -0,0 +1,35 @@
+web page .');
+define('TEXT_DATE_ADDED', 'This article was published on %s.');
+define('TEXT_DATE_AVAILABLE', 'This article will be published on %s. ');
+define('TEXT_BY_AM', 'by ');
+define('TEXT_CLOSE_POPUP', 'Close Window');
+define('TEXT_COURTESY_OF', 'Printed with permission from ' . STORE_NAME);
+define('TEXT_CURRENT_REVIEWS', 'Current Reviews:');
+
+define('BOX_TEXT_TELL_A_FRIEND', 'Tell a friend');
+define('BOX_TEXT_TELL_A_FRIEND_TEXT', 'email address');
+define('TEXT_TELL_A_FRIEND', 'Tell a friend about this article:');
+define('TEXT_TELL_A_FRIEND_SUCCESS', 'The email has been successfully sent to your friend.');
+define('TEXT_TELL_A_FRIEND_SUBJECT', 'Your firend thought you would enjoy this article');
+define('TEXT_TELL_A_FRIEND_MESSAGE', "Hello,\n\n, Your friend, %s, wants to share this article with you.\n\n");
+
+define('TEXT_XSELL_ARTICLES', 'Products related to this article:');
+define('IMAGE_PRINT_ARTICLE', 'Print This Article');
+define('IMAGE_BUTTON_SEND_EMAIL', 'Send');
+
+define('ERROR_EMAIL_INVALID', 'The entered details for the email are not valid. Please try again.');
+define('ERROR_EMAIL_INVALID_CUSTOMER', 'Please log in to send emails');
diff --git a/includes/languages/czech/article_manager/article_manager.php b/includes/languages/czech/article_manager/article_manager.php
new file mode 100644
index 000000000..3d2233ee9
--- /dev/null
+++ b/includes/languages/czech/article_manager/article_manager.php
@@ -0,0 +1,23 @@
+%d to %d (of %d articles)');
+define('TEXT_DISPLAY_NUMBER_OF_ARTICLES_NEW', 'Displaying %d to %d (of %d new articles)');
+define('TEXT_ARTICLES', 'Below is a list of articles with the most recent ones listed first.');
+define('TABLE_HEADING_AUTHOR', 'Author');
+define('TABLE_HEADING_ABSTRACT', 'Abstract');
+define('TEXT_PXSELL_ARTICLES', 'Related Articles');
+define('BOX_HEADING_AUTHORS', 'Articles by Author');
+define('BOX_ARTICLES_BLOG_COMMENTS', 'Blog Comments');
+define('NAVBAR_TITLE_DEFAULT', 'Articles');
+define('BOX_RSS_ARTICLES', 'Articles RSS Feed');
+define('BOX_UPCOMING_ARTICLES', 'Upcoming Articles');
+define('BOX_HEADING_TELL_A_FRIEND', 'Email Friend');
+
+define('ARTICLE_VIEWED_COUNT', '(viewed %d times)');
\ No newline at end of file
diff --git a/includes/languages/czech/article_manager/article_manager_search_result.php b/includes/languages/czech/article_manager/article_manager_search_result.php
new file mode 100644
index 000000000..2105793d5
--- /dev/null
+++ b/includes/languages/czech/article_manager/article_manager_search_result.php
@@ -0,0 +1,23 @@
+...more');
+?>
diff --git a/includes/languages/czech/article_manager/articles.php b/includes/languages/czech/article_manager/articles.php
new file mode 100644
index 000000000..883bdc584
--- /dev/null
+++ b/includes/languages/czech/article_manager/articles.php
@@ -0,0 +1,59 @@
+web page.');
+} elseif ($topic_depth == 'top') {
+ define('HEADING_TITLE', 'All Articles');
+ define('HEADING_TITLE_BLOG', 'All Blog Articles');
+ define('TEXT_ALL_ARTICLES', 'Below is a list of all articles with the most recent ones listed first.');
+ define('TEXT_ARTICLES', 'Below is a list of all articles with the most recent ones listed first.');
+ define('TEXT_CURRENT_ARTICLES', 'Current Articles');
+ define('TEXT_UPCOMING_ARTICLES', 'Upcoming Articles');
+ define('TEXT_NO_ARTICLES', 'There are currently no articles listed.');
+ define('TEXT_DATE_ADDED', 'Published:');
+ define('TEXT_DATE_EXPECTED', 'Expected:');
+ define('TEXT_AUTHOR', 'Author:');
+ define('TEXT_TOPIC', 'Topic:');
+ define('TEXT_BY_AM', 'by');
+ define('TEXT_READ_MORE', 'Read More...');
+} elseif ($topic_depth == 'nested') {
+ define('HEADING_TITLE', 'Articles');
+}
+
+ define('TEXT_CURRENT_BLOG_ARTICLES', 'Current Blog Articles');
diff --git a/includes/languages/czech/article_manager/articles_new.php b/includes/languages/czech/article_manager/articles_new.php
new file mode 100644
index 000000000..d59a487fa
--- /dev/null
+++ b/includes/languages/czech/article_manager/articles_new.php
@@ -0,0 +1,24 @@
+.');
+define('TEXT_ARTICLES', sprintf(TEXT_NEW_ARTICLES, NEW_ARTICLES_DAYS_DISPLAY));
+define('TEXT_NO_NEW_ARTICLES', 'No new articles have been added in the last %s days.');
+define('TEXT_DATE_ADDED', 'Published:');
+define('TEXT_AUTHOR', 'Author:');
+define('TEXT_TOPIC', 'Topic:');
+define('TEXT_BY_AM', 'by');
+define('TEXT_READ_MORE', 'Read More');
+?>
diff --git a/includes/languages/czech/article_reviews.php b/includes/languages/czech/article_reviews.php
new file mode 100644
index 000000000..cb26ba301
--- /dev/null
+++ b/includes/languages/czech/article_reviews.php
@@ -0,0 +1,21 @@
+
diff --git a/includes/languages/czech/article_reviews_info.php b/includes/languages/czech/article_reviews_info.php
new file mode 100644
index 000000000..a52eb7cd0
--- /dev/null
+++ b/includes/languages/czech/article_reviews_info.php
@@ -0,0 +1,21 @@
+
diff --git a/includes/languages/czech/article_reviews_write.php b/includes/languages/czech/article_reviews_write.php
new file mode 100644
index 000000000..f53a7de1d
--- /dev/null
+++ b/includes/languages/czech/article_reviews_write.php
@@ -0,0 +1,24 @@
+Poor ');
+define('TEXT_GOOD', 'Excellent ');
+
+?>
diff --git a/includes/languages/czech/article_rss.php b/includes/languages/czech/article_rss.php
new file mode 100644
index 000000000..32cd941cf
--- /dev/null
+++ b/includes/languages/czech/article_rss.php
@@ -0,0 +1,15 @@
+
diff --git a/includes/languages/czech/checkout_confirmation.php b/includes/languages/czech/checkout_confirmation.php
new file mode 100644
index 000000000..465871341
--- /dev/null
+++ b/includes/languages/czech/checkout_confirmation.php
@@ -0,0 +1,31 @@
+
diff --git a/includes/languages/czech/checkout_shipping.php b/includes/languages/czech/checkout_shipping.php
new file mode 100644
index 000000000..d58779169
--- /dev/null
+++ b/includes/languages/czech/checkout_shipping.php
@@ -0,0 +1,37 @@
+
diff --git a/includes/languages/czech/checkout_success.php b/includes/languages/czech/checkout_success.php
new file mode 100644
index 000000000..83d2a1045
--- /dev/null
+++ b/includes/languages/czech/checkout_success.php
@@ -0,0 +1,18 @@
+
\ No newline at end of file
diff --git a/includes/languages/czech/contact_us.php b/includes/languages/czech/contact_us.php
new file mode 100644
index 000000000..1feba4cc5
--- /dev/null
+++ b/includes/languages/czech/contact_us.php
@@ -0,0 +1,25 @@
+
diff --git a/includes/languages/czech/cookie_usage.php b/includes/languages/czech/cookie_usage.php
new file mode 100644
index 000000000..1de4435c5
--- /dev/null
+++ b/includes/languages/czech/cookie_usage.php
@@ -0,0 +1,22 @@
+
diff --git a/includes/languages/czech/create_account.php b/includes/languages/czech/create_account.php
new file mode 100644
index 000000000..842c12812
--- /dev/null
+++ b/includes/languages/czech/create_account.php
@@ -0,0 +1,63 @@
+poznámka: Pokud už máte účet, přihlašte se zde .',
+ true);
+
+define('EMAIL_SUBJECT', 'Vítáme Vás v eshopu '.STORE_NAME);
+define('EMAIL_GREET_MR', 'Vážený pane %s,'."\n\n");
+define('EMAIL_GREET_MS', 'Vážená paní %s,'."\n\n");
+define('EMAIL_GREET_NONE', 'Vážený %s'."\n\n");
+define('EMAIL_WELCOME',
+ 'Vítáme Vás v eshopu '.STORE_NAME.' .'."\n\n");
+define('EMAIL_TEXT',
+ 'Nyní můžete využívat veškeré služby našeho obchodu:'."\n\n".
+ 'Trvalý košík - Všechny produkty se automaticky ukádají a zůstanou v košíku, dokud je nekoupíte nebo neodstraníte.'."\n".
+ 'Adresář - Můžeme zaslat naše zboží na jakoukoli adresu! To je ideální pro odeslání dárků přímo obdarovávané osobě.'."\n".
+ 'Historie objednávek - Zobrazení historie nákupů, které jste v našem obchodě udělali.'."\n".
+ 'Recenze produktů - Podělte se o své názory na produkty s ostatními zákazníky.'."\n\n");
+define('EMAIL_CONTACT',
+ 'Pokud budete potřebovat pomoc, kontaktujte provozovatele obchodu '.STORE_OWNER_EMAIL_ADDRESS.'.'."\n\n");
+define('EMAIL_WARNING',
+ 'Pozor: Tento e-mail jste dostal(a) na základě registrace v našem obchodě. Pokud jste se v našem obchodě neregistroval(a), napište nám na adresu '.STORE_OWNER_EMAIL_ADDRESS.'.'."\n");
+/*
+ * ***********************************************************************
+ * ************* Custom Filenames can be defined below here **************
+ * ************* Raymond Burns **************
+ * ***********************************************************************
+ */
+// CCGV
+define('EMAIL_GV_INCENTIVE_HEADER',
+ "\n\n".'As part of our welcome to new customers, we have sent you an e-Gift Voucher worth %s',
+ true);
+define('EMAIL_GV_REDEEM',
+ 'The redeem code for the e-Gift Voucher is %s, you can enter the redeem code when checking out while making a purchase',
+ true);
+const EMAIL_GV_LINK = 'or by following this link ';
+define('EMAIL_COUPON_INCENTIVE_HEADER',
+ 'Congratulations, to make your first visit to our online shop a more rewarding experience we are sending you an e-Discount Coupon.'."\n".' Below are details of the Discount Coupon created just for you'."\n");
+define('EMAIL_COUPON_REDEEM',
+ 'To use the coupon enter the redeem code which is %s during checkout while making a purchase',
+ true);
+?>
diff --git a/includes/languages/czech/create_account_success.php b/includes/languages/czech/create_account_success.php
new file mode 100644
index 000000000..6d9c363c0
--- /dev/null
+++ b/includes/languages/czech/create_account_success.php
@@ -0,0 +1,19 @@
+kontaktní formulář nebo nám napište '.STORE_OWNER_EMAIL_ADDRESS.' . Potvrzení Vám bylo zasláno na e-mail. Pokud jej neobdržíte během jedné hodiny, kontaktujte nás.',
+ true);
+?>
diff --git a/includes/languages/czech/download.php b/includes/languages/czech/download.php
new file mode 100644
index 000000000..79173b819
--- /dev/null
+++ b/includes/languages/czech/download.php
@@ -0,0 +1,12 @@
+
diff --git a/includes/languages/czech/gdpr.php b/includes/languages/czech/gdpr.php
new file mode 100644
index 000000000..0c0fe9c35
--- /dev/null
+++ b/includes/languages/czech/gdpr.php
@@ -0,0 +1,15 @@
+
z8&5-ep_94mke1!r?fUxqEC2ui02lxd000DJun6X!y*T3{1Jz*02>`G#VLF!Pmx>Zw
zp6?dRZB?)M?1sEvt3fOpgE)fWkWe_E&cxs*3n&rLtaD1L5)fboI6*Ea5L_AIfH1qw
d=v!ck1>5iV^mUBykGV=s2nS4WZwCVr06U&sLOcKf
literal 0
HcmV?d00001
diff --git a/includes/languages/czech/index.php b/includes/languages/czech/index.php
new file mode 100644
index 000000000..d28c98969
--- /dev/null
+++ b/includes/languages/czech/index.php
@@ -0,0 +1,39 @@
+vyberte:';
+const TEXT_BUY = 'Koupit ';
+const TEXT_NOW = 'nyní';
+const TEXT_ALL_CATEGORIES = 'všechny kategorie';
+const TEXT_ALL_MANUFACTURERS = 'všichni výrobci';
+
+// seo
+if (($category_depth == 'top') && (!isset($_GET['manufacturers_id']))) {
+ define('META_SEO_TITLE', 'Index stránka název');
+ define('META_SEO_DESCRIPTION',
+ 'Toto je popis vašeho webu, který se má použít v popisovacím prvku META');
+ /*
+ keywords are USELESS unless you are selling into China and want to be listed in Baidu Search Engine
+ */
+ define('META_SEO_KEYWORDS',
+ 'tato, čárkami, oddělená, klíčová, slova, použitá v META keywords prvku');
+}
+
diff --git a/includes/languages/czech/info_shopping_cart.php b/includes/languages/czech/info_shopping_cart.php
new file mode 100644
index 000000000..8634dcd69
--- /dev/null
+++ b/includes/languages/czech/info_shopping_cart.php
@@ -0,0 +1,27 @@
+
\ No newline at end of file
diff --git a/includes/languages/czech/login.php b/includes/languages/czech/login.php
new file mode 100644
index 000000000..8a7f55b0e
--- /dev/null
+++ b/includes/languages/czech/login.php
@@ -0,0 +1,14 @@
+Vaše rozpracované objednávky byly uloženy a můžete se k nim po přihlášení kdykoli vrátit.',
+ true);
+?>
diff --git a/includes/languages/czech/modules/action_recorder/ar_admin_login.php b/includes/languages/czech/modules/action_recorder/ar_admin_login.php
new file mode 100644
index 000000000..8e057a11f
--- /dev/null
+++ b/includes/languages/czech/modules/action_recorder/ar_admin_login.php
@@ -0,0 +1,15 @@
+
diff --git a/includes/languages/czech/modules/action_recorder/ar_contact_us.php b/includes/languages/czech/modules/action_recorder/ar_contact_us.php
new file mode 100644
index 000000000..4e21a55a1
--- /dev/null
+++ b/includes/languages/czech/modules/action_recorder/ar_contact_us.php
@@ -0,0 +1,15 @@
+
diff --git a/includes/languages/czech/modules/action_recorder/ar_reset_password.php b/includes/languages/czech/modules/action_recorder/ar_reset_password.php
new file mode 100644
index 000000000..8ffb95717
--- /dev/null
+++ b/includes/languages/czech/modules/action_recorder/ar_reset_password.php
@@ -0,0 +1,15 @@
+
diff --git a/includes/languages/czech/modules/boxes/bm_best_sellers.php b/includes/languages/czech/modules/boxes/bm_best_sellers.php
new file mode 100644
index 000000000..0429685b7
--- /dev/null
+++ b/includes/languages/czech/modules/boxes/bm_best_sellers.php
@@ -0,0 +1,16 @@
+
diff --git a/includes/languages/czech/modules/boxes/bm_categories.php b/includes/languages/czech/modules/boxes/bm_categories.php
new file mode 100644
index 000000000..926890728
--- /dev/null
+++ b/includes/languages/czech/modules/boxes/bm_categories.php
@@ -0,0 +1,15 @@
+
diff --git a/includes/languages/czech/modules/boxes/bm_information.php b/includes/languages/czech/modules/boxes/bm_information.php
new file mode 100644
index 000000000..1575c5fd8
--- /dev/null
+++ b/includes/languages/czech/modules/boxes/bm_information.php
@@ -0,0 +1,20 @@
+
diff --git a/includes/languages/czech/modules/boxes/bm_languages.php b/includes/languages/czech/modules/boxes/bm_languages.php
new file mode 100644
index 000000000..46e0f0377
--- /dev/null
+++ b/includes/languages/czech/modules/boxes/bm_languages.php
@@ -0,0 +1,16 @@
+
diff --git a/includes/languages/czech/modules/boxes/bm_manufacturer_info.php b/includes/languages/czech/modules/boxes/bm_manufacturer_info.php
new file mode 100644
index 000000000..349764173
--- /dev/null
+++ b/includes/languages/czech/modules/boxes/bm_manufacturer_info.php
@@ -0,0 +1,18 @@
+
diff --git a/includes/languages/czech/modules/boxes/bm_manufacturers.php b/includes/languages/czech/modules/boxes/bm_manufacturers.php
new file mode 100644
index 000000000..4bba429db
--- /dev/null
+++ b/includes/languages/czech/modules/boxes/bm_manufacturers.php
@@ -0,0 +1,16 @@
+
diff --git a/includes/languages/czech/modules/boxes/bm_order_history.php b/includes/languages/czech/modules/boxes/bm_order_history.php
new file mode 100644
index 000000000..9cf3a777e
--- /dev/null
+++ b/includes/languages/czech/modules/boxes/bm_order_history.php
@@ -0,0 +1,16 @@
+
diff --git a/includes/languages/czech/modules/boxes/bm_product_notifications.php b/includes/languages/czech/modules/boxes/bm_product_notifications.php
new file mode 100644
index 000000000..2886cc6a9
--- /dev/null
+++ b/includes/languages/czech/modules/boxes/bm_product_notifications.php
@@ -0,0 +1,18 @@
+%s';
+const MODULE_BOXES_PRODUCT_NOTIFICATIONS_BOX_NOTIFY_REMOVE = 'nechci oznámení o tomto zboží %s ';
+?>
diff --git a/includes/languages/czech/modules/boxes/bm_reviews.php b/includes/languages/czech/modules/boxes/bm_reviews.php
new file mode 100644
index 000000000..ff8a8b9a6
--- /dev/null
+++ b/includes/languages/czech/modules/boxes/bm_reviews.php
@@ -0,0 +1,19 @@
+
diff --git a/includes/languages/czech/modules/boxes/bm_shopping_cart.php b/includes/languages/czech/modules/boxes/bm_shopping_cart.php
new file mode 100644
index 000000000..9a8ead836
--- /dev/null
+++ b/includes/languages/czech/modules/boxes/bm_shopping_cart.php
@@ -0,0 +1,17 @@
+
diff --git a/includes/languages/czech/modules/boxes/bm_whats_new.php b/includes/languages/czech/modules/boxes/bm_whats_new.php
new file mode 100644
index 000000000..ce01128e8
--- /dev/null
+++ b/includes/languages/czech/modules/boxes/bm_whats_new.php
@@ -0,0 +1,16 @@
+Co je nového?');
diff --git a/includes/languages/czech/modules/content/account/cm_account_braintree_cards.php b/includes/languages/czech/modules/content/account/cm_account_braintree_cards.php
new file mode 100644
index 000000000..336350778
--- /dev/null
+++ b/includes/languages/czech/modules/content/account/cm_account_braintree_cards.php
@@ -0,0 +1,30 @@
+Saved payment cards are stored securely and safely in a certified and audited PCI DSS compliant environment. This high level of security provides convenience in allowing saved cards to be used for next purchases without the card information having to be re-typed again for each order made.
New cards can be securely saved during the process of your next order.
';
+
+const MODULE_CONTENT_ACCOUNT_BRAINTREE_CARDS_SAVED_CARDS_TITLE = 'Saved Cards';
+const MODULE_CONTENT_ACCOUNT_BRAINTREE_CARDS_TEXT_NO_CARDS = 'No cards have been saved yet.
';
+
+const MODULE_CONTENT_ACCOUNT_BRAINTREE_CARDS_SUCCESS_DELETED = 'The card has been successfully deleted.';
+?>
diff --git a/includes/languages/czech/modules/content/account/cm_account_gdpr.php b/includes/languages/czech/modules/content/account/cm_account_gdpr.php
new file mode 100644
index 000000000..47faa8d20
--- /dev/null
+++ b/includes/languages/czech/modules/content/account/cm_account_gdpr.php
@@ -0,0 +1,18 @@
+Saved payment cards are stored securely and safely in a certified and audited PCI DSS compliant environment. This high level of security provides convenience in allowing saved cards to be used for next purchases without the card information having to be re-typed again for each order made.New cards can be securely saved during the process of your next order.
';
+
+const MODULE_CONTENT_ACCOUNT_SAGE_PAY_CARDS_SAVED_CARDS_TITLE = 'Saved Cards';
+const MODULE_CONTENT_ACCOUNT_SAGE_PAY_CARDS_TEXT_NO_CARDS = 'No cards have been saved yet.
';
+
+const MODULE_CONTENT_ACCOUNT_SAGE_PAY_CARDS_SUCCESS_DELETED = 'The card has been successfully deleted.';
+?>
diff --git a/includes/languages/czech/modules/content/account/cm_account_set_password.php b/includes/languages/czech/modules/content/account/cm_account_set_password.php
new file mode 100644
index 000000000..b0ecb4045
--- /dev/null
+++ b/includes/languages/czech/modules/content/account/cm_account_set_password.php
@@ -0,0 +1,26 @@
+
diff --git a/includes/languages/czech/modules/content/account/cm_account_title.php b/includes/languages/czech/modules/content/account/cm_account_title.php
new file mode 100644
index 000000000..033d125f5
--- /dev/null
+++ b/includes/languages/czech/modules/content/account/cm_account_title.php
@@ -0,0 +1,21 @@
+
diff --git a/includes/languages/czech/modules/content/checkout_success/cm_cs_product_notifications.php b/includes/languages/czech/modules/content/checkout_success/cm_cs_product_notifications.php
new file mode 100644
index 000000000..10ddcf85d
--- /dev/null
+++ b/includes/languages/czech/modules/content/checkout_success/cm_cs_product_notifications.php
@@ -0,0 +1,17 @@
+Prosím upozrňovat na aktualizace vybraných produktů:';
+?>
diff --git a/includes/languages/czech/modules/content/checkout_success/cm_cs_redirect_old_order.php b/includes/languages/czech/modules/content/checkout_success/cm_cs_redirect_old_order.php
new file mode 100644
index 000000000..9fcb8e65c
--- /dev/null
+++ b/includes/languages/czech/modules/content/checkout_success/cm_cs_redirect_old_order.php
@@ -0,0 +1,15 @@
+
diff --git a/includes/languages/czech/modules/content/checkout_success/cm_cs_thank_you.php b/includes/languages/czech/modules/content/checkout_success/cm_cs_thank_you.php
new file mode 100644
index 000000000..b62155f81
--- /dev/null
+++ b/includes/languages/czech/modules/content/checkout_success/cm_cs_thank_you.php
@@ -0,0 +1,24 @@
+Your order has been sent to the Store Owner for picking and packing. You will receive an email notification when your parcel is in the post. ');
+
+ define('MODULE_CONTENT_CHECKOUT_SUCCESS_TEXT_SEE_ORDERS', 'View the status of this Order by accessing your personal order history. ');
+
+ define('MODULE_CONTENT_CHECKOUT_SUCCESS_TEXT_CONTACT_STORE_OWNER', 'Contact us at any time if you have questions about your Order. ');
+
+
diff --git a/includes/languages/czech/modules/content/checkout_success/cm_cs_title.php b/includes/languages/czech/modules/content/checkout_success/cm_cs_title.php
new file mode 100644
index 000000000..b36a7ef83
--- /dev/null
+++ b/includes/languages/czech/modules/content/checkout_success/cm_cs_title.php
@@ -0,0 +1,22 @@
+Congratulations! Your profile has been successfully created!
+You can now take advantage of member privileges to enhance your online shopping experience with us. If you have any questions about the operation of this online shop, please contact us or view your profile .
+A confirmation has been sent to your email address.
+EOT;
diff --git a/includes/languages/czech/modules/content/create_account_success/cm_cas_title.php b/includes/languages/czech/modules/content/create_account_success/cm_cas_title.php
new file mode 100644
index 000000000..42cc869ad
--- /dev/null
+++ b/includes/languages/czech/modules/content/create_account_success/cm_cas_title.php
@@ -0,0 +1,18 @@
+');
+ define('MODULE_CONTENT_FOOTER_ARTICLES_MANAGER_MORE', ' ');
+
diff --git a/includes/languages/czech/modules/content/footer/cm_footer_contact_us.php b/includes/languages/czech/modules/content/footer/cm_footer_contact_us.php
new file mode 100644
index 000000000..7613be4bc
--- /dev/null
+++ b/includes/languages/czech/modules/content/footer/cm_footer_contact_us.php
@@ -0,0 +1,20 @@
+';
+const MODULE_CONTENT_FOOTER_CONTACT_US_EMAIL= ' ';
diff --git a/includes/languages/czech/modules/content/footer/cm_footer_information_links.php b/includes/languages/czech/modules/content/footer/cm_footer_information_links.php
new file mode 100644
index 000000000..529db8b47
--- /dev/null
+++ b/includes/languages/czech/modules/content/footer/cm_footer_information_links.php
@@ -0,0 +1,29 @@
+ 'Soukromí',
+ 'conditions.php' => 'Obchodní podmínky',
+ 'shipping.php' => 'Doprava',
+ 'contact_us.php' => 'Napište nám'
+ );
+
diff --git a/includes/languages/czech/modules/content/footer/cm_footer_information_pages.php b/includes/languages/czech/modules/content/footer/cm_footer_information_pages.php
new file mode 100644
index 000000000..a8bbd98a9
--- /dev/null
+++ b/includes/languages/czech/modules/content/footer/cm_footer_information_pages.php
@@ -0,0 +1,24 @@
+');
+ define('MODULE_CONTENT_FOOTER_INFORMATION_PAGES_MORE', ' ');
+
diff --git a/includes/languages/czech/modules/content/footer/cm_footer_text.php b/includes/languages/czech/modules/content/footer/cm_footer_text.php
new file mode 100644
index 000000000..791b35485
--- /dev/null
+++ b/includes/languages/czech/modules/content/footer/cm_footer_text.php
@@ -0,0 +1,22 @@
+PureHTML';
+const MODULE_CONTENT_FOOTER_TEXT_TITLE = 'Text Block';
+const MODULE_CONTENT_FOOTER_TEXT_DESCRIPTION = 'Adds a Text Block to the Footer Area of your site';
+
+const MODULE_CONTENT_FOOTER_TEXT_HEADING_TITLE = 'O nás';
+
+
+const MODULE_CONTENT_FOOTER_TEXT_TEXT = 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry\'s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
';
+
diff --git a/includes/languages/czech/modules/content/footer_suffix/cm_footer_extra_copyright.php b/includes/languages/czech/modules/content/footer_suffix/cm_footer_extra_copyright.php
new file mode 100644
index 000000000..96cf18064
--- /dev/null
+++ b/includes/languages/czech/modules/content/footer_suffix/cm_footer_extra_copyright.php
@@ -0,0 +1,21 @@
+Copyright © ' . date('Y') . ' ' . STORE_NAME . ' · Powered by OSCOM CE Phoenix ');
+
diff --git a/includes/languages/czech/modules/content/footer_suffix/cm_footer_extra_icons.php b/includes/languages/czech/modules/content/footer_suffix/cm_footer_extra_icons.php
new file mode 100644
index 000000000..5767fb5ad
--- /dev/null
+++ b/includes/languages/czech/modules/content/footer_suffix/cm_footer_extra_icons.php
@@ -0,0 +1,17 @@
+Available Brand Icons are shown here: https://fontawesome.com/icons?d=gallery&s=brands&c=payments-shopping');
+
+ define('MODULE_CONTENT_FOOTER_EXTRA_ICONS_TEXT', '');
+
diff --git a/includes/languages/czech/modules/content/gdpr/cm_gdpr_contact_addresses.php b/includes/languages/czech/modules/content/gdpr/cm_gdpr_contact_addresses.php
new file mode 100644
index 000000000..f8300d988
--- /dev/null
+++ b/includes/languages/czech/modules/content/gdpr/cm_gdpr_contact_addresses.php
@@ -0,0 +1,19 @@
+%s more Address(es)';
+
\ No newline at end of file
diff --git a/includes/languages/czech/modules/content/gdpr/cm_gdpr_contact_details.php b/includes/languages/czech/modules/content/gdpr/cm_gdpr_contact_details.php
new file mode 100644
index 000000000..3d9a6e130
--- /dev/null
+++ b/includes/languages/czech/modules/content/gdpr/cm_gdpr_contact_details.php
@@ -0,0 +1,24 @@
+The General Data Protection Regulation (GDPR) (Regulation (EU) 2016/679) is a regulation by which the European Parliament, the Council of the European Union and the European Commission intend to strengthen and unify data protection for all individuals within the European Union (EU).The GDPR states that you are able to review your personal information that we hold. If you are a EU Citizen, you can request deletion of some of this data.
';
+
\ No newline at end of file
diff --git a/includes/languages/czech/modules/content/gdpr/cm_gdpr_personal_details.php b/includes/languages/czech/modules/content/gdpr/cm_gdpr_personal_details.php
new file mode 100644
index 000000000..9da0adb7e
--- /dev/null
+++ b/includes/languages/czech/modules/content/gdpr/cm_gdpr_personal_details.php
@@ -0,0 +1,28 @@
+ Domů ' => null,
+ 'Catalog' => 'index.php',
+ ];
diff --git a/includes/languages/czech/modules/content/header/cm_header_buttons.php b/includes/languages/czech/modules/content/header/cm_header_buttons.php
new file mode 100644
index 000000000..70867f9fd
--- /dev/null
+++ b/includes/languages/czech/modules/content/header/cm_header_buttons.php
@@ -0,0 +1,15 @@
+Welcome back %s! Would you like to see which new products are available to purchase?';
+ const MODULE_CONTENT_CUSTOMER_GREETING_GUEST = 'Welcome Guest! Would you like to log yourself in or would you prefer to create a profile for easy checkout';
diff --git a/includes/languages/czech/modules/content/index/cm_i_text_main.php b/includes/languages/czech/modules/content/index/cm_i_text_main.php
new file mode 100644
index 000000000..0e94028ae
--- /dev/null
+++ b/includes/languages/czech/modules/content/index/cm_i_text_main.php
@@ -0,0 +1,20 @@
+
diff --git a/includes/languages/czech/modules/content/login/cm_login_title.php b/includes/languages/czech/modules/content/login/cm_login_title.php
new file mode 100644
index 000000000..b417f90d0
--- /dev/null
+++ b/includes/languages/czech/modules/content/login/cm_login_title.php
@@ -0,0 +1,21 @@
+ View Online Documentation Visit PayPal Website ';
+
+const MODULE_CONTENT_PAYPAL_LOGIN_TEMPLATE_TITLE = 'Log In with PayPal';
+const MODULE_CONTENT_PAYPAL_LOGIN_TEMPLATE_CONTENT = 'Have a PayPal account? Securely log in with PayPal to shop even faster!';
+const MODULE_CONTENT_PAYPAL_LOGIN_TEMPLATE_SANDBOX = 'Test Mode: The Sandbox server is currently selected.';
+
+const MODULE_CONTENT_PAYPAL_LOGIN_ERROR_ADMIN_CURL = 'This module requires cURL to be enabled in PHP and will not load until it has been enabled on this webserver.';
+const MODULE_CONTENT_PAYPAL_LOGIN_ERROR_ADMIN_CONFIGURATION = 'This module will not load until the Client ID and Secret parameters have been configured. Please edit and configure the settings of this module.';
+
+const MODULE_CONTENT_PAYPAL_LOGIN_LANGUAGE_LOCALE = 'en-us';
+
+const MODULE_CONTENT_PAYPAL_LOGIN_ATTR_GROUP_personal = 'Personal Information';
+const MODULE_CONTENT_PAYPAL_LOGIN_ATTR_GROUP_address = 'Address Information';
+const MODULE_CONTENT_PAYPAL_LOGIN_ATTR_GROUP_account = 'Account Information';
+const MODULE_CONTENT_PAYPAL_LOGIN_ATTR_GROUP_checkout = 'Checkout Express';
+
+const MODULE_CONTENT_PAYPAL_LOGIN_ATTR_full_name = 'Full Name';
+const MODULE_CONTENT_PAYPAL_LOGIN_ATTR_date_of_birth = 'Date of Birth';
+const MODULE_CONTENT_PAYPAL_LOGIN_ATTR_age_range = 'Age Range';
+const MODULE_CONTENT_PAYPAL_LOGIN_ATTR_gender = 'Gender';
+const MODULE_CONTENT_PAYPAL_LOGIN_ATTR_email_address = 'Email Address';
+const MODULE_CONTENT_PAYPAL_LOGIN_ATTR_street_address = 'Street Address';
+const MODULE_CONTENT_PAYPAL_LOGIN_ATTR_city = 'City';
+const MODULE_CONTENT_PAYPAL_LOGIN_ATTR_state = 'State';
+const MODULE_CONTENT_PAYPAL_LOGIN_ATTR_country = 'Country';
+const MODULE_CONTENT_PAYPAL_LOGIN_ATTR_zip_code = 'Zip Code';
+const MODULE_CONTENT_PAYPAL_LOGIN_ATTR_phone = 'Phone';
+const MODULE_CONTENT_PAYPAL_LOGIN_ATTR_account_status = 'Account Status (verified)';
+const MODULE_CONTENT_PAYPAL_LOGIN_ATTR_account_type = 'Account Type';
+const MODULE_CONTENT_PAYPAL_LOGIN_ATTR_account_creation_date = 'Account Creation Date';
+const MODULE_CONTENT_PAYPAL_LOGIN_ATTR_time_zone = 'Time Zone';
+const MODULE_CONTENT_PAYPAL_LOGIN_ATTR_locale = 'Locale';
+const MODULE_CONTENT_PAYPAL_LOGIN_ATTR_language = 'Language';
+const MODULE_CONTENT_PAYPAL_LOGIN_ATTR_seamless_checkout = 'Seamless Checkout';
+
+const MODULE_CONTENT_PAYPAL_LOGIN_DIALOG_CONNECTION_LINK_TITLE = 'Test API Server Connection';
+const MODULE_CONTENT_PAYPAL_LOGIN_DIALOG_CONNECTION_TITLE = 'API Server Connection Test';
+const MODULE_CONTENT_PAYPAL_LOGIN_DIALOG_CONNECTION_GENERAL_TEXT = 'Testing connection to server..';
+const MODULE_CONTENT_PAYPAL_LOGIN_DIALOG_CONNECTION_BUTTON_CLOSE = 'Close';
+const MODULE_CONTENT_PAYPAL_LOGIN_DIALOG_CONNECTION_TIME = 'Connection Time:';
+const MODULE_CONTENT_PAYPAL_LOGIN_DIALOG_CONNECTION_SUCCESS = 'Success!';
+const MODULE_CONTENT_PAYPAL_LOGIN_DIALOG_CONNECTION_FAILED = 'Failed! Please review the Verify SSL Certificate settings and try again.';
+const MODULE_CONTENT_PAYPAL_LOGIN_DIALOG_CONNECTION_ERROR = 'An error occurred. Please refresh the page, review your settings, and try again.';
+
+const MODULE_CONTENT_PAYPAL_LOGIN_DIALOG_URLS_LINK_TITLE = 'Show PayPal Application URLs';
+const MODULE_CONTENT_PAYPAL_LOGIN_DIALOG_URLS_TITLE = 'PayPal Application URLs';
+const MODULE_CONTENT_PAYPAL_LOGIN_DIALOG_URLS_RETURN_TEXT = 'Redirect/Return URL:';
+const MODULE_CONTENT_PAYPAL_LOGIN_DIALOG_URLS_PRIVACY_TEXT = 'Privacy Policy URL:';
+const MODULE_CONTENT_PAYPAL_LOGIN_DIALOG_URLS_TERMS_TEXT = 'User Agreement URL:';
+const MODULE_CONTENT_PAYPAL_LOGIN_DIALOG_URLS_BUTTON_CLOSE = 'Close';
+?>
diff --git a/includes/languages/czech/modules/content/navigation/cm_navbar.php b/includes/languages/czech/modules/content/navigation/cm_navbar.php
new file mode 100644
index 000000000..41c222938
--- /dev/null
+++ b/includes/languages/czech/modules/content/navigation/cm_navbar.php
@@ -0,0 +1,40 @@
+ %s kusů ';
+const HEADER_CART_NO_CONTENTS = ' 0 kusů';
+const HEADER_ACCOUNT_LOGGED_OUT = ' Můj účet ';
+const HEADER_ACCOUNT_LOGGED_IN = ' %s ';
+const HEADER_SITE_SETTINGS = ' Nastavení ';
+const HEADER_TOGGLE_NAV = 'Přepnout';
+const HEADER_HOME = ' Home ';
+const HEADER_WHATS_NEW = ' Novinky ';
+const HEADER_SPECIALS = ' Slevy ';
+const HEADER_REVIEWS = ' Hodnocení ';
+ // header dropdowns
+const HEADER_ACCOUNT_LOGIN = ' Přichlásit';
+const HEADER_ACCOUNT_LOGOFF = ' Odhlásit';
+const HEADER_ACCOUNT = 'Můj účet';
+const HEADER_ACCOUNT_HISTORY = 'Moje objednávky';
+const HEADER_ACCOUNT_EDIT = 'Podrobnosti';
+const HEADER_ACCOUNT_ADDRESS_BOOK = 'Moje adresy';
+const HEADER_ACCOUNT_PASSWORD = 'Moje heslo';
+const HEADER_ACCOUNT_REGISTER = ' Registrace';
+const HEADER_CART_HAS_CONTENTS = '%s kusů, %s';
+const HEADER_CART_VIEW_CART = 'Zobrazit košík';
+const HEADER_CART_CHECKOUT = ' Pokladna';
+const USER_LOCALIZATION = 'L: %s C: %s';
+
diff --git a/includes/languages/czech/modules/content/product_info/cm_pi_also_purchased.php b/includes/languages/czech/modules/content/product_info/cm_pi_also_purchased.php
new file mode 100644
index 000000000..d2bd618b9
--- /dev/null
+++ b/includes/languages/czech/modules/content/product_info/cm_pi_also_purchased.php
@@ -0,0 +1,21 @@
+%s';
diff --git a/includes/languages/czech/modules/content/product_info/cm_pi_description.php b/includes/languages/czech/modules/content/product_info/cm_pi_description.php
new file mode 100644
index 000000000..e2d60c205
--- /dev/null
+++ b/includes/languages/czech/modules/content/product_info/cm_pi_description.php
@@ -0,0 +1,19 @@
+%s';
diff --git a/includes/languages/czech/modules/content/product_info/cm_pi_model.php b/includes/languages/czech/modules/content/product_info/cm_pi_model.php
new file mode 100644
index 000000000..293690645
--- /dev/null
+++ b/includes/languages/czech/modules/content/product_info/cm_pi_model.php
@@ -0,0 +1,20 @@
+%s';
diff --git a/includes/languages/czech/modules/content/product_info/cm_pi_modular.php b/includes/languages/czech/modules/content/product_info/cm_pi_modular.php
new file mode 100644
index 000000000..4b1fb3980
--- /dev/null
+++ b/includes/languages/czech/modules/content/product_info/cm_pi_modular.php
@@ -0,0 +1,15 @@
+This module requires the use of π child modules. Any slots that have no child modules...will not display!';
+
\ No newline at end of file
diff --git a/includes/languages/czech/modules/content/product_info/cm_pi_name.php b/includes/languages/czech/modules/content/product_info/cm_pi_name.php
new file mode 100644
index 000000000..256353104
--- /dev/null
+++ b/includes/languages/czech/modules/content/product_info/cm_pi_name.php
@@ -0,0 +1,21 @@
+%2$s %1$s ';
+ const MODULE_CONTENT_PI_PRICE_DISPLAY = '%s ';
+
diff --git a/includes/languages/czech/modules/content/product_info/cm_pi_review_stars.php b/includes/languages/czech/modules/content/product_info/cm_pi_review_stars.php
new file mode 100644
index 000000000..ecbfaa57f
--- /dev/null
+++ b/includes/languages/czech/modules/content/product_info/cm_pi_review_stars.php
@@ -0,0 +1,26 @@
+%s';
+
diff --git a/includes/languages/czech/modules/content/product_info_not_found/cm_pinf_message.php b/includes/languages/czech/modules/content/product_info_not_found/cm_pinf_message.php
new file mode 100644
index 000000000..a964f2667
--- /dev/null
+++ b/includes/languages/czech/modules/content/product_info_not_found/cm_pinf_message.php
@@ -0,0 +1,21 @@
+%s, please let us know your thoughts and rating on %s - thank you!After you press the "Send" button, it will go to the store owner and should appear on site shortly.
');
+
+define('TEXT_NOT_PURCHASED', '%s there appears to be a conflict! You have not purchased this product!');
+define('TEXT_ALREADY_REVIEWED', '%s there appears to be a conflict! You have already reviewed this product!');
diff --git a/includes/languages/czech/modules/content/shopping_cart/cm_sc_checkout.php b/includes/languages/czech/modules/content/shopping_cart/cm_sc_checkout.php
new file mode 100644
index 000000000..62412490a
--- /dev/null
+++ b/includes/languages/czech/modules/content/shopping_cart/cm_sc_checkout.php
@@ -0,0 +1,28 @@
+%s');
diff --git a/includes/languages/czech/modules/content/shopping_cart/cm_sc_product_listing.php b/includes/languages/czech/modules/content/shopping_cart/cm_sc_product_listing.php
new file mode 100644
index 000000000..2dd3d455d
--- /dev/null
+++ b/includes/languages/czech/modules/content/shopping_cart/cm_sc_product_listing.php
@@ -0,0 +1,34 @@
+');
+ define('MODULE_CONTENT_SC_PRODUCT_LISTING_TEXT_BUTTON_REMOVE', ' ');
+ define('MODULE_CONTENT_SC_PRODUCT_LISTING_TEXT_IN_STOCK', ' ');
diff --git a/includes/languages/czech/modules/content/shopping_cart/cm_sc_stock_notice.php b/includes/languages/czech/modules/content/shopping_cart/cm_sc_stock_notice.php
new file mode 100644
index 000000000..711db90ec
--- /dev/null
+++ b/includes/languages/czech/modules/content/shopping_cart/cm_sc_stock_notice.php
@@ -0,0 +1,28 @@
+Products marked ' . STOCK_MARK_PRODUCT_OUT_OF_STOCK . ' don\'t exist in desired quantity in our stock.Please alter the quantity of products marked with ' . STOCK_MARK_PRODUCT_OUT_OF_STOCK . ', thank you.
');
+ define('MODULE_CONTENT_SC_STOCK_NOTICE_CAN_CHECKOUT', 'Products marked ' . STOCK_MARK_PRODUCT_OUT_OF_STOCK . ' don\'t exist in desired quantity in our stock.
You can buy them anyway and check the quantity we have in stock for immediate delivery in the checkout process.
');
diff --git a/includes/languages/czech/modules/content/shopping_cart/cm_sc_title.php b/includes/languages/czech/modules/content/shopping_cart/cm_sc_title.php
new file mode 100644
index 000000000..5c2cc3f42
--- /dev/null
+++ b/includes/languages/czech/modules/content/shopping_cart/cm_sc_title.php
@@ -0,0 +1,27 @@
+%s to %s (of %s Testimonials)');
diff --git a/includes/languages/czech/modules/content/testimonials/cm_t_title.php b/includes/languages/czech/modules/content/testimonials/cm_t_title.php
new file mode 100644
index 000000000..929cb4073
--- /dev/null
+++ b/includes/languages/czech/modules/content/testimonials/cm_t_title.php
@@ -0,0 +1,22 @@
+
diff --git a/includes/languages/czech/modules/header_tags/ht_category_title.php b/includes/languages/czech/modules/header_tags/ht_category_title.php
new file mode 100644
index 000000000..73adcfe7c
--- /dev/null
+++ b/includes/languages/czech/modules/header_tags/ht_category_title.php
@@ -0,0 +1,15 @@
+
diff --git a/includes/languages/czech/modules/header_tags/ht_datepicker_jquery.php b/includes/languages/czech/modules/header_tags/ht_datepicker_jquery.php
new file mode 100644
index 000000000..4fafdc9cf
--- /dev/null
+++ b/includes/languages/czech/modules/header_tags/ht_datepicker_jquery.php
@@ -0,0 +1,15 @@
+
diff --git a/includes/languages/czech/modules/header_tags/ht_google_adwords_conversion.php b/includes/languages/czech/modules/header_tags/ht_google_adwords_conversion.php
new file mode 100644
index 000000000..2f60e5604
--- /dev/null
+++ b/includes/languages/czech/modules/header_tags/ht_google_adwords_conversion.php
@@ -0,0 +1,15 @@
+
diff --git a/includes/languages/czech/modules/header_tags/ht_google_analytics.php b/includes/languages/czech/modules/header_tags/ht_google_analytics.php
new file mode 100644
index 000000000..45f5c8bee
--- /dev/null
+++ b/includes/languages/czech/modules/header_tags/ht_google_analytics.php
@@ -0,0 +1,15 @@
+
diff --git a/includes/languages/czech/modules/header_tags/ht_mailchimp_360.php b/includes/languages/czech/modules/header_tags/ht_mailchimp_360.php
new file mode 100644
index 000000000..7436c7a50
--- /dev/null
+++ b/includes/languages/czech/modules/header_tags/ht_mailchimp_360.php
@@ -0,0 +1,15 @@
+ Visit MailChimp Website (info) Using the above link to signup at MailChimp grants osCommerce a small financial bonus for referring a customer. The MailChimp E-Commerce 360 module measures the ROI of your MailChimp e-mail campaigns';
+?>
diff --git a/includes/languages/czech/modules/header_tags/ht_manufacturer_title.php b/includes/languages/czech/modules/header_tags/ht_manufacturer_title.php
new file mode 100644
index 000000000..7ce752a3c
--- /dev/null
+++ b/includes/languages/czech/modules/header_tags/ht_manufacturer_title.php
@@ -0,0 +1,15 @@
+
diff --git a/includes/languages/czech/modules/header_tags/ht_opensearch.php b/includes/languages/czech/modules/header_tags/ht_opensearch.php
new file mode 100644
index 000000000..b50635913
--- /dev/null
+++ b/includes/languages/czech/modules/header_tags/ht_opensearch.php
@@ -0,0 +1,15 @@
+
diff --git a/includes/languages/czech/modules/header_tags/ht_pages_seo.php b/includes/languages/czech/modules/header_tags/ht_pages_seo.php
new file mode 100644
index 000000000..75b54c7e0
--- /dev/null
+++ b/includes/languages/czech/modules/header_tags/ht_pages_seo.php
@@ -0,0 +1,18 @@
+
diff --git a/includes/languages/czech/modules/header_tags/ht_robot_noindex.php b/includes/languages/czech/modules/header_tags/ht_robot_noindex.php
new file mode 100644
index 000000000..59aaae733
--- /dev/null
+++ b/includes/languages/czech/modules/header_tags/ht_robot_noindex.php
@@ -0,0 +1,15 @@
+
diff --git a/includes/languages/czech/modules/header_tags/ht_table_click_jquery.php b/includes/languages/czech/modules/header_tags/ht_table_click_jquery.php
new file mode 100644
index 000000000..664866f2a
--- /dev/null
+++ b/includes/languages/czech/modules/header_tags/ht_table_click_jquery.php
@@ -0,0 +1,15 @@
+
diff --git a/includes/languages/czech/modules/header_tags/ht_twitter_product_card.php b/includes/languages/czech/modules/header_tags/ht_twitter_product_card.php
new file mode 100644
index 000000000..3aac5c79f
--- /dev/null
+++ b/includes/languages/czech/modules/header_tags/ht_twitter_product_card.php
@@ -0,0 +1,21 @@
+ My Profile ');
+ define('MODULE_NAVBAR_ACCOUNT_LOGGED_IN', ' %s ');
+ define('MODULE_NAVBAR_ACCOUNT_LOGIN', ' Log In');
+ define('MODULE_NAVBAR_ACCOUNT_LOGOFF', ' Log Off');
+ define('MODULE_NAVBAR_ACCOUNT', 'My Profile');
+ define('MODULE_NAVBAR_ACCOUNT_HISTORY', 'My Orders');
+ define('MODULE_NAVBAR_ACCOUNT_EDIT', 'My Details');
+ define('MODULE_NAVBAR_ACCOUNT_ADDRESS_BOOK', 'My Address Book');
+ define('MODULE_NAVBAR_ACCOUNT_PASSWORD', 'My Password');
+ define('MODULE_NAVBAR_ACCOUNT_REGISTER', ' Register');
+
\ No newline at end of file
diff --git a/includes/languages/czech/modules/navbar/nb_brand.php b/includes/languages/czech/modules/navbar/nb_brand.php
new file mode 100644
index 000000000..8ae992bbe
--- /dev/null
+++ b/includes/languages/czech/modules/navbar/nb_brand.php
@@ -0,0 +1,20 @@
+This can be a simple link or something more complicated such as an image.
+
+For more details about using an image, see navbar/#brand
+EOT;
+
+ define('MODULE_NAVBAR_BRAND_PUBLIC_TEXT', STORE_NAME);
diff --git a/includes/languages/czech/modules/navbar/nb_currencies.php b/includes/languages/czech/modules/navbar/nb_currencies.php
new file mode 100644
index 000000000..93ac44791
--- /dev/null
+++ b/includes/languages/czech/modules/navbar/nb_currencies.php
@@ -0,0 +1,16 @@
+If you have just one Currency in your shop, there is no point installing this module.');
+
+ define('MODULE_NAVBAR_CURRENCIES_SELECTED_CURRENCY', ' %1$s ');
diff --git a/includes/languages/czech/modules/navbar/nb_hamburger_button.php b/includes/languages/czech/modules/navbar/nb_hamburger_button.php
new file mode 100644
index 000000000..74759fe6e
--- /dev/null
+++ b/includes/languages/czech/modules/navbar/nb_hamburger_button.php
@@ -0,0 +1,18 @@
+This is a special button that shows when the viewport is small. It opens and closes the Main Navbar Menu. You MUST install this.');
+
+ define('MODULE_NAVBAR_HAMBURGER_BUTTON_PUBLIC_SCREENREADER_TEXT', 'Toggle Navigation');
+ define('MODULE_NAVBAR_HAMBURGER_BUTTON_PUBLIC_BUTTON_TEXT', ' ');
+
\ No newline at end of file
diff --git a/includes/languages/czech/modules/navbar/nb_home.php b/includes/languages/czech/modules/navbar/nb_home.php
new file mode 100644
index 000000000..8bbc791d7
--- /dev/null
+++ b/includes/languages/czech/modules/navbar/nb_home.php
@@ -0,0 +1,17 @@
+If you wish to have a Home button permanently displayed (even when the rest of the Menu is collapsed, eg in XS viewport) you could use the Brand module instead.');
+
+ define('MODULE_NAVBAR_HOME_PUBLIC_TEXT', ' Home ');
+
\ No newline at end of file
diff --git a/includes/languages/czech/modules/navbar/nb_languages.php b/includes/languages/czech/modules/navbar/nb_languages.php
new file mode 100644
index 000000000..76f9b9948
--- /dev/null
+++ b/includes/languages/czech/modules/navbar/nb_languages.php
@@ -0,0 +1,16 @@
+If you have just one Language in your shop, there is no point installing this module.');
+
+ define('MODULE_NAVBAR_LANGUAGES_SELECTED_LANGUAGE', ' English ');
diff --git a/includes/languages/czech/modules/navbar/nb_new_products.php b/includes/languages/czech/modules/navbar/nb_new_products.php
new file mode 100644
index 000000000..258bdeb21
--- /dev/null
+++ b/includes/languages/czech/modules/navbar/nb_new_products.php
@@ -0,0 +1,17 @@
+ New Products ');
+
\ No newline at end of file
diff --git a/includes/languages/czech/modules/navbar/nb_shopping_cart.php b/includes/languages/czech/modules/navbar/nb_shopping_cart.php
new file mode 100644
index 000000000..cf5f11180
--- /dev/null
+++ b/includes/languages/czech/modules/navbar/nb_shopping_cart.php
@@ -0,0 +1,22 @@
+ %1$s item(s) ';
+ const MODULE_NAVBAR_SHOPPING_CART_NO_CONTENTS = ' 0 items';
+ const MODULE_NAVBAR_SHOPPING_CART_HAS_CONTENTS = '%s item(s), %s ';
+ const MODULE_NAVBAR_SHOPPING_CART_VIEW_CART = 'View Cart';
+ const MODULE_NAVBAR_SHOPPING_CART_CHECKOUT = ' Checkout';
+
+ const MODULE_NAVBAR_SHOPPING_CART_PRODUCT = '%s x %s';
diff --git a/includes/languages/czech/modules/navbar/nb_special_offers.php b/includes/languages/czech/modules/navbar/nb_special_offers.php
new file mode 100644
index 000000000..b7392f492
--- /dev/null
+++ b/includes/languages/czech/modules/navbar/nb_special_offers.php
@@ -0,0 +1,17 @@
+ Special Offers ');
+
\ No newline at end of file
diff --git a/includes/languages/czech/modules/navbar/nb_testimonials.php b/includes/languages/czech/modules/navbar/nb_testimonials.php
new file mode 100644
index 000000000..73a9a9d17
--- /dev/null
+++ b/includes/languages/czech/modules/navbar/nb_testimonials.php
@@ -0,0 +1,17 @@
+ Testimonials ');
+
\ No newline at end of file
diff --git a/includes/languages/czech/modules/order_total/ot_loworderfee.php b/includes/languages/czech/modules/order_total/ot_loworderfee.php
new file mode 100644
index 000000000..d1d023e5d
--- /dev/null
+++ b/includes/languages/czech/modules/order_total/ot_loworderfee.php
@@ -0,0 +1,15 @@
+
\ No newline at end of file
diff --git a/includes/languages/czech/modules/order_total/ot_shipping.php b/includes/languages/czech/modules/order_total/ot_shipping.php
new file mode 100644
index 000000000..ca36fecd4
--- /dev/null
+++ b/includes/languages/czech/modules/order_total/ot_shipping.php
@@ -0,0 +1,17 @@
+ View Online Documentation Visit Braintree Payments Website ';
+
+const MODULE_PAYMENT_BRAINTREE_CC_ERROR_ADMIN_PHP = 'The minimum PHP version this module supports is %s and will not load until the webserver has been installed with a newer version.';
+const MODULE_PAYMENT_BRAINTREE_CC_ERROR_ADMIN_PHP_EXTENSIONS = 'This module requires the following PHP extensions and will and will not load until PHP has been updated: %s';
+const MODULE_PAYMENT_BRAINTREE_CC_ERROR_ADMIN_MERCHANT_ACCOUNTS = 'This module will not load until a merchant account has been defined for the %s currency.';
+const MODULE_PAYMENT_BRAINTREE_CC_ERROR_ADMIN_CONFIGURATION = 'This module will not load until the Merchant ID, Public Key, Private Key, and Client Side Encryption Key parameters have been configured. Please edit and configure the settings of this module.';
+
+const MODULE_PAYMENT_BRAINTREE_CC_CREDITCARD_NEW = 'Enter a new Card';
+const MODULE_PAYMENT_BRAINTREE_CC_CREDITCARD_LAST_4 = 'Last 4 Digits:';
+const MODULE_PAYMENT_BRAINTREE_CC_CREDITCARD_OWNER = 'Name on Card:';
+const MODULE_PAYMENT_BRAINTREE_CC_CREDITCARD_NUMBER = 'Card Number:';
+const MODULE_PAYMENT_BRAINTREE_CC_CREDITCARD_EXPIRY = 'Expiry Date:';
+const MODULE_PAYMENT_BRAINTREE_CC_CREDITCARD_CVV = 'Security Code:';
+const MODULE_PAYMENT_BRAINTREE_CC_CREDITCARD_SAVE = 'Save Card for next purchase?';
+
+const MODULE_PAYMENT_BRAINTREE_CC_CURRENCY_CHARGE = 'The currency currently used to display prices is in %3$s. Your credit card will be charged a total of %1$s %2$s for this order.';
+
+const MODULE_PAYMENT_BRAINTREE_CC_ERROR_TITLE = 'There has been an error processing your credit card';
+const MODULE_PAYMENT_BRAINTREE_CC_ERROR_GENERAL = 'Please try again and if problems persist, please try another payment method.';
+const MODULE_PAYMENT_BRAINTREE_CC_ERROR_CARDOWNER = 'The card owners name must be provided to complete the order. Please try again and if problems persist, please try another payment method.';
+const MODULE_PAYMENT_BRAINTREE_CC_ERROR_CARDNUMBER = 'The card number was not able to be processed. Please try again and if problems persist, please try another payment method.';
+const MODULE_PAYMENT_BRAINTREE_CC_ERROR_CARDEXPIRES = 'The card expiry date was not able to be processed. Please try again and if problems persist, please try another payment method.';
+const MODULE_PAYMENT_BRAINTREE_CC_ERROR_CARDCVV = 'The card security code was not able to be processed. Please try again and if problems persist, please try another payment method.';
+?>
diff --git a/includes/languages/czech/modules/payment/cod.php b/includes/languages/czech/modules/payment/cod.php
new file mode 100644
index 000000000..dcd7a04be
--- /dev/null
+++ b/includes/languages/czech/modules/payment/cod.php
@@ -0,0 +1,27 @@
+ View Online Documentation Visit CSOB Payments Website ';
+
+const MODULE_PAYMENT_CSOB_ERROR_ADMIN_PHP = 'The minimum PHP version this module supports is %s and will not load until the webserver has been installed with a newer version.';
+const MODULE_PAYMENT_CSOB_ERROR_ADMIN_PHP_EXTENSIONS = 'This module requires the following PHP extensions and will and will not load until PHP has been updated: %s';
+const MODULE_PAYMENT_CSOB_ERROR_ADMIN_MERCHANT_ACCOUNTS = 'This module will not load until a merchant account has been defined for the %s currency.';
+const MODULE_PAYMENT_CSOB_ERROR_ADMIN_CONFIGURATION = 'This module will not load until the Merchant ID, Public Key, Private Key, and Client Side Encryption Key parameters have been configured. Please edit and configure the settings of this module.';
diff --git a/includes/languages/czech/modules/payment/gpwebpay.php b/includes/languages/czech/modules/payment/gpwebpay.php
new file mode 100644
index 000000000..8fb993fa8
--- /dev/null
+++ b/includes/languages/czech/modules/payment/gpwebpay.php
@@ -0,0 +1,19 @@
+
diff --git a/includes/languages/czech/modules/payment/moneyorder.php b/includes/languages/czech/modules/payment/moneyorder.php
new file mode 100644
index 000000000..4b32d5a76
--- /dev/null
+++ b/includes/languages/czech/modules/payment/moneyorder.php
@@ -0,0 +1,16 @@
+ ' . 'Vaše objednávka bude expedována po připsání platby na náš účet.');
+ define('MODULE_PAYMENT_MONEYORDER_TEXT_EMAIL_FOOTER', "Číslo účtu: ". MODULE_PAYMENT_MONEYORDER_PAYTO . "\n\nVe prospěch:\n" . STORE_NAME . "\n" . STORE_ADDRESS . "\n\n" . 'Vaše objednávka bude expedována po připsání platby na náš účet.');
+?>
diff --git a/includes/languages/czech/modules/payment/nochex.php b/includes/languages/czech/modules/payment/nochex.php
new file mode 100644
index 000000000..6b6088e7e
--- /dev/null
+++ b/includes/languages/czech/modules/payment/nochex.php
@@ -0,0 +1,15 @@
+Requires the GBP currency.';
+?>
diff --git a/includes/languages/czech/modules/payment/paypal_express.php b/includes/languages/czech/modules/payment/paypal_express.php
new file mode 100644
index 000000000..26ed168b0
--- /dev/null
+++ b/includes/languages/czech/modules/payment/paypal_express.php
@@ -0,0 +1,39 @@
+ View Online Documentation Visit PayPal Website ';
+
+const MODULE_PAYMENT_PAYPAL_EXPRESS_ERROR_ADMIN_CURL = 'This module requires cURL to be enabled in PHP and will not load until it has been enabled on this webserver.';
+const MODULE_PAYMENT_PAYPAL_EXPRESS_ERROR_ADMIN_CONFIGURATION = 'This module will not load until the Seller Account or API Credential parameters have been configured. Please edit and configure the settings of this module.';
+
+const MODULE_PAYMENT_PAYPAL_EXPRESS_TEXT_BUTTON = 'Check Out with PayPal';
+const MODULE_PAYMENT_PAYPAL_EXPRESS_TEXT_COMMENTS = 'Comments:';
+ define('MODULE_PAYMENT_PAYPAL_EXPRESS_EMAIL_PASSWORD', 'An account has automatically been created for you with the following e-mail address and password:' . "\n\n" . 'Store Account E-Mail Address: %s' . "\n" . 'Store Account Password: %s' . "\n\n");
+
+const MODULE_PAYMENT_PAYPAL_EXPRESS_BUTTON = 'https://www.paypalobjects.com/webstatic/en_US/btn/btn_checkout_pp_142x27.png';
+const MODULE_PAYMENT_PAYPAL_EXPRESS_LANGUAGE_LOCALE = 'en_US';
+
+const MODULE_PAYMENT_PAYPAL_EXPRESS_DIALOG_CONNECTION_LINK_TITLE = 'Test API Server Connection';
+const MODULE_PAYMENT_PAYPAL_EXPRESS_DIALOG_CONNECTION_TITLE = 'API Server Connection Test';
+const MODULE_PAYMENT_PAYPAL_EXPRESS_DIALOG_CONNECTION_GENERAL_TEXT = 'Testing connection to server..';
+const MODULE_PAYMENT_PAYPAL_EXPRESS_DIALOG_CONNECTION_BUTTON_CLOSE = 'Close';
+const MODULE_PAYMENT_PAYPAL_EXPRESS_DIALOG_CONNECTION_TIME = 'Connection Time:';
+const MODULE_PAYMENT_PAYPAL_EXPRESS_DIALOG_CONNECTION_SUCCESS = 'Success!';
+const MODULE_PAYMENT_PAYPAL_EXPRESS_DIALOG_CONNECTION_FAILED = 'Failed! Please review the Verify SSL Certificate settings and try again.';
+const MODULE_PAYMENT_PAYPAL_EXPRESS_DIALOG_CONNECTION_ERROR = 'An error occurred. Please refresh the page, review your settings, and try again.';
+
+const MODULE_PAYMENT_PAYPAL_EXPRESS_ERROR_NO_SHIPPING_AVAILABLE_TO_SHIPPING_ADDRESS = 'Shipping is currently not available for the selected shipping address. Please select or create a new shipping address to use with your purchase.';
+const MODULE_PAYMENT_PAYPAL_EXPRESS_WARNING_LOCAL_LOGIN_REQUIRED = 'Please log into your account to verify the order.';
+const MODULE_PAYMENT_PAYPAL_EXPRESS_NOTICE_CHECKOUT_CONFIRMATION = 'Please review and confirm your order below. Your order will not be processed until it has been confirmed.';
+?>
diff --git a/includes/languages/czech/modules/payment/paypal_pro_dp.php b/includes/languages/czech/modules/payment/paypal_pro_dp.php
new file mode 100644
index 000000000..788880f73
--- /dev/null
+++ b/includes/languages/czech/modules/payment/paypal_pro_dp.php
@@ -0,0 +1,40 @@
+ View Online Documentation Visit PayPal Website ';
+
+const MODULE_PAYMENT_PAYPAL_PRO_DP_ERROR_EXPRESS_MODULE = 'PayPal mandates the PayPal Express Checkout payment module be enabled if this module is to be activated. This module will not load until the PayPal Express Checkout module has been installed.';
+const MODULE_PAYMENT_PAYPAL_PRO_DP_ERROR_ADMIN_CURL = 'This module requires cURL to be enabled in PHP and will not load until it has been enabled on this webserver.';
+const MODULE_PAYMENT_PAYPAL_PRO_DP_ERROR_ADMIN_CONFIGURATION = 'This module will not load until the API Credential parameters have been configured. Please edit and configure the settings of this module.';
+
+const MODULE_PAYMENT_PAYPAL_PRO_DP_CARD_OWNER = 'Card Owner:';
+const MODULE_PAYMENT_PAYPAL_PRO_DP_CARD_TYPE = 'Card Type:';
+const MODULE_PAYMENT_PAYPAL_PRO_DP_CARD_NUMBER = 'Card Number:';
+const MODULE_PAYMENT_PAYPAL_PRO_DP_CARD_VALID_FROM = 'Card Valid From Date:';
+const MODULE_PAYMENT_PAYPAL_PRO_DP_CARD_VALID_FROM_INFO = '(if available)';
+const MODULE_PAYMENT_PAYPAL_PRO_DP_CARD_EXPIRES = 'Card Expiry Date:';
+const MODULE_PAYMENT_PAYPAL_PRO_DP_CARD_CVC = 'Card Security Code (CVV2):';
+const MODULE_PAYMENT_PAYPAL_PRO_DP_CARD_ISSUE_NUMBER = 'Card Issue Number:';
+const MODULE_PAYMENT_PAYPAL_PRO_DP_CARD_ISSUE_NUMBER_INFO = '(for Maestro cards only)';
+const MODULE_PAYMENT_PAYPAL_PRO_DP_ERROR_ALL_FIELDS_REQUIRED = 'Error: All payment information fields are required.';
+
+const MODULE_PAYMENT_PAYPAL_PRO_DP_DIALOG_CONNECTION_LINK_TITLE = 'Test API Server Connection';
+const MODULE_PAYMENT_PAYPAL_PRO_DP_DIALOG_CONNECTION_TITLE = 'API Server Connection Test';
+const MODULE_PAYMENT_PAYPAL_PRO_DP_DIALOG_CONNECTION_GENERAL_TEXT = 'Testing connection to server..';
+const MODULE_PAYMENT_PAYPAL_PRO_DP_DIALOG_CONNECTION_BUTTON_CLOSE = 'Close';
+const MODULE_PAYMENT_PAYPAL_PRO_DP_DIALOG_CONNECTION_TIME = 'Connection Time:';
+const MODULE_PAYMENT_PAYPAL_PRO_DP_DIALOG_CONNECTION_SUCCESS = 'Success!';
+const MODULE_PAYMENT_PAYPAL_PRO_DP_DIALOG_CONNECTION_FAILED = 'Failed! Please review the Verify SSL Certificate settings and try again.';
+const MODULE_PAYMENT_PAYPAL_PRO_DP_DIALOG_CONNECTION_ERROR = 'An error occurred. Please refresh the page, review your settings, and try again.';
+?>
diff --git a/includes/languages/czech/modules/payment/paypal_pro_hs.php b/includes/languages/czech/modules/payment/paypal_pro_hs.php
new file mode 100644
index 000000000..d7a14002d
--- /dev/null
+++ b/includes/languages/czech/modules/payment/paypal_pro_hs.php
@@ -0,0 +1,34 @@
+ View Online Documentation Visit PayPal Website ';
+
+const MODULE_PAYMENT_PAYPAL_PRO_HS_ERROR_ADMIN_CURL = 'This module requires cURL to be enabled in PHP and will not load until it has been enabled on this webserver.';
+const MODULE_PAYMENT_PAYPAL_PRO_HS_ERROR_ADMIN_CONFIGURATION = 'This module will not load until the API Credential and Seller E-Mail Address parameters have been configured. Please edit and configure the settings of this module.';
+
+ define('MODULE_PAYMENT_PAYPAL_PRO_HS_TEXT_PAYPAL_RETURN_BUTTON', 'Back to ' . STORE_NAME); // Maximum length 60 characters, otherwise it is ignored.
+const MODULE_PAYMENT_PAYPAL_PRO_HS_TEXT_INVALID_TRANSACTION = 'Could not verify the PayPal transaction. Please try again.';
+
+const MODULE_PAYMENT_PAYPAL_PRO_HS_ERROR_TITLE = 'There has been an error processing your order';
+const MODULE_PAYMENT_PAYPAL_PRO_HS_ERROR_GENERAL = 'Please try again and if problems persist, please try another payment method.';
+
+const MODULE_PAYMENT_PAYPAL_PRO_HS_DIALOG_CONNECTION_LINK_TITLE = 'Test API Server Connection';
+const MODULE_PAYMENT_PAYPAL_PRO_HS_DIALOG_CONNECTION_TITLE = 'API Server Connection Test';
+const MODULE_PAYMENT_PAYPAL_PRO_HS_DIALOG_CONNECTION_GENERAL_TEXT = 'Testing connection to server..';
+const MODULE_PAYMENT_PAYPAL_PRO_HS_DIALOG_CONNECTION_BUTTON_CLOSE = 'Close';
+const MODULE_PAYMENT_PAYPAL_PRO_HS_DIALOG_CONNECTION_TIME = 'Connection Time:';
+const MODULE_PAYMENT_PAYPAL_PRO_HS_DIALOG_CONNECTION_SUCCESS = 'Success!';
+const MODULE_PAYMENT_PAYPAL_PRO_HS_DIALOG_CONNECTION_FAILED = 'Failed! Please review the Verify SSL Certificate settings and try again.';
+const MODULE_PAYMENT_PAYPAL_PRO_HS_DIALOG_CONNECTION_ERROR = 'An error occurred. Please refresh the page, review your settings, and try again.';
+?>
diff --git a/includes/languages/czech/modules/payment/paypal_pro_payflow_dp.php b/includes/languages/czech/modules/payment/paypal_pro_payflow_dp.php
new file mode 100644
index 000000000..b6add0562
--- /dev/null
+++ b/includes/languages/czech/modules/payment/paypal_pro_payflow_dp.php
@@ -0,0 +1,41 @@
+ View Online Documentation Visit PayPal Website ';
+
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_DP_ERROR_EXPRESS_MODULE = 'PayPal mandates the PayPal Express Checkout (Payflow Edition) payment module be enabled if this module is to be activated. This module will not load until the PayPal Express Checkout (Payflow Edition) module has been installed.';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_DP_ERROR_ADMIN_CURL = 'This module requires cURL to be enabled in PHP and will not load until it has been enabled on this webserver.';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_DP_ERROR_ADMIN_CONFIGURATION = 'This module will not load until the Vendor and Password parameters have been configured. Please edit and configure the settings of this module.';
+
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_DP_CARD_OWNER_FIRSTNAME = 'Card Owner First Name:';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_DP_CARD_OWNER_LASTNAME = 'Card Owner Last Name:';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_DP_CARD_NUMBER = 'Card Number:';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_DP_CARD_EXPIRES = 'Card Expiry Date:';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_DP_CARD_CVC = 'Card Security Code (CVV2):';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_DP_ERROR_ALL_FIELDS_REQUIRED = 'Error: All payment information fields are required.';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_DP_ERROR_GENERAL = 'Error: A general problem has occurred with the transaction. Please try again.';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_DP_ERROR_CFG_ERROR = 'Error: Payment module configuration error. Please verify the login credentials.';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_DP_ERROR_ADDRESS = 'Error: A match of the Shipping Address City, State, and Postal Code failed. Please try again.';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_DP_ERROR_DECLINED = 'Error: This transaction has been declined. Please try again.';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_DP_ERROR_INVALID_CREDIT_CARD = 'Error: The provided credit card information is invalid. Please try again.';
+
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_DP_DIALOG_CONNECTION_LINK_TITLE = 'Test API Server Connection';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_DP_DIALOG_CONNECTION_TITLE = 'API Server Connection Test';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_DP_DIALOG_CONNECTION_GENERAL_TEXT = 'Testing connection to server..';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_DP_DIALOG_CONNECTION_BUTTON_CLOSE = 'Close';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_DP_DIALOG_CONNECTION_TIME = 'Connection Time:';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_DP_DIALOG_CONNECTION_SUCCESS = 'Success!';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_DP_DIALOG_CONNECTION_FAILED = 'Failed! Please review the Verify SSL Certificate settings and try again.';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_DP_DIALOG_CONNECTION_ERROR = 'An error occurred. Please refresh the page, review your settings, and try again.';
+?>
diff --git a/includes/languages/czech/modules/payment/paypal_pro_payflow_ec.php b/includes/languages/czech/modules/payment/paypal_pro_payflow_ec.php
new file mode 100644
index 000000000..32843330e
--- /dev/null
+++ b/includes/languages/czech/modules/payment/paypal_pro_payflow_ec.php
@@ -0,0 +1,46 @@
+ View Online Documentation Visit PayPal Website ';
+
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_EC_ERROR_DIRECT_MODULE = 'PayPal mandates the PayPal Payments Pro (Payflow Edition) payment module be enabled if this module is to be activated. This module will not load until the PayPal Payments Pro (Payflow Edition) module has been installed.';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_EC_ERROR_ADMIN_CURL = 'This module requires cURL to be enabled in PHP and will not load until it has been enabled on this webserver.';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_EC_ERROR_ADMIN_CONFIGURATION = 'This module will not load until the Vendor and Password parameters have been configured. Please edit and configure the settings of this module.';
+
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_EC_TEXT_BUTTON = 'Checkout with PayPal';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_EC_BUTTON = 'https://www.paypalobjects.com/webstatic/en_US/btn/btn_checkout_pp_142x27.png';
+
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_EC_TEXT_COMMENTS = 'Comments:';
+
+ define('MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_EC_EMAIL_PASSWORD', 'An account has automatically been created for you with the following e-mail address and password:' . "\n\n" . 'Store Account E-Mail Address: %s' . "\n" . 'Store Account Password: %s' . "\n\n");
+
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_EC_ERROR_GENERAL = 'Error: A general problem has occurred with the transaction. Please try again.';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_EC_ERROR_CFG_ERROR = 'Error: Payment module configuration error. Please verify the login credentials.';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_EC_ERROR_ADDRESS = 'Error: A match of the Shipping Address City, State, and Postal Code failed. Please try again.';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_EC_ERROR_DECLINED = 'Error: This transaction has been declined. Please try again.';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_EC_ERROR_EXPRESS_DISABLED = 'Error: PayPal Express Checkout has been disabled for this merchant. Please contact PayPal Customer Service.';
+
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_EC_DIALOG_CONNECTION_LINK_TITLE = 'Test API Server Connection';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_EC_DIALOG_CONNECTION_TITLE = 'API Server Connection Test';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_EC_DIALOG_CONNECTION_GENERAL_TEXT = 'Testing connection to server..';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_EC_DIALOG_CONNECTION_BUTTON_CLOSE = 'Close';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_EC_DIALOG_CONNECTION_TIME = 'Connection Time:';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_EC_DIALOG_CONNECTION_SUCCESS = 'Success!';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_EC_DIALOG_CONNECTION_FAILED = 'Failed! Please review the Verify SSL Certificate settings and try again.';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_EC_DIALOG_CONNECTION_ERROR = 'An error occurred. Please refresh the page, review your settings, and try again.';
+
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_EC_ERROR_NO_SHIPPING_AVAILABLE_TO_SHIPPING_ADDRESS = 'Shipping is currently not available for the selected shipping address. Please select or create a new shipping address to use with your purchase.';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_EC_WARNING_LOCAL_LOGIN_REQUIRED = 'Please log into your account to verify the order.';
+const MODULE_PAYMENT_PAYPAL_PRO_PAYFLOW_EC_NOTICE_CHECKOUT_CONFIRMATION = 'Please review and confirm your order below. Your order will not be processed until it has been confirmed.';
+?>
diff --git a/includes/languages/czech/modules/payment/paypal_standard.php b/includes/languages/czech/modules/payment/paypal_standard.php
new file mode 100644
index 000000000..b8c150565
--- /dev/null
+++ b/includes/languages/czech/modules/payment/paypal_standard.php
@@ -0,0 +1,31 @@
+ View Online Documentation Visit PayPal Website ';
+
+const MODULE_PAYMENT_PAYPAL_STANDARD_ERROR_ADMIN_CURL = 'This module requires cURL to be enabled in PHP and will not load until it has been enabled on this webserver.';
+const MODULE_PAYMENT_PAYPAL_STANDARD_ERROR_ADMIN_CONFIGURATION = 'This module will not load until the Seller E-Mail Address parameter has been configured. Please edit and configure the settings of this module.';
+
+ define('MODULE_PAYMENT_PAYPAL_STANDARD_TEXT_PAYPAL_RETURN_BUTTON', 'Back to ' . STORE_NAME); // Maximum length 60 characters, otherwise it is ignored.
+const MODULE_PAYMENT_PAYPAL_STANDARD_TEXT_INVALID_TRANSACTION = 'Could not verify the PayPal transaction. Please try again.';
+
+const MODULE_PAYMENT_PAYPAL_STANDARD_DIALOG_CONNECTION_LINK_TITLE = 'Test API Server Connection';
+const MODULE_PAYMENT_PAYPAL_STANDARD_DIALOG_CONNECTION_TITLE = 'API Server Connection Test';
+const MODULE_PAYMENT_PAYPAL_STANDARD_DIALOG_CONNECTION_GENERAL_TEXT = 'Testing connection to server..';
+const MODULE_PAYMENT_PAYPAL_STANDARD_DIALOG_CONNECTION_BUTTON_CLOSE = 'Close';
+const MODULE_PAYMENT_PAYPAL_STANDARD_DIALOG_CONNECTION_TIME = 'Connection Time:';
+const MODULE_PAYMENT_PAYPAL_STANDARD_DIALOG_CONNECTION_SUCCESS = 'Success!';
+const MODULE_PAYMENT_PAYPAL_STANDARD_DIALOG_CONNECTION_FAILED = 'Failed! Please review the Verify SSL Certificate settings and try again.';
+const MODULE_PAYMENT_PAYPAL_STANDARD_DIALOG_CONNECTION_ERROR = 'An error occurred. Please refresh the page, review your settings, and try again.';
+?>
diff --git a/includes/languages/czech/modules/payment/paypoint_secpay.php b/includes/languages/czech/modules/payment/paypoint_secpay.php
new file mode 100644
index 000000000..370bec795
--- /dev/null
+++ b/includes/languages/czech/modules/payment/paypoint_secpay.php
@@ -0,0 +1,20 @@
+ CC#: 4444333322221111 Expiry: Any';
+const MODULE_PAYMENT_PAYPOINT_SECPAY_TEXT_ERROR = 'Credit Card Error!';
+const MODULE_PAYMENT_PAYPOINT_SECPAY_TEXT_ERROR_MESSAGE = 'There has been an error processing your credit card. Please try again.';
+const MODULE_PAYMENT_PAYPOINT_SECPAY_TEXT_ERROR_MESSAGE_N = 'Transaction was not authorised. Please try another card.';
+const MODULE_PAYMENT_PAYPOINT_SECPAY_TEXT_ERROR_MESSAGE_C = 'There was a communications problem in contacing the bank, please try again.';
+?>
diff --git a/includes/languages/czech/modules/payment/pm2checkout.php b/includes/languages/czech/modules/payment/pm2checkout.php
new file mode 100644
index 000000000..b3e40cb84
--- /dev/null
+++ b/includes/languages/czech/modules/payment/pm2checkout.php
@@ -0,0 +1,20 @@
+ Visit 2Checkout Website (info) Using the above link to signup at 2Checkout grants osCommerce a small financial bonus for referring a customer. Credit Card Test Info: CC#: 4111111111111111 Expiry: Any';
+const MODULE_PAYMENT_2CHECKOUT_TEXT_ERROR_MESSAGE = 'There has been an error processing your credit card. Please try again.';
+const MODULE_PAYMENT_2CHECKOUT_TEXT_WARNING_DEMO_MODE = 'In Review: Transaction performed in demo mode.';
+const MODULE_PAYMENT_2CHECKOUT_TEXT_WARNING_TRANSACTION_ORDER = 'In Review: Transaction total did not match order total.';
+?>
\ No newline at end of file
diff --git a/includes/languages/czech/modules/payment/psigate.php b/includes/languages/czech/modules/payment/psigate.php
new file mode 100644
index 000000000..ca8186e20
--- /dev/null
+++ b/includes/languages/czech/modules/payment/psigate.php
@@ -0,0 +1,22 @@
+ CC#: 4111111111111111 Expiry: Any';
+const MODULE_PAYMENT_PSIGATE_TEXT_CREDIT_CARD_OWNER = 'Credit Card Owner:';
+const MODULE_PAYMENT_PSIGATE_TEXT_CREDIT_CARD_NUMBER = 'Credit Card Number:';
+const MODULE_PAYMENT_PSIGATE_TEXT_CREDIT_CARD_EXPIRES = 'Credit Card Expiry Date:';
+const MODULE_PAYMENT_PSIGATE_TEXT_TYPE = 'Type:';
+ define('MODULE_PAYMENT_PSIGATE_TEXT_JS_CC_NUMBER', '* The credit card number must be at least ' . CC_NUMBER_MIN_LENGTH . ' characters.\n');
+const MODULE_PAYMENT_PSIGATE_TEXT_ERROR_MESSAGE = 'There has been an error processing your credit card. Please try again.';
+const MODULE_PAYMENT_PSIGATE_TEXT_ERROR = 'Credit Card Error!';
+?>
\ No newline at end of file
diff --git a/includes/languages/czech/modules/payment/rbsworldpay_hosted.php b/includes/languages/czech/modules/payment/rbsworldpay_hosted.php
new file mode 100644
index 000000000..51a28b417
--- /dev/null
+++ b/includes/languages/czech/modules/payment/rbsworldpay_hosted.php
@@ -0,0 +1,23 @@
+ View Online Documentation Visit WorldPay Website ';
+
+const MODULE_PAYMENT_RBSWORLDPAY_HOSTED_ERROR_ADMIN_CONFIGURATION = 'This module will not load until the Installation ID parameter has been configured. Please edit and configure the settings of this module.';
+
+const MODULE_PAYMENT_RBSWORLDPAY_HOSTED_TEXT_WARNING_DEMO_MODE = 'Transaction performed in test mode.';
+
+const MODULE_PAYMENT_RBSWORLDPAY_HOSTED_TEXT_SUCCESSFUL_TRANSACTION = 'The payment has been successfully performed! You will be automatically redirected back to our website in 3 seconds.';
+const MODULE_PAYMENT_RBSWORLDPAY_HOSTED_TEXT_CONTINUE_BUTTON = 'Continue to %s';
+?>
diff --git a/includes/languages/czech/modules/payment/sage_pay_direct.php b/includes/languages/czech/modules/payment/sage_pay_direct.php
new file mode 100644
index 000000000..ce145f907
--- /dev/null
+++ b/includes/languages/czech/modules/payment/sage_pay_direct.php
@@ -0,0 +1,54 @@
+ View Online Documentation Visit Sage Pay Website (info) Using the above link to signup at Sage Pay grants osCommerce a small financial bonus for referring a customer. ';
+
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_ERROR_ADMIN_CURL = 'This module requires cURL to be enabled in PHP and will not load until it has been enabled on this webserver.';
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_ERROR_ADMIN_CONFIGURATION = 'This module will not load until the Vendor Login Name parameter has been configured. Please edit and configure the settings of this module.';
+
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_CREDIT_CARD_NEW = 'Enter a new Card';
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_CREDIT_CARD_TYPE = 'Card Type:';
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_CREDIT_CARD_OWNER = 'Name on Card:';
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_CREDIT_CARD_NUMBER = 'Card Number:';
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_CREDIT_CARD_STARTS = 'Start Date:';
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_CREDIT_CARD_STARTS_INFO = '(for Maestro and American Express cards only)';
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_CREDIT_CARD_EXPIRES = 'Expiry Date:';
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_CREDIT_CARD_ISSUE_NUMBER = 'Issue Number:';
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_CREDIT_CARD_ISSUE_NUMBER_INFO = '(for Maestro cards only)';
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_CREDIT_CARD_CVC = 'Security Code:';
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_CREDIT_CARD_SAVE = 'Save Card for next purchase?';
+
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_3DAUTH_TITLE = '3D Secure Verification';
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_3DAUTH_INFO = 'Please click on the CONTINUE button to authenticate your card at the website of your bank.';
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_3DAUTH_BUTTON = 'CONTINUE';
+
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_ERROR_TITLE = 'There has been an error processing your credit card';
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_ERROR_GENERAL = 'Please try again and if problems persist, please try another payment method.';
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_ERROR_CARDTYPE = 'The card type is not supported. Please try again with another card and if problems persist, please try another payment method.';
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_ERROR_CARDOWNER = 'The card owners name must be provided to complete the order. Please try again and if problems persist, please try another payment method.';
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_ERROR_CARDNUMBER = 'The card number was not able to be processed. Please try again and if problems persist, please try another payment method.';
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_ERROR_CARDSTART = 'The card start date was not able to be processed. Please try again and if problems persist, please try another payment method.';
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_ERROR_CARDEXPIRES = 'The card expiry date was not able to be processed. Please try again and if problems persist, please try another payment method.';
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_ERROR_CARDISSUE = 'The card issue number was not able to be processed. Please try again and if problems persist, please try another payment method.';
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_ERROR_CARDCVC = 'The card security code was not able to be processed. Please try again and if problems persist, please try another payment method.';
+
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_DIALOG_CONNECTION_LINK_TITLE = 'Test API Server Connection';
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_DIALOG_CONNECTION_TITLE = 'API Server Connection Test';
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_DIALOG_CONNECTION_GENERAL_TEXT = 'Testing connection to server..';
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_DIALOG_CONNECTION_BUTTON_CLOSE = 'Close';
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_DIALOG_CONNECTION_TIME = 'Connection Time:';
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_DIALOG_CONNECTION_SUCCESS = 'Success!';
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_DIALOG_CONNECTION_FAILED = 'Failed! Please review the Verify SSL Certificate settings and try again.';
+const MODULE_PAYMENT_SAGE_PAY_DIRECT_DIALOG_CONNECTION_ERROR = 'An error occurred. Please refresh the page, review your settings, and try again.';
+?>
diff --git a/includes/languages/czech/modules/payment/sage_pay_form.php b/includes/languages/czech/modules/payment/sage_pay_form.php
new file mode 100644
index 000000000..9502595cb
--- /dev/null
+++ b/includes/languages/czech/modules/payment/sage_pay_form.php
@@ -0,0 +1,22 @@
+ View Online Documentation Visit Sage Pay Website (info) Using the above link to signup at Sage Pay grants osCommerce a small financial bonus for referring a customer. ';
+
+const MODULE_PAYMENT_SAGE_PAY_FORM_ERROR_ADMIN_MCRYPT = 'This module requires Mcrypt to be enabled in PHP and will not load until it has been enabled on this webserver.';
+const MODULE_PAYMENT_SAGE_PAY_FORM_ERROR_ADMIN_CONFIGURATION = 'This module will not load until the Vendor Login Name and Encryption Password parameters have been configured. Please edit and configure the settings of this module.';
+
+const MODULE_PAYMENT_SAGE_PAY_FORM_ERROR_TITLE = 'There has been an error processing your order transaction';
+const MODULE_PAYMENT_SAGE_PAY_FORM_ERROR_GENERAL = 'Please try again and if problems persist, please try another payment method.';
+?>
diff --git a/includes/languages/czech/modules/payment/sage_pay_server.php b/includes/languages/czech/modules/payment/sage_pay_server.php
new file mode 100644
index 000000000..ba1015403
--- /dev/null
+++ b/includes/languages/czech/modules/payment/sage_pay_server.php
@@ -0,0 +1,31 @@
+ View Online Documentation Visit Sage Pay Website (info) Using the above link to signup at Sage Pay grants osCommerce a small financial bonus for referring a customer. ';
+
+const MODULE_PAYMENT_SAGE_PAY_SERVER_ERROR_ADMIN_CURL = 'This module requires cURL to be enabled in PHP and will not load until it has been enabled on this webserver.';
+const MODULE_PAYMENT_SAGE_PAY_SERVER_ERROR_ADMIN_CONFIGURATION = 'This module will not load until the Vendor Login Name parameter has been configured. Please edit and configure the settings of this module.';
+
+const MODULE_PAYMENT_SAGE_PAY_SERVER_ERROR_TITLE = 'There has been an error processing your credit card';
+const MODULE_PAYMENT_SAGE_PAY_SERVER_ERROR_GENERAL = 'Please try again and if problems persist, please try another payment method.';
+
+const MODULE_PAYMENT_SAGE_PAY_SERVER_DIALOG_CONNECTION_LINK_TITLE = 'Test API Server Connection';
+const MODULE_PAYMENT_SAGE_PAY_SERVER_DIALOG_CONNECTION_TITLE = 'API Server Connection Test';
+const MODULE_PAYMENT_SAGE_PAY_SERVER_DIALOG_CONNECTION_GENERAL_TEXT = 'Testing connection to server..';
+const MODULE_PAYMENT_SAGE_PAY_SERVER_DIALOG_CONNECTION_BUTTON_CLOSE = 'Close';
+const MODULE_PAYMENT_SAGE_PAY_SERVER_DIALOG_CONNECTION_TIME = 'Connection Time:';
+const MODULE_PAYMENT_SAGE_PAY_SERVER_DIALOG_CONNECTION_SUCCESS = 'Success!';
+const MODULE_PAYMENT_SAGE_PAY_SERVER_DIALOG_CONNECTION_FAILED = 'Failed! Please review the Verify SSL Certificate settings and try again.';
+const MODULE_PAYMENT_SAGE_PAY_SERVER_DIALOG_CONNECTION_ERROR = 'An error occurred. Please refresh the page, review your settings, and try again.';
+?>
diff --git a/includes/languages/czech/modules/pi/product_info/pi_buy_button.php b/includes/languages/czech/modules/pi/product_info/pi_buy_button.php
new file mode 100644
index 000000000..278e6f815
--- /dev/null
+++ b/includes/languages/czech/modules/pi/product_info/pi_buy_button.php
@@ -0,0 +1,16 @@
+This is a child module for use with the π system.';
+
+ const PI_BUY_BUTTON_TEXT = 'Add To Cart';
diff --git a/includes/languages/czech/modules/pi/product_info/pi_gallery.php b/includes/languages/czech/modules/pi/product_info/pi_gallery.php
new file mode 100644
index 000000000..15a594cec
--- /dev/null
+++ b/includes/languages/czech/modules/pi/product_info/pi_gallery.php
@@ -0,0 +1,19 @@
+This is a child module for use with the π system.';
+
+ const PI_GALLERY_ALBUM_NAME = 'Album for %s';
+ const PI_GALLERY_ALBUM_CLOSE = 'Close';
+
+
\ No newline at end of file
diff --git a/includes/languages/czech/modules/pi/product_info/pi_hall.php b/includes/languages/czech/modules/pi/product_info/pi_hall.php
new file mode 100644
index 000000000..b00350570
--- /dev/null
+++ b/includes/languages/czech/modules/pi/product_info/pi_hall.php
@@ -0,0 +1,19 @@
+This is a child module for use with the π system.';
+
+ const PI_HALL_EVENT_NAME = 'Event %s';
+ const PI_HALL_EVENT_CLOSE = 'Zavřít';
+
+
\ No newline at end of file
diff --git a/includes/languages/czech/modules/pi/product_info/pi_img_disclaimer.php b/includes/languages/czech/modules/pi/product_info/pi_img_disclaimer.php
new file mode 100644
index 000000000..3949e1fa9
--- /dev/null
+++ b/includes/languages/czech/modules/pi/product_info/pi_img_disclaimer.php
@@ -0,0 +1,16 @@
+This is a child module for use with the π system.';
+
+ const PI_IMG_DISCLAIMER_TEXT = 'Product may vary slightly from image representation.';
diff --git a/includes/languages/czech/modules/pi/product_info/pi_model.php b/includes/languages/czech/modules/pi/product_info/pi_model.php
new file mode 100644
index 000000000..1b5e1c3e8
--- /dev/null
+++ b/includes/languages/czech/modules/pi/product_info/pi_model.php
@@ -0,0 +1,16 @@
+This is a child module for use with the π system.';
+
+ const PI_MODEL_DISPLAY_MODEL = 'Model:%s ';
diff --git a/includes/languages/czech/modules/pi/product_info/pi_options_attributes.php b/includes/languages/czech/modules/pi/product_info/pi_options_attributes.php
new file mode 100644
index 000000000..d7d6ebf69
--- /dev/null
+++ b/includes/languages/czech/modules/pi/product_info/pi_options_attributes.php
@@ -0,0 +1,18 @@
+This is a child module for use with the Π system.';
+
+ const PI_OA_HEADING_TITLE = 'Available Options';
+
+ const PI_OA_ENFORCE_SELECTION = '--- Please Select ---';
diff --git a/includes/languages/czech/modules/shipping/flat.php b/includes/languages/czech/modules/shipping/flat.php
new file mode 100644
index 000000000..0cc86f526
--- /dev/null
+++ b/includes/languages/czech/modules/shipping/flat.php
@@ -0,0 +1,16 @@
+
diff --git a/includes/languages/czech/modules/shipping/item.php b/includes/languages/czech/modules/shipping/item.php
new file mode 100644
index 000000000..d3ec697c5
--- /dev/null
+++ b/includes/languages/czech/modules/shipping/item.php
@@ -0,0 +1,16 @@
+
diff --git a/includes/languages/czech/modules/shipping/table.php b/includes/languages/czech/modules/shipping/table.php
new file mode 100644
index 000000000..012e8d2fe
--- /dev/null
+++ b/includes/languages/czech/modules/shipping/table.php
@@ -0,0 +1,18 @@
+
diff --git a/includes/languages/czech/modules/shipping/zones.php b/includes/languages/czech/modules/shipping/zones.php
new file mode 100644
index 000000000..401add8bb
--- /dev/null
+++ b/includes/languages/czech/modules/shipping/zones.php
@@ -0,0 +1,36 @@
+
diff --git a/includes/languages/czech/password_reset.php b/includes/languages/czech/password_reset.php
new file mode 100644
index 000000000..354d95df4
--- /dev/null
+++ b/includes/languages/czech/password_reset.php
@@ -0,0 +1,30 @@
+
diff --git a/includes/languages/czech/privacy.php b/includes/languages/czech/privacy.php
new file mode 100644
index 000000000..463134ad9
--- /dev/null
+++ b/includes/languages/czech/privacy.php
@@ -0,0 +1,17 @@
+
\ No newline at end of file
diff --git a/includes/languages/czech/product_info.php b/includes/languages/czech/product_info.php
new file mode 100644
index 000000000..1d128f5c1
--- /dev/null
+++ b/includes/languages/czech/product_info.php
@@ -0,0 +1,31 @@
+kliknout zde .');
+const TEXT_DATE_ADDED = 'bylo přidáno do katalogu %s.';
+define('TEXT_DATE_AVAILABLE',
+ 'bude v prodeji od %s. ');
+const TEXT_ALSO_PURCHASED_PRODUCTS = 'Zákazníci zároveň koupili také:';
+const TEXT_RELATED_PRODUCTS = 'Související produkty:';
+const TEXT_PRODUCT_OPTIONS = 'možnosti:';
+const TEXT_CLICK_TO_ENLARGE = 'klikněte pro zvětšení';
+
+const DISPLAY_PRODUCTS_DESCRIPTION_LONG = 'zobrazit podrobný popis';
+const DISPLAY_USAGE = 'zobrazit použití';
+const DISPLAY_PROPERTIES = 'zobrazit vlastnosti';
+const DISPLAY_TIPS = 'zobrazit tipy';
+const DISPLAY_COMPONENTS = 'zobrazit složení';
+const DISPLAY_ALSO_PURCHASED = 'zobrazit "Ostatní zákazníci zároveň koupili"';
+const DISPLAY_RELATED = 'zobrazit související produkty';
diff --git a/includes/languages/czech/products_new.php b/includes/languages/czech/products_new.php
new file mode 100644
index 000000000..efd7d999f
--- /dev/null
+++ b/includes/languages/czech/products_new.php
@@ -0,0 +1,21 @@
+
\ No newline at end of file
diff --git a/includes/languages/czech/shopping_cart.php b/includes/languages/czech/shopping_cart.php
new file mode 100644
index 000000000..ed31bf6af
--- /dev/null
+++ b/includes/languages/czech/shopping_cart.php
@@ -0,0 +1,29 @@
+Please alter the quantity of products marked with ('.STOCK_MARK_PRODUCT_OUT_OF_STOCK.'), Thank you',
+ true);
+define('OUT_OF_STOCK_CAN_CHECKOUT',
+ 'Zboží označené '.STOCK_MARK_PRODUCT_OUT_OF_STOCK.' dont exist in desired quantity in our stock. You can buy them anyway and check the quantity we have in stock for immediate deliver in the checkout process.',
+ true);
+
+const TEXT_ALTERNATIVE_CHECKOUT_METHODS = '- OR -';
+const FREE_SHIPPING_REMAINING_1 = 'Nakupte ještě za ';
+const FREE_SHIPPING_REMAINING_2 = ' a získejte dopravu zdarma';
+const REMOVE_FROM_CART = 'Odstranit';
diff --git a/includes/languages/czech/specials.php b/includes/languages/czech/specials.php
new file mode 100644
index 000000000..2af9ef0db
--- /dev/null
+++ b/includes/languages/czech/specials.php
@@ -0,0 +1,24 @@
+ Kvůli vaší bezpečnosti se budete muset znovu přihlásit do svého účtu, abyste mohli nakupovat online. Některé starší prohlížeče, jako například Konqueror 3.1, nemají schopnost automaticky vytvářet zabezpečené ID relace SSL, které požadujeme. Pokud používáte takový prohlížeč, doporučujeme použít jiný prohlížeč, například Microsoft Internet Explorer, Mozilla Firefox, Chrome, abyste mohli pokračovat v online nákupu. Toto ověření bezpečnosti provádíme ve váš prospěch, proto prosíme omluvte, pokud jsme vám tím způsobili něco nepříjemného. Prosíme kontaktujte vlastníka obchodu pokud máte nějaké dotazy týkající se tohoto problému, nebo objednejte zboží e-mailem..',
+ true);
+
+const BOX_INFORMATION_HEADING = 'Ochrana osobních údajů a zabezpečení';
+define('BOX_INFORMATION',
+ 'Ověřujeme ID relace SSL automaticky vygenerované vaším prohlížečem při každé žádosti o bezpečnostní stránku na tomto serveru. Tímto ověřením zajistíte, že ten kdo používá právě tuto stránku s vaším účtem jste opravdu vy a ne někdo jiný.',
+ true);
+?>
diff --git a/includes/languages/czech/testimonials.php b/includes/languages/czech/testimonials.php
new file mode 100644
index 000000000..4664eb839
--- /dev/null
+++ b/includes/languages/czech/testimonials.php
@@ -0,0 +1,17 @@
+
\ No newline at end of file
diff --git a/includes/modules/payment/csob.php b/includes/modules/payment/csob.php
new file mode 100644
index 000000000..8af802a33
--- /dev/null
+++ b/includes/modules/payment/csob.php
@@ -0,0 +1,353 @@
+ ';
+ const CSOB_ERROR = '! ';
+ const CSOB_OK = '✔ ';
+
+ /**
+ * Last GW Response
+ * @var string
+ */
+ private $lastMessage = '';
+ public $logo = '';
+
+ /**
+ * Payment's nest
+ * @var \PureOSC\Payment
+ */
+ public $payment = null;
+
+ /**
+ * Order's place
+ * @var PureOSC\Order
+ */
+ public $order = null;
+
+ /**
+ * CSOB PayGW
+ */
+ public function __construct() {
+ parent::__construct();
+
+ //$this->signature = 'purehtml|csob|2.3';
+ $this->api_version = '1.8';
+
+ $this->public_title = MODULE_PAYMENT_CSOB_TEXT_TITLE;
+ $this->sort_order = $this->sort_order ?? 0;
+// $this->order_status = defined('MODULE_PAYMENT_CSOB_PREPARE_ORDER_STATUS_ID') && ((int) MODULE_PAYMENT_CSOB_PREPARE_ORDER_STATUS_ID > 0) ? (int) MODULE_PAYMENT_CSOB_PREPARE_ORDER_STATUS_ID : 0;
+
+ $this->sort_order = defined('MODULE_PAYMENT_CSOB_SORT_ORDER') ? MODULE_PAYMENT_CSOB_SORT_ORDER : 0;
+
+ $this->order_status = defined('MODULE_PAYMENT_CSOB_PREPARE_ORDER_STATUS_ID') && ((int) MODULE_PAYMENT_CSOB_PREPARE_ORDER_STATUS_ID > 0) ? (int) MODULE_PAYMENT_CSOB_PREPARE_ORDER_STATUS_ID : 0;
+
+ $exts = array_filter(['xmlwriter', 'SimpleXML', 'openssl', 'dom', 'hash', 'curl'], function ($extension) {
+ return !extension_loaded($extension);
+ });
+
+ $csob_error = null;
+ if (!empty($exts)) {
+ $csob_error = sprintf(self::get_constant('MODULE_PAYMENT_CSOB_ERROR_ADMIN_PHP_EXTENSIONS'), implode(' ', $exts));
+ }
+
+ if (!isset($csob_error) && defined('MODULE_PAYMENT_CSOB_STATUS')) {
+ if (!tep_not_null(MODULE_PAYMENT_CSOB_MERCHANT_ID) || !tep_not_null(MODULE_PAYMENT_CSOB_PUBLIC_KEY) || !tep_not_null(MODULE_PAYMENT_CSOB_SECRET_KEY) || !tep_not_null(MODULE_PAYMENT_CSOB_PUBLIC_KEY)) {
+ $csob_error = MODULE_PAYMENT_CSOB_ERROR_ADMIN_CONFIGURATION;
+ }
+ }
+
+ if (!isset($csob_error) && defined('MODULE_PAYMENT_CSOB_STATUS')) {
+
+ }
+
+ if (isset($csob_error)) {
+ $this->description = '' . $csob_error . '
' . $this->description;
+
+ $this->enabled = false;
+ }
+
+ if (array_key_exists('admin', $_SESSION)) {
+ $this->description .= ' ' . $this->checkPayGwSatus();
+ $this->description .= ' ' . str_replace('logo);
+ }
+ }
+
+ private function prepare_payment() {
+ //tep_redirect(tep_href_link('checkout_payment.php', 'payment_error=' . 'csob'));
+
+ $response = $this->getPayment()->requestPayment(Guarantor::ensure_global('order'));
+ $this->lastMessage = $response['resultMessage'];
+ $_SESSION['csob_error'] = $response['resultMessage'];
+ if ($response['resultCode'] != 0) {
+ tep_redirect(tep_href_link('checkout_payment.php', 'payment_error=' . 'csob' . '&error=' . $response['resultCode']));
+ }
+
+ tep_redirect(htmlspecialchars($this->payment->getApi()->getPaymentProcessUrl($this->payment)));
+ }
+
+ /**
+ * Update payment status
+ *
+ * @return null
+ */
+ public function update_status() {
+ if (!$this->enabled || !isset($GLOBALS['order'])) {
+ return;
+ }
+
+ // disable the module if the order only contains virtual products
+ if ('virtual' === $GLOBALS['order']->content_type) {
+ $this->enabled = false;
+ return;
+ }
+
+ if (isset($GLOBALS['order']->delivery['country']['id'])) {
+ $this->update_status_by($GLOBALS['order']->delivery);
+ }
+
+ if (array_key_exists('payId', $_REQUEST)) {
+ $this->getPayment()->setPayId($_REQUEST['payId']);
+ $this->getPayment()->setStatus(intval($_REQUEST['paymentStatus']));
+ $this->getPayment()->savePaymentState();
+ }
+
+ $this->setOrderStatusByPaymentState();
+ }
+
+ public function getPayment() {
+
+ if (is_object($this->payment) === false) {
+ $this->payment = new \PureOSC\Payment(Guarantor::ensure_global('order'));
+ } else {
+
+ }
+
+ return $this->payment;
+ }
+
+ public function pre_confirmation_check() {
+ PureOSC\Order::redirectForOrderStatus($this->getOrder()->getStatus());
+ }
+
+ public function confirmation() {
+ return false;
+ }
+
+ public function process_button() {
+ return false;
+ }
+
+ public function before_process() {
+ global $order;
+ $order->info['order_status'] = MODULE_PAYMENT_CSOB_ORDER_STATUS_ID;
+
+ switch (WebPage::getRequestValue('resultCode')) {
+ case '0':
+ default:
+ $order->info['order_status'] = MODULE_PAYMENT_CSOB_PROBLEM_ORDER_STATUS_ID;
+ break;
+ }
+
+ tep_db_query("UPDATE orders SET orders_status = " . (int) $order->info['order_status'] . ", last_modified = NOW() WHERE orders_id = " . (int) $order->get_id());
+
+ return true;
+ }
+
+ public function after_process() {
+ $this->prepare_payment();
+ return $this->success;
+ }
+
+ public function get_error() {
+ global $order;
+ $message = MODULE_PAYMENT_CSOB_ERROR_GENERAL;
+
+ if (isset($_SESSION['csob_error'])) {
+ $message = $_SESSION['csob_error'] . ' ' . $message;
+ unset($_SESSION['csob_error']);
+ } else {
+ if (!empty($_GET['error'])) {
+ $message .= "\n" . self::resultCodeMeaning($_GET['error']) . "\n";
+ }
+ }
+
+
+ $nextOrderid = current(tep_db_fetch_array(tep_db_query('SELECT MAX(orders_id) FROM orders'))) + 1;
+
+ tep_db_query("UPDATE orders SET orders_id = " . (int) $nextOrderid . ", last_modified = NOW() WHERE orders_id = " . (int) $order->get_id());
+ $order->info['orders_id'] = $nextOrderid;
+
+ $error = [
+ 'title' => MODULE_PAYMENT_CSOB_ERROR_TITLE,
+ 'error' => $message,
+ ];
+
+ return $error;
+ }
+
+ public function getOrder($orderId = null) {
+ $this->order = Guarantor::ensure_global('PureOSC\Order', $orderId ? $orderId : false);
+ return $this->order;
+ }
+
+ /**
+ * Check payment gate api availbility
+ *
+ * @return string
+ */
+ public function checkPayGwSatus() {
+ try {
+ $this->getPayment()->getApi()->testGetConnection();
+ $this->getPayment()->getApi()->testPostConnection();
+ $this->logo = self::CSOB_OK;
+ $status = 'PayGW Online';
+ } catch (Exception $e) {
+ $status = new Ease\TWB4\Label('warning', 'CSOB PayGW problem ' . $e->getMessage());
+ $this->logo = self::CSOB_ERROR;
+ }
+ return $status;
+ }
+
+ public function setOrderStatusByPaymentState($forceStatus = null) {
+ $paymentStatus = is_null($forceStatus) ? $this->getPayment()->getStatus() : $forceStatus;
+ $newOrderStatus = 0;
+ $currentOrderStatus = $this->getOrder()->getStatus();
+
+ switch ($paymentStatus) {
+ case 3: // Payment cancelled
+ $newOrderStatus = intval(MODULE_PAYMENT_CSOB_CANCELED_ORDER_STATUS_ID);
+ break;
+ case 4: // wait for process
+ case 7: // Wait for Accounting
+ $newOrderStatus = intval(MODULE_PAYMENT_CSOB_PROCESSING_ORDER_STATUS_ID);
+ $_SESSION['cart'] = new shoppingCart();
+ break;
+ case 8: // Payment Accounted
+ $newOrderStatus = intval(MODULE_PAYMENT_CSOB_DONE_ORDER_STATUS_ID);
+ $_SESSION['cart'] = new shoppingCart();
+ break;
+ case 5:
+ case 6:
+ $newOrderStatus = intval(MODULE_PAYMENT_CSOB_PROBLEM_ORDER_STATUS_ID);
+ break;
+ }
+
+ if ($newOrderStatus && ($newOrderStatus != $currentOrderStatus)) {
+ $this->getOrder()->setOrderState($newOrderStatus);
+ if ($paymentStatus) {
+ $this->getOrder()->addStatusHistory($newOrderStatus, \PureOSC\Payment::paymentStatusMeaning($paymentStatus) . true);
+ }
+ }
+ }
+
+ /**
+ * Payment method configuration keys definitoin
+ *
+ * @return array
+ */
+ protected function get_parameters() {
+ return [
+ 'MODULE_PAYMENT_CSOB_STATUS' => [
+ 'title' => 'Enable CSOB Payment gateway Module',
+ 'value' => 'True',
+ 'desc' => 'Do you want to accept CSOB Payment gateway payments?',
+ 'set_func' => "tep_cfg_select_option(['True', 'False'], ",
+ ],
+ 'MODULE_PAYMENT_CSOB_ZONE' => [
+ 'title' => 'Payment Zone',
+ 'value' => '0',
+ 'desc' => 'If a zone is selected, only enable this payment method for that zone.',
+ 'use_func' => 'tep_get_zone_class_title',
+ 'set_func' => 'tep_cfg_pull_down_zone_classes(',
+ ],
+ 'MODULE_PAYMENT_CSOB_SORT_ORDER' => [
+ 'title' => 'Sort order of display.',
+ 'value' => '0',
+ 'desc' => 'Sort order of display. Lowest is displayed first.',
+ ],
+ 'MODULE_PAYMENT_CSOB_ORDER_STATUS_ID' => [
+ 'title' => 'Set Order Status',
+ 'value' => self::ensure_order_status('MODULE_PAYMENT_CSOB_PROCESSING_ORDER_STATUS_ID', 'Card payment pending'),
+ 'desc' => 'Set the status of orders made with this payment module to this value',
+ 'set_func' => 'tep_cfg_pull_down_order_statuses(',
+ 'use_func' => 'tep_get_order_status_name',
+ ],
+ 'MODULE_PAYMENT_CSOB_MERCHANT_ID' => [
+ 'title' => _('Your merchant id'),
+ 'value' => '00000000',
+ 'desc' => _('Your merchant unique identifier (supplied by csob)')
+ ],
+ 'MODULE_PAYMENT_CSOB_SECRET_KEY' => [
+ 'title' => _('Your secret key'),
+ 'desc' => _('Your secret key (supplied by csob on https://platebnibrana.csob.cz/keygen/)')
+ ],
+ 'MODULE_PAYMENT_CSOB_PUBLIC_KEY' => [
+ 'title' => _('Your public key'),
+ 'value' => 'mips_iplatebnibrana.csob.cz.pub',
+ 'desc' => _('Your public key (supplied by csob)')
+ ],
+ 'MODULE_PAYMENT_CSOB_PROCESSING_ORDER_STATUS_ID' => [
+ 'title' => 'Wait for payment Order Status',
+ 'desc' => 'Include transaction information in this order status level',
+ 'value' => self::ensure_order_status('MODULE_PAYMENT_CSOB_PROCESSING_ORDER_STATUS_ID', 'Card payment pending'),
+ 'set_func' => 'tep_cfg_pull_down_order_statuses(',
+ 'use_func' => 'tep_get_order_status_name',
+ 'public' => true
+ ],
+ 'MODULE_PAYMENT_CSOB_DONE_ORDER_STATUS_ID' => [
+ 'title' => 'All OK settled payment Order Status',
+ 'desc' => 'Include transaction information in this order status level',
+ 'value' => self::ensure_order_status('MODULE_PAYMENT_CSOB_DONE_ORDER_STATUS_ID', 'Settled by Card'),
+ 'set_func' => 'tep_cfg_pull_down_order_statuses(',
+ 'use_func' => 'tep_get_order_status_name',
+ 'public' => true
+ ],
+ 'MODULE_PAYMENT_CSOB_CANCELED_ORDER_STATUS_ID' => [
+ 'title' => 'Canceled payment Order Status',
+ 'desc' => 'State for orders with cancelled paymen',
+ 'value' => self::ensure_order_status('MODULE_PAYMENT_CSOB_CANCELED_ORDER_STATUS_ID', 'Payment canceled'),
+ 'set_func' => 'tep_cfg_pull_down_order_statuses(',
+ 'use_func' => 'tep_get_order_status_name',
+ 'public' => true
+ ],
+ 'MODULE_PAYMENT_CSOB_PROCESSING_ORDER_STATUS_ID' => [
+ 'title' => 'Payment in progress Order Status',
+ 'desc' => 'State for orders with payment in progress',
+ 'value' => self::ensure_order_status('MODULE_PAYMENT_CSOB_PROCESSING_ORDER_STATUS_ID', 'Payment processing'),
+ 'set_func' => 'tep_cfg_pull_down_order_statuses(',
+ 'use_func' => 'tep_get_order_status_name',
+ 'public' => true
+ ],
+ 'MODULE_PAYMENT_CSOB_PROBLEM_ORDER_STATUS_ID' => [
+ 'title' => 'Card payment problem Order Status',
+ 'desc' => 'Include transaction information in this order status level',
+ 'value' => self::ensure_order_status('MODULE_PAYMENT_CSOB_PROBLEM_ORDER_STATUS_ID', 'Card payment problem'),
+ 'set_func' => 'tep_cfg_pull_down_order_statuses(',
+ 'use_func' => 'tep_get_order_status_name',
+ 'public' => true
+ ],
+ ];
+ }
+
+}
diff --git a/includes/system/versioned/1.0.7.10/cart_order_builder.php b/includes/system/versioned/1.0.7.10/cart_order_builder.php
index 6a375509c..2a5fa01dc 100644
--- a/includes/system/versioned/1.0.7.10/cart_order_builder.php
+++ b/includes/system/versioned/1.0.7.10/cart_order_builder.php
@@ -159,7 +159,7 @@ public static function build(&$order) {
$builder = new cart_order_builder($order);
$builder->build_info();
- $order->content_type = $_SESSION['cart']->get_content_type();
+ $order->content_type = array_key_exists('cart', $_SESSION) ? $_SESSION['cart']->get_content_type() : 'n/a' ;
$builder->build_addresses();
$builder->build_products();
diff --git a/phinx-adapter.php b/phinx-adapter.php
new file mode 100644
index 000000000..889703fbf
--- /dev/null
+++ b/phinx-adapter.php
@@ -0,0 +1,54 @@
+
+ * @copyright 2020 Vitex Software
+ */
+if (file_exists('./vendor/autoload.php')) {
+ include_once './vendor/autoload.php';
+} else {
+ include_once '../vendor/autoload.php';
+}
+
+include 'includes/configure.php';
+
+$prefix = file_exists('./db/') ? './db/' : '../db/';
+
+$sqlOptions = [
+ 'dbType' => constant('DB_CONNECTION'),
+ 'server' => constant('DB_SERVER'),
+ 'username' => constant('DB_SERVER_USERNAME'),
+ 'password' => constant('DB_SERVER_PASSWORD'),
+ 'database' => constant('DB_DATABASE'),
+ 'port' => constant('DB_SERVER_PORT')
+];
+
+if (strstr(Ease\Functions::cfg('DB_CONNECTION'), 'sqlite')) {
+ $sqlOptions['database'] = $prefix . basename(Ease\Functions::cfg('DB_DATABASE'));
+}
+$engine = new \Ease\SQL\Engine(null, $sqlOptions);
+$cfg = [
+ 'paths' => [
+ 'migrations' => [$prefix . 'migrations'],
+ 'seeds' => [$prefix . 'seeds']
+ ],
+ 'environments' =>
+ [
+ 'default_database' => 'development',
+ 'development' => [
+ 'adapter' => Ease\Functions::cfg('DB_CONNECTION'),
+ 'name' => $engine->database,
+ 'connection' => $engine->getPdo($sqlOptions)
+ ],
+ 'default_database' => 'production',
+ 'production' => [
+ 'adapter' => Ease\Functions::cfg('DB_CONNECTION'),
+ 'name' => $engine->database,
+ 'connection' => $engine->getPdo($sqlOptions)
+ ],
+ ]
+];
+
+return $cfg;
From a4b92459f5d2f3d41690f71dba56b8f5aececb15 Mon Sep 17 00:00:00 2001
From: Borbina <72229003+Borbina@users.noreply.github.com>
Date: Thu, 8 Apr 2021 18:53:20 +0200
Subject: [PATCH 02/29] error hunt
error hunt
---
includes/languages/czech.php | 94 +++++++++++--------
.../languages/czech/account_notifications.php | 9 +-
includes/languages/czech/address_book.php | 6 +-
.../languages/czech/address_book_process.php | 15 +--
.../languages/czech/checkout_confirmation.php | 9 +-
includes/languages/czech/checkout_payment.php | 5 +-
.../languages/czech/checkout_shipping.php | 8 +-
includes/languages/czech/contact_us.php | 9 +-
.../czech/hooks/shop/siteWide/MATC.php | 18 ++++
.../modules/header_tags/ht_category_title.php | 7 +-
.../header_tags/ht_manufacturer_title.php | 1 +
.../modules/header_tags/ht_product_title.php | 1 +
includes/languages/czech/shopping_cart.php | 6 +-
13 files changed, 111 insertions(+), 77 deletions(-)
create mode 100644 includes/languages/czech/hooks/shop/siteWide/MATC.php
diff --git a/includes/languages/czech.php b/includes/languages/czech.php
index 3d37925a2..bf9d01f4a 100644
--- a/includes/languages/czech.php
+++ b/includes/languages/czech.php
@@ -24,7 +24,7 @@
const DATE_FORMAT_SHORT = '%d.%m.%Y';
const DATE_FORMAT_LONG = '%A %d %B, %Y';
const DATE_FORMAT = 'd.m.Y';
-define('DATE_TIME_FORMAT', DATE_FORMAT_SHORT . ' %H:%M:%S');
+// define('DATE_TIME_FORMAT', DATE_FORMAT_SHORT . ' %H:%M:%S');
const JQUERY_DATEPICKER_I18N_CODE = 'cs';
const JQUERY_DATEPICKER_FORMAT = 'mm.dd.yy';
@@ -50,7 +50,7 @@ function tep_date_raw($date, $reverse = false) {
const CHARSET = 'utf-8';
// page title
-define('TITLE', STORE_NAME);
+// define('TITLE', STORE_NAME);
// header text in includes/header.php
const HEADER_TITLE_CREATE_ACCOUNT = 'Založit účet';
@@ -84,7 +84,7 @@ function tep_date_raw($date, $reverse = false) {
// javascript messages
const JS_ERROR = 'Ve formuláři je chyba.\n\nOpravte následující:\n\n';
-define('JS_REVIEW_TEXT', '* The \'Review Text\' musí mít nejméně ' . REVIEW_TEXT_MIN_LENGTH . ' znaků.\n');
+// define('JS_REVIEW_TEXT', '* The \'Review Text\' musí mít nejméně ' . REVIEW_TEXT_MIN_LENGTH . ' znaků.\n');
const JS_REVIEW_RATING = '* Přepočítat zboží\n';
const JS_ERROR_NO_PAYMENT_MODULE_SELECTED = '* Prosíme vyberte typ platby.\n';
@@ -106,39 +106,39 @@ function tep_date_raw($date, $reverse = false) {
const ENTRY_GENDER_ERROR = 'Vyberte pohlaví';
const ENTRY_GENDER_TEXT = '';
const ENTRY_FIRST_NAME = 'Jméno:';
-define('ENTRY_FIRST_NAME_ERROR', 'Vaše jméno musí mít nejméně ' . ENTRY_FIRST_NAME_MIN_LENGTH . ' znaků.');
+// define('ENTRY_FIRST_NAME_ERROR', 'Vaše jméno musí mít nejméně ' . ENTRY_FIRST_NAME_MIN_LENGTH . ' znaků.');
const ENTRY_FIRST_NAME_TEXT = '';
const ENTRY_LAST_NAME = 'Příjmení:';
-define('ENTRY_LAST_NAME_ERROR', 'Vaše příjmení musí mít nejméně ' . ENTRY_LAST_NAME_MIN_LENGTH . ' znaků.');
+// define('ENTRY_LAST_NAME_ERROR', 'Vaše příjmení musí mít nejméně ' . ENTRY_LAST_NAME_MIN_LENGTH . ' znaků.');
const ENTRY_LAST_NAME_TEXT = '';
const ENTRY_DATE_OF_BIRTH = 'Datum narození:';
const ENTRY_DATE_OF_BIRTH_ERROR = 'Datum narození ve tvaru: MM/DD/YYYY (eg 05/21/1970)';
const ENTRY_DATE_OF_BIRTH_TEXT = '* (např. 05/21/1970)';
const ENTRY_EMAIL_ADDRESS = 'E-Mail:';
-define('ENTRY_EMAIL_ADDRESS_ERROR', 'E-Mail musí mít nejméně ' . ENTRY_EMAIL_ADDRESS_MIN_LENGTH . ' znaků.');
+// define('ENTRY_EMAIL_ADDRESS_ERROR', 'E-Mail musí mít nejméně ' . ENTRY_EMAIL_ADDRESS_MIN_LENGTH . ' znaků.');
const ENTRY_EMAIL_ADDRESS_CHECK_ERROR = 'E-Mail je špatně, opravte jej.';
const ENTRY_EMAIL_ADDRESS_ERROR_EXISTS = 'Váš E-Mail je již v databázi.';
const ENTRY_EMAIL_ADDRESS_TEXT = '';
const ENTRY_STREET_ADDRESS = 'Ulice:';
-define('ENTRY_STREET_ADDRESS_ERROR', 'Ulice musí mít nejméně ' . ENTRY_STREET_ADDRESS_MIN_LENGTH . ' znaků.');
+// define('ENTRY_STREET_ADDRESS_ERROR', 'Ulice musí mít nejméně ' . ENTRY_STREET_ADDRESS_MIN_LENGTH . ' znaků.');
const ENTRY_STREET_ADDRESS_TEXT = '';
const ENTRY_SUBURB = 'Čtvrť:';
const ENTRY_SUBURB_TEXT = '';
const ENTRY_POST_CODE = 'PSČ:';
-define('ENTRY_POST_CODE_ERROR', 'PSČ musí mít nejméně ' . ENTRY_POSTCODE_MIN_LENGTH . ' znaků.');
+// define('ENTRY_POST_CODE_ERROR', 'PSČ musí mít nejméně ' . ENTRY_POSTCODE_MIN_LENGTH . ' znaků.');
const ENTRY_POST_CODE_TEXT = '';
const ENTRY_CITY = 'Město:';
-define('ENTRY_CITY_ERROR', 'Město musí mít nejméně ' . ENTRY_CITY_MIN_LENGTH . ' znaků.');
+// define('ENTRY_CITY_ERROR', 'Město musí mít nejméně ' . ENTRY_CITY_MIN_LENGTH . ' znaků.');
const ENTRY_CITY_TEXT = '';
const ENTRY_STATE = 'Stát:';
-define('ENTRY_STATE_ERROR', 'Stát musí mít nejméně ' . ENTRY_STATE_MIN_LENGTH . ' znaků.');
+// define('ENTRY_STATE_ERROR', 'Stát musí mít nejméně ' . ENTRY_STATE_MIN_LENGTH . ' znaků.');
const ENTRY_STATE_ERROR_SELECT = 'Please select a state from the States pull down menu.';
const ENTRY_STATE_TEXT = '';
const ENTRY_COUNTRY = 'Země:';
const ENTRY_COUNTRY_ERROR = 'Vyberte zemi v menu.';
const ENTRY_COUNTRY_TEXT = '';
const ENTRY_TELEPHONE_NUMBER = 'Telefon:';
-define('ENTRY_TELEPHONE_NUMBER_ERROR', 'Telefonní číslo musí mít nejméně ' . ENTRY_TELEPHONE_MIN_LENGTH . ' znaků.');
+// define('ENTRY_TELEPHONE_NUMBER_ERROR', 'Telefonní číslo musí mít nejméně ' . ENTRY_TELEPHONE_MIN_LENGTH . ' znaků.');
const ENTRY_TELEPHONE_NUMBER_TEXT = '';
const ENTRY_FAX_NUMBER = 'Fax:';
const ENTRY_FAX_NUMBER_TEXT = '';
@@ -147,17 +147,17 @@ function tep_date_raw($date, $reverse = false) {
const ENTRY_NEWSLETTER_YES = 'Přihlásit k zasílání';
const ENTRY_NEWSLETTER_NO = 'Odhlásit zasílání';
const ENTRY_PASSWORD = 'Heslo:';
-define('ENTRY_PASSWORD_ERROR', 'Vaše heslo musí mít nejméně ' . ENTRY_PASSWORD_MIN_LENGTH . ' znaků.');
+// define('ENTRY_PASSWORD_ERROR', 'Vaše heslo musí mít nejméně ' . ENTRY_PASSWORD_MIN_LENGTH . ' znaků.');
const ENTRY_PASSWORD_ERROR_NOT_MATCHING = 'Hesla nejsou stejná.';
const ENTRY_PASSWORD_TEXT = '';
const ENTRY_PASSWORD_CONFIRMATION = 'Heslo znovu:';
const ENTRY_PASSWORD_CONFIRMATION_TEXT = '';
const ENTRY_PASSWORD_CURRENT = 'Původní heslo:';
const ENTRY_PASSWORD_CURRENT_TEXT = '';
-define('ENTRY_PASSWORD_CURRENT_ERROR', 'Vaše heslo musí mít nejméně ' . ENTRY_PASSWORD_MIN_LENGTH . ' znaků.');
+// define('ENTRY_PASSWORD_CURRENT_ERROR', 'Vaše heslo musí mít nejméně ' . ENTRY_PASSWORD_MIN_LENGTH . ' znaků.');
const ENTRY_PASSWORD_NEW = 'Nové heslo:';
const ENTRY_PASSWORD_NEW_TEXT = '';
-define('ENTRY_PASSWORD_NEW_ERROR', 'Vaše nové heslo musí mít nejméně ' . ENTRY_PASSWORD_MIN_LENGTH . ' znaků.');
+// define('ENTRY_PASSWORD_NEW_ERROR', 'Vaše nové heslo musí mít nejméně ' . ENTRY_PASSWORD_MIN_LENGTH . ' znaků.');
const ENTRY_PASSWORD_NEW_ERROR_NOT_MATCHING = 'Hesla nejsou stejná.';
const PASSWORD_HIDDEN = '--HIDDEN--';
@@ -205,6 +205,7 @@ function tep_date_raw($date, $reverse = false) {
const IMAGE_BUTTON_UPDATE = 'obnovit';
const IMAGE_BUTTON_UPDATE_CART = 'Obnovit košík';
const IMAGE_BUTTON_WRITE_REVIEW = 'Zapsat hodnocení';
+const IMAGE_BUTTON_UPDATE_PREFERENCES = 'Obnov preference';
const SMALL_IMAGE_BUTTON_DELETE = 'Smazat';
const SMALL_IMAGE_BUTTON_EDIT = 'Upravit';
@@ -225,6 +226,8 @@ function tep_date_raw($date, $reverse = false) {
const TEXT_DESCENDINGLY = 'sestupně';
const TEXT_ASCENDINGLY = 'vzestupně';
const TEXT_BY = ' by ';
+// grid/list
+const TEXT_SORT_BY = 'seřadit podle';
const TEXT_REVIEW_BY = 'od %s';
const TEXT_REVIEW_WORD_COUNT = '%s slov';
@@ -276,6 +279,7 @@ function tep_date_raw($date, $reverse = false) {
const TABLE_HEADING_DATE_AVAILABLE = 'Nejnovější zboží';
const TABLE_HEADING_CUSTOM_DATE = 'Podle data';
const TABLE_HEADING_SORT_ORDER = 'Pořadí';
+const TABLE_HEADING_ORDERED = 'Nejprodávanější';
// product notifications
const PRODUCT_SUBSCRIBED = '%s bylo přidána do vašeho seznamu';
@@ -287,41 +291,55 @@ function tep_date_raw($date, $reverse = false) {
const MODULE_CONTENT_BOOTSTRAP_ROW_DESCRIPTION = '';
// sorting product_listing module
+// sitewide product listing
+const LISTING_SORT_DOWN = ' ';
+const LISTING_SORT_UP = ' ';
+const LISTING_SORT_UNSELECTED = ' ';
+
+// for new style internal pages
+const LINK_TEXT_EDIT = 'Edit ';
+const SHIPPING_FA_ICON = ' ';
+const PAYMENT_FA_ICON = ' ';
+
+const ENTRY_COMMENTS = 'Měli bychom něco vědět?';
+const ENTRY_COMMENTS_PLACEHOLDER = 'Přidejte komentář';
+const TABLE_HEADING_OR = '-nebo-';
+
/*
************************************************************************
-************** Custom Filenames can be defined below here **************
+************** Custom Filenames can be // defined below here **************
************** Raymond Burns **************
************************************************************************
*/
// SEO Header Tags Reloaded
//header titles
-const HEADER_CART_CONTENTS = ' %s kusů ';
-const HEADER_CART_NO_CONTENTS = ' košík ';
-const HEADER_ACCOUNT_LOGGED_OUT = ' přihlásit se/registrace ';
-const HEADER_ACCOUNT_LOGGED_IN = ' %s ';
-const HEADER_SITE_SETTINGS = ' Site Settings ';
-const HEADER_TOGGLE_NAV = 'Toggle Navigation';
-const HEADER_HOME = ' Home ';
-const HEADER_WHATS_NEW = ' Nové zboží ';
-const HEADER_SPECIALS = ' Speciální nabídky ';
-const HEADER_REVIEWS = ' Hodnocení ';
+//const HEADER_CART_CONTENTS = ' %s kusů ';
+//const HEADER_CART_NO_CONTENTS = ' košík ';
+//const HEADER_ACCOUNT_LOGGED_OUT = ' přihlásit se/registrace ';
+//const HEADER_ACCOUNT_LOGGED_IN = ' %s ';
+//const HEADER_SITE_SETTINGS = ' Site Settings ';
+//const HEADER_TOGGLE_NAV = 'Toggle Navigation';
+//const HEADER_HOME = ' Home ';
+//const HEADER_WHATS_NEW = ' Nové zboží ';
+//const HEADER_SPECIALS = ' Speciální nabídky ';
+//const HEADER_REVIEWS = ' Hodnocení ';
// header dropdowns
-const HEADER_ACCOUNT_LOGIN = ' Přihlásit';
-const HEADER_ACCOUNT_LOGOFF = ' Odhlásit';
-const HEADER_ACCOUNT = 'Můj účet';
-const HEADER_ACCOUNT_HISTORY = 'Moje objednávky';
-const HEADER_ACCOUNT_EDIT = 'Moje údaje';
-const HEADER_ACCOUNT_ADDRESS_BOOK = 'Můj Adresář';
-const HEADER_ACCOUNT_PASSWORD = 'Heslo';
-const HEADER_ACCOUNT_REGISTER = ' Registrace';
-const HEADER_CART_HAS_CONTENTS = '%s item(s), %s';
-const HEADER_CART_VIEW_CART = 'Košík';
-const HEADER_CART_CHECKOUT = ' Pokladna';
-const USER_LOCALIZATION = 'L: %s C: %s';
+//const HEADER_ACCOUNT_LOGIN = ' Přihlásit';
+//const HEADER_ACCOUNT_LOGOFF = ' Odhlásit';
+//const HEADER_ACCOUNT = 'Můj účet';
+//const HEADER_ACCOUNT_HISTORY = 'Moje objednávky';
+//const HEADER_ACCOUNT_EDIT = 'Moje údaje';
+//const HEADER_ACCOUNT_ADDRESS_BOOK = 'Můj Adresář';
+//const HEADER_ACCOUNT_PASSWORD = 'Heslo';
+//const HEADER_ACCOUNT_REGISTER = ' Registrace';
+//const HEADER_CART_HAS_CONTENTS = '%s item(s), %s';
+//const HEADER_CART_VIEW_CART = 'Košík';
+//const HEADER_CART_CHECKOUT = ' Pokladna';
+//const USER_LOCALIZATION = 'L: %s C: %s';
// CCGV
-const VOUCHER_BALANCE = 'Voucher Balance';
+const VOUCHER_BALANCE = 'Voucher Balanc';
const BOX_HEADING_GIFT_VOUCHER = 'Dárkový poukaz účet';
const GV_FAQ = 'Gift Voucher FAQ';
const IMAGE_REDEEM_VOUCHER = 'Redeem';
diff --git a/includes/languages/czech/account_notifications.php b/includes/languages/czech/account_notifications.php
index e69ebb5e2..3d32ed415 100644
--- a/includes/languages/czech/account_notifications.php
+++ b/includes/languages/czech/account_notifications.php
@@ -17,8 +17,7 @@
const MY_NOTIFICATIONS_TITLE = 'Moje upozornění na změny';
define('MY_NOTIFICATIONS_DESCRIPTION',
- 'Zde můžete nastavit zasílání změn vybraných produktů, které Vás zajímají. Chcete-li být informováni o všech změnách, vyberte položku Všechny změny .',
- true);
+ 'Zde můžete nastavit zasílání změn vybraných produktů, které Vás zajímají. Chcete-li být informováni o všech změnách, vyberte položku Všechny změny .');
const GLOBAL_NOTIFICATIONS_TITLE = 'Všechny změny';
define('GLOBAL_NOTIFICATIONS_DESCRIPTION',
@@ -26,11 +25,9 @@
const NOTIFICATIONS_TITLE = 'Vybrané změny';
define('NOTIFICATIONS_DESCRIPTION',
- 'Nechcete-li již být informováni o změnách vybraných produktů, zaškrtněte v menu a pokračujte.',
- true);
+ 'Nechcete-li již být informováni o změnách vybraných produktů, zaškrtněte v menu a pokračujte.');
define('NOTIFICATIONS_NON_EXISTING',
- 'Nemáte vybráno žádné upozornění. Chcete-li přidat konkrétní výrobek, zaškrtněte v menu zasílání informací.',
- true);
+ 'Nemáte vybráno žádné upozornění. Chcete-li přidat konkrétní výrobek, zaškrtněte v menu zasílání informací.');
define('SUCCESS_NOTIFICATIONS_UPDATED',
'Změna v zasílání upozornění potvrzena.');
diff --git a/includes/languages/czech/address_book.php b/includes/languages/czech/address_book.php
index f826ac6a8..253749cd1 100644
--- a/includes/languages/czech/address_book.php
+++ b/includes/languages/czech/address_book.php
@@ -17,14 +17,12 @@
const PRIMARY_ADDRESS_TITLE = 'Hlavní adresa';
define('PRIMARY_ADDRESS_DESCRIPTION',
- 'Tato adresa je nastavena pro zasílání a fakturování objednaného zboží. Také se použije pro výpočet daně a způsobu dodání.',
- true);
+ 'Tato adresa je nastavena pro zasílání a fakturování objednaného zboží. Také se použije pro výpočet daně a způsobu dodání.');
const ADDRESS_BOOK_TITLE = 'Vložené adresy';
const PRIMARY_ADDRESS = '(Hlavní adresa)';
define('TEXT_MAXIMUM_ENTRIES',
- 'POZNÁMKA: Maximálně zde můžete mít uloženo %s addres.',
- true);
+ 'POZNÁMKA: Maximálně zde můžete mít uloženo %s adres.');
?>
diff --git a/includes/languages/czech/address_book_process.php b/includes/languages/czech/address_book_process.php
index da4bc2651..bf3687ddf 100644
--- a/includes/languages/czech/address_book_process.php
+++ b/includes/languages/czech/address_book_process.php
@@ -22,26 +22,21 @@
const HEADING_TITLE_DELETE_ENTRY = 'Smazat vybranou adresu';
const DELETE_ADDRESS_TITLE = 'Smazat adresu';
-define('DELETE_ADDRESS_DESCRIPTION', 'Chcete opravdu smazat vybranou adresu?',
- true);
+define('DELETE_ADDRESS_DESCRIPTION', 'Chcete opravdu smazat vybranou adresu?');
const NEW_ADDRESS_TITLE = 'Přidat novou adresu';
const SELECTED_ADDRESS = 'Vybrat adresu';
const SET_AS_PRIMARY = 'Nastavit jako hlavní.';
-define('SUCCESS_ADDRESS_BOOK_ENTRY_DELETED', 'Vybraná adresa byla vymazána.',
- true);
+define('SUCCESS_ADDRESS_BOOK_ENTRY_DELETED', 'Vybraná adresa byla vymazána.');
define('SUCCESS_ADDRESS_BOOK_ENTRY_UPDATED',
'Váš adresář byl úspěšně aktualizován.');
define('WARNING_PRIMARY_ADDRESS_DELETION',
- 'Hlavní adresu nelze smazat. Nastavte jinou jako výchozí a pokračujte.',
- true);
+ 'Hlavní adresu nelze smazat. Nastavte jinou jako výchozí a pokračujte.');
-define('ERROR_NONEXISTING_ADDRESS_BOOK_ENTRY', 'Tato adresa v adresáři není.',
- true);
+define('ERROR_NONEXISTING_ADDRESS_BOOK_ENTRY', 'Tato adresa v adresáři není.');
define('ERROR_ADDRESS_BOOK_FULL',
- 'Váš adresář je plný. Smažte některou nepoužívanou adresu a potom přidejte novou.',
- true);
+ 'Váš adresář je plný. Smažte některou nepoužívanou adresu a potom přidejte novou.');
const ENTRY_COMPANY_NUMBER = 'IČ';
diff --git a/includes/languages/czech/checkout_confirmation.php b/includes/languages/czech/checkout_confirmation.php
index 465871341..94a9f83bc 100644
--- a/includes/languages/czech/checkout_confirmation.php
+++ b/includes/languages/czech/checkout_confirmation.php
@@ -28,4 +28,11 @@
const HEADING_ORDER_COMMENTS = 'Poznámka';
const TEXT_EDIT = 'Upravit';
-const EDIT_ITEM = '[upravit]';
+//const EDIT_ITEM = '[upravit]';
+
+const IMAGE_BUTTON_FINALISE_ORDER ='Zaplatit %s';
+
+const HEADING_QTY = 'Množství';
+
+const LIST_PRODUCTS = 'Produkty';
+const ORDER_DETAILS = 'Detaily objednávky';
\ No newline at end of file
diff --git a/includes/languages/czech/checkout_payment.php b/includes/languages/czech/checkout_payment.php
index 1ebeaf48f..eca2900cf 100644
--- a/includes/languages/czech/checkout_payment.php
+++ b/includes/languages/czech/checkout_payment.php
@@ -17,8 +17,7 @@
const TABLE_HEADING_BILLING_ADDRESS = 'Hlavní adresa';
define('TEXT_SELECTED_BILLING_DESTINATION',
- 'Vyberte nebo vytvořte hlavní adresu, je-li odlišná od adresy dodání.',
- true);
+ 'Vyberte nebo vytvořte hlavní adresu, je-li odlišná od adresy dodání.');
const TITLE_BILLING_ADDRESS = 'Hlavní adresa:';
const TABLE_HEADING_PAYMENT_METHOD = 'Vyberte způsob platby';
@@ -31,5 +30,5 @@
const TITLE_CONTINUE_CHECKOUT_PROCEDURE = 'Pokračujte v nákupu';
const TEXT_CONTINUE_CHECKOUT_PROCEDURE = 'potvrďte objednávku';
-
+const BUTTON_CONTINUE_CHECKOUT_PROCEDURE = 'Potvrďte objednávku';
const IMAGE_BUTTON_CONFIRMATION = 'souhrn';
diff --git a/includes/languages/czech/checkout_shipping.php b/includes/languages/czech/checkout_shipping.php
index d58779169..ad7b5af9f 100644
--- a/includes/languages/czech/checkout_shipping.php
+++ b/includes/languages/czech/checkout_shipping.php
@@ -28,10 +28,8 @@
const TABLE_HEADING_COMMENTS = 'Poznámka';
const TITLE_CONTINUE_CHECKOUT_PROCEDURE = 'pokračujte v nákupu';
-define('TEXT_CONTINUE_CHECKOUT_PROCEDURE', 'máte-li vybraný způsob dodání.',
- true);
-
+define('TEXT_CONTINUE_CHECKOUT_PROCEDURE', 'máte-li vybraný způsob dodání.');
+const BUTTON_CONTINUE_CHECKOUT_PROCEDURE = 'Pokračujte k platbě';
define('ERROR_NO_SHIPPING_AVAILABLE_TO_SHIPPING_ADDRESS',
- 'Na tuto dodací adresu nelze zboží doručit. Prosíme vyberte nebo vytvořte novou dodací adresu.',
- true);
+ 'Na tuto dodací adresu nelze zboží doručit. Prosíme vyberte nebo vytvořte novou dodací adresu.');
const IMAGE_BUTTON_PAYMENT = 'platba';
diff --git a/includes/languages/czech/contact_us.php b/includes/languages/czech/contact_us.php
index 1feba4cc5..473f7e0ab 100644
--- a/includes/languages/czech/contact_us.php
+++ b/includes/languages/czech/contact_us.php
@@ -13,13 +13,16 @@
const HEADING_TITLE = 'Kontaktujte nás';
const NAVBAR_TITLE = 'Kontaktujte nás';
const TEXT_SUCCESS = 'Váš dotaz byl odeslán provozovateli obchodu.';
-define('EMAIL_SUBJECT', 'Dotaz ze serveru '.STORE_NAME);
+define('EMAIL_SUBJECT', 'Dotaz ze serveru %s');
const ENTRY_NAME = 'Jméno:';
const ENTRY_EMAIL = 'E-Mail:';
const ENTRY_ENQUIRY = 'Dotaz/zpráva:';
+const ENTRY_NAME_TEXT = '';
+const ENTRY_EMAIL_TEXT = '';
+
+const ENTRY_ENQUIRY_TEXT = '';
define('ERROR_ACTION_RECORDER',
- 'Vaše zpráva nebyla odeslána! Chcete-li odeslat dotaz, zkuste to znovu za %s minut. Omlouváme se za případné nepohodlí, toto opatření slouží jako ochrana před automatizovanými útoky na poštovní server.',
- true);
+ 'Vaše zpráva nebyla odeslána! Chcete-li odeslat dotaz, zkuste to znovu za %s minut. Omlouváme se za případné nepohodlí, toto opatření slouží jako ochrana před automatizovanými útoky na poštovní server.');
?>
diff --git a/includes/languages/czech/hooks/shop/siteWide/MATC.php b/includes/languages/czech/hooks/shop/siteWide/MATC.php
new file mode 100644
index 000000000..062dc4b5b
--- /dev/null
+++ b/includes/languages/czech/hooks/shop/siteWide/MATC.php
@@ -0,0 +1,18 @@
+T&C and Privacy policies.';
+
+// for the modal popup
+const MATC_BUTTON_CLOSE = 'Close';
diff --git a/includes/languages/czech/modules/header_tags/ht_category_title.php b/includes/languages/czech/modules/header_tags/ht_category_title.php
index 73adcfe7c..4267e1e35 100644
--- a/includes/languages/czech/modules/header_tags/ht_category_title.php
+++ b/includes/languages/czech/modules/header_tags/ht_category_title.php
@@ -10,6 +10,7 @@
Released under the GNU General Public License
*/
-const MODULE_HEADER_TAGS_CATEGORY_TITLE_TITLE = 'Category Title';
-const MODULE_HEADER_TAGS_CATEGORY_TITLE_DESCRIPTION = 'Add the title of the current category to the page title';
-?>
+const MODULE_HEADER_TAGS_CATEGORY_TITLE_TITLE = 'Kategorie';
+const MODULE_HEADER_TAGS_CATEGORY_TITLE_DESCRIPTION = 'Popis kategorie';
+const MODULE_HEADER_TAGS_CATEGORY_SEO_SEPARATOR = ' | ';
+?>
\ No newline at end of file
diff --git a/includes/languages/czech/modules/header_tags/ht_manufacturer_title.php b/includes/languages/czech/modules/header_tags/ht_manufacturer_title.php
index 7ce752a3c..5a52df5c2 100644
--- a/includes/languages/czech/modules/header_tags/ht_manufacturer_title.php
+++ b/includes/languages/czech/modules/header_tags/ht_manufacturer_title.php
@@ -12,4 +12,5 @@
const MODULE_HEADER_TAGS_MANUFACTURER_TITLE_TITLE = 'Manufacturer Title';
const MODULE_HEADER_TAGS_MANUFACTURER_TITLE_DESCRIPTION = 'Add the title of the current manufacturer to the page title';
+const MODULE_HEADER_TAGS_MANUFACTURER_SEO_SEPARATOR = ' | ';
?>
diff --git a/includes/languages/czech/modules/header_tags/ht_product_title.php b/includes/languages/czech/modules/header_tags/ht_product_title.php
index ec4149d2e..c7fdd7897 100644
--- a/includes/languages/czech/modules/header_tags/ht_product_title.php
+++ b/includes/languages/czech/modules/header_tags/ht_product_title.php
@@ -12,4 +12,5 @@
const MODULE_HEADER_TAGS_PRODUCT_TITLE_TITLE = 'Product Title';
const MODULE_HEADER_TAGS_PRODUCT_TITLE_DESCRIPTION = 'Add the title of the current product to the page title';
+const MODULE_HEADER_TAGS_PRODUCT_SEO_SEPARATOR = ' | ';
?>
diff --git a/includes/languages/czech/shopping_cart.php b/includes/languages/czech/shopping_cart.php
index ed31bf6af..a2a970cea 100644
--- a/includes/languages/czech/shopping_cart.php
+++ b/includes/languages/czech/shopping_cart.php
@@ -17,11 +17,9 @@
const SUB_TITLE_TOTAL = 'Celkem k úhradě:';
define('OUT_OF_STOCK_CANT_CHECKOUT',
- 'Zboží označené '.STOCK_MARK_PRODUCT_OUT_OF_STOCK.' dont exist in desired quantity in our stock. Please alter the quantity of products marked with ('.STOCK_MARK_PRODUCT_OUT_OF_STOCK.'), Thank you',
- true);
+ 'Zboží označené '.STOCK_MARK_PRODUCT_OUT_OF_STOCK.' dont exist in desired quantity in our stock. Please alter the quantity of products marked with ('.STOCK_MARK_PRODUCT_OUT_OF_STOCK.'), Thank you');
define('OUT_OF_STOCK_CAN_CHECKOUT',
- 'Zboží označené '.STOCK_MARK_PRODUCT_OUT_OF_STOCK.' dont exist in desired quantity in our stock. You can buy them anyway and check the quantity we have in stock for immediate deliver in the checkout process.',
- true);
+ 'Zboží označené '.STOCK_MARK_PRODUCT_OUT_OF_STOCK.' dont exist in desired quantity in our stock. You can buy them anyway and check the quantity we have in stock for immediate deliver in the checkout process.');
const TEXT_ALTERNATIVE_CHECKOUT_METHODS = '- OR -';
const FREE_SHIPPING_REMAINING_1 = 'Nakupte ještě za ';
From a64388a3331d67ea32e560544584696e7ee66d69 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=ADt=C4=9Bzslav=20Dvo=C5=99=C3=A1k?=
Date: Sat, 17 Apr 2021 08:29:51 +0200
Subject: [PATCH 03/29] Czech Localization fix for create account.
---
.gitignore | 1 +
composer.lock | 111 ++++++++----------
includes/languages/czech.php | 46 +-------
includes/languages/czech/create_account.php | 8 +-
.../customer_data/cd_address_book_id.php | 14 +++
.../czech/modules/customer_data/cd_city.php | 18 +++
.../modules/customer_data/cd_company.php | 18 +++
.../modules/customer_data/cd_country.php | 19 +++
.../customer_data/cd_date_account_created.php | 14 +++
.../customer_data/cd_default_address_id.php | 14 +++
.../czech/modules/customer_data/cd_dob.php | 26 ++++
.../customer_data/cd_email_address.php | 23 ++++
.../customer_data/cd_email_username.php | 14 +++
.../czech/modules/customer_data/cd_fax.php | 18 +++
.../modules/customer_data/cd_firstname.php | 18 +++
.../czech/modules/customer_data/cd_gender.php | 21 ++++
.../czech/modules/customer_data/cd_id.php | 14 +++
.../customer_data/cd_informal_short_name.php | 14 +++
.../modules/customer_data/cd_lastname.php | 19 +++
.../czech/modules/customer_data/cd_name_2.php | 14 +++
.../modules/customer_data/cd_newsletter.php | 21 ++++
.../modules/customer_data/cd_password.php | 25 ++++
.../cd_password_confirmation.php | 19 +++
.../customer_data/cd_password_reset.php | 14 +++
.../modules/customer_data/cd_postcode.php | 19 +++
.../customer_data/cd_sortable_name_2.php | 14 +++
.../czech/modules/customer_data/cd_state.php | 19 +++
.../customer_data/cd_street_address.php | 18 +++
.../czech/modules/customer_data/cd_suburb.php | 18 +++
.../modules/customer_data/cd_telephone.php | 18 +++
.../customer_data/cd_traditional_address.php | 14 +++
.../cd_traditional_short_name.php | 18 +++
nbproject/project.properties | 7 ++
nbproject/project.xml | 9 ++
34 files changed, 573 insertions(+), 104 deletions(-)
create mode 100644 includes/languages/czech/modules/customer_data/cd_address_book_id.php
create mode 100644 includes/languages/czech/modules/customer_data/cd_city.php
create mode 100644 includes/languages/czech/modules/customer_data/cd_company.php
create mode 100644 includes/languages/czech/modules/customer_data/cd_country.php
create mode 100644 includes/languages/czech/modules/customer_data/cd_date_account_created.php
create mode 100644 includes/languages/czech/modules/customer_data/cd_default_address_id.php
create mode 100644 includes/languages/czech/modules/customer_data/cd_dob.php
create mode 100644 includes/languages/czech/modules/customer_data/cd_email_address.php
create mode 100644 includes/languages/czech/modules/customer_data/cd_email_username.php
create mode 100644 includes/languages/czech/modules/customer_data/cd_fax.php
create mode 100644 includes/languages/czech/modules/customer_data/cd_firstname.php
create mode 100644 includes/languages/czech/modules/customer_data/cd_gender.php
create mode 100644 includes/languages/czech/modules/customer_data/cd_id.php
create mode 100644 includes/languages/czech/modules/customer_data/cd_informal_short_name.php
create mode 100644 includes/languages/czech/modules/customer_data/cd_lastname.php
create mode 100644 includes/languages/czech/modules/customer_data/cd_name_2.php
create mode 100644 includes/languages/czech/modules/customer_data/cd_newsletter.php
create mode 100644 includes/languages/czech/modules/customer_data/cd_password.php
create mode 100644 includes/languages/czech/modules/customer_data/cd_password_confirmation.php
create mode 100644 includes/languages/czech/modules/customer_data/cd_password_reset.php
create mode 100644 includes/languages/czech/modules/customer_data/cd_postcode.php
create mode 100644 includes/languages/czech/modules/customer_data/cd_sortable_name_2.php
create mode 100644 includes/languages/czech/modules/customer_data/cd_state.php
create mode 100644 includes/languages/czech/modules/customer_data/cd_street_address.php
create mode 100644 includes/languages/czech/modules/customer_data/cd_suburb.php
create mode 100644 includes/languages/czech/modules/customer_data/cd_telephone.php
create mode 100644 includes/languages/czech/modules/customer_data/cd_traditional_address.php
create mode 100644 includes/languages/czech/modules/customer_data/cd_traditional_short_name.php
create mode 100644 nbproject/project.properties
create mode 100644 nbproject/project.xml
diff --git a/.gitignore b/.gitignore
index 698f5dca4..f94631086 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,3 +15,4 @@
/vendor/
/ext/composer/
+/nbproject/private/
diff --git a/composer.lock b/composer.lock
index 5ca582968..8e4b193a8 100644
--- a/composer.lock
+++ b/composer.lock
@@ -198,18 +198,22 @@
},
{
"name": "fpdo/fluentpdo",
- "version": "v2.2.0",
+ "version": "v2.2.1",
"source": {
"type": "git",
"url": "https://github.com/envms/fluentpdo.git",
- "reference": "8684e2d22ebbcdf4cdcdf7bbe7558459ceb31260"
+ "reference": "90048d9ae637278ccde922f197b11483df3a48ea"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/envms/fluentpdo/zipball/8684e2d22ebbcdf4cdcdf7bbe7558459ceb31260",
- "reference": "8684e2d22ebbcdf4cdcdf7bbe7558459ceb31260",
+ "url": "https://api.github.com/repos/envms/fluentpdo/zipball/90048d9ae637278ccde922f197b11483df3a48ea",
+ "reference": "90048d9ae637278ccde922f197b11483df3a48ea",
"shasum": ""
},
+ "require": {
+ "ext-pdo": "*",
+ "php": "^7.1"
+ },
"require-dev": {
"envms/fluent-test": "^1.0",
"phpunit/phpunit": "^8.0"
@@ -246,9 +250,9 @@
],
"support": {
"issues": "https://github.com/envms/fluentpdo/issues",
- "source": "https://github.com/envms/fluentpdo/tree/v2.2.0"
+ "source": "https://github.com/envms/fluentpdo/tree/v2.2.1"
},
- "time": "2020-09-30T14:24:57+00:00"
+ "time": "2021-02-22T23:26:57+00:00"
},
{
"name": "ondrakoupil/csob-eapi-paygate",
@@ -742,12 +746,12 @@
"source": {
"type": "git",
"url": "https://github.com/VitexSoftware/php-ease-fluentpdo.git",
- "reference": "10bb044f142bb04eb4be6e299611d1151dd19266"
+ "reference": "dd791f11e7e28cc5a9e706bf93237453dd2c877d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/VitexSoftware/php-ease-fluentpdo/zipball/10bb044f142bb04eb4be6e299611d1151dd19266",
- "reference": "10bb044f142bb04eb4be6e299611d1151dd19266",
+ "url": "https://api.github.com/repos/VitexSoftware/php-ease-fluentpdo/zipball/dd791f11e7e28cc5a9e706bf93237453dd2c877d",
+ "reference": "dd791f11e7e28cc5a9e706bf93237453dd2c877d",
"shasum": ""
},
"require": {
@@ -790,7 +794,7 @@
"type": "patreon"
}
],
- "time": "2021-04-05T22:22:46+00:00"
+ "time": "2021-04-11T09:45:46+00:00"
},
{
"name": "vitexsoftware/ease-html",
@@ -849,12 +853,12 @@
"source": {
"type": "git",
"url": "https://github.com/VitexSoftware/php-ease-twbootstrap4.git",
- "reference": "5d38eed09a14c9d895d9b762abaa5c24fc622268"
+ "reference": "bf5b68270580c1f3ecd54596d88e964028d0c51b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/VitexSoftware/php-ease-twbootstrap4/zipball/5d38eed09a14c9d895d9b762abaa5c24fc622268",
- "reference": "5d38eed09a14c9d895d9b762abaa5c24fc622268",
+ "url": "https://api.github.com/repos/VitexSoftware/php-ease-twbootstrap4/zipball/bf5b68270580c1f3ecd54596d88e964028d0c51b",
+ "reference": "bf5b68270580c1f3ecd54596d88e964028d0c51b",
"shasum": ""
},
"require": {
@@ -891,7 +895,7 @@
"type": "patreon"
}
],
- "time": "2021-04-04T15:55:23+00:00"
+ "time": "2021-04-15T20:09:42+00:00"
},
{
"name": "vitexsoftware/ease-twbootstrap4-widgets-flexibee",
@@ -1226,22 +1230,28 @@
},
{
"name": "psr/container",
- "version": "1.1.x-dev",
+ "version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/php-fig/container.git",
- "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf"
+ "reference": "2ae37329ee82f91efadc282cc2d527fd6065a5ef"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf",
- "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/2ae37329ee82f91efadc282cc2d527fd6065a5ef",
+ "reference": "2ae37329ee82f91efadc282cc2d527fd6065a5ef",
"shasum": ""
},
"require": {
"php": ">=7.2.0"
},
+ "default-branch": true,
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
"autoload": {
"psr-4": {
"Psr\\Container\\": "src/"
@@ -1268,9 +1278,9 @@
],
"support": {
"issues": "https://github.com/php-fig/container/issues",
- "source": "https://github.com/php-fig/container/tree/1.1.x"
+ "source": "https://github.com/php-fig/container/tree/2.0.1"
},
- "time": "2021-03-05T17:36:06+00:00"
+ "time": "2021-03-24T13:40:57+00:00"
},
{
"name": "psr/log",
@@ -1381,12 +1391,12 @@
"source": {
"type": "git",
"url": "https://github.com/cakephp/phinx.git",
- "reference": "a96c5465a8f3dd64e39c9115a5d383b8d01928ce"
+ "reference": "bdd8f337fcdf24c20d0b708664a85ca9b8d5dbe2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cakephp/phinx/zipball/a96c5465a8f3dd64e39c9115a5d383b8d01928ce",
- "reference": "a96c5465a8f3dd64e39c9115a5d383b8d01928ce",
+ "url": "https://api.github.com/repos/cakephp/phinx/zipball/bdd8f337fcdf24c20d0b708664a85ca9b8d5dbe2",
+ "reference": "bdd8f337fcdf24c20d0b708664a85ca9b8d5dbe2",
"shasum": ""
},
"require": {
@@ -1460,7 +1470,7 @@
"issues": "https://github.com/cakephp/phinx/issues",
"source": "https://github.com/cakephp/phinx/tree/master"
},
- "time": "2021-03-17T03:50:36+00:00"
+ "time": "2021-04-16T14:27:37+00:00"
},
{
"name": "symfony/config",
@@ -1468,12 +1478,12 @@
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
- "reference": "6105c88534b857c14191af17c1fbe60a1abd30ad"
+ "reference": "39e6039cd5081176ed1d6c4fa7cfde22a236788b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/config/zipball/6105c88534b857c14191af17c1fbe60a1abd30ad",
- "reference": "6105c88534b857c14191af17c1fbe60a1abd30ad",
+ "url": "https://api.github.com/repos/symfony/config/zipball/39e6039cd5081176ed1d6c4fa7cfde22a236788b",
+ "reference": "39e6039cd5081176ed1d6c4fa7cfde22a236788b",
"shasum": ""
},
"require": {
@@ -1539,7 +1549,7 @@
"type": "tidelift"
}
],
- "time": "2021-04-07T16:09:00+00:00"
+ "time": "2021-04-14T15:38:26+00:00"
},
{
"name": "symfony/console",
@@ -1547,12 +1557,12 @@
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "5198e2322c7c403048423b5a0b7c134a92630ebe"
+ "reference": "1d077bd682f7c0794d5f5b794b16e2b30febec6b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/5198e2322c7c403048423b5a0b7c134a92630ebe",
- "reference": "5198e2322c7c403048423b5a0b7c134a92630ebe",
+ "url": "https://api.github.com/repos/symfony/console/zipball/1d077bd682f7c0794d5f5b794b16e2b30febec6b",
+ "reference": "1d077bd682f7c0794d5f5b794b16e2b30febec6b",
"shasum": ""
},
"require": {
@@ -1638,7 +1648,7 @@
"type": "tidelift"
}
],
- "time": "2021-04-07T16:09:00+00:00"
+ "time": "2021-04-16T17:36:28+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -2265,34 +2275,29 @@
},
{
"name": "symfony/service-contracts",
- "version": "dev-main",
+ "version": "v1.1.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
- "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb"
+ "reference": "191afdcb5804db960d26d8566b7e9a2843cab3a0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb",
- "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/191afdcb5804db960d26d8566b7e9a2843cab3a0",
+ "reference": "191afdcb5804db960d26d8566b7e9a2843cab3a0",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "psr/container": "^1.1"
+ "php": "^7.1.3"
},
"suggest": {
+ "psr/container": "",
"symfony/service-implementation": ""
},
- "default-branch": true,
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "2.4-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
+ "dev-master": "1.1-dev"
}
},
"autoload": {
@@ -2325,23 +2330,9 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/service-contracts/tree/main"
+ "source": "https://github.com/symfony/service-contracts/tree/v1.1.2"
},
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-04-01T10:43:52+00:00"
+ "time": "2019-05-28T07:50:59+00:00"
},
{
"name": "symfony/string",
diff --git a/includes/languages/czech.php b/includes/languages/czech.php
index bf9d01f4a..cf0ac440c 100644
--- a/includes/languages/czech.php
+++ b/includes/languages/czech.php
@@ -105,60 +105,26 @@ function tep_date_raw($date, $reverse = false) {
const ENTRY_GENDER = 'Pohlaví:';
const ENTRY_GENDER_ERROR = 'Vyberte pohlaví';
const ENTRY_GENDER_TEXT = '';
-const ENTRY_FIRST_NAME = 'Jméno:';
+//const ENTRY_FIRST_NAME = 'Jméno:';
// define('ENTRY_FIRST_NAME_ERROR', 'Vaše jméno musí mít nejméně ' . ENTRY_FIRST_NAME_MIN_LENGTH . ' znaků.');
-const ENTRY_FIRST_NAME_TEXT = '';
-const ENTRY_LAST_NAME = 'Příjmení:';
-// define('ENTRY_LAST_NAME_ERROR', 'Vaše příjmení musí mít nejméně ' . ENTRY_LAST_NAME_MIN_LENGTH . ' znaků.');
-const ENTRY_LAST_NAME_TEXT = '';
+//const ENTRY_FIRST_NAME_TEXT = '';
+//const ENTRY_LAST_NAME_TEXT = '';
const ENTRY_DATE_OF_BIRTH = 'Datum narození:';
const ENTRY_DATE_OF_BIRTH_ERROR = 'Datum narození ve tvaru: MM/DD/YYYY (eg 05/21/1970)';
const ENTRY_DATE_OF_BIRTH_TEXT = '* (např. 05/21/1970)';
-const ENTRY_EMAIL_ADDRESS = 'E-Mail:';
+//const ENTRY_EMAIL_ADDRESS = 'E-Mail:';
// define('ENTRY_EMAIL_ADDRESS_ERROR', 'E-Mail musí mít nejméně ' . ENTRY_EMAIL_ADDRESS_MIN_LENGTH . ' znaků.');
-const ENTRY_EMAIL_ADDRESS_CHECK_ERROR = 'E-Mail je špatně, opravte jej.';
-const ENTRY_EMAIL_ADDRESS_ERROR_EXISTS = 'Váš E-Mail je již v databázi.';
-const ENTRY_EMAIL_ADDRESS_TEXT = '';
-const ENTRY_STREET_ADDRESS = 'Ulice:';
+// const ENTRY_EMAIL_ADDRESS_CHECK_ERROR = 'E-Mail je špatně, opravte jej.';
+//const ENTRY_STREET_ADDRESS = 'Ulice:';
// define('ENTRY_STREET_ADDRESS_ERROR', 'Ulice musí mít nejméně ' . ENTRY_STREET_ADDRESS_MIN_LENGTH . ' znaků.');
-const ENTRY_STREET_ADDRESS_TEXT = '';
-const ENTRY_SUBURB = 'Čtvrť:';
-const ENTRY_SUBURB_TEXT = '';
-const ENTRY_POST_CODE = 'PSČ:';
-// define('ENTRY_POST_CODE_ERROR', 'PSČ musí mít nejméně ' . ENTRY_POSTCODE_MIN_LENGTH . ' znaků.');
-const ENTRY_POST_CODE_TEXT = '';
-const ENTRY_CITY = 'Město:';
// define('ENTRY_CITY_ERROR', 'Město musí mít nejméně ' . ENTRY_CITY_MIN_LENGTH . ' znaků.');
-const ENTRY_CITY_TEXT = '';
-const ENTRY_STATE = 'Stát:';
// define('ENTRY_STATE_ERROR', 'Stát musí mít nejméně ' . ENTRY_STATE_MIN_LENGTH . ' znaků.');
-const ENTRY_STATE_ERROR_SELECT = 'Please select a state from the States pull down menu.';
-const ENTRY_STATE_TEXT = '';
-const ENTRY_COUNTRY = 'Země:';
-const ENTRY_COUNTRY_ERROR = 'Vyberte zemi v menu.';
-const ENTRY_COUNTRY_TEXT = '';
const ENTRY_TELEPHONE_NUMBER = 'Telefon:';
// define('ENTRY_TELEPHONE_NUMBER_ERROR', 'Telefonní číslo musí mít nejméně ' . ENTRY_TELEPHONE_MIN_LENGTH . ' znaků.');
const ENTRY_TELEPHONE_NUMBER_TEXT = '';
const ENTRY_FAX_NUMBER = 'Fax:';
const ENTRY_FAX_NUMBER_TEXT = '';
-const ENTRY_NEWSLETTER = 'Newsletter:';
-const ENTRY_NEWSLETTER_TEXT = '';
-const ENTRY_NEWSLETTER_YES = 'Přihlásit k zasílání';
-const ENTRY_NEWSLETTER_NO = 'Odhlásit zasílání';
-const ENTRY_PASSWORD = 'Heslo:';
// define('ENTRY_PASSWORD_ERROR', 'Vaše heslo musí mít nejméně ' . ENTRY_PASSWORD_MIN_LENGTH . ' znaků.');
-const ENTRY_PASSWORD_ERROR_NOT_MATCHING = 'Hesla nejsou stejná.';
-const ENTRY_PASSWORD_TEXT = '';
-const ENTRY_PASSWORD_CONFIRMATION = 'Heslo znovu:';
-const ENTRY_PASSWORD_CONFIRMATION_TEXT = '';
-const ENTRY_PASSWORD_CURRENT = 'Původní heslo:';
-const ENTRY_PASSWORD_CURRENT_TEXT = '';
-// define('ENTRY_PASSWORD_CURRENT_ERROR', 'Vaše heslo musí mít nejméně ' . ENTRY_PASSWORD_MIN_LENGTH . ' znaků.');
-const ENTRY_PASSWORD_NEW = 'Nové heslo:';
-const ENTRY_PASSWORD_NEW_TEXT = '';
-// define('ENTRY_PASSWORD_NEW_ERROR', 'Vaše nové heslo musí mít nejméně ' . ENTRY_PASSWORD_MIN_LENGTH . ' znaků.');
-const ENTRY_PASSWORD_NEW_ERROR_NOT_MATCHING = 'Hesla nejsou stejná.';
const PASSWORD_HIDDEN = '--HIDDEN--';
// constants for use in tep_prev_next_display function
diff --git a/includes/languages/czech/create_account.php b/includes/languages/czech/create_account.php
index 842c12812..387c9de1b 100644
--- a/includes/languages/czech/create_account.php
+++ b/includes/languages/czech/create_account.php
@@ -23,7 +23,7 @@
define('TEXT_ORIGIN_LOGIN',
'poznámka: Pokud už máte účet, přihlašte se zde .',
- true);
+);
define('EMAIL_SUBJECT', 'Vítáme Vás v eshopu '.STORE_NAME);
define('EMAIL_GREET_MR', 'Vážený pane %s,'."\n\n");
@@ -50,14 +50,14 @@
// CCGV
define('EMAIL_GV_INCENTIVE_HEADER',
"\n\n".'As part of our welcome to new customers, we have sent you an e-Gift Voucher worth %s',
- true);
+);
define('EMAIL_GV_REDEEM',
'The redeem code for the e-Gift Voucher is %s, you can enter the redeem code when checking out while making a purchase',
- true);
+);
const EMAIL_GV_LINK = 'or by following this link ';
define('EMAIL_COUPON_INCENTIVE_HEADER',
'Congratulations, to make your first visit to our online shop a more rewarding experience we are sending you an e-Discount Coupon.'."\n".' Below are details of the Discount Coupon created just for you'."\n");
define('EMAIL_COUPON_REDEEM',
'To use the coupon enter the redeem code which is %s during checkout while making a purchase',
- true);
+);
?>
diff --git a/includes/languages/czech/modules/customer_data/cd_address_book_id.php b/includes/languages/czech/modules/customer_data/cd_address_book_id.php
new file mode 100644
index 000000000..547904aad
--- /dev/null
+++ b/includes/languages/czech/modules/customer_data/cd_address_book_id.php
@@ -0,0 +1,14 @@
+
+
+ org.netbeans.modules.php.project
+
+
+ purehtml/ce-phoenix
+
+
+
From bcc63ef861eb745cf3e4e65930cc311a76b300c0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=ADt=C4=9Bzslav=20Dvo=C5=99=C3=A1k?=
Date: Wed, 21 Apr 2021 04:18:50 +0200
Subject: [PATCH 04/29] Initial aplha of CSOB payment
---
composer.json | 4 +-
composer.lock | 1860 ++++++++---------
.../20210126180402_csob_to_order.php | 20 +
.../20210420040259_last_api_request.php | 25 +
ext/modules/payment/csob/welcomeback.php | 36 +
includes/apps/csob/PUREHTML_CSOB.php | 863 ++++++++
.../apps/csob/hooks/admin/orders/action.php | 26 +
includes/apps/csob/hooks/admin/orders/tab.php | 336 +++
.../english/hooks/admin/orders/tab.php | 25 +
.../apps/paypal/hooks/admin/orders/action.php | 2 +-
includes/classes/Order.php | 27 +-
includes/classes/Payment.php | 112 +-
includes/functions/database.php | 2 +-
includes/hooks/admin/orders/csob.php | 38 +
includes/languages/czech/account_history.php | 5 +
.../modules/notifications/n_checkout.php | 25 +
.../notifications/n_create_account.php | 20 +
.../modules/notifications/n_update_order.php | 30 +
.../english/modules/payment/csob.php | 10 +-
includes/modules/order_total/ot_subtotal.php | 2 +-
includes/modules/payment/csob.php | 41 +-
.../system/versioned/1.0.0.0/order_total.php | 5 +-
.../versioned/1.0.7.10/cart_order_builder.php | 12 +-
includes/system/versioned/1.0.7.10/order.php | 2 +-
.../system/versioned/1.0.7.3/order_total.php | 4 +-
nbproject/project.xml | 2 +-
phinx-adapter.php | 5 +-
.../ext/modules/payment/csob/welcomeback.php | 0
.../includes/hooks/shop/siteWide/csob.php | 54 +
29 files changed, 2619 insertions(+), 974 deletions(-)
create mode 100644 db/migrations/20210126180402_csob_to_order.php
create mode 100644 db/migrations/20210420040259_last_api_request.php
create mode 100644 ext/modules/payment/csob/welcomeback.php
create mode 100644 includes/apps/csob/PUREHTML_CSOB.php
create mode 100644 includes/apps/csob/hooks/admin/orders/action.php
create mode 100644 includes/apps/csob/hooks/admin/orders/tab.php
create mode 100644 includes/apps/csob/languages/english/hooks/admin/orders/tab.php
create mode 100644 includes/hooks/admin/orders/csob.php
create mode 100644 includes/languages/czech/modules/notifications/n_checkout.php
create mode 100644 includes/languages/czech/modules/notifications/n_create_account.php
create mode 100644 includes/languages/czech/modules/notifications/n_update_order.php
create mode 100644 templates/default/includes/ext/modules/payment/csob/welcomeback.php
create mode 100644 templates/default/includes/hooks/shop/siteWide/csob.php
diff --git a/composer.json b/composer.json
index cdc49da9d..0cd5c9111 100644
--- a/composer.json
+++ b/composer.json
@@ -15,9 +15,7 @@
"vitexsoftware/ease-twbootstrap4-widgets-flexibee": "dev-abraflexi",
"adamstipak/webpay-php": "dev-master",
"vitexsoftware/ease-fluentpdo": "*",
- "ondrakoupil/csob-eapi-paygate": "dev-master"
- },
- "require-dev": {
+ "ondrakoupil/csob-eapi-paygate": "dev-master",
"robmorgan/phinx": "dev-master"
},
"autoload": {
diff --git a/composer.lock b/composer.lock
index 8e4b193a8..62b36712f 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "da2f3c7b05ba285b37b91ceb592c9734",
+ "content-hash": "989ca3700f40f322e3a5388bc869a3b8",
"packages": [
{
"name": "adamstipak/webpay-php",
@@ -55,6 +55,231 @@
},
"time": "2021-03-30T13:33:43+00:00"
},
+ {
+ "name": "cakephp/core",
+ "version": "4.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/core.git",
+ "reference": "e4a19ad27b5a3e58db65d5dbb6f9b2e41eeec3ec"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/core/zipball/e4a19ad27b5a3e58db65d5dbb6f9b2e41eeec3ec",
+ "reference": "e4a19ad27b5a3e58db65d5dbb6f9b2e41eeec3ec",
+ "shasum": ""
+ },
+ "require": {
+ "cakephp/utility": "^4.0",
+ "php": ">=7.2.0"
+ },
+ "suggest": {
+ "cakephp/cache": "To use Configure::store() and restore().",
+ "cakephp/event": "To use PluginApplicationInterface or plugin applications."
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Cake\\Core\\": "."
+ },
+ "files": [
+ "functions.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "CakePHP Community",
+ "homepage": "https://github.com/cakephp/core/graphs/contributors"
+ }
+ ],
+ "description": "CakePHP Framework Core classes",
+ "homepage": "https://cakephp.org",
+ "keywords": [
+ "cakephp",
+ "core",
+ "framework"
+ ],
+ "support": {
+ "forum": "https://stackoverflow.com/tags/cakephp",
+ "irc": "irc://irc.freenode.org/cakephp",
+ "issues": "https://github.com/cakephp/cakephp/issues",
+ "source": "https://github.com/cakephp/core"
+ },
+ "time": "2019-11-26T02:27:16+00:00"
+ },
+ {
+ "name": "cakephp/database",
+ "version": "4.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/database.git",
+ "reference": "44b6164a6a22c086f9b26733c7981b8cc378ddb1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/database/zipball/44b6164a6a22c086f9b26733c7981b8cc378ddb1",
+ "reference": "44b6164a6a22c086f9b26733c7981b8cc378ddb1",
+ "shasum": ""
+ },
+ "require": {
+ "cakephp/core": "^4.0",
+ "cakephp/datasource": "^4.0",
+ "php": ">=7.2.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Cake\\Database\\": "."
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "CakePHP Community",
+ "homepage": "https://github.com/cakephp/database/graphs/contributors"
+ }
+ ],
+ "description": "Flexible and powerful Database abstraction library with a familiar PDO-like API",
+ "homepage": "https://cakephp.org",
+ "keywords": [
+ "abstraction",
+ "cakephp",
+ "database",
+ "database abstraction",
+ "pdo"
+ ],
+ "support": {
+ "forum": "https://stackoverflow.com/tags/cakephp",
+ "irc": "irc://irc.freenode.org/cakephp",
+ "issues": "https://github.com/cakephp/cakephp/issues",
+ "source": "https://github.com/cakephp/database"
+ },
+ "time": "2019-11-21T22:47:36+00:00"
+ },
+ {
+ "name": "cakephp/datasource",
+ "version": "4.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/datasource.git",
+ "reference": "19c486bd2176bd1d3fa30114492552a8bf9f443c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/datasource/zipball/19c486bd2176bd1d3fa30114492552a8bf9f443c",
+ "reference": "19c486bd2176bd1d3fa30114492552a8bf9f443c",
+ "shasum": ""
+ },
+ "require": {
+ "cakephp/core": "^4.0",
+ "php": ">=7.2.0",
+ "psr/log": "^1.1",
+ "psr/simple-cache": "^1.0"
+ },
+ "suggest": {
+ "cakephp/cache": "If you decide to use Query caching.",
+ "cakephp/collection": "If you decide to use ResultSetInterface.",
+ "cakephp/utility": "If you decide to use EntityTrait."
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Cake\\Datasource\\": "."
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "CakePHP Community",
+ "homepage": "https://github.com/cakephp/datasource/graphs/contributors"
+ }
+ ],
+ "description": "Provides connection managing and traits for Entities and Queries that can be reused for different datastores",
+ "homepage": "https://cakephp.org",
+ "keywords": [
+ "cakephp",
+ "connection management",
+ "datasource",
+ "entity",
+ "query"
+ ],
+ "support": {
+ "forum": "https://stackoverflow.com/tags/cakephp",
+ "irc": "irc://irc.freenode.org/cakephp",
+ "issues": "https://github.com/cakephp/cakephp/issues",
+ "source": "https://github.com/cakephp/datasource"
+ },
+ "time": "2019-11-20T03:49:13+00:00"
+ },
+ {
+ "name": "cakephp/utility",
+ "version": "4.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cakephp/utility.git",
+ "reference": "4a6ec7e9738a33f4d3fdc267f8a76781384445cc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cakephp/utility/zipball/4a6ec7e9738a33f4d3fdc267f8a76781384445cc",
+ "reference": "4a6ec7e9738a33f4d3fdc267f8a76781384445cc",
+ "shasum": ""
+ },
+ "require": {
+ "cakephp/core": "^4.0",
+ "php": ">=7.2.0"
+ },
+ "suggest": {
+ "ext-intl": "To use Text::transliterate() or Text::slug()",
+ "lib-ICU": "To use Text::transliterate() or Text::slug()"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Cake\\Utility\\": "."
+ },
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "CakePHP Community",
+ "homepage": "https://github.com/cakephp/utility/graphs/contributors"
+ }
+ ],
+ "description": "CakePHP Utility classes such as Inflector, String, Hash, and Security",
+ "homepage": "https://cakephp.org",
+ "keywords": [
+ "cakephp",
+ "hash",
+ "inflector",
+ "security",
+ "string",
+ "utility"
+ ],
+ "support": {
+ "forum": "https://stackoverflow.com/tags/cakephp",
+ "irc": "irc://irc.freenode.org/cakephp",
+ "issues": "https://github.com/cakephp/cakephp/issues",
+ "source": "https://github.com/cakephp/utility"
+ },
+ "time": "2019-11-23T03:57:00+00:00"
+ },
{
"name": "chillerlan/php-qrcode",
"version": "4.3.0",
@@ -626,37 +851,32 @@
"time": "2021-03-21T15:43:46+00:00"
},
{
- "name": "spojenet/flexibee",
- "version": "2.0.x-dev",
+ "name": "psr/container",
+ "version": "dev-master",
"source": {
"type": "git",
- "url": "https://github.com/Spoje-NET/php-abraflexi.git",
- "reference": "6159c26a864340810dfc5066d248ca61ffa3cf5d"
+ "url": "https://github.com/php-fig/container.git",
+ "reference": "2ae37329ee82f91efadc282cc2d527fd6065a5ef"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Spoje-NET/php-abraflexi/zipball/6159c26a864340810dfc5066d248ca61ffa3cf5d",
- "reference": "6159c26a864340810dfc5066d248ca61ffa3cf5d",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/2ae37329ee82f91efadc282cc2d527fd6065a5ef",
+ "reference": "2ae37329ee82f91efadc282cc2d527fd6065a5ef",
"shasum": ""
},
"require": {
- "ext-curl": "*",
- "ext-gettext": "*",
- "ext-json": "*",
- "vitexsoftware/ease-core": ">=1.9"
- },
- "replace": {
- "spoje.net/flexibee": "*",
- "spoje.net/flexipeehp": "*"
- },
- "require-dev": {
- "phing/phing": "^2",
- "phpunit/phpunit": "^9"
+ "php": ">=7.2.0"
},
+ "default-branch": true,
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
"autoload": {
"psr-4": {
- "AbraFlexi\\": "src/AbraFlexi/"
+ "Psr\\Container\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -665,54 +885,52 @@
],
"authors": [
{
- "name": "Vítězslav Dvořák",
- "email": "vitex@arachne.cz"
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
}
],
- "description": "Library for easy interaction with czech accounting system FlexiBee.",
+ "description": "Common Container Interface (PHP FIG PSR-11)",
+ "homepage": "https://github.com/php-fig/container",
+ "keywords": [
+ "PSR-11",
+ "container",
+ "container-interface",
+ "container-interop",
+ "psr"
+ ],
"support": {
- "issues": "https://github.com/Spoje-NET/php-abraflexi/issues",
- "source": "https://github.com/Spoje-NET/php-abraflexi/tree/2.0"
+ "issues": "https://github.com/php-fig/container/issues",
+ "source": "https://github.com/php-fig/container/tree/2.0.1"
},
- "funding": [
- {
- "url": "https://www.patreon.com/VitexSoftware",
- "type": "patreon"
- }
- ],
- "time": "2021-04-02T09:22:39+00:00"
+ "time": "2021-03-24T13:40:57+00:00"
},
{
- "name": "vitexsoftware/ease-core",
- "version": "1.12",
+ "name": "psr/log",
+ "version": "dev-master",
"source": {
"type": "git",
- "url": "https://github.com/VitexSoftware/php-ease-core.git",
- "reference": "cd2ab87958c5ec73511816a42d13e81ea364102e"
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "a18c1e692e02b84abbafe4856c3cd7cc6903908c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/VitexSoftware/php-ease-core/zipball/cd2ab87958c5ec73511816a42d13e81ea364102e",
- "reference": "cd2ab87958c5ec73511816a42d13e81ea364102e",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/a18c1e692e02b84abbafe4856c3cd7cc6903908c",
+ "reference": "a18c1e692e02b84abbafe4856c3cd7cc6903908c",
"shasum": ""
},
"require": {
- "pear/mail": "~1.3",
- "pear/mail_mime": "~1.10",
- "php": ">=7"
- },
- "conflict": {
- "vitexsoftware/ease-framework": "*"
- },
- "require-dev": {
- "phpunit/phpunit": "^9",
- "roave/security-advisories": "dev-latest"
+ "php": ">=5.3.0"
},
+ "default-branch": true,
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1.x-dev"
+ }
+ },
"autoload": {
"psr-4": {
- "Ease\\": "src/Ease/",
- "Ease\\Logger\\": "src/Ease/Logger/"
+ "Psr\\Log\\": "Psr/Log/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -721,56 +939,49 @@
],
"authors": [
{
- "name": "Vítězslav Dvořák",
- "email": "info@vitexsoftware.cz",
- "homepage": "http://v.s.cz/"
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
}
],
- "description": "An PHP Framework for writing Applications",
- "homepage": "http://v.s.cz/ease.php",
+ "description": "Common interface for logging libraries",
+ "homepage": "https://github.com/php-fig/log",
+ "keywords": [
+ "log",
+ "psr",
+ "psr-3"
+ ],
"support": {
- "issues": "https://github.com/VitexSoftware/php-ease-core/issues",
- "source": "https://github.com/VitexSoftware/php-ease-core/tree/1.12"
+ "source": "https://github.com/php-fig/log/tree/master"
},
- "funding": [
- {
- "url": "https://www.patreon.com/VitexSoftware",
- "type": "patreon"
- }
- ],
- "time": "2021-03-02T10:59:13+00:00"
+ "time": "2021-03-02T15:02:34+00:00"
},
{
- "name": "vitexsoftware/ease-fluentpdo",
- "version": "dev-main",
+ "name": "psr/simple-cache",
+ "version": "dev-master",
"source": {
"type": "git",
- "url": "https://github.com/VitexSoftware/php-ease-fluentpdo.git",
- "reference": "dd791f11e7e28cc5a9e706bf93237453dd2c877d"
+ "url": "https://github.com/php-fig/simple-cache.git",
+ "reference": "5a7b96b1dda5d957e01bc1bfe77dcca09c5a7474"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/VitexSoftware/php-ease-fluentpdo/zipball/dd791f11e7e28cc5a9e706bf93237453dd2c877d",
- "reference": "dd791f11e7e28cc5a9e706bf93237453dd2c877d",
+ "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/5a7b96b1dda5d957e01bc1bfe77dcca09c5a7474",
+ "reference": "5a7b96b1dda5d957e01bc1bfe77dcca09c5a7474",
"shasum": ""
},
"require": {
- "fpdo/fluentpdo": "^2.1",
- "vitexsoftware/ease-core": "^1.1"
- },
- "conflict": {
- "vitexsoftware/ease-framework": "*"
- },
- "require-dev": {
- "phpunit/phpunit": "^9",
- "robmorgan/phinx": "^0.12.3",
- "vlucas/phpdotenv": "^3"
+ "php": ">=5.3.0"
},
"default-branch": true,
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
"autoload": {
"psr-4": {
- "Ease\\SQL\\": "src/Ease/SQL"
+ "Psr\\SimpleCache\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -779,49 +990,65 @@
],
"authors": [
{
- "name": "Vitex",
- "email": "info@vitexsoftware.cz"
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
}
],
- "description": "SQL/PDO support for Ease Framework based on FluentPDO",
+ "description": "Common interfaces for simple caching",
+ "keywords": [
+ "cache",
+ "caching",
+ "psr",
+ "psr-16",
+ "simple-cache"
+ ],
"support": {
- "issues": "https://github.com/VitexSoftware/php-ease-fluentpdo/issues",
- "source": "https://github.com/VitexSoftware/php-ease-fluentpdo/tree/main"
+ "source": "https://github.com/php-fig/simple-cache/tree/master"
},
- "funding": [
- {
- "url": "https://www.patreon.com/VitexSoftware",
- "type": "patreon"
- }
- ],
- "time": "2021-04-11T09:45:46+00:00"
+ "time": "2020-04-21T06:43:17+00:00"
},
{
- "name": "vitexsoftware/ease-html",
- "version": "dev-main",
+ "name": "robmorgan/phinx",
+ "version": "dev-master",
"source": {
"type": "git",
- "url": "https://github.com/VitexSoftware/php-ease-html.git",
- "reference": "d980f432b8283420f8ed91da938cf83ce826b2a8"
+ "url": "https://github.com/cakephp/phinx.git",
+ "reference": "bdd8f337fcdf24c20d0b708664a85ca9b8d5dbe2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/VitexSoftware/php-ease-html/zipball/d980f432b8283420f8ed91da938cf83ce826b2a8",
- "reference": "d980f432b8283420f8ed91da938cf83ce826b2a8",
+ "url": "https://api.github.com/repos/cakephp/phinx/zipball/bdd8f337fcdf24c20d0b708664a85ca9b8d5dbe2",
+ "reference": "bdd8f337fcdf24c20d0b708664a85ca9b8d5dbe2",
"shasum": ""
},
"require": {
- "vitexsoftware/ease-core": ">= 1.8"
+ "cakephp/database": "^4.0",
+ "php": ">=7.2",
+ "psr/container": "^1.0 || ^2.0",
+ "symfony/config": "^3.4|^4.0|^5.0",
+ "symfony/console": "^3.4|^4.0|^5.0"
},
"require-dev": {
- "phpunit/phpunit": "*"
+ "cakephp/cakephp-codesniffer": "^3.0",
+ "ext-json": "*",
+ "ext-pdo": "*",
+ "phpunit/phpunit": "^8.5|^9.3",
+ "sebastian/comparator": ">=1.2.3",
+ "symfony/yaml": "^3.4|^4.0|^5.0"
+ },
+ "suggest": {
+ "ext-json": "Install if using JSON configuration format",
+ "ext-pdo": "PDO extension is needed",
+ "symfony/yaml": "Install if using YAML configuration format"
},
"default-branch": true,
+ "bin": [
+ "bin/phinx"
+ ],
"type": "library",
"autoload": {
"psr-4": {
- "Ease\\": "src/Ease/",
- "Ease\\Html\\": "src/Ease/Html/"
+ "Phinx\\": "src/Phinx/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -830,48 +1057,76 @@
],
"authors": [
{
- "name": "Vítězslav Vitex Dvořák",
- "email": "info@vitexsoftware.cz"
+ "name": "Rob Morgan",
+ "email": "robbym@gmail.com",
+ "homepage": "https://robmorgan.id.au",
+ "role": "Lead Developer"
+ },
+ {
+ "name": "Woody Gilk",
+ "email": "woody.gilk@gmail.com",
+ "homepage": "https://shadowhand.me",
+ "role": "Developer"
+ },
+ {
+ "name": "Richard Quadling",
+ "email": "rquadling@gmail.com",
+ "role": "Developer"
+ },
+ {
+ "name": "CakePHP Community",
+ "homepage": "https://github.com/cakephp/phinx/graphs/contributors",
+ "role": "Developer"
}
],
- "description": "Set of HTML rendering objects",
+ "description": "Phinx makes it ridiculously easy to manage the database migrations for your PHP app.",
+ "homepage": "https://phinx.org",
+ "keywords": [
+ "database",
+ "database migrations",
+ "db",
+ "migrations",
+ "phinx"
+ ],
"support": {
- "issues": "https://github.com/VitexSoftware/php-ease-html/issues",
- "source": "https://github.com/VitexSoftware/php-ease-html/tree/main"
+ "issues": "https://github.com/cakephp/phinx/issues",
+ "source": "https://github.com/cakephp/phinx/tree/master"
},
- "funding": [
- {
- "url": "https://www.patreon.com/VitexSoftware",
- "type": "patreon"
- }
- ],
- "time": "2021-03-28T18:25:11+00:00"
+ "time": "2021-04-16T14:27:37+00:00"
},
{
- "name": "vitexsoftware/ease-twbootstrap4",
- "version": "dev-main",
+ "name": "spojenet/flexibee",
+ "version": "2.0.x-dev",
"source": {
"type": "git",
- "url": "https://github.com/VitexSoftware/php-ease-twbootstrap4.git",
- "reference": "bf5b68270580c1f3ecd54596d88e964028d0c51b"
+ "url": "https://github.com/Spoje-NET/php-abraflexi.git",
+ "reference": "e4c3420b524d3b213bec12c4dc052ff0423a34ca"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/VitexSoftware/php-ease-twbootstrap4/zipball/bf5b68270580c1f3ecd54596d88e964028d0c51b",
- "reference": "bf5b68270580c1f3ecd54596d88e964028d0c51b",
+ "url": "https://api.github.com/repos/Spoje-NET/php-abraflexi/zipball/e4c3420b524d3b213bec12c4dc052ff0423a34ca",
+ "reference": "e4c3420b524d3b213bec12c4dc052ff0423a34ca",
"shasum": ""
},
"require": {
- "vitexsoftware/ease-html": ">= 1.25"
+ "ext-curl": "*",
+ "ext-gettext": "*",
+ "ext-json": "*",
+ "vitexsoftware/ease-core": ">=1.9"
+ },
+ "replace": {
+ "spoje.net/flexibee": "*",
+ "spoje.net/flexipeehp": "*"
},
"require-dev": {
- "phpunit/phpunit": "^8"
+ "ext-iconv": "*",
+ "phing/phing": "^2",
+ "phpunit/phpunit": "^9"
},
- "default-branch": true,
"type": "library",
"autoload": {
"psr-4": {
- "Ease\\TWB4\\": "src/Ease/TWB4/"
+ "AbraFlexi\\": "src/AbraFlexi/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -880,14 +1135,14 @@
],
"authors": [
{
- "name": "Vítězslav Vitex Dvořák",
- "email": "info@vitexsoftware.cz"
+ "name": "Vítězslav Dvořák",
+ "email": "vitex@arachne.cz"
}
],
- "description": "Set of Twitter Bootstrap 4 rendering objects",
+ "description": "Library for easy interaction with czech accounting system FlexiBee.",
"support": {
- "issues": "https://github.com/VitexSoftware/php-ease-twbootstrap4/issues",
- "source": "https://github.com/VitexSoftware/php-ease-twbootstrap4/tree/main"
+ "issues": "https://github.com/Spoje-NET/php-abraflexi/issues",
+ "source": "https://github.com/Spoje-NET/php-abraflexi/tree/2.0"
},
"funding": [
{
@@ -895,586 +1150,11 @@
"type": "patreon"
}
],
- "time": "2021-04-15T20:09:42+00:00"
+ "time": "2021-04-18T13:12:30+00:00"
},
{
- "name": "vitexsoftware/ease-twbootstrap4-widgets-flexibee",
- "version": "dev-abraflexi",
- "source": {
- "type": "git",
- "url": "https://github.com/VitexSoftware/php-ease-twbootstrap4-widgets-abraflexi.git",
- "reference": "b7d4fe49932fd3845542d66996d059f62f23291e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/VitexSoftware/php-ease-twbootstrap4-widgets-abraflexi/zipball/b7d4fe49932fd3845542d66996d059f62f23291e",
- "reference": "b7d4fe49932fd3845542d66996d059f62f23291e",
- "shasum": ""
- },
- "require": {
- "vitexsoftware/ease-twbootstrap4": ">=1.1",
- "vitexsoftware/flexibee-bricks": "dev-abraflexi"
- },
- "require-dev": {
- "phpunit/phpunit": "^9"
- },
- "default-branch": true,
- "type": "library",
- "autoload": {
- "psr-4": {
- "AbraFlexi\\ui\\TWB4\\": "src/AbraFlexi/ui/TWB4"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Vitex",
- "email": "info@vitexsoftware.cz"
- }
- ],
- "description": "php-abraflexi extending classes and widgets",
- "support": {
- "issues": "https://github.com/VitexSoftware/php-ease-twbootstrap4-widgets-abraflexi/issues",
- "source": "https://github.com/VitexSoftware/php-ease-twbootstrap4-widgets-abraflexi/tree/abraflexi"
- },
- "funding": [
- {
- "url": "https://www.patreon.com/VitexSoftware",
- "type": "patreon"
- }
- ],
- "time": "2021-03-06T23:37:26+00:00"
- },
- {
- "name": "vitexsoftware/flexibee-bricks",
- "version": "dev-abraflexi",
- "source": {
- "type": "git",
- "url": "https://github.com/VitexSoftware/php-abraflexi-bricks.git",
- "reference": "f3c388284d6358d9f9fae4098bd1808c68309013"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/VitexSoftware/php-abraflexi-bricks/zipball/f3c388284d6358d9f9fae4098bd1808c68309013",
- "reference": "f3c388284d6358d9f9fae4098bd1808c68309013",
- "shasum": ""
- },
- "require": {
- "spojenet/flexibee": "2.0.x-dev",
- "vitexsoftware/ease-html": ">=1.25"
- },
- "require-dev": {
- "codeception/codeception": "*",
- "phpunit/phpunit": "*"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "AbraFlexi\\Bricks\\": "src/AbraFlexi/Bricks",
- "AbraFlexi\\Bricks\\ConvertRules\\": "src/AbraFlexi/Bricks/ConvertRules",
- "AbraFlexi\\ui\\": "src/AbraFlexi/ui"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Vitex",
- "email": "info@vitexsoftware.cz"
- }
- ],
- "description": "php-abraflexi extending classes and widgets",
- "support": {
- "issues": "https://github.com/VitexSoftware/php-abraflexi-bricks/issues",
- "source": "https://github.com/VitexSoftware/php-abraflexi-bricks/tree/abraflexi"
- },
- "funding": [
- {
- "url": "https://www.patreon.com/VitexSoftware",
- "type": "patreon"
- }
- ],
- "time": "2021-03-25T10:01:44+00:00"
- }
- ],
- "packages-dev": [
- {
- "name": "cakephp/core",
- "version": "4.x-dev",
- "source": {
- "type": "git",
- "url": "https://github.com/cakephp/core.git",
- "reference": "e4a19ad27b5a3e58db65d5dbb6f9b2e41eeec3ec"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/cakephp/core/zipball/e4a19ad27b5a3e58db65d5dbb6f9b2e41eeec3ec",
- "reference": "e4a19ad27b5a3e58db65d5dbb6f9b2e41eeec3ec",
- "shasum": ""
- },
- "require": {
- "cakephp/utility": "^4.0",
- "php": ">=7.2.0"
- },
- "suggest": {
- "cakephp/cache": "To use Configure::store() and restore().",
- "cakephp/event": "To use PluginApplicationInterface or plugin applications."
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Cake\\Core\\": "."
- },
- "files": [
- "functions.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "CakePHP Community",
- "homepage": "https://github.com/cakephp/core/graphs/contributors"
- }
- ],
- "description": "CakePHP Framework Core classes",
- "homepage": "https://cakephp.org",
- "keywords": [
- "cakephp",
- "core",
- "framework"
- ],
- "support": {
- "forum": "https://stackoverflow.com/tags/cakephp",
- "irc": "irc://irc.freenode.org/cakephp",
- "issues": "https://github.com/cakephp/cakephp/issues",
- "source": "https://github.com/cakephp/core"
- },
- "time": "2019-11-26T02:27:16+00:00"
- },
- {
- "name": "cakephp/database",
- "version": "4.x-dev",
- "source": {
- "type": "git",
- "url": "https://github.com/cakephp/database.git",
- "reference": "44b6164a6a22c086f9b26733c7981b8cc378ddb1"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/cakephp/database/zipball/44b6164a6a22c086f9b26733c7981b8cc378ddb1",
- "reference": "44b6164a6a22c086f9b26733c7981b8cc378ddb1",
- "shasum": ""
- },
- "require": {
- "cakephp/core": "^4.0",
- "cakephp/datasource": "^4.0",
- "php": ">=7.2.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Cake\\Database\\": "."
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "CakePHP Community",
- "homepage": "https://github.com/cakephp/database/graphs/contributors"
- }
- ],
- "description": "Flexible and powerful Database abstraction library with a familiar PDO-like API",
- "homepage": "https://cakephp.org",
- "keywords": [
- "abstraction",
- "cakephp",
- "database",
- "database abstraction",
- "pdo"
- ],
- "support": {
- "forum": "https://stackoverflow.com/tags/cakephp",
- "irc": "irc://irc.freenode.org/cakephp",
- "issues": "https://github.com/cakephp/cakephp/issues",
- "source": "https://github.com/cakephp/database"
- },
- "time": "2019-11-21T22:47:36+00:00"
- },
- {
- "name": "cakephp/datasource",
- "version": "4.x-dev",
- "source": {
- "type": "git",
- "url": "https://github.com/cakephp/datasource.git",
- "reference": "19c486bd2176bd1d3fa30114492552a8bf9f443c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/cakephp/datasource/zipball/19c486bd2176bd1d3fa30114492552a8bf9f443c",
- "reference": "19c486bd2176bd1d3fa30114492552a8bf9f443c",
- "shasum": ""
- },
- "require": {
- "cakephp/core": "^4.0",
- "php": ">=7.2.0",
- "psr/log": "^1.1",
- "psr/simple-cache": "^1.0"
- },
- "suggest": {
- "cakephp/cache": "If you decide to use Query caching.",
- "cakephp/collection": "If you decide to use ResultSetInterface.",
- "cakephp/utility": "If you decide to use EntityTrait."
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Cake\\Datasource\\": "."
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "CakePHP Community",
- "homepage": "https://github.com/cakephp/datasource/graphs/contributors"
- }
- ],
- "description": "Provides connection managing and traits for Entities and Queries that can be reused for different datastores",
- "homepage": "https://cakephp.org",
- "keywords": [
- "cakephp",
- "connection management",
- "datasource",
- "entity",
- "query"
- ],
- "support": {
- "forum": "https://stackoverflow.com/tags/cakephp",
- "irc": "irc://irc.freenode.org/cakephp",
- "issues": "https://github.com/cakephp/cakephp/issues",
- "source": "https://github.com/cakephp/datasource"
- },
- "time": "2019-11-20T03:49:13+00:00"
- },
- {
- "name": "cakephp/utility",
- "version": "4.x-dev",
- "source": {
- "type": "git",
- "url": "https://github.com/cakephp/utility.git",
- "reference": "4a6ec7e9738a33f4d3fdc267f8a76781384445cc"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/cakephp/utility/zipball/4a6ec7e9738a33f4d3fdc267f8a76781384445cc",
- "reference": "4a6ec7e9738a33f4d3fdc267f8a76781384445cc",
- "shasum": ""
- },
- "require": {
- "cakephp/core": "^4.0",
- "php": ">=7.2.0"
- },
- "suggest": {
- "ext-intl": "To use Text::transliterate() or Text::slug()",
- "lib-ICU": "To use Text::transliterate() or Text::slug()"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Cake\\Utility\\": "."
- },
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "CakePHP Community",
- "homepage": "https://github.com/cakephp/utility/graphs/contributors"
- }
- ],
- "description": "CakePHP Utility classes such as Inflector, String, Hash, and Security",
- "homepage": "https://cakephp.org",
- "keywords": [
- "cakephp",
- "hash",
- "inflector",
- "security",
- "string",
- "utility"
- ],
- "support": {
- "forum": "https://stackoverflow.com/tags/cakephp",
- "irc": "irc://irc.freenode.org/cakephp",
- "issues": "https://github.com/cakephp/cakephp/issues",
- "source": "https://github.com/cakephp/utility"
- },
- "time": "2019-11-23T03:57:00+00:00"
- },
- {
- "name": "psr/container",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/container.git",
- "reference": "2ae37329ee82f91efadc282cc2d527fd6065a5ef"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/container/zipball/2ae37329ee82f91efadc282cc2d527fd6065a5ef",
- "reference": "2ae37329ee82f91efadc282cc2d527fd6065a5ef",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.0"
- },
- "default-branch": true,
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Container\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "https://www.php-fig.org/"
- }
- ],
- "description": "Common Container Interface (PHP FIG PSR-11)",
- "homepage": "https://github.com/php-fig/container",
- "keywords": [
- "PSR-11",
- "container",
- "container-interface",
- "container-interop",
- "psr"
- ],
- "support": {
- "issues": "https://github.com/php-fig/container/issues",
- "source": "https://github.com/php-fig/container/tree/2.0.1"
- },
- "time": "2021-03-24T13:40:57+00:00"
- },
- {
- "name": "psr/log",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/log.git",
- "reference": "a18c1e692e02b84abbafe4856c3cd7cc6903908c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/log/zipball/a18c1e692e02b84abbafe4856c3cd7cc6903908c",
- "reference": "a18c1e692e02b84abbafe4856c3cd7cc6903908c",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "default-branch": true,
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Log\\": "Psr/Log/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "https://www.php-fig.org/"
- }
- ],
- "description": "Common interface for logging libraries",
- "homepage": "https://github.com/php-fig/log",
- "keywords": [
- "log",
- "psr",
- "psr-3"
- ],
- "support": {
- "source": "https://github.com/php-fig/log/tree/master"
- },
- "time": "2021-03-02T15:02:34+00:00"
- },
- {
- "name": "psr/simple-cache",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/simple-cache.git",
- "reference": "5a7b96b1dda5d957e01bc1bfe77dcca09c5a7474"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/5a7b96b1dda5d957e01bc1bfe77dcca09c5a7474",
- "reference": "5a7b96b1dda5d957e01bc1bfe77dcca09c5a7474",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "default-branch": true,
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\SimpleCache\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
- }
- ],
- "description": "Common interfaces for simple caching",
- "keywords": [
- "cache",
- "caching",
- "psr",
- "psr-16",
- "simple-cache"
- ],
- "support": {
- "source": "https://github.com/php-fig/simple-cache/tree/master"
- },
- "time": "2020-04-21T06:43:17+00:00"
- },
- {
- "name": "robmorgan/phinx",
- "version": "dev-master",
- "source": {
- "type": "git",
- "url": "https://github.com/cakephp/phinx.git",
- "reference": "bdd8f337fcdf24c20d0b708664a85ca9b8d5dbe2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/cakephp/phinx/zipball/bdd8f337fcdf24c20d0b708664a85ca9b8d5dbe2",
- "reference": "bdd8f337fcdf24c20d0b708664a85ca9b8d5dbe2",
- "shasum": ""
- },
- "require": {
- "cakephp/database": "^4.0",
- "php": ">=7.2",
- "psr/container": "^1.0 || ^2.0",
- "symfony/config": "^3.4|^4.0|^5.0",
- "symfony/console": "^3.4|^4.0|^5.0"
- },
- "require-dev": {
- "cakephp/cakephp-codesniffer": "^3.0",
- "ext-json": "*",
- "ext-pdo": "*",
- "phpunit/phpunit": "^8.5|^9.3",
- "sebastian/comparator": ">=1.2.3",
- "symfony/yaml": "^3.4|^4.0|^5.0"
- },
- "suggest": {
- "ext-json": "Install if using JSON configuration format",
- "ext-pdo": "PDO extension is needed",
- "symfony/yaml": "Install if using YAML configuration format"
- },
- "default-branch": true,
- "bin": [
- "bin/phinx"
- ],
- "type": "library",
- "autoload": {
- "psr-4": {
- "Phinx\\": "src/Phinx/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Rob Morgan",
- "email": "robbym@gmail.com",
- "homepage": "https://robmorgan.id.au",
- "role": "Lead Developer"
- },
- {
- "name": "Woody Gilk",
- "email": "woody.gilk@gmail.com",
- "homepage": "https://shadowhand.me",
- "role": "Developer"
- },
- {
- "name": "Richard Quadling",
- "email": "rquadling@gmail.com",
- "role": "Developer"
- },
- {
- "name": "CakePHP Community",
- "homepage": "https://github.com/cakephp/phinx/graphs/contributors",
- "role": "Developer"
- }
- ],
- "description": "Phinx makes it ridiculously easy to manage the database migrations for your PHP app.",
- "homepage": "https://phinx.org",
- "keywords": [
- "database",
- "database migrations",
- "db",
- "migrations",
- "phinx"
- ],
- "support": {
- "issues": "https://github.com/cakephp/phinx/issues",
- "source": "https://github.com/cakephp/phinx/tree/master"
- },
- "time": "2021-04-16T14:27:37+00:00"
- },
- {
- "name": "symfony/config",
- "version": "5.x-dev",
+ "name": "symfony/config",
+ "version": "5.x-dev",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
@@ -1533,7 +1213,7 @@
"description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/config/tree/5.x"
+ "source": "https://github.com/symfony/config/tree/v5.3.0-BETA1"
},
"funding": [
{
@@ -1632,7 +1312,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/5.x"
+ "source": "https://github.com/symfony/console/tree/v5.3.0-BETA1"
},
"funding": [
{
@@ -1763,7 +1443,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/filesystem/tree/5.x"
+ "source": "https://github.com/symfony/filesystem/tree/v5.3.0-BETA1"
},
"funding": [
{
@@ -1960,9 +1640,252 @@
"require": {
"php": ">=7.1"
},
- "suggest": {
- "ext-intl": "For best performance"
- },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.22-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ],
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's Normalizer class and related functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "intl",
+ "normalizer",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.1"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-01-22T09:19:47+00:00"
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "5232de97ee3b75b0360528dae24e73db49566ab1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1",
+ "reference": "5232de97ee3b75b0360528dae24e73db49566ab1",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.22-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for the Mbstring extension",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "mbstring",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.1"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-01-22T09:19:47+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php73",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php73.git",
+ "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a678b42e92f86eca04b7fa4c0f6f19d097fb69e2",
+ "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "default-branch": true,
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.22-dev"
+ },
+ "thanks": {
+ "name": "symfony/polyfill",
+ "url": "https://github.com/symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Php73\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ],
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php73/tree/v1.22.1"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2021-01-07T16:49:33+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php80",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php80.git",
+ "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91",
+ "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
"default-branch": true,
"type": "library",
"extra": {
@@ -1976,7 +1899,7 @@
},
"autoload": {
"psr-4": {
- "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
+ "Symfony\\Polyfill\\Php80\\": ""
},
"files": [
"bootstrap.php"
@@ -1990,6 +1913,10 @@
"MIT"
],
"authors": [
+ {
+ "name": "Ion Bazan",
+ "email": "ion.bazan@gmail.com"
+ },
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
@@ -1999,18 +1926,16 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony polyfill for intl's Normalizer class and related functions",
+ "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
- "intl",
- "normalizer",
"polyfill",
"portable",
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.1"
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1"
},
"funding": [
{
@@ -2026,45 +1951,108 @@
"type": "tidelift"
}
],
- "time": "2021-01-22T09:19:47+00:00"
+ "time": "2021-01-07T16:49:33+00:00"
},
{
- "name": "symfony/polyfill-mbstring",
- "version": "dev-main",
+ "name": "symfony/service-contracts",
+ "version": "v1.1.2",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "5232de97ee3b75b0360528dae24e73db49566ab1"
+ "url": "https://github.com/symfony/service-contracts.git",
+ "reference": "191afdcb5804db960d26d8566b7e9a2843cab3a0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1",
- "reference": "5232de97ee3b75b0360528dae24e73db49566ab1",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/191afdcb5804db960d26d8566b7e9a2843cab3a0",
+ "reference": "191afdcb5804db960d26d8566b7e9a2843cab3a0",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": "^7.1.3"
},
"suggest": {
- "ext-mbstring": "For best performance"
+ "psr/container": "",
+ "symfony/service-implementation": ""
},
- "default-branch": true,
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.22-dev"
+ "dev-master": "1.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\Service\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
},
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
}
+ ],
+ "description": "Generic abstractions related to writing services",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/service-contracts/tree/v1.1.2"
+ },
+ "time": "2019-05-28T07:50:59+00:00"
+ },
+ {
+ "name": "symfony/string",
+ "version": "5.x-dev",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/string.git",
+ "reference": "01454c66c88a6bb4449dcdeb913e463e075f331b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/string/zipball/01454c66c88a6bb4449dcdeb913e463e075f331b",
+ "reference": "01454c66c88a6bb4449dcdeb913e463e075f331b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-intl-grapheme": "~1.0",
+ "symfony/polyfill-intl-normalizer": "~1.0",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php80": "~1.15"
+ },
+ "require-dev": {
+ "symfony/error-handler": "^4.4|^5.0",
+ "symfony/http-client": "^4.4|^5.0",
+ "symfony/translation-contracts": "^1.1|^2",
+ "symfony/var-exporter": "^4.4|^5.0"
},
+ "default-branch": true,
+ "type": "library",
"autoload": {
"psr-4": {
- "Symfony\\Polyfill\\Mbstring\\": ""
+ "Symfony\\Component\\String\\": ""
},
"files": [
- "bootstrap.php"
+ "Resources/functions.php"
+ ],
+ "exclude-from-classmap": [
+ "/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
@@ -2081,17 +2069,18 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony polyfill for the Mbstring extension",
+ "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
"homepage": "https://symfony.com",
"keywords": [
- "compatibility",
- "mbstring",
- "polyfill",
- "portable",
- "shim"
+ "grapheme",
+ "i18n",
+ "string",
+ "unicode",
+ "utf-8",
+ "utf8"
],
"support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.1"
+ "source": "https://github.com/symfony/string/tree/v5.3.0-BETA1"
},
"funding": [
{
@@ -2107,46 +2096,149 @@
"type": "tidelift"
}
],
- "time": "2021-01-22T09:19:47+00:00"
+ "time": "2021-03-17T17:12:23+00:00"
},
{
- "name": "symfony/polyfill-php73",
+ "name": "vitexsoftware/ease-core",
+ "version": "1.12",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/VitexSoftware/php-ease-core.git",
+ "reference": "cd2ab87958c5ec73511816a42d13e81ea364102e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/VitexSoftware/php-ease-core/zipball/cd2ab87958c5ec73511816a42d13e81ea364102e",
+ "reference": "cd2ab87958c5ec73511816a42d13e81ea364102e",
+ "shasum": ""
+ },
+ "require": {
+ "pear/mail": "~1.3",
+ "pear/mail_mime": "~1.10",
+ "php": ">=7"
+ },
+ "conflict": {
+ "vitexsoftware/ease-framework": "*"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9",
+ "roave/security-advisories": "dev-latest"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Ease\\": "src/Ease/",
+ "Ease\\Logger\\": "src/Ease/Logger/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Vítězslav Dvořák",
+ "email": "info@vitexsoftware.cz",
+ "homepage": "http://v.s.cz/"
+ }
+ ],
+ "description": "An PHP Framework for writing Applications",
+ "homepage": "http://v.s.cz/ease.php",
+ "support": {
+ "issues": "https://github.com/VitexSoftware/php-ease-core/issues",
+ "source": "https://github.com/VitexSoftware/php-ease-core/tree/1.12"
+ },
+ "funding": [
+ {
+ "url": "https://www.patreon.com/VitexSoftware",
+ "type": "patreon"
+ }
+ ],
+ "time": "2021-03-02T10:59:13+00:00"
+ },
+ {
+ "name": "vitexsoftware/ease-fluentpdo",
"version": "dev-main",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-php73.git",
- "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2"
+ "url": "https://github.com/VitexSoftware/php-ease-fluentpdo.git",
+ "reference": "dd791f11e7e28cc5a9e706bf93237453dd2c877d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a678b42e92f86eca04b7fa4c0f6f19d097fb69e2",
- "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2",
+ "url": "https://api.github.com/repos/VitexSoftware/php-ease-fluentpdo/zipball/dd791f11e7e28cc5a9e706bf93237453dd2c877d",
+ "reference": "dd791f11e7e28cc5a9e706bf93237453dd2c877d",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "fpdo/fluentpdo": "^2.1",
+ "vitexsoftware/ease-core": "^1.1"
+ },
+ "conflict": {
+ "vitexsoftware/ease-framework": "*"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9",
+ "robmorgan/phinx": "^0.12.3",
+ "vlucas/phpdotenv": "^3"
},
"default-branch": true,
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.22-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "autoload": {
+ "psr-4": {
+ "Ease\\SQL\\": "src/Ease/SQL"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Vitex",
+ "email": "info@vitexsoftware.cz"
+ }
+ ],
+ "description": "SQL/PDO support for Ease Framework based on FluentPDO",
+ "support": {
+ "issues": "https://github.com/VitexSoftware/php-ease-fluentpdo/issues",
+ "source": "https://github.com/VitexSoftware/php-ease-fluentpdo/tree/main"
+ },
+ "funding": [
+ {
+ "url": "https://www.patreon.com/VitexSoftware",
+ "type": "patreon"
}
+ ],
+ "time": "2021-04-11T09:45:46+00:00"
+ },
+ {
+ "name": "vitexsoftware/ease-html",
+ "version": "dev-main",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/VitexSoftware/php-ease-html.git",
+ "reference": "d980f432b8283420f8ed91da938cf83ce826b2a8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/VitexSoftware/php-ease-html/zipball/d980f432b8283420f8ed91da938cf83ce826b2a8",
+ "reference": "d980f432b8283420f8ed91da938cf83ce826b2a8",
+ "shasum": ""
+ },
+ "require": {
+ "vitexsoftware/ease-core": ">= 1.8"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "*"
},
+ "default-branch": true,
+ "type": "library",
"autoload": {
"psr-4": {
- "Symfony\\Polyfill\\Php73\\": ""
- },
- "files": [
- "bootstrap.php"
- ],
- "classmap": [
- "Resources/stubs"
- ]
+ "Ease\\": "src/Ease/",
+ "Ease\\Html\\": "src/Ease/Html/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -2154,79 +2246,49 @@
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Vítězslav Vitex Dvořák",
+ "email": "info@vitexsoftware.cz"
}
],
- "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
+ "description": "Set of HTML rendering objects",
"support": {
- "source": "https://github.com/symfony/polyfill-php73/tree/v1.22.1"
+ "issues": "https://github.com/VitexSoftware/php-ease-html/issues",
+ "source": "https://github.com/VitexSoftware/php-ease-html/tree/main"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
+ "url": "https://www.patreon.com/VitexSoftware",
+ "type": "patreon"
}
],
- "time": "2021-01-07T16:49:33+00:00"
+ "time": "2021-03-28T18:25:11+00:00"
},
{
- "name": "symfony/polyfill-php80",
+ "name": "vitexsoftware/ease-twbootstrap4",
"version": "dev-main",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91"
+ "url": "https://github.com/VitexSoftware/php-ease-twbootstrap4.git",
+ "reference": "bf5b68270580c1f3ecd54596d88e964028d0c51b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91",
- "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91",
+ "url": "https://api.github.com/repos/VitexSoftware/php-ease-twbootstrap4/zipball/bf5b68270580c1f3ecd54596d88e964028d0c51b",
+ "reference": "bf5b68270580c1f3ecd54596d88e964028d0c51b",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "vitexsoftware/ease-html": ">= 1.25"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8"
},
"default-branch": true,
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.22-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
"autoload": {
"psr-4": {
- "Symfony\\Polyfill\\Php80\\": ""
- },
- "files": [
- "bootstrap.php"
- ],
- "classmap": [
- "Resources/stubs"
- ]
+ "Ease\\TWB4\\": "src/Ease/TWB4/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -2234,75 +2296,49 @@
],
"authors": [
{
- "name": "Ion Bazan",
- "email": "ion.bazan@gmail.com"
- },
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Vítězslav Vitex Dvořák",
+ "email": "info@vitexsoftware.cz"
}
],
- "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
+ "description": "Set of Twitter Bootstrap 4 rendering objects",
"support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1"
+ "issues": "https://github.com/VitexSoftware/php-ease-twbootstrap4/issues",
+ "source": "https://github.com/VitexSoftware/php-ease-twbootstrap4/tree/main"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
+ "url": "https://www.patreon.com/VitexSoftware",
+ "type": "patreon"
}
],
- "time": "2021-01-07T16:49:33+00:00"
+ "time": "2021-04-15T20:09:42+00:00"
},
{
- "name": "symfony/service-contracts",
- "version": "v1.1.2",
+ "name": "vitexsoftware/ease-twbootstrap4-widgets-flexibee",
+ "version": "dev-abraflexi",
"source": {
"type": "git",
- "url": "https://github.com/symfony/service-contracts.git",
- "reference": "191afdcb5804db960d26d8566b7e9a2843cab3a0"
+ "url": "https://github.com/VitexSoftware/php-ease-twbootstrap4-widgets-abraflexi.git",
+ "reference": "b7d4fe49932fd3845542d66996d059f62f23291e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/191afdcb5804db960d26d8566b7e9a2843cab3a0",
- "reference": "191afdcb5804db960d26d8566b7e9a2843cab3a0",
+ "url": "https://api.github.com/repos/VitexSoftware/php-ease-twbootstrap4-widgets-abraflexi/zipball/b7d4fe49932fd3845542d66996d059f62f23291e",
+ "reference": "b7d4fe49932fd3845542d66996d059f62f23291e",
"shasum": ""
},
"require": {
- "php": "^7.1.3"
+ "vitexsoftware/ease-twbootstrap4": ">=1.1",
+ "vitexsoftware/flexibee-bricks": "dev-abraflexi"
},
- "suggest": {
- "psr/container": "",
- "symfony/service-implementation": ""
+ "require-dev": {
+ "phpunit/phpunit": "^9"
},
+ "default-branch": true,
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.1-dev"
- }
- },
"autoload": {
"psr-4": {
- "Symfony\\Contracts\\Service\\": ""
+ "AbraFlexi\\ui\\TWB4\\": "src/AbraFlexi/ui/TWB4"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -2311,69 +2347,52 @@
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Vitex",
+ "email": "info@vitexsoftware.cz"
}
],
- "description": "Generic abstractions related to writing services",
- "homepage": "https://symfony.com",
- "keywords": [
- "abstractions",
- "contracts",
- "decoupling",
- "interfaces",
- "interoperability",
- "standards"
- ],
+ "description": "php-abraflexi extending classes and widgets",
"support": {
- "source": "https://github.com/symfony/service-contracts/tree/v1.1.2"
+ "issues": "https://github.com/VitexSoftware/php-ease-twbootstrap4-widgets-abraflexi/issues",
+ "source": "https://github.com/VitexSoftware/php-ease-twbootstrap4-widgets-abraflexi/tree/abraflexi"
},
- "time": "2019-05-28T07:50:59+00:00"
+ "funding": [
+ {
+ "url": "https://www.patreon.com/VitexSoftware",
+ "type": "patreon"
+ }
+ ],
+ "time": "2021-03-06T23:37:26+00:00"
},
{
- "name": "symfony/string",
- "version": "5.x-dev",
+ "name": "vitexsoftware/flexibee-bricks",
+ "version": "dev-abraflexi",
"source": {
"type": "git",
- "url": "https://github.com/symfony/string.git",
- "reference": "01454c66c88a6bb4449dcdeb913e463e075f331b"
+ "url": "https://github.com/VitexSoftware/php-abraflexi-bricks.git",
+ "reference": "f3c388284d6358d9f9fae4098bd1808c68309013"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/01454c66c88a6bb4449dcdeb913e463e075f331b",
- "reference": "01454c66c88a6bb4449dcdeb913e463e075f331b",
+ "url": "https://api.github.com/repos/VitexSoftware/php-abraflexi-bricks/zipball/f3c388284d6358d9f9fae4098bd1808c68309013",
+ "reference": "f3c388284d6358d9f9fae4098bd1808c68309013",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-intl-grapheme": "~1.0",
- "symfony/polyfill-intl-normalizer": "~1.0",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php80": "~1.15"
+ "spojenet/flexibee": "2.0.x-dev",
+ "vitexsoftware/ease-html": ">=1.25"
},
"require-dev": {
- "symfony/error-handler": "^4.4|^5.0",
- "symfony/http-client": "^4.4|^5.0",
- "symfony/translation-contracts": "^1.1|^2",
- "symfony/var-exporter": "^4.4|^5.0"
+ "codeception/codeception": "*",
+ "phpunit/phpunit": "*"
},
- "default-branch": true,
"type": "library",
"autoload": {
"psr-4": {
- "Symfony\\Component\\String\\": ""
- },
- "files": [
- "Resources/functions.php"
- ],
- "exclude-from-classmap": [
- "/Tests/"
- ]
+ "AbraFlexi\\Bricks\\": "src/AbraFlexi/Bricks",
+ "AbraFlexi\\Bricks\\ConvertRules\\": "src/AbraFlexi/Bricks/ConvertRules",
+ "AbraFlexi\\ui\\": "src/AbraFlexi/ui"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -2381,44 +2400,25 @@
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Vitex",
+ "email": "info@vitexsoftware.cz"
}
],
- "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
- "homepage": "https://symfony.com",
- "keywords": [
- "grapheme",
- "i18n",
- "string",
- "unicode",
- "utf-8",
- "utf8"
- ],
+ "description": "php-abraflexi extending classes and widgets",
"support": {
- "source": "https://github.com/symfony/string/tree/5.x"
+ "issues": "https://github.com/VitexSoftware/php-abraflexi-bricks/issues",
+ "source": "https://github.com/VitexSoftware/php-abraflexi-bricks/tree/abraflexi"
},
"funding": [
{
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
+ "url": "https://www.patreon.com/VitexSoftware",
+ "type": "patreon"
}
],
- "time": "2021-03-17T17:12:23+00:00"
+ "time": "2021-03-25T10:01:44+00:00"
}
],
+ "packages-dev": [],
"aliases": [],
"minimum-stability": "dev",
"stability-flags": {
diff --git a/db/migrations/20210126180402_csob_to_order.php b/db/migrations/20210126180402_csob_to_order.php
new file mode 100644
index 000000000..4e7cb2457
--- /dev/null
+++ b/db/migrations/20210126180402_csob_to_order.php
@@ -0,0 +1,20 @@
+table('csob', ['id' => false, 'primary_key' => 'payId']);
+ $table->addColumn('payId', 'string', ['length' => 15])
+ ->addColumn('paymentStatus', 'integer', ['default' => 1])
+ ->addColumn('orders_id', 'integer', ['null' => false,'signed'=>false])
+ ->addColumn('created', 'datetime', ['default' => 'CURRENT_TIMESTAMP'])
+ ->create();
+ }
+
+}
diff --git a/db/migrations/20210420040259_last_api_request.php b/db/migrations/20210420040259_last_api_request.php
new file mode 100644
index 000000000..f133aa266
--- /dev/null
+++ b/db/migrations/20210420040259_last_api_request.php
@@ -0,0 +1,25 @@
+table('csob');
+ $table->addColumn('updated', 'timestamp', ['after' => 'created','null'=>'true'])
+ ->update();
+ }
+}
diff --git a/ext/modules/payment/csob/welcomeback.php b/ext/modules/payment/csob/welcomeback.php
new file mode 100644
index 000000000..7542901e5
--- /dev/null
+++ b/ext/modules/payment/csob/welcomeback.php
@@ -0,0 +1,36 @@
+update_status();
+
+if (( is_array($payment_modules->modules) && (count($payment_modules->modules) > 1) && !is_object(${$_SESSION['payment']}) ) || (is_object(${$_SESSION['payment']}) && (${$_SESSION['payment']}->enabled == false))) {
+ tep_redirect(tep_href_link('checkout_payment.php', 'error_message=' . urlencode(ERROR_NO_PAYMENT_MODULE_SELECTED), 'SSL'));
+}
+
+if (is_array($payment_modules->modules)) {
+ $payment_modules->pre_confirmation_check();
+}
diff --git a/includes/apps/csob/PUREHTML_CSOB.php b/includes/apps/csob/PUREHTML_CSOB.php
new file mode 100644
index 000000000..8ebf23e6d
--- /dev/null
+++ b/includes/apps/csob/PUREHTML_CSOB.php
@@ -0,0 +1,863 @@
+ $value) {
+ if ((strpos($key, '_nh-dns') !== false) || in_array($key, $filter)) {
+ $value = '**********';
+ }
+
+ $request_string .= $key . ': ' . $value . "\n";
+ }
+ } else {
+ $request_string = $request;
+ }
+
+ $response_string = '';
+
+ if (is_array($response)) {
+ foreach ($response as $key => $value) {
+ if (is_array($value)) {
+ $value = http_build_query($value);
+ } elseif ((strpos($key, '_nh-dns') !== false) || in_array($key, $filter)) {
+ $value = '**********';
+ }
+
+ $response_string .= $key . ': ' . $value . "\n";
+ }
+ } else {
+ $response_string = $response;
+ }
+
+ $data = [
+ 'customers_id' => ($_SESSION['customer_id'] ?? 0),
+ 'module' => $module,
+ 'action' => $action . (($is_ipn === true) ? ' [IPN]' : ''),
+ 'result' => $result,
+ 'server' => ($server == 'live') ? 1 : -1,
+ 'request' => trim($request_string),
+ 'response' => trim($response_string),
+ 'ip_address' => sprintf('%u', ip2long(tep_get_ip_address())),
+ 'date_added' => 'NOW()',
+ ];
+
+ tep_db_perform('PUREHTML_APP_CSOB_log', $data);
+ }
+
+ function migrate() {
+ $migrated = false;
+
+ foreach ($this->getModules() as $module) {
+ if (!defined('PUREHTML_APP_CSOB_' . $module . '_STATUS')) {
+ $this->saveParameter('PUREHTML_APP_CSOB_' . $module . '_STATUS', '');
+
+ $class = 'OSCOM_CSOB_' . $module;
+
+ if (!class_exists($class)) {
+ $this->loadLanguageFile("modules/$module/$module.php");
+
+ include(DIR_FS_CATALOG . "includes/apps/csob/modules/$module/$module.php");
+ }
+
+ $m = new $class();
+
+ if (method_exists($m, 'canMigrate') && $m->canMigrate()) {
+ $m->migrate($this);
+
+ if ($migrated === false) {
+ $migrated = true;
+ }
+ }
+ }
+ }
+
+ return $migrated;
+ }
+
+ function getModules() {
+ static $result;
+
+ if (!isset($result)) {
+ $result = [];
+
+ $d = DIR_FS_CATALOG . 'includes/apps/csob/modules/';
+ if ($dir = @dir($d)) {
+ while ($file = $dir->read()) {
+ if (in_array($file, ['.', '..'])) {
+ continue;
+ }
+
+ if (is_dir("$d/$file") && file_exists("$d/$file/$file.php")) {
+ $sort_order = $this->getModuleInfo($file, 'sort_order');
+
+ if (is_numeric($sort_order)) {
+ $counter = (int) $sort_order;
+ } else {
+ $counter = count($result);
+ }
+
+ while (true) {
+ if (isset($result[$counter])) {
+ $counter++;
+
+ continue;
+ }
+
+ $result[$counter] = $file;
+
+ break;
+ }
+ }
+ }
+
+ ksort($result, SORT_NUMERIC);
+ }
+ }
+
+ return $result;
+ }
+
+ function isInstalled($module) {
+ if (file_exists(DIR_FS_CATALOG . 'includes/apps/csob/modules/' . basename($module) . '/' . basename($module) . '.php')) {
+ return defined('PUREHTML_APP_CSOB_' . basename($module) . '_STATUS') && tep_not_null(constant('PUREHTML_APP_CSOB_' . basename($module) . '_STATUS'));
+ }
+
+ return false;
+ }
+
+ function getModuleInfo($module, $info) {
+ $class = 'OSCOM_CSOB_' . $module;
+
+ if (!class_exists($class)) {
+ $this->loadLanguageFile("modules/$module/$module.php");
+
+ include DIR_FS_CATALOG . "includes/apps/csob/modules/$module/$module.php";
+ }
+
+ $m = new $class();
+
+ return $m->{'_' . $info};
+ }
+
+ function hasCredentials($module, $type = null) {
+ if (!defined('PUREHTML_APP_CSOB_' . $module . '_STATUS')) {
+ return false;
+ }
+
+ $server = constant('PUREHTML_APP_CSOB_' . $module . '_STATUS');
+
+ if (!in_array($server, ['1', '0'])) {
+ return false;
+ }
+
+ $server = ($server == '1') ? 'LIVE' : 'SANDBOX';
+
+ if ($type == 'email') {
+ $creds = ['PUREHTML_APP_CSOB_' . $server . '_SELLER_EMAIL'];
+ } elseif (substr($type, 0, 7) == 'payflow') {
+ if (strlen($type) > 7) {
+ $creds = ['PUREHTML_APP_CSOB_PF_' . $server . '_' . strtoupper(substr($type, 8))];
+ } else {
+ $creds = [
+ 'PUREHTML_APP_CSOB_PF_' . $server . '_VENDOR',
+ 'PUREHTML_APP_CSOB_PF_' . $server . '_PASSWORD',
+ 'PUREHTML_APP_CSOB_PF_' . $server . '_PARTNER',
+ ];
+ }
+ } else {
+ $creds = [
+ 'PUREHTML_APP_CSOB_' . $server . '_API_USERNAME',
+ 'PUREHTML_APP_CSOB_' . $server . '_API_PASSWORD',
+ 'PUREHTML_APP_CSOB_' . $server . '_API_SIGNATURE',
+ ];
+ }
+
+ foreach ($creds as $c) {
+ if (!defined($c) || (strlen(trim(constant($c))) < 1)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ function getCredentials($module, $type) {
+ if (constant('PUREHTML_APP_CSOB_' . $module . '_STATUS') == '1') {
+ if ($type == 'email') {
+ return constant('PUREHTML_APP_CSOB_LIVE_SELLER_EMAIL');
+ } elseif ($type == 'email_primary') {
+ return constant('PUREHTML_APP_CSOB_LIVE_SELLER_EMAIL_PRIMARY');
+ } elseif (substr($type, 0, 7) == 'payflow') {
+ return constant('PUREHTML_APP_CSOB_PF_LIVE_' . strtoupper(substr($type, 8)));
+ } else {
+ return constant('PUREHTML_APP_CSOB_LIVE_API_' . strtoupper($type));
+ }
+ }
+
+ if ($type == 'email') {
+ return constant('PUREHTML_APP_CSOB_SANDBOX_SELLER_EMAIL');
+ } elseif ($type == 'email_primary') {
+ return constant('PUREHTML_APP_CSOB_SANDBOX_SELLER_EMAIL_PRIMARY');
+ } elseif (substr($type, 0, 7) == 'payflow') {
+ return constant('PUREHTML_APP_CSOB_PF_SANDBOX_' . strtoupper(substr($type, 8)));
+ } else {
+ return constant('PUREHTML_APP_CSOB_SANDBOX_API_' . strtoupper($type));
+ }
+ }
+
+ function hasApiCredentials($server, $type = null) {
+ $server = ($server == 'live') ? 'LIVE' : 'SANDBOX';
+
+ if ($type == 'email') {
+ $creds = ['PUREHTML_APP_CSOB_' . $server . '_SELLER_EMAIL'];
+ } elseif (substr($type, 0, 7) == 'payflow') {
+ $creds = ['PUREHTML_APP_CSOB_PF_' . $server . '_' . strtoupper(substr($type, 8))];
+ } else {
+ $creds = [
+ 'PUREHTML_APP_CSOB_' . $server . '_API_USERNAME',
+ 'PUREHTML_APP_CSOB_' . $server . '_API_PASSWORD',
+ 'PUREHTML_APP_CSOB_' . $server . '_API_SIGNATURE',
+ ];
+ }
+
+ foreach ($creds as $c) {
+ if (!defined($c) || (strlen(trim(constant($c))) < 1)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ function getApiCredentials($server, $type) {
+ if (($server == 'live') && defined('PUREHTML_APP_CSOB_LIVE_API_' . strtoupper($type))) {
+ return constant('PUREHTML_APP_CSOB_LIVE_API_' . strtoupper($type));
+ } elseif (defined('PUREHTML_APP_CSOB_SANDBOX_API_' . strtoupper($type))) {
+ return constant('PUREHTML_APP_CSOB_SANDBOX_API_' . strtoupper($type));
+ }
+ }
+
+ function getParameters($module) {
+ $result = [];
+
+ if ($module == 'G') {
+ if ($dir = @dir(DIR_FS_CATALOG . 'includes/apps/csob/cfg_params/')) {
+ while ($file = $dir->read()) {
+ if (!is_dir(DIR_FS_CATALOG . 'includes/apps/csob/cfg_params/' . $file) && (substr($file, strrpos($file, '.')) == '.php')) {
+ $result[] = 'PUREHTML_APP_CSOB_' . strtoupper(substr($file, 0, strrpos($file, '.')));
+ }
+ }
+ }
+ } else {
+ if ($dir = @dir(DIR_FS_CATALOG . 'includes/apps/csob/modules/' . $module . '/cfg_params/')) {
+ while ($file = $dir->read()) {
+ if (!is_dir(DIR_FS_CATALOG . 'includes/apps/csob/modules/' . $module . '/cfg_params/' . $file) && (substr($file, strrpos($file, '.')) == '.php')) {
+ $result[] = 'PUREHTML_APP_CSOB_' . $module . '_' . strtoupper(substr($file, 0, strrpos($file, '.')));
+ }
+ }
+ }
+ }
+
+ return $result;
+ }
+
+ function getInputParameters($module) {
+ $result = [];
+
+ if ($module == 'G') {
+ $cut = 'PUREHTML_APP_CSOB_';
+ } else {
+ $cut = 'PUREHTML_APP_CSOB_' . $module . '_';
+ }
+
+ $cut_length = strlen($cut);
+
+ foreach ($this->getParameters($module) as $key) {
+ $p = strtolower(substr($key, $cut_length));
+
+ if ($module == 'G') {
+ $cfg_class = 'OSCOM_CSOB_Cfg_' . $p;
+
+ if (!class_exists($cfg_class)) {
+ $this->loadLanguageFile('cfg_params/' . $p . '.php');
+
+ include(DIR_FS_CATALOG . 'includes/apps/csob/cfg_params/' . $p . '.php');
+ }
+ } else {
+ $cfg_class = 'OSCOM_CSOB_' . $module . '_Cfg_' . $p;
+
+ if (!class_exists($cfg_class)) {
+ $this->loadLanguageFile('modules/' . $module . '/cfg_params/' . $p . '.php');
+
+ include(DIR_FS_CATALOG . 'includes/apps/csob/modules/' . $module . '/cfg_params/' . $p . '.php');
+ }
+ }
+
+ $cfg = new $cfg_class();
+
+ if (!defined($key)) {
+ $this->saveParameter($key, $cfg->default, ($cfg->title ?? null), ($cfg->description ?? null), ($cfg->set_func ?? null));
+ }
+
+ if (!isset($cfg->app_configured) || ($cfg->app_configured !== false)) {
+ if (isset($cfg->sort_order) && is_numeric($cfg->sort_order)) {
+ $counter = (int) $cfg->sort_order;
+ } else {
+ $counter = count($result);
+ }
+
+ while (true) {
+ if (isset($result[$counter])) {
+ $counter++;
+
+ continue;
+ }
+
+ $set_field = $cfg->getSetField();
+
+ if (!empty($set_field)) {
+ $result[$counter] = $set_field;
+ }
+
+ break;
+ }
+ }
+ }
+
+ ksort($result, SORT_NUMERIC);
+
+ return $result;
+ }
+
+// APP calls require $server to be "live" or "sandbox"
+ function getApiResult($module, $call, $extra_params = null, $server = null, $is_ipn = false) {
+ if ($module == 'APP') {
+ $function = 'OSCOM_CSOB_Api_' . $call;
+
+ if (!function_exists($function)) {
+ require DIR_FS_CATALOG . 'includes/apps/csob/api/' . $call . '.php';
+ }
+ } else {
+ if (!isset($server)) {
+ $server = (constant('PUREHTML_APP_CSOB_' . $module . '_STATUS') == '1') ? 'live' : 'sandbox';
+ }
+
+ $function = 'OSCOM_CSOB_' . $module . '_Api_' . $call;
+
+ if (!function_exists($function)) {
+ include(DIR_FS_CATALOG . 'includes/apps/csob/modules/' . $module . '/api/' . $call . '.php');
+ }
+ }
+
+ $result = $function($this, $server, $extra_params);
+
+ $this->log($module, $call, ($result['success'] === true) ? 1 : -1, $result['req'], $result['res'], $server, $is_ipn);
+
+ return $result['res'];
+ }
+
+ function makeApiCall($url, $parameters = null, $headers = null, $opts = null) {
+ $server = parse_url($url);
+
+ if (!isset($server['port'])) {
+ $server['port'] = ($server['scheme'] == 'https') ? 443 : 80;
+ }
+
+ if (!isset($server['path'])) {
+ $server['path'] = '/';
+ }
+
+ $curl = curl_init($server['scheme'] . '://' . $server['host'] . $server['path'] . (isset($server['query']) ? '?' . $server['query'] : ''));
+ curl_setopt($curl, CURLOPT_PORT, $server['port']);
+ curl_setopt($curl, CURLOPT_HEADER, false);
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($curl, CURLOPT_FORBID_REUSE, true);
+ curl_setopt($curl, CURLOPT_FRESH_CONNECT, true);
+ curl_setopt($curl, CURLOPT_ENCODING, ''); // disable gzip
+
+ if (isset($parameters)) {
+ curl_setopt($curl, CURLOPT_POST, true);
+ curl_setopt($curl, CURLOPT_POSTFIELDS, $parameters);
+ }
+
+ if (isset($headers) && is_array($headers) && !empty($headers)) {
+ curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
+ }
+
+ if (isset($server['user']) && isset($server['pass'])) {
+ curl_setopt($curl, CURLOPT_USERPWD, $server['user'] . ':' . $server['pass']);
+ }
+
+ if (defined('PUREHTML_APP_CSOB_VERIFY_SSL') && (PUREHTML_APP_CSOB_VERIFY_SSL == '1')) {
+ curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
+ curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
+
+ if ((substr($server['host'], -10) == 'csob.com') && file_exists(DIR_FS_CATALOG . 'ext/modules/payment/csob/csob.com.crt')) {
+ curl_setopt($curl, CURLOPT_CAINFO, DIR_FS_CATALOG . 'ext/modules/payment/csob/csob.com.crt');
+ } elseif (file_exists(DIR_FS_CATALOG . 'includes/cacert.pem')) {
+ curl_setopt($curl, CURLOPT_CAINFO, DIR_FS_CATALOG . 'includes/cacert.pem');
+ }
+ } else {
+ curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
+ curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
+ }
+
+ if (substr($server['host'], -10) == 'csob.com') {
+ $ssl_version = 0;
+
+ if (defined('PUREHTML_APP_CSOB_SSL_VERSION') && (PUREHTML_APP_CSOB_SSL_VERSION == '1')) {
+ $ssl_version = 6;
+ }
+
+ if (isset($opts['sslVersion']) && is_int($opts['sslVersion'])) {
+ $ssl_version = $opts['sslVersion'];
+ }
+
+ if ($ssl_version !== 0) {
+ curl_setopt($curl, CURLOPT_SSLVERSION, $ssl_version);
+ }
+ }
+
+ if (defined('PUREHTML_APP_CSOB_PROXY') && tep_not_null(PUREHTML_APP_CSOB_PROXY)) {
+ curl_setopt($curl, CURLOPT_HTTPPROXYTUNNEL, true);
+ curl_setopt($curl, CURLOPT_PROXY, PUREHTML_APP_CSOB_PROXY);
+ }
+
+ $result = curl_exec($curl);
+
+ if (isset($opts['returnFull']) && ($opts['returnFull'] === true)) {
+ $result = [
+ 'response' => $result,
+ 'error' => curl_error($curl),
+ 'info' => curl_getinfo($curl),
+ ];
+ }
+
+ curl_close($curl);
+
+ return $result;
+ }
+
+ function drawButton($title = null, $link = null, $type = null, $params = null, $force_css = false) {
+ $colours = [
+ 'success' => 'success',
+ 'error' => 'danger',
+ 'warning' => 'warning',
+ 'info' => 'info',
+ 'primary' => 'primary',
+ ];
+
+ if (!isset($type) || !in_array($type, array_keys($colours))) {
+ $type = 'info';
+ }
+
+ $button = '';
+
+ if (isset($link)) {
+ $button .= '';
+ } else {
+ $button .= '';
+ }
+
+ return $button;
+ }
+
+ function createRandomValue($length, $type = 'mixed') {
+ if (($type != 'mixed') && ($type != 'chars') && ($type != 'digits'))
+ $type = 'mixed';
+
+ $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
+ $digits = '0123456789';
+
+ $base = '';
+
+ if (($type == 'mixed') || ($type == 'chars')) {
+ $base .= $chars;
+ }
+
+ if (($type == 'mixed') || ($type == 'digits')) {
+ $base .= $digits;
+ }
+
+ $value = '';
+
+ $hasher = new PasswordHash(10, true);
+
+ do {
+ $random = base64_encode($hasher->get_random_bytes($length));
+
+ for ($i = 0, $n = strlen($random); $i < $n; $i++) {
+ $char = substr($random, $i, 1);
+
+ if (strpos($base, $char) !== false) {
+ $value .= $char;
+ }
+ }
+ } while (strlen($value) < $length);
+
+ if (strlen($value) > $length) {
+ $value = substr($value, 0, $length);
+ }
+
+ return $value;
+ }
+
+ function saveParameter($key, $value, $title = null, $description = null, $set_func = null) {
+ if (defined($key)) {
+ tep_db_query("UPDATE configuration SET configuration_value = '" . tep_db_input($value) . "' WHERE configuration_key = '" . tep_db_input($key) . "'");
+ } else {
+ if (!isset($title)) {
+ $title = 'CSOB App Parameter';
+ }
+
+ if (!isset($description)) {
+ $description = 'A parameter for the CSOB Application.';
+ }
+
+ $sql = 'INSERT INTO configuration (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, ';
+ if (isset($set_func)) {
+ $sql .= 'set_function, ';
+ }
+ $sql .= "date_added) VALUES ('" . tep_db_input($title) . "', '" . tep_db_input($key) . "', '" . tep_db_input($value) . "', '" . tep_db_input($description) . "', 6, 0, ";
+ if (isset($set_func)) {
+ $sql .= "'" . tep_db_input($set_func) . "', ";
+ }
+ $sql .= 'NOW())';
+
+ tep_db_query($sql);
+
+ define($key, $value);
+ }
+ }
+
+ function deleteParameter($key) {
+ tep_db_query("DELETE FROM configuration WHERE configuration_key = '" . tep_db_input($key) . "'");
+ }
+
+ function formatCurrencyRaw($total, $currency_code = null, $currency_value = null) {
+ global $currencies;
+
+ if (!isset($currency_code)) {
+ $currency_code = $_SESSION['currency'] ?? DEFAULT_CURRENCY;
+ }
+
+ if (!isset($currency_value) || !is_numeric($currency_value)) {
+ $currency_value = $currencies->currencies[$currency_code]['value'];
+ }
+
+ return number_format(tep_round($total * $currency_value, $currencies->currencies[$currency_code]['decimal_places']), $currencies->currencies[$currency_code]['decimal_places'], '.', '');
+ }
+
+ function getCode() {
+ return $this->_code;
+ }
+
+ function getTitle() {
+ return $this->_title;
+ }
+
+ function getVersion() {
+ if (!isset($this->_version)) {
+ $version = trim(file_get_contents(DIR_FS_CATALOG . 'includes/apps/csob/version.txt'));
+
+ if (is_numeric($version)) {
+ $this->_version = $version;
+ } else {
+ trigger_error('APP [CSOB]: Could not read App version number.');
+ }
+ }
+
+ return $this->_version;
+ }
+
+ function getApiVersion() {
+ return $this->_api_version;
+ }
+
+ function getIdentifier() {
+ return $this->_identifier;
+ }
+
+ function hasAlert() {
+ return isset($_SESSION['OSCOM_CSOB_Alerts']);
+ }
+
+ function addAlert($message, $type) {
+ if (in_array($type, ['error', 'warning', 'success'])) {
+ if (!isset($_SESSION['OSCOM_CSOB_Alerts'])) {
+ $_SESSION['OSCOM_CSOB_Alerts'] = [];
+ }
+
+ $_SESSION['OSCOM_CSOB_Alerts'][$type][] = $message;
+ }
+ }
+
+ function getAlerts() {
+ $output = '';
+
+ if (!empty($_SESSION['OSCOM_CSOB_Alerts'])) {
+ $result = [];
+
+ foreach ($_SESSION['OSCOM_CSOB_Alerts'] as $type => $messages) {
+ if (in_array($type, ['error', 'warning', 'success'])) {
+ $m = null;
+
+ foreach ($messages as $message) {
+ $m .= '';
+ $m .= htmlspecialchars($message);
+ $m .= '
';
+ }
+
+ $result[] = $m;
+ }
+ }
+
+ if (!empty($result)) {
+ $output .= '' . implode("\n", $result) . '
';
+ }
+ }
+
+ unset($_SESSION['OSCOM_CSOB_Alerts']);
+
+ return $output;
+ }
+
+ function install($module) {
+ $cut_length = strlen('PUREHTML_APP_CSOB_' . $module . '_');
+
+ foreach ($this->getParameters($module) as $key) {
+ $p = strtolower(substr($key, $cut_length));
+
+ $cfg_class = 'OSCOM_CSOB_' . $module . '_Cfg_' . $p;
+
+ if (!class_exists($cfg_class)) {
+ $this->loadLanguageFile('modules/' . $module . '/cfg_params/' . $p . '.php');
+
+ include(DIR_FS_CATALOG . 'includes/apps/csob/modules/' . $module . '/cfg_params/' . $p . '.php');
+ }
+
+ $cfg = new $cfg_class();
+
+ $this->saveParameter($key, $cfg->default, ($cfg->title ?? null), ($cfg->description ?? null), ($cfg->set_func ?? null));
+ }
+
+ $m_class = 'OSCOM_CSOB_' . $module;
+
+ if (!class_exists($m_class)) {
+ $this->loadLanguageFile('modules/' . $module . '/' . $module . '.php');
+
+ include(DIR_FS_CATALOG . 'includes/apps/csob/modules/' . $module . '/' . $module . '.php');
+ }
+
+ $m = new $m_class();
+
+ if (method_exists($m, 'install')) {
+ $m->install($this);
+ }
+ }
+
+ function uninstall($module) {
+ tep_db_query("delete from configuration where configuration_key like 'PUREHTML_APP_CSOB_" . tep_db_input($module) . "_%'");
+
+ $m_class = 'OSCOM_CSOB_' . $module;
+
+ if (!class_exists($m_class)) {
+ $this->loadLanguageFile('modules/' . $module . '/' . $module . '.php');
+
+ include(DIR_FS_CATALOG . 'includes/apps/csob/modules/' . $module . '/' . $module . '.php');
+ }
+
+ $m = new $m_class();
+
+ if (method_exists($m, 'uninstall')) {
+ $m->uninstall($this);
+ }
+ }
+
+ function logUpdate($message, $version) {
+ if (is_writable(DIR_FS_CATALOG . 'includes/apps/csob/work')) {
+ file_put_contents(DIR_FS_CATALOG . 'includes/apps/csob/work/update_log-' . $version . '.php', '[' . date('d-M-Y H:i:s') . '] ' . $message . "\n", FILE_APPEND);
+ }
+ }
+
+ public function loadLanguageFile($filename, $lang = null) {
+ $lang = basename($lang ?? $_SESSION['language']);
+
+ if ($lang != 'english') {
+ $this->loadLanguageFile($filename, 'english');
+ }
+
+ $pathname = DIR_FS_CATALOG . 'includes/apps/csob/languages/' . $lang . '/' . $filename;
+
+ if (file_exists($pathname)) {
+ $contents = file($pathname);
+
+ $ini_array = [];
+
+ foreach ($contents as $line) {
+ $line = trim($line);
+
+ if (!empty($line) && (substr($line, 0, 1) != '#')) {
+ $delimiter = strpos($line, '=');
+
+ if (($delimiter !== false) && (preg_match('/^[A-Za-z0-9_-]/', substr($line, 0, $delimiter)) === 1) && (substr_count(substr($line, 0, $delimiter), ' ') == 1)) {
+ $key = trim(substr($line, 0, $delimiter));
+ $value = trim(substr($line, $delimiter + 1));
+
+ $ini_array[$key] = $value;
+ } elseif (isset($key)) {
+ $ini_array[$key] .= "\n" . $line;
+ }
+ }
+ }
+
+ unset($contents);
+
+ $this->_definitions = array_merge($this->_definitions, $ini_array);
+
+ unset($ini_array);
+ }
+ }
+
+ function getDef($key, $values = null) {
+ $def = $this->_definitions[$key] ?? $key;
+
+ if (is_array($values)) {
+ $keys = array_keys($values);
+
+ foreach ($keys as &$k) {
+ $k = ':' . $k;
+ }
+
+ $def = str_replace($keys, array_values($values), $def);
+ }
+
+ return $def;
+ }
+
+ function getDirectoryContents($base, &$result = []) {
+ foreach (scandir($base) as $file) {
+ if (($file == '.') || ($file == '..')) {
+ continue;
+ }
+
+ $pathname = $base . '/' . $file;
+
+ if (is_dir($pathname)) {
+ $this->getDirectoryContents($pathname, $result);
+ } else {
+ $result[] = str_replace('\\', '/', $pathname); // Unix style directory separator "/"
+ }
+ }
+
+ return $result;
+ }
+
+ function isWritable($location) {
+ if (!file_exists($location)) {
+ while (true) {
+ $location = dirname($location);
+
+ if (file_exists($location)) {
+ break;
+ }
+ }
+ }
+
+ return is_writable($location);
+ }
+
+ function rmdir($dir) {
+ foreach (scandir($dir) as $file) {
+ if (!in_array($file, ['.', '..'])) {
+ if (is_dir($dir . '/' . $file)) {
+ $this->rmdir($dir . '/' . $file);
+ } else {
+ unlink($dir . '/' . $file);
+ }
+ }
+ }
+
+ return rmdir($dir);
+ }
+
+ function displayPath($pathname) {
+ if (DIRECTORY_SEPARATOR == '/') {
+ return $pathname;
+ }
+
+ return str_replace('/', DIRECTORY_SEPARATOR, $pathname);
+ }
+
+}
diff --git a/includes/apps/csob/hooks/admin/orders/action.php b/includes/apps/csob/hooks/admin/orders/action.php
new file mode 100644
index 000000000..c59dfa26e
--- /dev/null
+++ b/includes/apps/csob/hooks/admin/orders/action.php
@@ -0,0 +1,26 @@
+getApi()->paymentRefund($payment->payId);
+ echo new \Ease\TWB4\Alert('success', 'A');
+ } catch (\OndraKoupil\Csob\Exception $exc) {
+ echo new \Ease\TWB4\Alert('warning', $exc->getMessage());
+
+// echo $exc->getTraceAsString();
+ }
+
+ }
+ }
+ }
+
+}
diff --git a/includes/apps/csob/hooks/admin/orders/tab.php b/includes/apps/csob/hooks/admin/orders/tab.php
new file mode 100644
index 000000000..37b1ca2cc
--- /dev/null
+++ b/includes/apps/csob/hooks/admin/orders/tab.php
@@ -0,0 +1,336 @@
+_app = $PUREHTML_CSOB;
+
+ $this->_app->loadLanguageFile('hooks/admin/orders/tab.php');
+ }
+
+ function execute() {
+ if (!defined('MODULE_PAYMENT_CSOB_PROCESSING_ORDER_STATUS_ID')) {
+ return;
+ }
+
+ global $oID, $base_url;
+
+ $output = 'csob_hook_admin_orders_tab';
+
+ $status = [];
+
+// $ppstatus_query = tep_db_query("select comments from orders_status_history where orders_id = '" . (int) $oID . "' and orders_status_id = '" . (int) MODULE_PAYMENT_CSOB_PROCESSING_ORDER_STATUS_ID . "' and comments like 'Transaction ID:%' order by date_added desc limit 1");
+ $ppstatus_query = tep_db_query("select comments from orders_status_history where orders_id = '" . (int) $oID . "' order by date_added desc limit 1");
+ if (tep_db_num_rows($ppstatus_query)) {
+ $ppstatus = tep_db_fetch_array($ppstatus_query);
+
+ foreach (explode("\n", $ppstatus['comments']) as $s) {
+ if (!empty($s) && (strpos($s, ':') !== false)) {
+ $entry = explode(':', $s, 2);
+
+ $status[trim($entry[0])] = trim($entry[1]);
+ }
+ }
+
+ $status['Transaction ID'] = 122;
+ $status['Pending Reason'] = 'authorization';
+
+ if (isset($status['Transaction ID'])) {
+ $order_query = tep_db_query("select o.orders_id, o.payment_method, o.currency, o.currency_value, ot.value as total from orders o, orders_total ot where o.orders_id = '" . (int) $oID . "' and o.orders_id = ot.orders_id and ot.class = 'ot_total'");
+ $order = tep_db_fetch_array($order_query);
+
+ $pp_server = (strpos(strtolower($order['payment_method']), 'sandbox') !== false) ? 'sandbox' : 'live';
+
+ $info_button = $this->_app->drawButton($this->_app->getDef('button_details'), tep_href_link('orders.php', 'page=' . (int) ($_GET['page'] ?? 1) . '&oID=' . $oID . '&action=edit&tabaction=getTransactionDetails'), 'primary', null, true);
+ $capture_button = $this->getCaptureButton($status, $order);
+ $void_button = $this->getVoidButton($status, $order);
+ $refund_button = $this->getRefundButton($status, $order);
+// $csob_button = $this->_app->drawButton($this->_app->getDef('button_view_at_csob'), 'https://www.' . ($pp_server == 'sandbox' ? 'sandbox.' : '') . 'csob.com/cgi-bin/webscr?cmd=_view-a-trans&id=' . $status['Transaction ID'], 'info', 'target="_blank" rel="noreferrer"', true);
+
+ $tab_title = addslashes($this->_app->getDef('tab_title'));
+ $tab_link = '#section_csob_content';
+
+ $output = <<
+$(function() {
+ $('#orderTabs ul').append('{$tab_title} ');
+});
+
+
+
+ {$info_button} {$capture_button} {$void_button} {$refund_button}
+
+EOD;
+ }
+ }
+
+ $client = new \PureOSC\Payment(new \PureOSC\Order($oID));
+
+ $output .= \PureOSC\Payment::paymentStatusMeaning($client->requestStatus()) ;
+
+ return $output;
+ }
+
+ function getCaptureButton($status, $order) {
+ $output = '';
+
+ if (($status['Pending Reason'] == 'authorization') || ($status['Payment Status'] == 'In-Progress')) {
+ $v_query = tep_db_query("select comments from orders_status_history where orders_id = '" . (int) $order['orders_id'] . "' and orders_status_id = '" . (int) MODULE_PAYMENT_CSOB_PROCESSING_ORDER_STATUS_ID . "' and comments like '%CSOB App: Void (%' limit 1");
+
+ if (!tep_db_num_rows($v_query)) {
+ $capture_total = $this->_app->formatCurrencyRaw($order['total'], $order['currency'], $order['currency_value']);
+
+ $c_query = tep_db_query("select comments from orders_status_history where orders_id = '" . (int) $order['orders_id'] . "' and orders_status_id = '" . (int) MODULE_PAYMENT_CSOB_PROCESSING_ORDER_STATUS_ID . "' and comments like 'CSOB App: Capture (%'");
+ while ($c = tep_db_fetch_array($c_query)) {
+ if (preg_match('/^CSOB App\: Capture \(([0-9\.]+)\)\n/', $c['comments'], $c_matches)) {
+ $capture_total -= $this->_app->formatCurrencyRaw($c_matches[1], $order['currency'], 1);
+ }
+ }
+
+ if ($capture_total > 0) {
+ $output .= $this->_app->drawButton($this->_app->getDef('button_dialog_capture'), '#', 'success', 'data-button="csobButtonDoCapture"', true);
+
+ $dialog_title = htmlspecialchars($this->_app->getDef('dialog_capture_title'));
+ $dialog_body = $this->_app->getDef('dialog_capture_body');
+ $field_amount_title = $this->_app->getDef('dialog_capture_amount_field_title');
+ $field_last_capture_title = $this->_app->getDef('dialog_capture_last_capture_field_title', ['currency' => $order['currency']]);
+ $capture_link = tep_href_link('orders.php', 'page=' . (int) ($_GET['page'] ?? 1) . '&oID=' . $order['orders_id'] . '&action=edit&tabaction=doCapture');
+ $capture_currency = $order['currency'];
+ $dialog_button_capture = addslashes($this->_app->getDef('dialog_capture_button_capture'));
+ $dialog_button_cancel = addslashes($this->_app->getDef('dialog_capture_button_cancel'));
+
+ $output .= <<
+
+
+
+
+EOD;
+ }
+ }
+ }
+
+ return $output;
+ }
+
+ function getVoidButton($status, $order) {
+ $output = '';
+
+ if ($status['Pending Reason'] == 'authorization') {
+ $v_query = tep_db_query("select comments from orders_status_history where orders_id = '" . (int) $order['orders_id'] . "' and orders_status_id = '" . (int) MODULE_PAYMENT_CSOB_PROCESSING_ORDER_STATUS_ID . "' and comments like '%CSOB App: Void (%' limit 1");
+
+ if (!tep_db_num_rows($v_query)) {
+ $capture_total = $this->_app->formatCurrencyRaw($order['total'], $order['currency'], $order['currency_value']);
+
+ $c_query = tep_db_query("select comments from orders_status_history where orders_id = '" . (int) $order['orders_id'] . "' and orders_status_id = '" . (int) MODULE_PAYMENT_CSOB_PROCESSING_ORDER_STATUS_ID . "' and comments like 'CSOB App: Capture (%'");
+ while ($c = tep_db_fetch_array($c_query)) {
+ if (preg_match('/^CSOB App\: Capture \(([0-9\.]+)\)\n/', $c['comments'], $c_matches)) {
+ $capture_total -= $this->_app->formatCurrencyRaw($c_matches[1], $order['currency'], 1);
+ }
+ }
+
+ if ($capture_total > 0) {
+ $output .= $this->_app->drawButton($this->_app->getDef('button_dialog_void'), '#', 'warning', 'data-button="csobButtonDoVoid"', true);
+
+ $dialog_title = htmlspecialchars($this->_app->getDef('dialog_void_title'));
+ $dialog_body = $this->_app->getDef('dialog_void_body');
+ $void_link = tep_href_link('orders.php', 'page=' . (int) ($_GET['page'] ?? 1) . '&oID=' . $order['orders_id'] . '&action=edit&tabaction=doVoid');
+ $dialog_button_void = addslashes($this->_app->getDef('dialog_void_button_void'));
+ $dialog_button_cancel = addslashes($this->_app->getDef('dialog_void_button_cancel'));
+
+ $output .= <<
+ {$dialog_body}
+
+
+
+EOD;
+ }
+ }
+ }
+
+ return $output;
+ }
+
+ function getRefundButton($status, $order) {
+ $output = '';
+
+ $status['Payment Status'] = 'Completed';
+
+ $tids = [];
+
+ $ppr_query = tep_db_query("select comments from orders_status_history where orders_id = '" . (int) $_GET['oID'] . "' and orders_status_id = '" . (int) MODULE_PAYMENT_CSOB_PROCESSING_ORDER_STATUS_ID . "' and comments like 'CSOB App: %' order by date_added desc");
+ if (tep_db_num_rows($ppr_query)) {
+ while ($ppr = tep_db_fetch_array($ppr_query)) {
+ if (strpos($ppr['comments'], 'CSOB App: Refund') !== false) {
+ preg_match('/Parent ID\: ([A-Za-z0-9]+)$/', $ppr['comments'], $ppr_matches);
+
+ $tids[$ppr_matches[1]]['Refund'] = true;
+ } elseif (strpos($ppr['comments'], 'CSOB App: Capture') !== false) {
+ preg_match('/^CSOB App\: Capture \(([0-9\.]+)\).*Transaction ID\: ([A-Za-z0-9]+)/s', $ppr['comments'], $ppr_matches);
+
+ $tids[$ppr_matches[2]]['Amount'] = $ppr_matches[1];
+ }
+ }
+ } elseif ($status['Payment Status'] == 'Completed') {
+ $tids[$status['Transaction ID']]['Amount'] = $this->_app->formatCurrencyRaw($order['total'], $order['currency'], $order['currency_value']);
+ }
+
+ $can_refund = false;
+
+ foreach ($tids as $value) {
+ if (!isset($value['Refund'])) {
+ $can_refund = true;
+ break;
+ }
+ }
+
+ if ($can_refund === true) {
+ $output .= $this->_app->drawButton($this->_app->getDef('button_dialog_refund'), '#', 'error', 'data-button="csobButtonRefundTransaction"', true);
+
+ $dialog_title = htmlspecialchars($this->_app->getDef('dialog_refund_title'));
+ $dialog_body = $this->_app->getDef('dialog_refund_body');
+ $refund_link = tep_href_link('orders.php', 'page=' . (int) ($_GET['page'] ?? 1) . '&oID=' . (int) $_GET['oID'] . '&action=edit&tabaction=refundTransaction');
+ $dialog_button_refund = addslashes($this->_app->getDef('dialog_refund_button_refund'));
+ $dialog_button_cancel = addslashes($this->_app->getDef('dialog_refund_button_cancel'));
+
+ $refund_fields = '';
+
+ $counter = 0;
+
+ foreach ($tids as $key => $value) {
+ $refund_fields .= ' ' . $this->_app->getDef('dialog_refund_payment_title', ['amount' => $value['Amount']]) . '
';
+
+ $counter++;
+ }
+
+ $output .= <<
+
+
+
+
+EOD;
+ }
+
+ return $output;
+ }
+
+}
+
+?>
diff --git a/includes/apps/csob/languages/english/hooks/admin/orders/tab.php b/includes/apps/csob/languages/english/hooks/admin/orders/tab.php
new file mode 100644
index 000000000..c382f197e
--- /dev/null
+++ b/includes/apps/csob/languages/english/hooks/admin/orders/tab.php
@@ -0,0 +1,25 @@
+button_dialog_capture = Capture …
+button_details = Details
+button_dialog_refund = Refund …
+button_view_at_paypal = View at CSOB
+button_dialog_void = Void …
+
+tab_title = CSOB
+
+dialog_capture_title = Capture Payment
+dialog_capture_body = The full or a partial amount can be captured.
+dialog_capture_amount_field_title = Amount:
+dialog_capture_last_capture_field_title = This is the last capture (release :currency back to the customer).
+dialog_capture_button_capture = Capture Amount
+dialog_capture_button_cancel = Cancel
+
+dialog_void_title = Void Payment
+dialog_void_body = Are you sure you want to void the authorized payment?
+dialog_void_button_void = Void Payment
+dialog_void_button_cancel = Cancel
+
+dialog_refund_title = Vrátit Platbu
+dialog_refund_body = Please select which refunds to perform:
+dialog_refund_payment_title = Vrátit :amount zákazníkovi.
+dialog_refund_button_refund = Vrátit celou platbu
+dialog_refund_button_cancel = Zrušit
diff --git a/includes/apps/paypal/hooks/admin/orders/action.php b/includes/apps/paypal/hooks/admin/orders/action.php
index 520975b0d..1d60c34ef 100644
--- a/includes/apps/paypal/hooks/admin/orders/action.php
+++ b/includes/apps/paypal/hooks/admin/orders/action.php
@@ -30,7 +30,7 @@ function __construct() {
function execute() {
if ( isset($_GET['tabaction']) ) {
- $ppstatus_query = tep_db_query("select comments from orders_status_history where orders_id = '" . (int)$_GET['oID'] . "' and orders_status_id = '" . (int)OSCOM_APP_PAYPAL_TRANSACTIONS_ORDER_STATUS_ID . "' and comments like '%Transaction ID:%' order by date_added limit 1");
+ $ppstatus_query = tep_db_query("select comments from orders_status_history where orders_id = '" . (int)$_GET['oID'] . "' and orders_status_id = '" . (int)MODULE_PAYMENT_CSOB_PROCESSING_ORDER_STATUS_ID . "' and comments like '%Transaction ID:%' order by date_added limit 1");
if ( tep_db_num_rows($ppstatus_query) ) {
$ppstatus = tep_db_fetch_array($ppstatus_query);
diff --git a/includes/classes/Order.php b/includes/classes/Order.php
index 0fa20c2dc..8a860a945 100644
--- a/includes/classes/Order.php
+++ b/includes/classes/Order.php
@@ -9,12 +9,16 @@
namespace PureOSC;
/**
- * Description of Order
+ * Better Order by PureHTML
*
* @author vitex
*/
class Order extends \order {
+ /**
+ * PureHTML's Order class
+ * @param int $order_id
+ */
public function __construct($order_id = null) {
$this->customer['id'] = null;
@@ -23,15 +27,22 @@ public function __construct($order_id = null) {
} else {
parent::__construct($order_id);
$this->set_id($order_id);
- self::updateTotals();
+// self::updateTotals();
}
}
public function updateTotals() {
- $order_total_modules = new order_total();
- $order->totals = $order_total_modules->process();
+ global $order;
+ $order = $this;
+ $order_total_modules = new \order_total();
+ $this->totals = $order_total_modules->process();
}
+
+ public function getPaymentStatus() {
+
+ }
+
public function getStatus() {
return array_key_exists('orders_status_id', $this->info) ? intval($this->info['orders_status_id']) : 0;
}
@@ -63,4 +74,12 @@ public static function redirectForOrderStatus(int $orderStatusId) {
}
}
+ public function save() {
+
+ require_once 'includes/system/segments/checkout/insert_order.php';
+
+ $this->set_id($GLOBALS['order_id'] );
+
+ }
+
}
diff --git a/includes/classes/Payment.php b/includes/classes/Payment.php
index 8802721f9..798ac909e 100644
--- a/includes/classes/Payment.php
+++ b/includes/classes/Payment.php
@@ -37,13 +37,52 @@ class Payment extends \OndraKoupil\Csob\Payment {
*/
public $status = 0;
+ /**
+ *
+ * @var DateTime
+ */
+ private $updated;
+ private $order;
+
+ /**
+ * Payment
+ *
+ * @param \order $order
+ * @param boolean $oneClickPayment
+ */
public function __construct(\order $order, $oneClickPayment = false) {
-
-
- $merchantData = $order->get_id() ? json_encode(['orderId' => $order->get_id(), 'customerId' => $order->customer['id'], 'payment' => $_SESSION['payment'], 'sessiontoken' => $_SESSION['sessiontoken']]) : [];
+ if (empty($order->id)) {
+ throw new Exception('Order without number');
+ }
+
+ $this->order = $order;
+
+ $order_query = tep_db_query("SELECT * FROM csob WHERE orders_id = " . (int) $order->id);
+ $paymentData = $order_query->fetch_assoc();
+ if (!empty($paymentData && array_key_exists('payId', $paymentData))) {
+ $this->payId = $paymentData['payId'];
+ $this->status = $paymentData['paymentStatus'];
+ $this->updated = $paymentData['updated'];
+ }
+
+ $merchantInfo = [
+ 'orderId' => $order->get_id(),
+ 'customerId' => $order->customer['id'],
+ ];
+
+ if (array_key_exists('payment', $_SESSION)) {
+ $merchantInfo['payment'] = array_key_exists('payment', $_SESSION) ? $_SESSION['payment'] : $this;
+ }
+ if (array_key_exists('sessiontoken', $_SESSION)) {
+ $merchantInfo['sessiontoken'] = $_SESSION['sessiontoken'];
+ }
+
+ $merchantData = $order->get_id() ? json_encode($merchantInfo) : [];
parent::__construct($order->get_id(), $merchantData, $order->customer['id'], $oneClickPayment);
-
- $lang_query = tep_db_query("SELECT code FROM languages WHERE languages_id = " . (int) $_SESSION['languages_id']);
+ }
+
+ public function orderToPayment() {
+ $lang_query = tep_db_query("SELECT code FROM languages WHERE languages_id = " . (int) $_SESSION['languages_id']);
$lang = tep_db_fetch_array($lang_query);
if ($lang['code'] == 'cs') {
@@ -52,14 +91,14 @@ public function __construct(\order $order, $oneClickPayment = false) {
$this->language = strtoupper($lang['code']);
$order_total_modules = new \order_total();
- $order->totals = $order_total_modules->process();
+ $this->order->totals = $order_total_modules->process();
- if (!empty($order->totals)) {
- if (isset($order->totals[0]['value'])) {
- $this->addCartItem($order->totals[0]['title'], 1, $order->totals[0]['value']);
+ if (!empty($this->order->totals)) {
+ if (isset($this->order->totals[0]['value'])) {
+ $this->addCartItem($this->order->totals[0]['title'], 1, $this->order->totals[0]['value']);
}
- if (isset($order->totals[1]['value'])) {
- $this->addCartItem($order->totals[1]['title'], 1, $order->totals[1]['value']);
+ if (isset($this->order->totals[1]['value'])) {
+ $this->addCartItem($this->order->totals[1]['title'], 1, $this->order->totals[1]['value']);
}
}
}
@@ -69,9 +108,34 @@ public function __construct(\order $order, $oneClickPayment = false) {
* @return int status id
*/
public function getStatus() {
+ $start_date = new \DateTime($this->updated);
+ $since_start = $start_date->diff(new \DateTime());
+ if ($since_start->i) {
+ $this->requestStatus(); // Load from Bank API
+ } else {
+ $this->loadPayment($this->payId); //Load from DB Cache
+ }
return $this->status;
}
+ /**
+ * Load payment's info by payId
+ * @param type $payId
+ */
+ public function loadPayment($payId) {
+ $order_query = tep_db_query("SELECT * FROM csob WHERE payId = \"" . $payId . '"');
+ $paymentData = $order_query->fetch_assoc();
+ if (!empty($paymentData && array_key_exists('payId', $paymentData))) {
+ $this->payId = $paymentData['payId'];
+ $this->status = $paymentData['paymentStatus'];
+ $this->updated = $paymentData['updated'];
+ }
+ }
+
+ /**
+ * store status in
+ * @param int $status
+ */
public function setStatus(int $status) {
$this->status = $status;
}
@@ -87,14 +151,21 @@ public function getApi() {
return $this->api;
}
+ /**
+ * Establish new payment record
+ */
public function saveNewPayment() {
if ($this->getPayId()) {
- tep_db_query("INSERT INTO csob (payId,paymentStatus, orders_id) VALUES ('" . $this->getPayId() . "', " . $this->getStatus() . ", " . $this->orderNo . ")");
+ tep_db_query("INSERT INTO csob (payId,paymentStatus, orders_id, updated) VALUES ('" . $this->payId . "', " . $this->getStatus() . ", " . $this->orderNo . ",NOW())");
}
}
+ /**
+ * Save payment's status into database
+ */
public function savePaymentState() {
- tep_db_query("UPDATE csob SET paymentStatus = " . $this->getStatus() . " WHERE payId = '" . $this->getPayId() . "'");
+ tep_db_query("UPDATE csob SET paymentStatus = " . $this->status . ", `updated`=NOW() WHERE payId = '" . $this->payId . "'");
+ $this->updated = (new \DateTime())->format('Y-m-d H:i:s');
}
/**
@@ -103,14 +174,23 @@ public function savePaymentState() {
* @return array payment gw response
*/
public function requestPayment() {
+ $this->orderToPayment();
$paymentData = $this->getApi()->paymentInit($this);
if (array_key_exists('paymentStatus', $paymentData)) {
$this->status = $paymentData['paymentStatus'];
+ $this->payId = $paymentData['payId'];
+ $this->saveNewPayment();
}
- $this->saveNewPayment();
return $paymentData;
}
+ public function requestStatus() {
+ $this->status = $this->getApi()->paymentStatus($this->payId);
+ $this->foreignId = $this->payId;
+ $this->savePaymentState();
+ return $this->status;
+ }
+
/**
* PayGW Configuration helper
*
@@ -126,7 +206,7 @@ private static function apiconfig() {
// URL adresa API - výchozí je adresa testovacího (integračního) prostředí,
// až budete připraveni přepnout se na ostré rozhraní, sem zadáte
// adresu ostrého API. Nezapomeňte také na ostrý veřejný klíč banky.
- GatewayUrl::TEST_LATEST
+ \Ease\Functions::cfg('MODULE_PAYMENT_CSOB_PRODUCTION') == 'True' ? GatewayUrl::PRODUCTION_LATEST : GatewayUrl::TEST_LATEST
);
}
@@ -219,7 +299,7 @@ static public function resultCodeMeaning($code) {
$error = 'Internal error'; // (interní chyba ve zpracování požadavku)
break;
default:
- throw new Exception('Unknown Payment response code: ' . $result_array['resultCode']);
+ throw new Exception('Unknown Payment response code: ' . $code);
break;
}
return $error;
diff --git a/includes/functions/database.php b/includes/functions/database.php
index 47a509292..418034cb1 100644
--- a/includes/functions/database.php
+++ b/includes/functions/database.php
@@ -72,7 +72,7 @@ function tep_db_input($string, $link = 'db') {
}
function tep_db_prepare_input($input) {
- return Text::input($input);
+ return Text::input(strval($input));
}
function tep_db_affected_rows($link = 'db') {
diff --git a/includes/hooks/admin/orders/csob.php b/includes/hooks/admin/orders/csob.php
new file mode 100644
index 000000000..0a1a5f954
--- /dev/null
+++ b/includes/hooks/admin/orders/csob.php
@@ -0,0 +1,38 @@
+execute();
+ }
+
+ function listen_orderTab() {
+ if (!class_exists('csob_hook_admin_orders_tab')) {
+ include(DIR_FS_CATALOG . 'includes/apps/csob/hooks/admin/orders/tab.php');
+ }
+
+ $hook = new csob_hook_admin_orders_tab();
+
+ return $hook->execute();
+ }
+
+}
+
+?>
diff --git a/includes/languages/czech/account_history.php b/includes/languages/czech/account_history.php
index 1bfaf7b19..b23e610b8 100644
--- a/includes/languages/czech/account_history.php
+++ b/includes/languages/czech/account_history.php
@@ -25,4 +25,9 @@
const TEXT_VIEW_ORDER = 'Zobrazit objednávku';
const TEXT_NO_PURCHASES = 'Nemáte ještě žádný nákup.';
+
+const BUTTON_VIEW_ORDER = ' ';
+
+
+
?>
diff --git a/includes/languages/czech/modules/notifications/n_checkout.php b/includes/languages/czech/modules/notifications/n_checkout.php
new file mode 100644
index 000000000..305749261
--- /dev/null
+++ b/includes/languages/czech/modules/notifications/n_checkout.php
@@ -0,0 +1,25 @@
+' . STORE_NAME . '.' . "\n\n";
+const MODULE_NOTIFICATIONS_CREATE_ACCOUNT_TEXT = 'You can now take part in the various services we have to offer you. Some of these services include:' . "\n\n" . 'Permanent Cart - Any products added to your online cart remain there until you remove them, or check them out.' . "\n" . 'Address Book - We can now deliver your products to another address other than yours! This is perfect to send birthday gifts direct to the birthday-person themselves.' . "\n" . 'Order History - View your history of purchases that you have made with us.' . "\n" . 'Products Reviews - Share your opinions on products with our other customers.' . "\n\n";
+const MODULE_NOTIFICATIONS_CREATE_ACCOUNT_CONTACT = 'For help with any of our online services, please email the store-owner: ' . STORE_OWNER_EMAIL_ADDRESS . '.' . "\n\n";
+const MODULE_NOTIFICATIONS_CREATE_ACCOUNT_WARNING = 'Note: This email address was given to us by one of our customers. If you did not sign up to be a member, please send an email to ' . STORE_OWNER_EMAIL_ADDRESS . '.' . "\n";
diff --git a/includes/languages/czech/modules/notifications/n_update_order.php b/includes/languages/czech/modules/notifications/n_update_order.php
new file mode 100644
index 000000000..cdf5414ca
--- /dev/null
+++ b/includes/languages/czech/modules/notifications/n_update_order.php
@@ -0,0 +1,30 @@
+ View Online Documentation Visit CSOB Payments Website ';
+
+const MODULE_PAYMENT_CSOB_ERROR_ADMIN_PHP = 'The minimum PHP version this module supports is %s and will not load until the webserver has been installed with a newer version.';
+const MODULE_PAYMENT_CSOB_ERROR_ADMIN_PHP_EXTENSIONS = 'This module requires the following PHP extensions and will and will not load until PHP has been updated: %s';
+const MODULE_PAYMENT_CSOB_ERROR_ADMIN_MERCHANT_ACCOUNTS = 'This module will not load until a merchant account has been defined for the %s currency.';
+const MODULE_PAYMENT_CSOB_ERROR_ADMIN_CONFIGURATION = 'This module will not load until the Merchant ID, Public Key, Private Key, and Client Side Encryption Key parameters have been configured. Please edit and configure the settings of this module.';
?>
\ No newline at end of file
diff --git a/includes/modules/order_total/ot_subtotal.php b/includes/modules/order_total/ot_subtotal.php
index 93acdbbc6..48f8f800d 100644
--- a/includes/modules/order_total/ot_subtotal.php
+++ b/includes/modules/order_total/ot_subtotal.php
@@ -28,7 +28,7 @@ function __construct() {
function process() {
global $order, $currencies;
-
+
$this->output[] = array('title' => $this->title . ':',
'text' => $currencies->format($order->info['subtotal'], true, $order->info['currency'], $order->info['currency_value']),
'value' => $order->info['subtotal']);
diff --git a/includes/modules/payment/csob.php b/includes/modules/payment/csob.php
index 8af802a33..d826baf70 100644
--- a/includes/modules/payment/csob.php
+++ b/includes/modules/payment/csob.php
@@ -31,6 +31,11 @@ class csob extends abstract_payment_module {
* @var string
*/
private $lastMessage = '';
+
+ /**
+ * Image body
+ * @var string
+ */
public $logo = '';
/**
@@ -88,15 +93,20 @@ public function __construct() {
}
if (array_key_exists('admin', $_SESSION)) {
- $this->description .= ' ' . $this->checkPayGwSatus();
+ if (defined('MODULE_PAYMENT_CSOB_MERCHANT_ID')) {
+//TODO FIX SOMEHOW $this->description .= ' ' . $this->checkPayGwSatus();
+ }
$this->description .= ' ' . str_replace('logo);
}
}
+ /**
+ * Perform initial payment request to be redirected int payment page
+ */
private function prepare_payment() {
//tep_redirect(tep_href_link('checkout_payment.php', 'payment_error=' . 'csob'));
-
- $response = $this->getPayment()->requestPayment(Guarantor::ensure_global('order'));
+ $this->order->save();
+ $response = $this->getPayment()->requestPayment($this->order);
$this->lastMessage = $response['resultMessage'];
$_SESSION['csob_error'] = $response['resultMessage'];
if ($response['resultCode'] != 0) {
@@ -136,13 +146,17 @@ public function update_status() {
}
public function getPayment() {
+ if (is_null($this->order)) {
+ if (array_key_exists('order_id', $GLOBALS) === false) { //We need OrderNumber first
+ $this->getOrder()->save();
+ }
+ }
if (is_object($this->payment) === false) {
- $this->payment = new \PureOSC\Payment(Guarantor::ensure_global('order'));
+ $this->payment = new \PureOSC\Payment($this->getOrder()); //Guarantor::ensure_global('order') not work here
} else {
}
-
return $this->payment;
}
@@ -207,7 +221,9 @@ public function get_error() {
}
public function getOrder($orderId = null) {
- $this->order = Guarantor::ensure_global('PureOSC\Order', $orderId ? $orderId : false);
+ if (is_null($this->order)) {
+ $this->order = Guarantor::ensure_global('PureOSC\Order', array_key_exists('order_id', $GLOBALS) ? $GLOBALS['order_id'] : $orderId);
+ }
return $this->order;
}
@@ -230,7 +246,12 @@ public function checkPayGwSatus() {
}
public function setOrderStatusByPaymentState($forceStatus = null) {
- $paymentStatus = is_null($forceStatus) ? $this->getPayment()->getStatus() : $forceStatus;
+ if (array_key_exists('order_id', $GLOBALS)) {
+
+ $paymentStatus = is_null($forceStatus) ? $this->getPayment()->getStatus() : $forceStatus;
+ } else {
+ $paymentStatus = null;
+ }
$newOrderStatus = 0;
$currentOrderStatus = $this->getOrder()->getStatus();
@@ -347,6 +368,12 @@ protected function get_parameters() {
'use_func' => 'tep_get_order_status_name',
'public' => true
],
+ 'MODULE_PAYMENT_CSOB_PRODUCTION' => [
+ 'title' => 'Use production API',
+ 'value' => 'False',
+ 'desc' => 'Put false here to use testing API servers.',
+ 'set_func' => "tep_cfg_select_option(['True', 'False'], "
+ ]
];
}
diff --git a/includes/system/versioned/1.0.0.0/order_total.php b/includes/system/versioned/1.0.0.0/order_total.php
index ba158cdb4..45f363d3d 100644
--- a/includes/system/versioned/1.0.0.0/order_total.php
+++ b/includes/system/versioned/1.0.0.0/order_total.php
@@ -12,10 +12,13 @@
class order_total {
var $modules;
+ public $order;
// class constructor
- function __construct() {
+ function __construct($order = null) {
global $language;
+
+ $this->order = $order;
if (defined('MODULE_ORDER_TOTAL_INSTALLED') && tep_not_null(MODULE_ORDER_TOTAL_INSTALLED)) {
$this->modules = explode(';', MODULE_ORDER_TOTAL_INSTALLED);
diff --git a/includes/system/versioned/1.0.7.10/cart_order_builder.php b/includes/system/versioned/1.0.7.10/cart_order_builder.php
index 2a5fa01dc..07aa519c4 100644
--- a/includes/system/versioned/1.0.7.10/cart_order_builder.php
+++ b/includes/system/versioned/1.0.7.10/cart_order_builder.php
@@ -75,11 +75,15 @@ public function build_info() {
public function build_addresses() {
global $customer;
-
+
+ if(is_null($customer)){
+ $customer = new \customer();
+ }
+
$this->order->customer = $customer->fetch_to_address(0);
$this->order->billing = $customer->fetch_to_address($_SESSION['billto'] ?? null);
- if ( !$_SESSION['sendto'] && ('virtual' !== $this->order->content_type) ) {
+ if ( !array_key_exists('sendto', $_SESSION) && ('virtual' !== $this->order->content_type) ) {
$_SESSION['sendto'] = $customer->get('default_sendto');
}
@@ -137,6 +141,10 @@ public function build_attributes($product) {
public function build_products() {
$tax_address = $this->build_tax_address();
+ if(is_object($_SESSION['cart']) === false){
+ $_SESSION['cart'] = new shoppingCart();
+ }
+
foreach ($_SESSION['cart']->get_products() as $product) {
$current = [];
foreach (static::$column_keys as $order_key => $cart_key) {
diff --git a/includes/system/versioned/1.0.7.10/order.php b/includes/system/versioned/1.0.7.10/order.php
index 5ffc8d13a..801a0a9e7 100644
--- a/includes/system/versioned/1.0.7.10/order.php
+++ b/includes/system/versioned/1.0.7.10/order.php
@@ -40,7 +40,7 @@ public function get_id() {
}
public function set_id($order_id) {
- $this->id = tep_db_prepare_input($order_id);
+ $this->id = tep_db_prepare_input(strval($order_id));
}
}
diff --git a/includes/system/versioned/1.0.7.3/order_total.php b/includes/system/versioned/1.0.7.3/order_total.php
index 242249ff0..e10588e13 100644
--- a/includes/system/versioned/1.0.7.3/order_total.php
+++ b/includes/system/versioned/1.0.7.3/order_total.php
@@ -15,13 +15,13 @@ class order_total {
public $modules;
// class constructor
- function __construct() {
+ function __construct($order = null) {
if (defined('MODULE_ORDER_TOTAL_INSTALLED') && tep_not_null(MODULE_ORDER_TOTAL_INSTALLED)) {
$this->modules = explode(';', MODULE_ORDER_TOTAL_INSTALLED);
foreach ($this->modules as $value) {
$class = pathinfo($value, PATHINFO_FILENAME);
- $GLOBALS[$class] = new $class();
+ $GLOBALS[$class] = new $class($order);
}
}
}
diff --git a/nbproject/project.xml b/nbproject/project.xml
index 6b11ceb2f..291535916 100644
--- a/nbproject/project.xml
+++ b/nbproject/project.xml
@@ -3,7 +3,7 @@
org.netbeans.modules.php.project
- purehtml/ce-phoenix
+ Phoenix Cart
diff --git a/phinx-adapter.php b/phinx-adapter.php
index 889703fbf..338cba3f5 100644
--- a/phinx-adapter.php
+++ b/phinx-adapter.php
@@ -14,15 +14,16 @@
include 'includes/configure.php';
+
$prefix = file_exists('./db/') ? './db/' : '../db/';
$sqlOptions = [
- 'dbType' => constant('DB_CONNECTION'),
+ 'dbType' => defined('DB_CONNECTION') ? constant('DB_CONNECTION') : 'mysql',
'server' => constant('DB_SERVER'),
'username' => constant('DB_SERVER_USERNAME'),
'password' => constant('DB_SERVER_PASSWORD'),
'database' => constant('DB_DATABASE'),
- 'port' => constant('DB_SERVER_PORT')
+ 'port' => defined('DB_SERVER_PORT') ? constant('DB_SERVER_PORT') : 3306
];
if (strstr(Ease\Functions::cfg('DB_CONNECTION'), 'sqlite')) {
diff --git a/templates/default/includes/ext/modules/payment/csob/welcomeback.php b/templates/default/includes/ext/modules/payment/csob/welcomeback.php
new file mode 100644
index 000000000..e69de29bb
diff --git a/templates/default/includes/hooks/shop/siteWide/csob.php b/templates/default/includes/hooks/shop/siteWide/csob.php
new file mode 100644
index 000000000..68074810d
--- /dev/null
+++ b/templates/default/includes/hooks/shop/siteWide/csob.php
@@ -0,0 +1,54 @@
+get_id();
+ if ($orderId) {
+// $payment = new PureOSC\Payment($order);
+// $status = $payment->requestStatus();
+ }
+ }
+
+ public function listen_databaseOrderBuild($param) {
+ //Order was loaded from data base, so we can check card payment status
+ $this->order = $param['order'];
+// if($this->order->getPaymentState() == 'unknown'){
+// $this->order->getPaymentStatus();
+// }
+ }
+
+}
From b95e0b9fb761c81f069dd36e63aed1f197b47c26 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=ADt=C4=9Bzslav=20Dvo=C5=99=C3=A1k?=
Date: Sat, 29 May 2021 22:18:36 +0200
Subject: [PATCH 05/29] CSOB Iprovements
---
admin/includes/application_top.php.orig | 168 ++++++++++++++++++
admin/includes/functions/sessions.php | 6 +
includes/classes/Payment.php | 10 +-
includes/functions/general.php | 3 +-
includes/functions/sessions.php | 6 +
includes/hooks/shop/siteWide/bootStrap.php | 33 ++++
includes/hooks/shop/siteWide/fontAwesome.php | 24 +++
includes/hooks/shop/siteWide/jQuery.php | 23 +++
includes/hooks/shop/siteWide/noJs.php | 16 ++
includes/hooks/shop/siteWide/styleSheets.php | 21 +++
.../system/versioned/1.0.7.10/order.php.orig | 69 +++++++
includes/system/versioned/1.0.8.1/hooks.php | 16 +-
includes/system/versioned/1.0.8.1/linker.php | 2 +-
templates/default/includes/template.php | 4 +-
14 files changed, 387 insertions(+), 14 deletions(-)
create mode 100644 admin/includes/application_top.php.orig
create mode 100644 includes/hooks/shop/siteWide/bootStrap.php
create mode 100644 includes/hooks/shop/siteWide/fontAwesome.php
create mode 100644 includes/hooks/shop/siteWide/jQuery.php
create mode 100644 includes/hooks/shop/siteWide/noJs.php
create mode 100644 includes/hooks/shop/siteWide/styleSheets.php
create mode 100644 includes/system/versioned/1.0.7.10/order.php.orig
diff --git a/admin/includes/application_top.php.orig b/admin/includes/application_top.php.orig
new file mode 100644
index 000000000..3abfb6b70
--- /dev/null
+++ b/admin/includes/application_top.php.orig
@@ -0,0 +1,168 @@
+>>>>>> d67b4745b702c518e92824aa0fc37a6756efbd3a
+
+// include the database functions
+ require 'includes/functions/database.php';
+
+ $db = new Database() or die('Unable to connect to database server!');
+
+ $admin_hooks = new hooks('admin');
+ $OSCOM_Hooks =& $admin_hooks;
+ $all_hooks =& $admin_hooks;
+ Guarantor::ensure_global('Admin');
+ $admin_hooks->register('system');
+ foreach ($admin_hooks->generate('startApplication') as $result) {
+ if (!isset($result)) {
+ continue;
+ }
+
+ if (is_string($result)) {
+ $result = [ $result ];
+ }
+
+ if (is_array($result)) {
+ foreach ($result as $path) {
+ if (is_string($path ?? null) && file_exists($path)) {
+ require $path;
+ }
+ }
+ }
+ }
+
+// Define the project version --- obsolete, now retrieved with Versions::get('Phoenix')
+ define('PROJECT_VERSION', 'CE Phoenix');
+
+// set the type of request (secure or not)
+ $request_type = (getenv('HTTPS') === 'on') ? 'SSL' : 'NONSSL';
+
+// set php_self globally
+ $req = parse_url($_SERVER['SCRIPT_NAME']);
+ $PHP_SELF = substr($req['path'], strlen(DIR_WS_ADMIN));
+
+// set application wide parameters
+ array_walk(...[
+ $db->fetch_all('SELECT configuration_key, configuration_value FROM configuration'),
+ function ($v) {
+ define($v['configuration_key'], $v['configuration_value']);
+ }]);
+
+// define our general functions used application-wide
+ require 'includes/functions/general.php';
+ require 'includes/functions/html_output.php';
+ require 'includes/functions/sessions.php';
+
+ session_name('cepcAdminID');
+ Session::set_save_location();
+
+// set the session cookie parameters
+ Cookie::save_session_parameters();
+
+ @ini_set('session.use_only_cookies', (SESSION_FORCE_COOKIE_USE == 'True') ? 1 : 0);
+
+ Session::start();
+
+// set the language
+ if (!isset($_SESSION['language']) || isset($_GET['language'])) {
+ $lng = language::build();
+ }
+
+// register session variables globally
+ extract($_SESSION, EXTR_OVERWRITE+EXTR_REFS);
+
+// redirect to login page if administrator is not yet logged in
+ if (!isset($_SESSION['admin'])) {
+ $current_page = $PHP_SELF;
+
+// if the first page request is to the login page, set the current page to the index page
+// so the redirection on a successful login is not made to the login page again
+ if ( ('login.php' === $current_page) && !isset($_SESSION['redirect_origin']) ) {
+ $current_page = 'index.php';
+ $_GET = [];
+ }
+
+ $redirect = false;
+ if ('login.php' !== $current_page) {
+ if (!isset($_SESSION['redirect_origin'])) {
+ $_SESSION['redirect_origin'] = [
+ 'page' => $current_page,
+ 'get' => $_GET,
+ ];
+
+ $redirect_origin =& $_SESSION['redirect_origin'];
+ }
+
+// try to automatically log in with the HTTP Authentication values if it exists
+ if (!isset($_SESSION['auth_ignore'])) {
+ if (!empty($_SERVER['PHP_AUTH_USER']) && !empty($_SERVER['PHP_AUTH_PW'])) {
+ $_SESSION['redirect_origin']['auth_user'] = $_SERVER['PHP_AUTH_USER'];
+ $_SESSION['redirect_origin']['auth_pw'] = $_SERVER['PHP_AUTH_PW'];
+ }
+ }
+
+ $redirect = true;
+ }
+
+ if ($redirect || !isset($login_request) || isset($_GET['login_request']) || isset($_POST['login_request']) || isset($_COOKIE['login_request']) || isset($_SESSION['login_request']) || isset($_FILES['login_request']) || isset($_SERVER['login_request'])) {
+ Href::redirect(Guarantor::ensure_global('Admin')->link('login.php', (isset($_SESSION['redirect_origin']['auth_user']) ? ['action' => 'process'] : [])));
+ }
+
+ unset($redirect);
+ }
+
+// include the language translations
+ $_system_locale_numeric = setlocale(LC_NUMERIC, 0);
+ if (!file_exists("includes/languages/{$_SESSION['language']}.php")) {
+ $_SESSION['language'] = 'english';
+ }
+ require "includes/languages/{$_SESSION['language']}.php";
+ setlocale(LC_NUMERIC, $_system_locale_numeric); // Prevent LC_ALL from setting LC_NUMERIC to a locale with 1,0 float/decimal values instead of 1.0 (see bug #634)
+
+ $current_page = basename($PHP_SELF);
+ $current_page_language_file = "includes/languages/{$_SESSION['language']}/$current_page";
+ if (file_exists($current_page_language_file)) {
+ include $current_page_language_file;
+ }
+
+// Include validation functions (right now only email address)
+ require 'includes/functions/validations.php';
+
+// initialize the message stack for output messages
+ $messageStack = new messageStack();
+
+ $customer_data = new customer_data();
+
+// initialize configuration modules
+ $cfgModules = new cfg_modules();
+
+
+ $admin_hooks->register_page();
diff --git a/admin/includes/functions/sessions.php b/admin/includes/functions/sessions.php
index 4cdb759ca..70c8fde2c 100644
--- a/admin/includes/functions/sessions.php
+++ b/admin/includes/functions/sessions.php
@@ -10,11 +10,17 @@
Released under the GNU General Public License
*/
+ /**
+ * @deprecated since version 1.0.8.3
+ */
function tep_session_start() {
trigger_error('The tep_session_start function has been deprecated.', E_USER_DEPRECATED);
return Session::start();
}
+ /**
+ * @deprecated since version 1.0.8.3
+ */
function tep_session_destroy() {
trigger_error('The tep_session_destroy function has been deprecated.', E_USER_DEPRECATED);
return Session::destroy();
diff --git a/includes/classes/Payment.php b/includes/classes/Payment.php
index 798ac909e..1ce4eada1 100644
--- a/includes/classes/Payment.php
+++ b/includes/classes/Payment.php
@@ -202,11 +202,11 @@ private static function apiconfig() {
\Ease\Functions::cfg('MODULE_PAYMENT_CSOB_SECRET_KEY'),
\Ease\Functions::cfg('MODULE_PAYMENT_CSOB_PUBLIC_KEY'),
\Ease\Functions::cfg('STORE_NAME'),
- tep_href_link('ext/modules/payment/csob/welcomeback.php', 'ceid=' . session_id(), null, true),
- // URL adresa API - výchozí je adresa testovacího (integračního) prostředí,
- // až budete připraveni přepnout se na ostré rozhraní, sem zadáte
- // adresu ostrého API. Nezapomeňte také na ostrý veřejný klíč banky.
- \Ease\Functions::cfg('MODULE_PAYMENT_CSOB_PRODUCTION') == 'True' ? GatewayUrl::PRODUCTION_LATEST : GatewayUrl::TEST_LATEST
+ strval(tep_href_link('ext/modules/payment/csob/welcomeback.php', 'ceid=' . session_id(), null, true)),
+ // URL adresa API - výchozí je adresa testovacího (integračního) prostředí,
+ // až budete připraveni přepnout se na ostré rozhraní, sem zadáte
+ // adresu ostrého API. Nezapomeňte také na ostrý veřejný klíč banky.
+ \Ease\Functions::cfg('MODULE_PAYMENT_CSOB_PRODUCTION') == 'True' ? GatewayUrl::PRODUCTION_LATEST : GatewayUrl::TEST_LATEST
);
}
diff --git a/includes/functions/general.php b/includes/functions/general.php
index c13f65c75..a1afe5a46 100644
--- a/includes/functions/general.php
+++ b/includes/functions/general.php
@@ -384,6 +384,7 @@ function tep_form_processing_is_valid() {
function tep_require_login($parameters = null) {
if (!isset($_SESSION['customer_id'])) {
$_SESSION['navigation']->set_snapshot($parameters);
- Href::redirect($GLOBALS['Linker']->build('login.php'));
+
+ Href::redirect(Guarantor::ensure_global('Linker')->build('login.php'));
}
}
diff --git a/includes/functions/sessions.php b/includes/functions/sessions.php
index 0799e371d..0d1ba192d 100644
--- a/includes/functions/sessions.php
+++ b/includes/functions/sessions.php
@@ -28,11 +28,17 @@ function tep_session_destroy() {
return Session::destroy();
}
+ /**
+ * @deprecated since version 1.0.8.3
+ */
function tep_session_recreate() {
trigger_error('The tep_session_recreate function has been deprecated.', E_USER_DEPRECATED);
Session::recreate();
}
+ /**
+ * @deprecated since version 1.0.8.3
+ */
function tep_reset_session_token() {
trigger_error('The tep_reset_session_token function has been deprecated.', E_USER_DEPRECATED);
Form::reset_session_token();
diff --git a/includes/hooks/shop/siteWide/bootStrap.php b/includes/hooks/shop/siteWide/bootStrap.php
new file mode 100644
index 000000000..24ffe9782
--- /dev/null
+++ b/includes/hooks/shop/siteWide/bootStrap.php
@@ -0,0 +1,33 @@
+sitestart = ' ' . PHP_EOL;
+
+ return $this->sitestart;
+ }
+
+ public function listen_injectSiteEnd() {
+ $this->siteend = '' . PHP_EOL;
+ $this->siteend .= '' . PHP_EOL;
+
+ return $this->siteend;
+ }
+
+}
diff --git a/includes/hooks/shop/siteWide/fontAwesome.php b/includes/hooks/shop/siteWide/fontAwesome.php
new file mode 100644
index 000000000..f1fae3628
--- /dev/null
+++ b/includes/hooks/shop/siteWide/fontAwesome.php
@@ -0,0 +1,24 @@
+sitestart .= ' ' . PHP_EOL;
+
+ return $this->sitestart;
+ }
+
+}
diff --git a/includes/hooks/shop/siteWide/jQuery.php b/includes/hooks/shop/siteWide/jQuery.php
new file mode 100644
index 000000000..e2506432b
--- /dev/null
+++ b/includes/hooks/shop/siteWide/jQuery.php
@@ -0,0 +1,23 @@
+' . PHP_EOL;
+
+ return $jQuery;
+ }
+
+}
diff --git a/includes/hooks/shop/siteWide/noJs.php b/includes/hooks/shop/siteWide/noJs.php
new file mode 100644
index 000000000..21671d40e
--- /dev/null
+++ b/includes/hooks/shop/siteWide/noJs.php
@@ -0,0 +1,16 @@
+set_id($order_id);
+ database_order_builder::build($this);
+ }
+
+ $GLOBALS['all_hooks']->cat('constructOrder', $this);
+ }
+
+ public function has_id() {
+ return isset($this->id);
+ }
+
+ public function get_id() {
+ return $this->id;
+ }
+
+ public function set_id($order_id) {
+<<<<<<< HEAD
+ $this->id = Text::input($order_id);
+ }
+
+ public static function remove($order_id, $restock = false) {
+ if ('on' === $restock) {
+ $GLOBALS['db']->query(sprintf(<<<'EOSQL'
+UPDATE products p INNER JOIN orders_products op ON p.products_id = op.products_id
+ SET p.products_quantity = p.products_quantity + op.products_quantity,
+ p.products_ordered = p.products_ordered - op.products_quantity
+ WHERE op.orders_id = %d
+EOSQL
+ , (int)$order_id));
+ }
+
+ $GLOBALS['db']->query("DELETE FROM orders_products_download WHERE orders_id = " . (int)$order_id);
+ $GLOBALS['db']->query("DELETE FROM orders_products_attributes WHERE orders_id = " . (int)$order_id);
+ $GLOBALS['db']->query("DELETE FROM orders_products WHERE orders_id = " . (int)$order_id);
+ $GLOBALS['db']->query("DELETE FROM orders_status_history WHERE orders_id = " . (int)$order_id);
+ $GLOBALS['db']->query("DELETE FROM orders_total WHERE orders_id = " . (int)$order_id);
+ $GLOBALS['db']->query("DELETE FROM orders WHERE orders_id = " . (int)$order_id);
+=======
+ $this->id = tep_db_prepare_input(strval($order_id));
+>>>>>>> d67b4745b702c518e92824aa0fc37a6756efbd3a
+ }
+
+ }
diff --git a/includes/system/versioned/1.0.8.1/hooks.php b/includes/system/versioned/1.0.8.1/hooks.php
index a44a8887f..aca92fba6 100644
--- a/includes/system/versioned/1.0.8.1/hooks.php
+++ b/includes/system/versioned/1.0.8.1/hooks.php
@@ -108,12 +108,16 @@ public function register($group) {
if ( 'php' === $pathinfo['extension'] ) {
$class = "hook_{$this->_site}_{$group}_{$pathinfo['filename']}";
- foreach ( get_class_methods(Guarantor::ensure_global($class)) as $method ) {
- if ( substr($method, 0, $this->prefix_length) === self::PREFIX ) {
- $action = substr($method, $this->prefix_length);
- Guarantor::guarantee_all($this->_hooks, $this->_site, $action
- )[$pathinfo['filename']] = [$GLOBALS[$class], $method];
- }
+ if(class_exists($class) === false){
+// throw new Exception('Requied class '.$class.' not found');
+ } else {
+ foreach ( get_class_methods(Guarantor::ensure_global($class)) as $method ) {
+ if ( substr($method, 0, $this->prefix_length) === self::PREFIX ) {
+ $action = substr($method, $this->prefix_length);
+ Guarantor::guarantee_all($this->_hooks, $this->_site, $action
+ )[$pathinfo['filename']] = [$GLOBALS[$class], $method];
+ }
+ }
}
}
}
diff --git a/includes/system/versioned/1.0.8.1/linker.php b/includes/system/versioned/1.0.8.1/linker.php
index cad8aabfe..c22da81b9 100644
--- a/includes/system/versioned/1.0.8.1/linker.php
+++ b/includes/system/versioned/1.0.8.1/linker.php
@@ -27,7 +27,7 @@ public function set_prefix($prefix) {
}
public function build($page = null, $parameters = [], $add_session_id = true) {
- return new Href($this->prefix, $page, $parameters, $add_session_id);
+ return new Href($this->get_prefix(), $page, $parameters, $add_session_id);
}
}
diff --git a/templates/default/includes/template.php b/templates/default/includes/template.php
index d21bd8366..0596838ca 100644
--- a/templates/default/includes/template.php
+++ b/templates/default/includes/template.php
@@ -25,7 +25,9 @@ public function __construct() {
$hooks =& Guarantor::ensure_global('hooks', 'shop');
foreach ($this->_base_hook_directories as $directory) {
$hooks->add_directory($directory);
- $GLOBALS['class_index']->find_all_hooks_under($directory);
+ if(array_key_exists('class_index', $GLOBALS)){
+ $GLOBALS['class_index']->find_all_hooks_under($directory);
+ }
}
$GLOBALS['breadcrumb'] = new breadcrumb();
From 0fb06efb1e6fdf198165b93f719f93198538214d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=ADt=C4=9Bzslav=20Dvo=C5=99=C3=A1k?=
Date: Sat, 29 May 2021 22:55:39 +0200
Subject: [PATCH 06/29] MODULE_PAYMENT_CSOB_ERROR_TITLE +
MODULE_PAYMENT_CSOB_ERROR_GENERAL en/cs
---
includes/languages/czech/modules/payment/csob.php | 3 +++
includes/languages/english/modules/payment/csob.php | 5 ++++-
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/includes/languages/czech/modules/payment/csob.php b/includes/languages/czech/modules/payment/csob.php
index 6de946fd1..c91ceb93b 100644
--- a/includes/languages/czech/modules/payment/csob.php
+++ b/includes/languages/czech/modules/payment/csob.php
@@ -19,3 +19,6 @@
const MODULE_PAYMENT_CSOB_ERROR_ADMIN_PHP_EXTENSIONS = 'This module requires the following PHP extensions and will and will not load until PHP has been updated: %s';
const MODULE_PAYMENT_CSOB_ERROR_ADMIN_MERCHANT_ACCOUNTS = 'This module will not load until a merchant account has been defined for the %s currency.';
const MODULE_PAYMENT_CSOB_ERROR_ADMIN_CONFIGURATION = 'This module will not load until the Merchant ID, Public Key, Private Key, and Client Side Encryption Key parameters have been configured. Please edit and configure the settings of this module.';
+
+const MODULE_PAYMENT_CSOB_ERROR_TITLE = 'Chyba platby';
+const MODULE_PAYMENT_CSOB_ERROR_GENERAL = 'Platba se nezdařila';
diff --git a/includes/languages/english/modules/payment/csob.php b/includes/languages/english/modules/payment/csob.php
index 75eb9ecdc..052211196 100644
--- a/includes/languages/english/modules/payment/csob.php
+++ b/includes/languages/english/modules/payment/csob.php
@@ -18,4 +18,7 @@
const MODULE_PAYMENT_CSOB_ERROR_ADMIN_PHP_EXTENSIONS = 'This module requires the following PHP extensions and will and will not load until PHP has been updated: %s';
const MODULE_PAYMENT_CSOB_ERROR_ADMIN_MERCHANT_ACCOUNTS = 'This module will not load until a merchant account has been defined for the %s currency.';
const MODULE_PAYMENT_CSOB_ERROR_ADMIN_CONFIGURATION = 'This module will not load until the Merchant ID, Public Key, Private Key, and Client Side Encryption Key parameters have been configured. Please edit and configure the settings of this module.';
- ?>
\ No newline at end of file
+
+const MODULE_PAYMENT_CSOB_ERROR_TITLE = 'Payment error';
+const MODULE_PAYMENT_CSOB_ERROR_GENERAL = 'Payment unsuccessful';
+
From 085d41df13a0f7aec4e7bd48975fb18cc37a957d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=ADt=C4=9Bzslav=20Dvo=C5=99=C3=A1k?=
Date: Sun, 30 May 2021 02:27:38 +0200
Subject: [PATCH 07/29] GW Currency rate fixed
---
includes/classes/Payment.php | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/includes/classes/Payment.php b/includes/classes/Payment.php
index 1ce4eada1..86367142c 100644
--- a/includes/classes/Payment.php
+++ b/includes/classes/Payment.php
@@ -95,10 +95,10 @@ public function orderToPayment() {
if (!empty($this->order->totals)) {
if (isset($this->order->totals[0]['value'])) {
- $this->addCartItem($this->order->totals[0]['title'], 1, $this->order->totals[0]['value']);
+ $this->addCartItem($this->order->totals[0]['title'], 1, $this->order->totals[0]['value']*100);
}
if (isset($this->order->totals[1]['value'])) {
- $this->addCartItem($this->order->totals[1]['title'], 1, $this->order->totals[1]['value']);
+ $this->addCartItem($this->order->totals[1]['title'], 1, $this->order->totals[1]['value']*100);
}
}
}
@@ -185,9 +185,11 @@ public function requestPayment() {
}
public function requestStatus() {
- $this->status = $this->getApi()->paymentStatus($this->payId);
- $this->foreignId = $this->payId;
- $this->savePaymentState();
+ if($this->payId){
+ $this->status = $this->getApi()->paymentStatus($this->payId);
+ $this->foreignId = $this->payId;
+ $this->savePaymentState();
+ }
return $this->status;
}
From 0e1d5d446f9793536a4dceaf3db4047e4cdf2922 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=ADt=C4=9Bzslav=20Dvo=C5=99=C3=A1k?=
Date: Sun, 30 May 2021 03:39:53 +0200
Subject: [PATCH 08/29] Create CSOB payment states as public to be shown to
customer
---
includes/modules/payment/csob.php | 12 ++++++------
.../versioned/1.0.5.1/abstract_payment_module.php | 14 ++++++++++++--
2 files changed, 18 insertions(+), 8 deletions(-)
diff --git a/includes/modules/payment/csob.php b/includes/modules/payment/csob.php
index d826baf70..a4b0acf56 100644
--- a/includes/modules/payment/csob.php
+++ b/includes/modules/payment/csob.php
@@ -309,7 +309,7 @@ protected function get_parameters() {
],
'MODULE_PAYMENT_CSOB_ORDER_STATUS_ID' => [
'title' => 'Set Order Status',
- 'value' => self::ensure_order_status('MODULE_PAYMENT_CSOB_PROCESSING_ORDER_STATUS_ID', 'Card payment pending'),
+ 'value' => self::ensure_order_status('MODULE_PAYMENT_CSOB_PROCESSING_ORDER_STATUS_ID', 'Card payment pending',1),
'desc' => 'Set the status of orders made with this payment module to this value',
'set_func' => 'tep_cfg_pull_down_order_statuses(',
'use_func' => 'tep_get_order_status_name',
@@ -331,7 +331,7 @@ protected function get_parameters() {
'MODULE_PAYMENT_CSOB_PROCESSING_ORDER_STATUS_ID' => [
'title' => 'Wait for payment Order Status',
'desc' => 'Include transaction information in this order status level',
- 'value' => self::ensure_order_status('MODULE_PAYMENT_CSOB_PROCESSING_ORDER_STATUS_ID', 'Card payment pending'),
+ 'value' => self::ensure_order_status('MODULE_PAYMENT_CSOB_PROCESSING_ORDER_STATUS_ID', 'Card payment pending',1),
'set_func' => 'tep_cfg_pull_down_order_statuses(',
'use_func' => 'tep_get_order_status_name',
'public' => true
@@ -339,7 +339,7 @@ protected function get_parameters() {
'MODULE_PAYMENT_CSOB_DONE_ORDER_STATUS_ID' => [
'title' => 'All OK settled payment Order Status',
'desc' => 'Include transaction information in this order status level',
- 'value' => self::ensure_order_status('MODULE_PAYMENT_CSOB_DONE_ORDER_STATUS_ID', 'Settled by Card'),
+ 'value' => self::ensure_order_status('MODULE_PAYMENT_CSOB_DONE_ORDER_STATUS_ID', 'Settled by Card',1),
'set_func' => 'tep_cfg_pull_down_order_statuses(',
'use_func' => 'tep_get_order_status_name',
'public' => true
@@ -347,7 +347,7 @@ protected function get_parameters() {
'MODULE_PAYMENT_CSOB_CANCELED_ORDER_STATUS_ID' => [
'title' => 'Canceled payment Order Status',
'desc' => 'State for orders with cancelled paymen',
- 'value' => self::ensure_order_status('MODULE_PAYMENT_CSOB_CANCELED_ORDER_STATUS_ID', 'Payment canceled'),
+ 'value' => self::ensure_order_status('MODULE_PAYMENT_CSOB_CANCELED_ORDER_STATUS_ID', 'Payment canceled',1),
'set_func' => 'tep_cfg_pull_down_order_statuses(',
'use_func' => 'tep_get_order_status_name',
'public' => true
@@ -355,7 +355,7 @@ protected function get_parameters() {
'MODULE_PAYMENT_CSOB_PROCESSING_ORDER_STATUS_ID' => [
'title' => 'Payment in progress Order Status',
'desc' => 'State for orders with payment in progress',
- 'value' => self::ensure_order_status('MODULE_PAYMENT_CSOB_PROCESSING_ORDER_STATUS_ID', 'Payment processing'),
+ 'value' => self::ensure_order_status('MODULE_PAYMENT_CSOB_PROCESSING_ORDER_STATUS_ID', 'Payment processing',1),
'set_func' => 'tep_cfg_pull_down_order_statuses(',
'use_func' => 'tep_get_order_status_name',
'public' => true
@@ -363,7 +363,7 @@ protected function get_parameters() {
'MODULE_PAYMENT_CSOB_PROBLEM_ORDER_STATUS_ID' => [
'title' => 'Card payment problem Order Status',
'desc' => 'Include transaction information in this order status level',
- 'value' => self::ensure_order_status('MODULE_PAYMENT_CSOB_PROBLEM_ORDER_STATUS_ID', 'Card payment problem'),
+ 'value' => self::ensure_order_status('MODULE_PAYMENT_CSOB_PROBLEM_ORDER_STATUS_ID', 'Card payment problem',1),
'set_func' => 'tep_cfg_pull_down_order_statuses(',
'use_func' => 'tep_get_order_status_name',
'public' => true
diff --git a/includes/system/versioned/1.0.5.1/abstract_payment_module.php b/includes/system/versioned/1.0.5.1/abstract_payment_module.php
index 60a363db1..2cb1be432 100644
--- a/includes/system/versioned/1.0.5.1/abstract_payment_module.php
+++ b/includes/system/versioned/1.0.5.1/abstract_payment_module.php
@@ -75,7 +75,17 @@ public function get_error() {
return false;
}
- public static function ensure_order_status($constant_name, $order_status_name) {
+ /**
+ * Ensure that STATUS is defined
+ *
+ * @param string $constant_name
+ * @param string $order_status_name
+ * @param boolean $public_flag
+ * @param boolean $downloads_flag
+ *
+ * @return int status ID
+ */
+ public static function ensure_order_status($constant_name, $order_status_name, $public_flag = 0, $downloads_flag = 0) {
if (defined($constant_name)) {
return constant($constant_name);
}
@@ -89,7 +99,7 @@ public static function ensure_order_status($constant_name, $order_status_name) {
$flags_query = tep_db_query("DESCRIBE orders_status public_flag");
if (tep_db_num_rows($flags_query) === 1) {
$column_names = ', public_flag, downloads_flag';
- $column_values = ', 0 AS public_flag, 0 AS downloads_flag';
+ $column_values = ', '.$public_flag.' AS public_flag, '.$downloads_flag.' AS downloads_flag';
}
$next_id = tep_db_fetch_array(tep_db_query("SELECT MAX(orders_status_id) + 1 AS next_id FROM orders_status"))['next_id'] ?? 1;
From 05707c96bfedbffe235d8c3807741d39f225403f Mon Sep 17 00:00:00 2001
From: SimonFormanek
Date: Sun, 30 May 2021 04:16:00 +0200
Subject: [PATCH 09/29] basic css template system
---
.../bin/auto-create-delete-customers_cron.sh | 122 +
admin/bin/auto_create_delete_customers.php | 101 +
admin/bin/confinsert | 18 +
admin/bin/confinsert-bolean | 19 +
admin/bin/customers-cron.log | 11955 ++++++++++++++++
admin/bin/db-delete-all.sh | 15 +
admin/bin/db-grant-install.sh | 129 +
admin/bin/db.conf | 14 +
admin/bin/db.conf.empty | 13 +
admin/bin/dbconnect.sh | 6 +
admin/bin/preinstall.sh | 5 +
admin/bin/s | 4 +
admin/bin/u | 7 +
admin/bin/view_tpl.sql | 76 +
admin/includes/configure.php | 18 +-
...027022936_config_new_bootstrap_enabled.php | 42 +
includes/configure.php | 12 +-
includes/hooks/shop/siteWide/bootStrap.php | 19 +-
includes/hooks/shop/siteWide/styleSheets.php | 47 +-
includes/languages/czech.php | 2 +
includes/languages/english.php | 2 +
keys/mips_iplatebnibrana.csob.cz.pub | 9 +
keys/rsa_A5043fIaNo.key | 27 +
keys/rsa_A5043fIaNo.pub | 9 +
.../hooks/shop/siteWide/bootStrap.php | 16 +-
.../hooks/shop/siteWide/styleSheets.php | 34 +-
templates/override/static/grid.css | 16 +
templates/override/static/phoenix.css | 191 +
templates/override/static/queries.css | 32 +
templates/override/static/screen.css | 102 +
templates/override/static/user.css | 3 +
31 files changed, 13026 insertions(+), 39 deletions(-)
create mode 100755 admin/bin/auto-create-delete-customers_cron.sh
create mode 100644 admin/bin/auto_create_delete_customers.php
create mode 100755 admin/bin/confinsert
create mode 100755 admin/bin/confinsert-bolean
create mode 100644 admin/bin/customers-cron.log
create mode 100755 admin/bin/db-delete-all.sh
create mode 100755 admin/bin/db-grant-install.sh
create mode 100644 admin/bin/db.conf
create mode 100644 admin/bin/db.conf.empty
create mode 100644 admin/bin/dbconnect.sh
create mode 100644 admin/bin/preinstall.sh
create mode 100755 admin/bin/s
create mode 100755 admin/bin/u
create mode 100644 admin/bin/view_tpl.sql
create mode 100644 db/migrations/20191027022936_config_new_bootstrap_enabled.php
create mode 100644 keys/mips_iplatebnibrana.csob.cz.pub
create mode 100644 keys/rsa_A5043fIaNo.key
create mode 100644 keys/rsa_A5043fIaNo.pub
create mode 100644 templates/override/static/grid.css
create mode 100644 templates/override/static/phoenix.css
create mode 100644 templates/override/static/queries.css
create mode 100644 templates/override/static/screen.css
create mode 100644 templates/override/static/user.css
diff --git a/admin/bin/auto-create-delete-customers_cron.sh b/admin/bin/auto-create-delete-customers_cron.sh
new file mode 100755
index 000000000..29d982638
--- /dev/null
+++ b/admin/bin/auto-create-delete-customers_cron.sh
@@ -0,0 +1,122 @@
+#!/bin/bash
+. db.conf
+NEW_CUSTOMERS_ID_RESERVE=3
+LAST_REAL_CUSTOMER=`mysql --column-names=FALSE -h${H} -u${RU} -p${RP} $D -e "SELECT customers_id FROM customers_real ORDER BY customers_id DESC LIMIT 1"`
+echo '$LAST_REAL_CUSTOMER:' $LAST_REAL_CUSTOMER
+
+LAST_EMPTY_CUSTOMERS_ID=`mysql --column-names=FALSE -h${H} -u${RU} -p${RP} $D -e "SELECT customers_id FROM last_empty_customers_id"`
+echo 'LAST_EMPTY_CUSTOMERS_ID:' $LAST_EMPTY_CUSTOMERS_ID
+if [[ $((LAST_REAL_CUSTOMER+NEW_CUSTOMERS_ID_RESERVE)) -le LAST_EMPTY_CUSTOMERS_ID ]]
+then
+ echo exit
+ exit
+else
+ N=$((LAST_EMPTY_CUSTOMERS_ID+1))
+ while [ $N -le $((LAST_EMPTY_CUSTOMERS_ID+NEW_CUSTOMERS_ID_RESERVE)) ]
+ do
+ mysql -h${H} -u${U} -p${P} $D -e "CREATE USER ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "GRANT USAGE on ${D}.* to ${D}_${N}@${H}"
+#debug only!!!
+# mysql -h${H} -u${U} -p${P} $D -e "GRANT ALL on ${D}.* to ${D}_${N}@${H}"
+
+ #TODO:otestovat contact_us!!!
+ mysql -h${H} -u${U} -p${P} $D -e "grant INSERT on $D.action_recorder to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT, INSERT, UPDATE, DELETE on $D.address_book to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.address_format to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.advert to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.advert_info to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.article_reviews to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.article_reviews_description to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.articles to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.articles_blog to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.articles_description to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant UPDATE (articles_viewed) on $D.articles_description to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.articles_to_topics to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.articles_xsell to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.authors to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.authors_info to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.cache to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.categories to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.categories_description to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.configuration to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.configuration_group to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.countries to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.currencies to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.customer_data_groups to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.customer_data_groups_sequence to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT, INSERT, UPDATE on $D.customers to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.customers_anonym to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT, INSERT, UPDATE, DELETE on $D.customers_basket to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT, INSERT, UPDATE, DELETE on $D.customers_basket_attributes to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT, INSERT, UPDATE on $D.customers_info to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.geo_zones to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.hooks to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.information to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.information_group to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.languages to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.last_empty_customers_id to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.manufacturers to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.manufacturers_info to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.newsletters to ${D}_${N}@${H}"
+#delete ne? TODO
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT, INSERT, UPDATE on $D.orders to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT, INSERT, UPDATE, DELETE on $D.orders_products to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT, INSERT, UPDATE, DELETE on $D.orders_products_attributes to ${D}_${N}@${H}"
+#TODO jen select?
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.orders_products_download to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.orders_status to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT, INSERT on $D.orders_status_history to ${D}_${N}@${H}"
+#TODO??
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT, INSERT, DELETE on $D.orders_total to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.pages to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.pages_description to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.products to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant UPDATE (products_quantity) on $D.products to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant UPDATE (products_ordered) on $D.products to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.products_attributes to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant UPDATE (options_values_quantity) on $D.products_attributes to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.products_attributes_download to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.products_description to ${D}_${N}@${H}"
+##BACHA! otestovat
+ mysql -h${H} -u${U} -p${P} $D -e "grant UPDATE (products_viewed) on $D.products_description to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.products_images to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT, INSERT, UPDATE, DELETE on $D.products_notifications to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.products_options to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.products_options_values to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.products_options_values_to_products_options to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.products_to_categories to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.reviews to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.reviews_description to ${D}_${N}@${H}"
+##?????!!!! je treba
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.sec_directory_whitelist to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.sessions to ${D}_${N}@${H}"
+
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.specials to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant UPDATE (status, date_status_change) on $D.specials to ${D}_${N}@${H}"
+##?treba
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.tax_class to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.tax_rates to ${D}_${N}@${H}"
+#???? update?
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT, INSERT, UPDATE, DELETE on $D.testimonials to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.testimonials_description to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.topics to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.topics_description to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT, INSERT, UPDATE, DELETE on $D.whos_online to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.zones to ${D}_${N}@${H}"
+ mysql -h${H} -u${U} -p${P} $D -e "grant SELECT on $D.zones_to_geo_zones to ${D}_${N}@${H}"
+
+echo NNN: ${N}
+ let N+=1
+ done
+ mysql -h${H} -u${U} -p${P} $D -e "FLUSH PRIVILEGES"
+ mysql -h${H} -u${U} -p${P} $D -e "UPDATE last_empty_customers_id SET customers_id=$((N-1))"
+fi
+
+exit
+
+#master admin
+grant all privileges on mydatabase.* to masteradmin@dbserver identified by 'masteradminpassword' with grant option;
+#catalog side user
+grant usage on mydatabase.* to cataloguser@dbserver identified by 'cataloguserpassword';
+
+
diff --git a/admin/bin/auto_create_delete_customers.php b/admin/bin/auto_create_delete_customers.php
new file mode 100644
index 000000000..e5f3b05d1
--- /dev/null
+++ b/admin/bin/auto_create_delete_customers.php
@@ -0,0 +1,101 @@
+#!/usr/bin/php
+= $last_empty_customer) {
+ $new_customer_id = $last_empty_customer + NEW_CUSTOMERS_ID_TO_GENERATE;
+ for ($id = $last_empty_customer + 1; $id <= $new_customer_id; $id++) {
+ echo 'New id:' . $id . "\n";
+ ////create customer: salt[0] | db_pwd[1]
+
+
+
+
+ /* mkdir(SHOP_KEYS_PATH . '/' . $id, 0755);
+ file_put_contents(SHOP_KEYS_PATH . $id . '/customer_salt', bin2hex(openssl_random_pseudo_bytes('32')));
+ $db_server_password = bin2hex(openssl_random_pseudo_bytes('32'));
+ file_put_contents(SHOP_KEYS_PATH . $id . '/customer_db_pwd', $db_server_password);
+*/
+ //create admin keys
+ $privateKey = openssl_pkey_new(array(
+ 'digest_alg' => 'sha512',
+ 'private_key_bits' => 4096,
+ 'private_key_type' => OPENSSL_KEYTYPE_RSA,
+ ));
+ //TODO: passphrasse add to admin private key???
+ openssl_pkey_export_to_file($privateKey, ADMIN_PRIVATE_KEYS_PATH . $id);
+ $admin_key_array = openssl_pkey_get_details($privateKey);
+ tep_db_query("INSERT INTO " . TABLE_KEYS_ADMIN . " (customers_id, public_key_admin) VALUES ('" . $id . "', '" . $admin_key_array['key'] . "')");
+// file_put_contents(SHOP_KEYS_PATH . '/' . $id . '/admin_pubkey',$admin_key_array['key']);
+ openssl_free_key($privateKey);
+/*
+ //create customer tmp keys
+ $privateKey = openssl_pkey_new(array(
+ 'digest_alg' => 'sha512',
+ 'private_key_bits' => 4096,
+ 'private_key_type' => OPENSSL_KEYTYPE_RSA,
+ ));
+ openssl_pkey_export_to_file($privateKey, SHOP_KEYS_PATH . $id . '/customer_tmp_privkey');
+ $admin_key_array = openssl_pkey_get_details($privateKey);
+ file_put_contents(SHOP_KEYS_PATH . '/' . $id . '/customer_tmp_pubkey',$admin_key_array['key']);
+ openssl_free_key($privateKey);
+*/
+
+//grant usage pak skript... TODO!!!
+ tep_db_query("GRANT ALL ON " . DB_DATABASE . ".* to '" . DB_SERVER_USERNAME_PREFIX . $id . "'@'" . DB_SERVER . "' IDENTIFIED BY '" . DB_SERVER_PASSWORD_CUSTOMER . "'");
+ }
+ tep_db_query("UPDATE " . TABLE_LAST_EMPTY_CUSTOMERS_ID . " SET customers_id = '" . $new_customer_id . "'");
+}
+
+
+$current_time = time();
+$xx_mins_ago = ($current_time - 60); //900 -15 min
+
+
+exit;
+//?????????????
+// remove entries that have expired
+$expired_customers_query = tep_db_query("select customer_id, session_id from " . TABLE_WHOS_ONLINE . " where time_last_click < '" . $xx_mins_ago . "'");
+if (tep_db_num_rows($expired_customers_query) > 0) {
+ while ($expired_customers = tep_db_fetch_array($expired_customers_query)) {
+ tep_db_query("DELETE FROM " . TABLE_SESSIONS . " WHERE sesskey = '" . $expired_customers['session_id'] . "'");
+ tep_db_query("DELETE FROM " . TABLE_WHOS_ONLINE . " WHERE customer_id = '" . $expired_customers['customer_id'] . "'");
+ purge_expired_decrypted_customers_data($expired_customers['customer_id']);
+ }
+} else {
+ echo 'No customers data to purge';
+}
+//delete uncative customers (db username from database)
+//delete salt,db_password from config-file
+
diff --git a/admin/bin/confinsert b/admin/bin/confinsert
new file mode 100755
index 000000000..8be2e2afb
--- /dev/null
+++ b/admin/bin/confinsert
@@ -0,0 +1,18 @@
+#!/bin/bash
+. db.conf
+if [[ ! $1 || ! $2 ]];then
+ echo 'Usage: ./confinsert configuration_key ($1) "configuration_value" ($2) "configuration_title"($3) "configuration_description"($4) configuration_group_id($5) SORT_ORDER($6)]
+ default CONFIGURATION_GROUP_ID=1, default SORT_ORDER=9999'
+ exit
+fi
+
+[[ $3 ]] && CT="$3" || CT=$1
+[[ $4 ]] && CD="$4" || CD=$1
+[[ $5 ]] && GID="$5" || GID=1
+[[ $6 ]] && ORD="$5" || ORD=9999
+
+mysql -h${H} -u${U} -p"${P}" $D -e "
+insert into configuration
+ (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, last_modified, date_added, use_function, set_function )
+values ('${CT}', '${1}', '${2}', '${CD}', '${GID}', '${ORD}', NOW(), NOW(), NULL, NULL);
+"
diff --git a/admin/bin/confinsert-bolean b/admin/bin/confinsert-bolean
new file mode 100755
index 000000000..9c0d00cc8
--- /dev/null
+++ b/admin/bin/confinsert-bolean
@@ -0,0 +1,19 @@
+#!/bin/bash
+. db.conf
+
+if [[ ! $1 || ! $2 ]];then
+ echo 'Usage: ./confinsert CONFIG_KEY(1) true/false(2) "Key Title"(3) ["Key Descriprion"(4) CONFIGURATION_GROUP_ID(5) SORT_ORDER(6)]
+ default CONFIGURATION_GROUP_ID=1, default SORT_ORDER=9999'
+ exit
+fi
+
+[[ $3 ]] && CT="$3" || CT=$1
+[[ $4 ]] && CD="$4" || CD=$1
+[[ $5 ]] && GID="$5" || GID=1
+[[ $6 ]] && ORD="$5" || ORD=9999
+
+mysql -h${H} -u${U} ${P} $D -e "
+insert into configuration
+ (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, last_modified, date_added, use_function, set_function )
+values ('${CT}', '${1}', '${2}', '${CD}', '${GID}', '${ORD}', NOW(), NOW(), NULL, 'tep_cfg_select_option(array(\'true\', \'false\'),');
+"
diff --git a/admin/bin/customers-cron.log b/admin/bin/customers-cron.log
new file mode 100644
index 000000000..314e50c00
--- /dev/null
+++ b/admin/bin/customers-cron.log
@@ -0,0 +1,11955 @@
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID:
+NNN: 1
+NNN: 2
+NNN: 3
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 9
+exit
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 3
+NNN: 4
+NNN: 5
+NNN: 6
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 3
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 3
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 3
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 3
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 3
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 3
+$LAST_REAL_CUSTOMER: 4
+LAST_EMPTY_CUSTOMERS_ID: 3
+NNN: 4
+NNN: 4
+NNN: 4
+NNN: 4
+NNN: 4
+NNN: 4
+NNN: 4
+NNN: 5
+NNN: 5
+NNN: 5
+NNN: 5
+NNN: 5
+NNN: 5
+NNN: 5
+NNN: 6
+NNN: 6
+NNN: 6
+NNN: 6
+NNN: 6
+NNN: 6
+NNN: 6
diff --git a/admin/bin/db-delete-all.sh b/admin/bin/db-delete-all.sh
new file mode 100755
index 000000000..b25a7c4d9
--- /dev/null
+++ b/admin/bin/db-delete-all.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+. db.conf
+#empty users, orders TODO
+mysql -u $U -p${P} ${D} -e 'truncate customers_real'
+mysql -u $U -p${P} ${D} -e 'truncate customers_info'
+mysql -u $U -p${P} ${D} -e 'truncate address_book_real'
+for i in {1..3}
+ do
+ mysql -u $U -p${P} ${D} -e "drop user ${D}_${i}@${H}"
+done
+
+mysql -h${H} -u${U} -p${P} ${D} -e "DROP USER ${RU}@${HH}"
+mysql -h${H} -u${U} -p${P} ${D} -e "DROP USER ${A}@${HH}"
+
+mysql -u $U -p${P} ${D} -e 'update last_empty_customers_id set customers_id = 0'
\ No newline at end of file
diff --git a/admin/bin/db-grant-install.sh b/admin/bin/db-grant-install.sh
new file mode 100755
index 000000000..f2871cf98
--- /dev/null
+++ b/admin/bin/db-grant-install.sh
@@ -0,0 +1,129 @@
+#!/bin/bash
+#TODO: SETUP configurable db_prefix SUBSTR(SUBSTRING_INDEX("od_231", "@", 1),n)
+# n=db_name plus '_'
+. db.conf
+SHIFTME1=${#D}
+SHIFTME=$((SHIFTME1 + 2))
+echo $SHIFTME
+sed "s/SHIFTME/${SHIFTME}/g" < view_tpl.sql > view_tmp.sql
+sed -i "s/rootadmin/${RU}/g" view_tmp.sql
+mysql -h${H} -u${U} -p${P} ${D} < view_tmp.sql
+rm view_tmp.sql
+ mysql -h${H} -u${U} -p${P} ${D} -e "DROP USER ${RU}@${HH}"
+ mysql -h${H} -u${U} -p${P} -e "GRANT ALL on ${D}.* to ${RU}@${HH} identified by '${RP}' WITH GRANT OPTION";
+
+ mysql -h${H} -u${U} -p${P} ${D} -e "DROP USER ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "CREATE USER ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "GRANT USAGE on ${D}.* to ${A}@${HH} IDENTIFIED BY '${PA}'"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant INSERT on ${D}.action_recorder to ${A}@${HH}"
+
+# mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT, INSERT, UPDATE, DELETE on ${D}.address_book to ${A}@${HH}"
+# mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.address_format to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.advert to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.advert_info to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.article_reviews to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.article_reviews_description to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.articles to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.articles_blog to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.articles_description to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant UPDATE (articles_viewed) on $D.articles_description to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.articles_images to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.articles_to_topics to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.articles_xsell to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.authors to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.authors_info to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.cache to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.categories to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.categories_description to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.configuration to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.configuration_group to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.countries to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.currencies to ${A}@${HH}"
+
+#??????!!!!!!!!!!!!!!!!!!!!!!!!! extremDirtyHack - presunout pripojeni databaze na konec
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.customers to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.address_book to ${A}@${HH}"
+
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.customer_data_groups to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.customer_data_groups_sequence to ${A}@${HH}"
+
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.customers_anonym to ${A}@${HH}"
+# mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT, INSERT, UPDATE on ${D}.customers to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT, INSERT, UPDATE, DELETE on ${D}.customers_basket to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT, INSERT, UPDATE, DELETE on ${D}.customers_basket_attributes to ${A}@${HH}"
+
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.customers_info to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant UPDATE (customers_info_date_of_last_logon) on ${D}.customers_info to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant UPDATE (customers_info_number_of_logons) on ${D}.customers_info to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant UPDATE (password_reset_key) on ${D}.customers_info to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant UPDATE (password_reset_date) on ${D}.customers_info to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.geo_zones to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.hooks to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.information to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.information_group to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.languages to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.last_empty_customers_id to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.manufacturers to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.manufacturers_info to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.newsletters to ${A}@${HH}"
+
+#delete ne? TODO
+# mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT, INSERT, UPDATE on ${D}.orders to ${A}@${HH}"
+# mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT, INSERT, UPDATE, DELETE on ${D}.orders_products to ${A}@${HH}"
+# mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT, INSERT, UPDATE, DELETE on ${D}.orders_products_attributes to ${A}@${HH}"
+#TODO jen select?
+# mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.orders_products_download to ${A}@${HH}"
+# mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.orders_status to ${A}@${HH}"
+# mysql -h${H} -u${U} -p${P} ${D} -e "grant INSERT on ${D}.orders_status_history to ${A}@${HH}"
+#TODO??
+# mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT, INSERT, DELETE on ${D}.orders_total to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.pages to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.pages_description to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.products to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.products_attributes to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.products_attributes_download to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.products_description to ${A}@${HH}"
+##BACHA! otestovat PRAVA NA SLOUPCE!!!
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant UPDATE (products_viewed) on ${D}.products_description to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.products_images to ${A}@${HH}"
+# mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT, INSERT, UPDATE, DELETE on ${D}.products_notifications to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.products_options to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.products_options_values to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.products_options_values_to_products_options to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.products_to_categories to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.reviews to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.reviews_description to ${A}@${HH}"
+##?????!!!! je treba
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.sec_directory_whitelist to ${A}@${HH}"
+#??????? Needed only if sessions are stored in DB
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT, INSERT, UPDATE, DELETE on ${D}.sessions to ${A}@${HH}"
+#todo omezit prava!!
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT, UPDATE on ${D}.specials to ${A}@${HH}"
+##?treba
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.tax_class to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.tax_rates to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.testimonials to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.testimonials_description to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.topics to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.topics_description to ${A}@${HH}"
+#vsechny prava? otestovat
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT, INSERT, UPDATE, DELETE on ${D}.whos_online to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.zones to ${A}@${HH}"
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant SELECT on ${D}.zones_to_geo_zones to ${A}@${HH}"
+
+ mysql -h${H} -u${U} -p${P} ${D} -e "grant UPDATE on ${D}.articles_description to ${A}@${HH}"
+
+ mysql -h${H} -u${U} -p${P} -e "FLUSH PRIVILEGES"
+
+
+
+
+
+exit
+
+#master admin
+grant all privileges on mydatabase.* to masteradmin@dbserver identified by 'masteradminpassword' with grant option;
+#catalog side user
+grant usage on mydatabase.* to cataloguser@dbserver identified by 'cataloguserpassword';
+
+
diff --git a/admin/bin/db.conf b/admin/bin/db.conf
new file mode 100644
index 000000000..ca8f18c6c
--- /dev/null
+++ b/admin/bin/db.conf
@@ -0,0 +1,14 @@
+# WARNING thi user need to bee created maually first and need GRANT OPTION:
+# grant ALL on myDBname.* to rootadmin@localhost identified by 'heslo' WITH GRANT OPTION;
+U=gar_root
+H=localhost
+P='heslo'
+D='gar'
+
+HH='localhost'
+RU='gar_root'
+P='heslo'
+
+
+A='gar_anon'
+PA='7xdwXTwN5I3ViswKCRsB'
diff --git a/admin/bin/db.conf.empty b/admin/bin/db.conf.empty
new file mode 100644
index 000000000..9c5f10de0
--- /dev/null
+++ b/admin/bin/db.conf.empty
@@ -0,0 +1,13 @@
+# WARNING thi user need to bee created maually first and need GRANT OPTION:
+# grant ALL on myDBname.* to rootadmin@localhost identified by 'heslo' WITH GRANT OPTION;
+U=rootadmin
+H=localhost
+P='heslo'
+D='ph4'
+
+HH='localhost'
+RU='ph4_root'
+RP='rootpass'
+
+A='ph4_anon'
+PA='anonympass'
diff --git a/admin/bin/dbconnect.sh b/admin/bin/dbconnect.sh
new file mode 100644
index 000000000..c51b4716f
--- /dev/null
+++ b/admin/bin/dbconnect.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+H=`cat ../../oscconfig/dbconfigure.php|egrep "^define\('DB_SERVER'"|sed "s/define('DB_SERVER', '//"|sed "s/');//"`
+D=`cat ../../oscconfig/dbconfigure.php|egrep "^define\('DB_DATABASE'"|sed "s/define('DB_DATABASE', '//"|sed "s/');//"`
+U=`cat ../../oscconfig/dbconfigure.php|egrep "^define\('DB_SERVER_USERNAME'"|sed "s/define('DB_SERVER_USERNAME', '//"|sed "s/');//"`
+P=`cat ../../oscconfig/dbconfigure.php|egrep "^define\('DB_SERVER_PASSWORD'"|sed "s/define('DB_SERVER_PASSWORD', '//"|sed "s/');//"`
+if [ $P ];then P="-p${P}";fi
diff --git a/admin/bin/preinstall.sh b/admin/bin/preinstall.sh
new file mode 100644
index 000000000..ed942c625
--- /dev/null
+++ b/admin/bin/preinstall.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+cp ../../install/composer.json ../../../
+cp ../../install/composer.lock ../../../
+cp ../../install/Makefile ../../../
+cp ../../install/phinx-adapter.php ../../../
diff --git a/admin/bin/s b/admin/bin/s
new file mode 100755
index 000000000..35f6a675f
--- /dev/null
+++ b/admin/bin/s
@@ -0,0 +1,4 @@
+#!/bin/bash
+#. ./dbconnect.sh
+. db.conf
+mysql -h${H} -u${U} -p${P} $D -e "SELECT configuration_key, configuration_value FROM configuration WHERE configuration_key like '%${1}%'"
diff --git a/admin/bin/u b/admin/bin/u
new file mode 100755
index 000000000..15be8a5a5
--- /dev/null
+++ b/admin/bin/u
@@ -0,0 +1,7 @@
+#!/bin/bash
+#. ./dbconnect.sh
+. db.conf
+
+mysql -h${H} -u${U} -p${P} $D -e "update configuration set configuration_value='$2' where configuration_key='${1}'"
+exit
+#mysql -h${H} -u${U} ${P} $D -e "SELECT configuration_key, configuration_value FROM configuration WHERE configuration_key like '%${1}%'"
diff --git a/admin/bin/view_tpl.sql b/admin/bin/view_tpl.sql
new file mode 100644
index 000000000..58e21619a
--- /dev/null
+++ b/admin/bin/view_tpl.sql
@@ -0,0 +1,76 @@
+--
+-- Final view structure for view `address_book`
+--
+
+/*!50001 DROP TABLE IF EXISTS `address_book`*/;
+/*!50001 DROP VIEW IF EXISTS `address_book`*/;
+/*!50001 SET @saved_cs_client = @@character_set_client */;
+/*!50001 SET @saved_cs_results = @@character_set_results */;
+/*!50001 SET @saved_col_connection = @@collation_connection */;
+/*!50001 SET character_set_client = utf8 */;
+/*!50001 SET character_set_results = utf8 */;
+/*!50001 SET collation_connection = utf8_general_ci */;
+/*!50001 CREATE ALGORITHM=UNDEFINED */
+/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
+/*!50001 VIEW `address_book` AS select `address_book_real`.`address_book_id` AS `address_book_id`,`address_book_real`.`customers_id` AS `customers_id`,`address_book_real`.`entry_gender` AS `entry_gender`,`address_book_real`.`entry_company` AS `entry_company`,`address_book_real`.`entry_firstname` AS `entry_firstname`,`address_book_real`.`entry_lastname` AS `entry_lastname`,`address_book_real`.`entry_street_address` AS `entry_street_address`,`address_book_real`.`entry_suburb` AS `entry_suburb`,`address_book_real`.`entry_postcode` AS `entry_postcode`,`address_book_real`.`entry_city` AS `entry_city`,`address_book_real`.`entry_state` AS `entry_state`,`address_book_real`.`entry_country_id` AS `entry_country_id`,`address_book_real`.`entry_zone_id` AS `entry_zone_id` from `address_book_real` where `address_book_real`.`customers_id` = (select substr(substring_index(user(),'@',1),5)) or substring_index(user(),'@',1) = 'rootadmin' */;
+/*!50001 SET character_set_client = @saved_cs_client */;
+/*!50001 SET character_set_results = @saved_cs_results */;
+/*!50001 SET collation_connection = @saved_col_connection */;
+
+--
+-- Final view structure for view `customers`
+--
+
+/*!50001 DROP TABLE IF EXISTS `customers`*/;
+/*!50001 DROP VIEW IF EXISTS `customers`*/;
+/*!50001 SET @saved_cs_client = @@character_set_client */;
+/*!50001 SET @saved_cs_results = @@character_set_results */;
+/*!50001 SET @saved_col_connection = @@collation_connection */;
+/*!50001 SET character_set_client = utf8 */;
+/*!50001 SET character_set_results = utf8 */;
+/*!50001 SET collation_connection = utf8_general_ci */;
+/*!50001 CREATE ALGORITHM=UNDEFINED */
+/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
+/*!50001 VIEW `customers` AS select `customers_real`.`customers_id` AS `customers_id`,`customers_real`.`customers_gender` AS `customers_gender`,`customers_real`.`customers_firstname` AS `customers_firstname`,`customers_real`.`customers_lastname` AS `customers_lastname`,`customers_real`.`customers_dob` AS `customers_dob`,`customers_real`.`customers_email_address` AS `customers_email_address`,`customers_real`.`customers_default_address_id` AS `customers_default_address_id`,`customers_real`.`customers_telephone` AS `customers_telephone`,`customers_real`.`customers_fax` AS `customers_fax`,`customers_real`.`customers_password` AS `customers_password`,`customers_real`.`customers_newsletter` AS `customers_newsletter`,`customers_real`.`customers_company_number` AS `customers_company_number`,`customers_real`.`customers_vat_number` AS `customers_vat_number` from `customers_real` where `customers_real`.`customers_id` = (select substr(substring_index(user(),'@',1),5)) or substring_index(user(),'@',1) = 'rootadmin' */;
+/*!50001 SET character_set_client = @saved_cs_client */;
+/*!50001 SET character_set_results = @saved_cs_results */;
+/*!50001 SET collation_connection = @saved_col_connection */;
+
+--
+-- Final view structure for view `customers_anonym`
+--
+
+/*!50001 DROP TABLE IF EXISTS `customers_anonym`*/;
+/*!50001 DROP VIEW IF EXISTS `customers_anonym`*/;
+/*!50001 SET @saved_cs_client = @@character_set_client */;
+/*!50001 SET @saved_cs_results = @@character_set_results */;
+/*!50001 SET @saved_col_connection = @@collation_connection */;
+/*!50001 SET character_set_client = utf8 */;
+/*!50001 SET character_set_results = utf8 */;
+/*!50001 SET collation_connection = utf8_general_ci */;
+/*!50001 CREATE ALGORITHM=UNDEFINED */
+/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
+/*!50001 VIEW `customers_anonym` AS select `customers_real`.`customers_id` AS `customers_id`,`customers_real`.`customers_email_address` AS `customers_email_address`,`customers_real`.`customers_password` AS `customers_password` from `customers_real` */;
+/*!50001 SET character_set_client = @saved_cs_client */;
+/*!50001 SET character_set_results = @saved_cs_results */;
+/*!50001 SET collation_connection = @saved_col_connection */;
+
+--
+-- Final view structure for view `orders`
+--
+
+/*!50001 DROP TABLE IF EXISTS `orders`*/;
+/*!50001 DROP VIEW IF EXISTS `orders`*/;
+/*!50001 SET @saved_cs_client = @@character_set_client */;
+/*!50001 SET @saved_cs_results = @@character_set_results */;
+/*!50001 SET @saved_col_connection = @@collation_connection */;
+/*!50001 SET character_set_client = utf8 */;
+/*!50001 SET character_set_results = utf8 */;
+/*!50001 SET collation_connection = utf8_general_ci */;
+/*!50001 CREATE ALGORITHM=UNDEFINED */
+/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
+/*!50001 VIEW `orders` AS select `orders_real`.`orders_id` AS `orders_id`,`orders_real`.`customers_id` AS `customers_id`,`orders_real`.`customers_name` AS `customers_name`,`orders_real`.`customers_company` AS `customers_company`,`orders_real`.`customers_street_address` AS `customers_street_address`,`orders_real`.`customers_suburb` AS `customers_suburb`,`orders_real`.`customers_city` AS `customers_city`,`orders_real`.`customers_postcode` AS `customers_postcode`,`orders_real`.`customers_state` AS `customers_state`,`orders_real`.`customers_country` AS `customers_country`,`orders_real`.`customers_telephone` AS `customers_telephone`,`orders_real`.`customers_email_address` AS `customers_email_address`,`orders_real`.`customers_address_format_id` AS `customers_address_format_id`,`orders_real`.`delivery_name` AS `delivery_name`,`orders_real`.`delivery_company` AS `delivery_company`,`orders_real`.`delivery_street_address` AS `delivery_street_address`,`orders_real`.`delivery_suburb` AS `delivery_suburb`,`orders_real`.`delivery_city` AS `delivery_city`,`orders_real`.`delivery_postcode` AS `delivery_postcode`,`orders_real`.`delivery_state` AS `delivery_state`,`orders_real`.`delivery_country` AS `delivery_country`,`orders_real`.`delivery_address_format_id` AS `delivery_address_format_id`,`orders_real`.`billing_name` AS `billing_name`,`orders_real`.`billing_company` AS `billing_company`,`orders_real`.`billing_street_address` AS `billing_street_address`,`orders_real`.`billing_suburb` AS `billing_suburb`,`orders_real`.`billing_city` AS `billing_city`,`orders_real`.`billing_postcode` AS `billing_postcode`,`orders_real`.`billing_state` AS `billing_state`,`orders_real`.`billing_country` AS `billing_country`,`orders_real`.`billing_address_format_id` AS `billing_address_format_id`,`orders_real`.`payment_method` AS `payment_method`,`orders_real`.`cc_type` AS `cc_type`,`orders_real`.`cc_owner` AS `cc_owner`,`orders_real`.`cc_number` AS `cc_number`,`orders_real`.`cc_expires` AS `cc_expires`,`orders_real`.`last_modified` AS `last_modified`,`orders_real`.`date_purchased` AS `date_purchased`,`orders_real`.`orders_status` AS `orders_status`,`orders_real`.`orders_date_finished` AS `orders_date_finished`,`orders_real`.`currency` AS `currency`,`orders_real`.`currency_value` AS `currency_value` from `orders_real` where `orders_real`.`customers_id` = (select substr(substring_index(user(),'@',1),5)) or substring_index(user(),'@',1) = 'rootadmin' */;
+/*!50001 SET character_set_client = @saved_cs_client */;
+/*!50001 SET character_set_results = @saved_cs_results */;
+/*!50001 SET collation_connection = @saved_col_connection */;
+
diff --git a/admin/includes/configure.php b/admin/includes/configure.php
index 3db783c79..dc904650f 100755
--- a/admin/includes/configure.php
+++ b/admin/includes/configure.php
@@ -2,28 +2,28 @@
// set the level of error reporting
error_reporting(E_ALL);
- const HTTP_SERVER = 'http://phoenix';
+ const HTTP_SERVER = 'http://ph.local';
const COOKIE_OPTIONS = [
'lifetime' => 0,
- 'domain' => 'phoenix',
+ 'domain' => 'ph.local',
'path' => '/admin',
'samesite' => 'Lax',
];
const DIR_WS_ADMIN = '/admin/';
- const DIR_FS_DOCUMENT_ROOT = '/home/vitex/Projects/PureHTML/PhoenixCart/';
- const DIR_FS_ADMIN = '/home/vitex/Projects/PureHTML/PhoenixCart/admin/';
+ const DIR_FS_DOCUMENT_ROOT = '/home/f/git/PhoenixCart/';
+ const DIR_FS_ADMIN = '/home/f/git/PhoenixCart/admin/';
const DIR_FS_BACKUP = DIR_FS_ADMIN . 'backups/';
- const HTTP_CATALOG_SERVER = 'http://phoenix';
+ const HTTP_CATALOG_SERVER = 'http://ph.local';
const DIR_WS_CATALOG = '/';
- const DIR_FS_CATALOG = '/home/vitex/Projects/PureHTML/PhoenixCart/';
+ const DIR_FS_CATALOG = '/home/f/git/PhoenixCart/';
date_default_timezone_set('Europe/Prague');
// If you are asked to provide configure.php details
// please remove the data below before sharing
const DB_SERVER = 'localhost';
- const DB_SERVER_USERNAME = 'phoenix';
- const DB_SERVER_PASSWORD = 'phoenix';
- const DB_DATABASE = 'phoenix';
+ const DB_SERVER_USERNAME = 'ph';
+ const DB_SERVER_PASSWORD = 'ph';
+ const DB_DATABASE = 'PhoenixCart';
diff --git a/db/migrations/20191027022936_config_new_bootstrap_enabled.php b/db/migrations/20191027022936_config_new_bootstrap_enabled.php
new file mode 100644
index 000000000..83325ee06
--- /dev/null
+++ b/db/migrations/20191027022936_config_new_bootstrap_enabled.php
@@ -0,0 +1,42 @@
+execute("
+delete from configuration WHERE configuration_key = 'BOOTSTRAP_ENABLED';
+ insert into configuration
+ (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, last_modified, set_function, date_added)
+ values
+ ('Enable BS?', 'BOOTSTRAP_ENABLED', 'True', 'Enable BS temlate system (True)?', '16', '1', NOW(), 'tep_cfg_select_option(array(\'True\', \'False\'), ', now())");
+
+ }
+}
diff --git a/includes/configure.php b/includes/configure.php
index 3bcd703f5..3df6f6d44 100755
--- a/includes/configure.php
+++ b/includes/configure.php
@@ -2,22 +2,22 @@
// set the level of error reporting
error_reporting(E_ALL);
- const HTTP_SERVER = 'http://phoenix';
+ const HTTP_SERVER = 'http://ph.local';
const COOKIE_OPTIONS = [
'lifetime' => 0,
- 'domain' => 'phoenix',
+ 'domain' => 'ph.local',
'path' => '/',
'samesite' => 'Lax',
];
const DIR_WS_CATALOG = '/';
- const DIR_FS_CATALOG = '/home/vitex/Projects/PureHTML/PhoenixCart/';
+ const DIR_FS_CATALOG = '/home/f/git/PhoenixCart/';
date_default_timezone_set('Europe/Prague');
// If you are asked to provide configure.php details
// please remove the data below before sharing
const DB_SERVER = 'localhost';
- const DB_SERVER_USERNAME = 'phoenix';
- const DB_SERVER_PASSWORD = 'phoenix';
- const DB_DATABASE = 'phoenix';
+ const DB_SERVER_USERNAME = 'ph';
+ const DB_SERVER_PASSWORD = 'ph';
+ const DB_DATABASE = 'PhoenixCart';
diff --git a/includes/hooks/shop/siteWide/bootStrap.php b/includes/hooks/shop/siteWide/bootStrap.php
index 24ffe9782..048e4edd4 100644
--- a/includes/hooks/shop/siteWide/bootStrap.php
+++ b/includes/hooks/shop/siteWide/bootStrap.php
@@ -17,17 +17,18 @@ class hook_shop_siteWide_bootStrap {
public $sitestart = null;
public $siteend = null;
- public function listen_injectSiteStart() {
- $this->sitestart = ' ' . PHP_EOL;
-
+ function listen_injectSiteStart() {
+ if (BOOTSTRAP_ENABLED == 'True') {
+ $this->sitestart .= ' ' . PHP_EOL;
+ }
return $this->sitestart;
}
- public function listen_injectSiteEnd() {
- $this->siteend = '' . PHP_EOL;
- $this->siteend .= '' . PHP_EOL;
-
+ function listen_injectSiteEnd() {
+ if (BOOTSTRAP_ENABLED == 'True') {
+ $this->siteend .= '' . PHP_EOL;
+ $this->siteend .= '' . PHP_EOL;
+ }
return $this->siteend;
}
-
-}
+}
\ No newline at end of file
diff --git a/includes/hooks/shop/siteWide/styleSheets.php b/includes/hooks/shop/siteWide/styleSheets.php
index 694fdbe09..cab7eb433 100644
--- a/includes/hooks/shop/siteWide/styleSheets.php
+++ b/includes/hooks/shop/siteWide/styleSheets.php
@@ -1,5 +1,4 @@
sitestart .= '' . PHP_EOL;
+ $this->sitestart .= '' . PHP_EOL;
+
+ $css_file = 'templates/' . TEMPLATE_SELECTION . '/static/user.css';
+ if (file_exists($css_file)) {
+ $this->sitestart .= ' ' . PHP_EOL;
}
+} else {
+ $this->sitestart .= '' . PHP_EOL;
+ $this->sitestart .= '';
+}
+ return $this->sitestart;
+ }
}
diff --git a/includes/languages/czech.php b/includes/languages/czech.php
index cf0ac440c..b4d132e58 100644
--- a/includes/languages/czech.php
+++ b/includes/languages/czech.php
@@ -396,3 +396,5 @@ function tep_date_raw($date, $reverse = false) {
const PASSWORD = 'Heslo';
const LOGIN = 'Přihlášení';
+
+const TEXT_UNKNOWN_TAX_RATE ='EROR: TEXT_UNKNOWN_TAX_RATE';
diff --git a/includes/languages/english.php b/includes/languages/english.php
index 2e2aca941..3f7c67519 100644
--- a/includes/languages/english.php
+++ b/includes/languages/english.php
@@ -160,3 +160,5 @@
const ENTRY_COMMENTS = 'Anything we need to know?';
const ENTRY_COMMENTS_PLACEHOLDER = 'Comment here...';
const TABLE_HEADING_OR = '-or-';
+
+const TEXT_UNKNOWN_TAX_RATE ='EROR: TEXT_UNKNOWN_TAX_RATE';
diff --git a/keys/mips_iplatebnibrana.csob.cz.pub b/keys/mips_iplatebnibrana.csob.cz.pub
new file mode 100644
index 000000000..56f14a8f0
--- /dev/null
+++ b/keys/mips_iplatebnibrana.csob.cz.pub
@@ -0,0 +1,9 @@
+-----BEGIN PUBLIC KEY-----
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuo0GzBCQMl1wDJJrJHTQ
+ykGlh2Kon7QfQjKVTPv7fPIVE8PhHeJueWBfydqTQKVeIVMB9VAUYlaPjwFhAuJ6
+zqoaCG9m+q81L7CehsQThntxacOPwRd4SSyS5o+kPzTIFji0Z3c8s6pYJJoF+YfE
+atCWRW2frgrgbHbl+84AOvItt7NReYz1z4P7J+Uv4UbifFHVP7oIEh+5CJSj6puv
+jHh1QHrzE+dTaoKDhtOfSkTTelHqod/hUt4QIcHai6I8X/R5nEv3y40MWoi1FxbQ
+6IgtVMloneN0XaHR5U88eMeKJJyqR859I4xfun6Z6RyfyaIl5Ph3f2daeMeENPUR
+BQIDAQAB
+-----END PUBLIC KEY-----
diff --git a/keys/rsa_A5043fIaNo.key b/keys/rsa_A5043fIaNo.key
new file mode 100644
index 000000000..98cf88c7a
--- /dev/null
+++ b/keys/rsa_A5043fIaNo.key
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEAlBaA5LgIlMYVXXRddMTakO1dLBCKZYYFzVGXZu7dGeKcHied
+XJTcy2CNgpA8Lyic6H8oPjBS/BGPZxSWe+NtRz/Wy3B8wWRJV0dqkmu6WRgWk2rk
+t6V9c3nKUJ35saPNcIL08/6wHXGD3j49zP63Wuum2Qm3ngy42JpO/UpTciFeNY4Z
+LzKpHLqMha6h6xNrotwOlbB0oY6Mb2UNhMDYHdUbTBPEYxjREvHf/xiUN55/Ey6v
+BUcebRvj4alA5ZfvKpfH1HNavf8w2w/6ayRh/j0bbv1jM2pC25UewTlgiHoTAtzJ
+G98Qeqs/okWlZk6SEK69j3eHIGugtqB7pCryJQIDAQABAoIBAAMM657Kg7K82dfQ
++9PZ8j6mBRNRS+iHeDsggSPnq7pKxriATGeJ0XqHBKM54WN/TKwlYmjVigATRIb1
+D5yBtNCQ6hXKvWcmb7RSjklx2qbXLi/fNdLqn8jvK1G5z1jvbN3ydKVKC8qvee3s
+Dk3YuWIwFIHIB3ZEANLFavcgvtNNAJzv4BX6+OCszij0eMI3PA2vDuiWW47zD87a
+TY74pImyvgSSuqlSudI2G68401uuBHcTwQOsi6DoEg9sGAXAJNdg0/ADMR7u2M5j
+srLobgEKZ+z/R+5pNeGYxNwsXfBUdo8muCnuq9m97W4vd0cpo2BrTWxvf8xK5kQS
+yK33xokCgYEA09xglbp9PyTgD0p3g5gZ/p9UvejT3Amqi1C1eBpBMmipUpQaxlVW
+jz2nNP9tffyNez8/W+TOnuk0NL58cC3h75PVK1bdd8fwnKNEzuTlcEjZ21bOJYLx
+jscytyTiKHBdvT1zAJJU0b+Nk3xBGjzMaQ0WhOe+WTPKyr9TbMnBtNcCgYEAsvDJ
+9B+NzusEztFIPUsC2zQ+AXouG/LLlpBxTqHVEt6llIK8E6lfDbJpyXdq4cwP2YXE
+EmHJaZ9EzG/BlxmHPL2B40CwmVx2i6PJclS6aOV50poKp/C6o55PvAG/35g5XpE2
+VX+FWxjVxSiAqcNQX/7qK89e3xPwX9T39g8KtWMCgYEAlGczlM5cO2YGOU/NZfWe
+h9huENVNyj1PJGV1qFqjvr7HlNu/4ZwXlSD3xk0CEpVdOa71H9an0XLDqgqguie5
+swtX8BLZ8bSxW9eWNGLsQPoW+OjWYDpYIM5yPQ3uCaukThIEQ6s9FOvcLSqFo+5g
+tVmAo7p9gJih/eGFe5fcQ2MCgYAJqa0OLMIIoXJSBMUk4i8WTTzn8YQZ6EOMLuKf
+f2e1LCa+3Uxwt121rKO/yF4SMWXNtkZ/Q56PwJUDgSlwEmXWJtmjvvOKZI7WPZL8
+RI0IaxPoBn960CoT+dGOcn29AkhezfKkLU2zPKUWj3hbMnvdozNcCEe0Pixl0GdP
+d0J5xwKBgH/Xll7Dnj3of/RY4vQoKyzQvOkvl0shMszml7p1b+fO+YeQ0NGTA8TA
+V+BTmwsxz5Wv7pdaPFeb4ycfnpSWzZSfqmFS4bO1qVOlMDUkA4weticM5/3C9riS
+oMi3WUV9zUNZFEK5S0jP8CZt0Y0ZKk7W5i5eiI8Ken4Xykc6KFuJ
+-----END RSA PRIVATE KEY-----
\ No newline at end of file
diff --git a/keys/rsa_A5043fIaNo.pub b/keys/rsa_A5043fIaNo.pub
new file mode 100644
index 000000000..a0d5e6077
--- /dev/null
+++ b/keys/rsa_A5043fIaNo.pub
@@ -0,0 +1,9 @@
+-----BEGIN PUBLIC KEY-----
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlBaA5LgIlMYVXXRddMTa
+kO1dLBCKZYYFzVGXZu7dGeKcHiedXJTcy2CNgpA8Lyic6H8oPjBS/BGPZxSWe+Nt
+Rz/Wy3B8wWRJV0dqkmu6WRgWk2rkt6V9c3nKUJ35saPNcIL08/6wHXGD3j49zP63
+Wuum2Qm3ngy42JpO/UpTciFeNY4ZLzKpHLqMha6h6xNrotwOlbB0oY6Mb2UNhMDY
+HdUbTBPEYxjREvHf/xiUN55/Ey6vBUcebRvj4alA5ZfvKpfH1HNavf8w2w/6ayRh
+/j0bbv1jM2pC25UewTlgiHoTAtzJG98Qeqs/okWlZk6SEK69j3eHIGugtqB7pCry
+JQIDAQAB
+-----END PUBLIC KEY-----
\ No newline at end of file
diff --git a/templates/default/includes/hooks/shop/siteWide/bootStrap.php b/templates/default/includes/hooks/shop/siteWide/bootStrap.php
index dcf1f2d85..57efa6d73 100644
--- a/templates/default/includes/hooks/shop/siteWide/bootStrap.php
+++ b/templates/default/includes/hooks/shop/siteWide/bootStrap.php
@@ -18,16 +18,16 @@ class hook_shop_siteWide_bootStrap {
public $siteend = null;
function listen_injectSiteStart() {
- $this->sitestart .= ' ' . PHP_EOL;
-
- return $this->sitestart;
+ if (BOOTSTRAP_ENABLED == 'True') {
+ $this->sitestart .= ' ' . PHP_EOL;
+ }
+ return $this->siteend;
}
function listen_injectSiteEnd() {
- $this->siteend .= '' . PHP_EOL;
- $this->siteend .= '' . PHP_EOL;
-
+ if (BOOTSTRAP_ENABLED == 'True') {
+ $this->siteend .= '' . PHP_EOL;
+ $this->siteend .= '' . PHP_EOL;
+ }
return $this->siteend;
}
-
-}
diff --git a/templates/default/includes/hooks/shop/siteWide/styleSheets.php b/templates/default/includes/hooks/shop/siteWide/styleSheets.php
index 90ed1da67..4cfb52a36 100644
--- a/templates/default/includes/hooks/shop/siteWide/styleSheets.php
+++ b/templates/default/includes/hooks/shop/siteWide/styleSheets.php
@@ -15,14 +15,44 @@ class hook_shop_siteWide_styleSheets {
public $sitestart = null;
function listen_injectSiteStart() {
- $this->sitestart .= '' . PHP_EOL;
+const BOOTSTRAP_ENABLED = 1;
+
+ if (BOOTSTRAP_ENABLED == 'True') {
+ $this->sitestart .= '' . PHP_EOL;
$this->sitestart .= '' . PHP_EOL;
$css_file = 'templates/' . TEMPLATE_SELECTION . '/static/user.css';
if (file_exists($css_file)) {
$this->sitestart .= ' ' . PHP_EOL;
}
-
+} else {
+ $this->sitestart .= '' . PHP_EOL;
+ $this->sitestart .= '';
+}
return $this->sitestart;
}
diff --git a/templates/override/static/grid.css b/templates/override/static/grid.css
new file mode 100644
index 000000000..787cf7995
--- /dev/null
+++ b/templates/override/static/grid.css
@@ -0,0 +1,16 @@
+/* Dead Simple Grid (c) 2015 Vladimir Agafonkin */
+
+.row .row { margin: 0 -1.5em; }
+.col { padding: 0 1.5em; }
+
+.row:after {
+ content: "";
+ clear: both;
+ display: table;
+}
+
+@media only screen { .col {
+ float: left;
+ width: 100%;
+ box-sizing: border-box;
+}}
diff --git a/templates/override/static/phoenix.css b/templates/override/static/phoenix.css
new file mode 100644
index 000000000..bf216a163
--- /dev/null
+++ b/templates/override/static/phoenix.css
@@ -0,0 +1,191 @@
+/* user.css ----------------------------------------------------------------- */
+/*colors:
+#882115 - tmavecervena
+#fef7dd - pozadi stranky
+*/
+body{background: #fef7dd url(data:image/gif;base64,R0lGODlhAQCPAKECAIghFf733RsbGxsbGyH5BAEKAAEALAAAAAABAI8AAAIOjI+py+0Po2Sg2ouzrgUAOw==) repeat-x}
+/*shortcuts */
+.i,.i a{color:white}/*color:inverse*/
+.ml1{margin-left:1rem}
+.u{text-decoration: underline}
+/*text-align left/right*/
+.tar,.text-right{text-align:right}
+.tal{text-align:left}
+.tac{text-align:center}
+.fl{float:left !important}
+.fr{float:right !important}
+.mt{margin-top:1rem !important}
+.mt2{margin-top:2rem !important}
+.ma{margin:auto !important}
+
+/*bootstrap fix*/
+h1 small{font-size:60%}
+.banner-left{border:1px solid #882115;padding: 10px; margin-top:1rem;max-width:195px;white-space:pre}
+.banner-left a{display:inline}
+.center{text-align:center}
+.img-fluid{max-width:100%;height:auto}
+.btn-lg{margin-top:1rem;padding:5px;font-size:16px}
+/*bootstrap fix END*/
+h4{font-size:100%;padding-top:1rem}
+/*transparentni divy:*/
+select,option,.list-group-item,.bg-white,.card{background:transparent !important;border:1px solid transparent !important}
+/*nastavuje pozadi paticky*/
+.bg-dark,.bg-dark a{background:#882115;color:white}
+select {
+ overflow:hidden;
+ padding: 0px;
+ margin: -5px -50px -5px -5px;
+}
+/*buttons*/
+input, button, textarea{background:transparent;border:1px solid #882115}
+input, button{height:30px}
+button,.btn{background:#882115;color:white;font-family:sans-serif}
+button:hover{background:#aa1f45 !important}
+* {border-radius:0 !important}
+a {color:#555}
+
+/*pageTPL*/
+.hdr input{width:80%}
+.bm-categories{font-size:120%}
+/*pageTPL END*/
+
+/*index.php*/
+/*.pure-mimified-listing img{max-width:146px;height:auto;float:left;margin-right:1rem;padding-bottom:100%}*/
+.pure-mimified-listing div{margin-bottom:2.3em;}
+h5 {font-size:1.2em;font-weight:normal;}
+
+.pure-mimified-listing p b,.radio b{font-size:130%;color:#882115}
+.pure-mimified-listing a:hover{text-decoration:none}
+.pure-mimified-listing a {background-repeat:no-repeat}
+/*index.php END*/
+
+/*product_info */
+.btn-product-info{margin-left:1em}
+.pi-img img{max-height:360px;width:auto;max-width:240px}
+.pi-options-attributes{padding-left:0.8rem !important;min-height:314px}
+.col-form-label{clear:both !important width:100% !important;}
+
+.cm-pi-name small{font-size:100% !important;padding-top: 0em !important}
+
+
+.lb img{max-height:400px;width:auto}
+.nav a{margin-right:2vw}
+.HpArticleFloatLeft {float:right !important;border:2px solid red !important}
+
+
+/*basic Template*/
+/*TODO:smazat wrapper?*/
+#bodyWrapper{min-height:70vh}
+dropdown-menu,.dropdown-menu a{background:#882115 !important}
+.nav1 a{font-size:110%; margin-right:1rem}
+/*col.leftCategories*/
+/*basic Template END*/
+
+.card img{width:auto;height:200px !important;margin-left:20px}
+
+/* @media default = XS START */
+/*header div*/
+.nav a {padding:.3rem 0;font-size:120%;}
+.hdr div:nth-child(1){margin-top:20px}
+.hdr div:nth-child(2){margin-top:38px}
+.l a{
+ display:block;
+ width:288px;
+ height:61px;
+ background: url('/i/l1.gif');
+}
+/*.pure-mimified-listing div:nth-child() background-position:0 0px;
+.pure-mimified-listing div:nth-child(3) background-position:0 -230px;
+.pure-mimified-listing div:nth-child() background-position:0 -460px;
+.pure-mimified-listing div:nth-child() background-position:0 -690px;*/
+/* @media default END */
+
+
+
+/*radio*************************************************/
+/* The container */
+.radio {
+ display: block;
+ position: relative;
+ padding-left: 10px;
+ cursor: pointer;
+/* font-size: 22px;*/
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.radio label{margin-bottom:7px;display:block}
+
+/* Hide the browser's default radio button */
+.radio input {
+ position: absolute;
+ opacity: 0;
+ cursor: pointer;
+}
+
+/* Create a custom radio button */
+.radio i {
+ position: relative;
+ top: 4px;
+ left: -8px;
+ height: 16px;
+ width: 16px;
+ background-color: #ccc;
+ border-radius: 0%;
+ display:block;
+ float:left;
+}
+/* Create the indicator (the dot/circle - hidden when not checked) */
+.radio i:after {
+ content: "";
+ position: absolute;
+ display: none;
+}
+
+/* Show the indicator (dot/circle) when checked */
+.radio input:checked ~ i:after {
+ display: block;
+}
+/* Style the indicator (dot/circle) */
+.radio i:after {
+ top: 4px;
+ left: 4px;
+ width: 8px;
+ height: 8px;
+ border-radius: 0%;
+ background: #882115;
+}
+/*radio END*/
+
+/*pagination*/
+.pagination {
+ display: -ms-flexbox;
+ display: flex;
+ padding-left: 0;
+ list-style: none;
+}
+
+.page-link {
+
+ position: relative;
+ display: block;
+ border: 1px solid gray;
+/* width:30px;*/
+ height:40px;
+ text-align:center;
+ font-size:200;
+ padding:8px 20px;
+ text-align:center;
+}
+
+.page-link{background:transparent;font-weight:bold}
+.active a {background:#882115;color:white}
+
+/*pagination END*/
+
+/*bootstrap fuckup form*/
+.BtnCart button,.BtnCart input{ margin-right:10px;padding:2px 10px}
+.BtnCart input, .BtnCart div{float:left;height:30px}
+.list-group-item{display:block}
+/*bootstrap fuckup form END*/
diff --git a/templates/override/static/queries.css b/templates/override/static/queries.css
new file mode 100644
index 000000000..4c93092e7
--- /dev/null
+++ b/templates/override/static/queries.css
@@ -0,0 +1,32 @@
+ .container { max-width: 1160px; }
+
+ /* you only need width to set up columns; all columns are 100%-width by default, so we start
+ from a one-column mobile layout and gradually improve it according to available screen space */
+
+ /*mobile first=default*/
+/* p, ul { font-size: 0.875em; }*/
+
+ .nav a:nth-child(1){display:inline-block;}
+ .nav a:not(:first-child){display:none;}
+ @media only screen and (min-width: 468px) {
+ .feature, .info, .c50 { width: 50%; }
+ .c33 { width: 33.33%; }
+ .c66 { width: 66.66%; }
+ }
+
+ @media only screen and (min-width: 760px) {
+ .content { width: 71.00%; }
+ .sidebar { width: 29.00%; }
+ .info { width: 100%; }
+ .pure-mimified-listing div {float:none }
+ .nav a:nth-child(n+2){display:inline-block;}
+ .nav a:nth-child(1){display:none;}
+ }
+
+ @media only screen and (min-width: 980px) {
+/* p, ul {font-size: 1.000em;}*/
+ .content { width: 74%; } /* 7/12 */
+ .sidebar { width: 26%; } /* 5/12 */
+ .info { width: 50%; }
+ .pure-mimified-listing div { width: 50%;float:left }
+ }
diff --git a/templates/override/static/screen.css b/templates/override/static/screen.css
new file mode 100644
index 000000000..d5260ec5f
--- /dev/null
+++ b/templates/override/static/screen.css
@@ -0,0 +1,102 @@
+* {
+ box-sizing: border-box;
+}
+body {
+ margin: 0;
+ font-family:Georgia, 'Times New Roman', Times, serif;
+ color: #222;
+font-size:16px; line-height:20px;
+/* font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;*/
+}
+a {
+ color: #333;
+ text-decoration:none;
+ outline: 0;
+
+}
+a:hover{
+text-decoration:underline
+}
+h1 {
+ font-size: 1.4em;
+ line-height:1;
+ margin-top: 0;
+}
+h2 {
+ font-size: 1.2em;
+}
+h2, h3, h4 {
+ margin-top: 1em;
+}
+h2, h3, h4 {
+ margin-bottom: 0.5em;
+}
+
+p, ul {
+ line-height: 1.5;
+ margin: 0 0 .2em;
+ hyphens: auto;
+}
+p a:link {
+ text-decoration:underline !important
+}
+code {
+ font-size: 1.2727em;
+ color: #777;
+}
+iframe {
+ border: 0;
+ overflow: hidden;
+}
+
+.container {
+ margin: 0 auto;
+/* max-width: 90em;*/
+ padding: 1em 0;
+}
+
+.footer {
+ padding-top: 1.5em;
+}
+.desc {
+ color: #888;
+}
+/*.intro { border-bottom: 1px dotted #bbb; padding-bottom: 1.5em;}*/
+/*.social { border-top: 1px dotted #bbb; padding-top: 1.5em;}*/
+
+/* minor responsive adjustments */
+
+/*.footer { border-top: 1px dotted #aaa;}*/
+.content {
+ margin-bottom: 1.5em;
+}
+
+@media only screen and (min-width: 34em) {
+ .container {
+ padding: 1em;
+ }
+ h1 {
+ font-size: 1.5em;
+ }
+ h2 {
+ font-size: 1.3em;
+ }
+}
+
+/*PureHTML added:START*/
+ul {
+/* list-style-type: none;*/
+ margin: 0;
+ padding: 0;
+}
+.sidebar a {
+ display:block;
+ font-size:110%;
+ margin-bottom:.5em;
+}
+input,button{vertical-align:middle}
+ul,ol{ margin:0; padding: 0 0 0 7px;}
+/*NO padding-right!*/
+.Npr { padding-right:0; }
+/*NO padding-bottom!*/
+.Npb{ padding-bottom:0; }
diff --git a/templates/override/static/user.css b/templates/override/static/user.css
new file mode 100644
index 000000000..69cd0b0d7
--- /dev/null
+++ b/templates/override/static/user.css
@@ -0,0 +1,3 @@
+/* user.css ----------------------------------------------------------------- */
+/* Place here Bootstrap tpl specific css styles
+ */
From a13ee3fce594155dea6a7c9dc0280fd85c9e1f2b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?V=C3=ADt=C4=9Bzslav=20Dvo=C5=99=C3=A1k?=
Date: Sun, 30 May 2021 15:14:38 +0200
Subject: [PATCH 10/29] Debian package files
---
debian/changelog | 11 +++
debian/conf/lighttpd.conf | 12 +++
debian/conf/phoenix-cart.conf | 24 ++++++
debian/control | 71 ++++++++++++++++
debian/files | 4 +
debian/phoenix-cart-admin.dirs | 1 +
debian/phoenix-cart-admin.install | 0
debian/phoenix-cart-admin.png | Bin 0 -> 33289 bytes
debian/phoenix-cart-installer.dirs | 2 +
debian/phoenix-cart-installer.png | Bin 0 -> 31831 bytes
debian/phoenix-cart-installer.postinst | 11 +++
debian/phoenix-cart-installer.prerm | 11 +++
debian/phoenix-cart.config | 17 ++++
debian/phoenix-cart.dirs | 1 +
debian/phoenix-cart.install | 3 +
debian/phoenix-cart.png | Bin 0 -> 28193 bytes
debian/phoenix-cart.postinst | 96 +++++++++++++++++++++
debian/phoenix-cart.postrm | 110 +++++++++++++++++++++++++
debian/phoenix-cart.prerm | 13 +++
debian/po/cs.po | 105 +++++++++++++++++++++++
debian/po/templates.pot | 32 +++++++
debian/rules | 41 +++++++++
debian/source/format | 1 +
debian/templates | 6 ++
24 files changed, 572 insertions(+)
create mode 100644 debian/changelog
create mode 100644 debian/conf/lighttpd.conf
create mode 100644 debian/conf/phoenix-cart.conf
create mode 100644 debian/control
create mode 100644 debian/files
create mode 100644 debian/phoenix-cart-admin.dirs
create mode 100644 debian/phoenix-cart-admin.install
create mode 100644 debian/phoenix-cart-admin.png
create mode 100644 debian/phoenix-cart-installer.dirs
create mode 100644 debian/phoenix-cart-installer.png
create mode 100755 debian/phoenix-cart-installer.postinst
create mode 100755 debian/phoenix-cart-installer.prerm
create mode 100755 debian/phoenix-cart.config
create mode 100644 debian/phoenix-cart.dirs
create mode 100644 debian/phoenix-cart.install
create mode 100644 debian/phoenix-cart.png
create mode 100755 debian/phoenix-cart.postinst
create mode 100755 debian/phoenix-cart.postrm
create mode 100755 debian/phoenix-cart.prerm
create mode 100644 debian/po/cs.po
create mode 100644 debian/po/templates.pot
create mode 100755 debian/rules
create mode 100644 debian/source/format
create mode 100644 debian/templates
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 000000000..13b678a58
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,11 @@
+phoenix-cart (1.0.8.3) UNRELEASED; urgency=medium
+
+ * repack 2
+
+ -- CyberVitexus Sun, 30 May 2021 12:47:28 +0200
+
+phoenix-cart (1.0.7.2) experimental; urgency=medium
+
+ * Initial Packaging
+
+ -- CyberVitexus Sat, 01 Aug 2020 17:17:23 +0200
diff --git a/debian/conf/lighttpd.conf b/debian/conf/lighttpd.conf
new file mode 100644
index 000000000..578e3a810
--- /dev/null
+++ b/debian/conf/lighttpd.conf
@@ -0,0 +1,12 @@
+# Alias for phoenix-cart directory
+alias.url += (
+ "/phoenix-cart" => "/usr/share/phoenix-cart",
+)
+
+# Disallow access to libraries
+$HTTP["url"] =~ "^/phoenix-cart/templates" {
+ url.access-deny = ( "" )
+}
+$HTTP["url"] =~ "^/phoenix-cart/libraries" {
+ url.access-deny = ( "" )
+}
diff --git a/debian/conf/phoenix-cart.conf b/debian/conf/phoenix-cart.conf
new file mode 100644
index 000000000..736e4095e
--- /dev/null
+++ b/debian/conf/phoenix-cart.conf
@@ -0,0 +1,24 @@
+# phoenix-cart default Apache configuration
+
+Alias /phoenix-cart /usr/share/phoenix-cart
+
+
+ Options SymLinksIfOwnerMatch
+ DirectoryIndex index.php
+
+ # limit libapache2-mod-php to files and directories necessary by pma
+
+ php_admin_value upload_tmp_dir /var/lib/phoenix-cart/tmp
+ php_admin_value open_basedir /usr/share/phoenix-cart/:/etc/phoenix-cart/:/var/lib/phoenix-cart/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phoenix-cart/:/usr/share/php/phpseclib/:/usr/share/php/phoenix-cart/:/usr/share/php/Symfony/:/usr/share/php/Twig/:/usr/share/php/Twig-Extensions/:/usr/share/php/ReCaptcha/:/usr/share/php/Psr/Container/:/usr/share/php/Psr/Cache/:/usr/share/php/Psr/Log/:/usr/share/php/Psr/SimpleCache/
+
+
+
+
+# Disallow web access to directories that don't need it
+
+ Require all denied
+
+
+ Require all denied
+
+
diff --git a/debian/control b/debian/control
new file mode 100644
index 000000000..5737dbc75
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,71 @@
+Source: phoenix-cart
+Maintainer: "Vítězslav Dvořák"
+Section: web
+Priority: optional
+Standards-Version: 4.5.0
+Build-Depends: debhelper-compat (= 12),
+ pkg-php-tools (>= 1.7~),
+ locales-all,
+ php-mysql,
+ php-json,
+ php-mbstring,
+ php-xml,
+ php-bz2,
+ php-zip,
+ php-gd,
+ php-tcpdf,
+ po-debconf
+Homepage: https://github.com/gburton/phoenix-cart
+Vcs-Browser: https://github.com/gburton/phoenix-cart
+Vcs-Git: git@github.com:gburton/phoenix-cart.git
+Rules-Requires-Root: no
+
+Package: phoenix-cart
+Architecture: all
+Depends: php,
+ php-cli,
+ php-mysql | php-mysqli,
+ php-json,
+ php-mbstring,
+ php-xml,
+ ${misc:Depends},
+ ${sphinxdoc:Depends},
+ sensible-utils,
+ dbconfig-mysql | dbconfig-no-thanks | dbconfig-common (<< 2.0.0),
+ php-phpseclib (>= 2.0),
+ ${phpcomposer:Debian-require},
+ libjs-openlayers,
+ ucf (>= 0.28)
+Recommends: apache2 | lighttpd | httpd,
+ php-curl,
+ php-gd,
+ php-bz2,
+ php-zip,
+ php-tcpdf
+Suggests: default-mysql-server | virtual-mysql-server,
+ www-browser,
+ php-recode,
+ ${phpcomposer:Debian-suggest}
+Description: powerful ecommerce shop
+ Phoenix is ready to use out of the box, putting you online and in full control
+ of your business right from the start. Your customers will love the modern,
+ responsive design that will not only make your website look great on all
+ mobile viewing devices but also perform at speed whilst giving you the power
+ to create an individual and unique look to your shop with just a few clicks!
+ Phoenix is packed with many first class utilities as standard but its modular
+ software design lets you add many more with no programming skills required.
+ The full suite of product, shipping and payment options included will let you
+ sell thousands of products in any number of categories worldwide in any
+ currency or language providing a seamless customer experience.
+ Phoenix is the official Community Version of osCommerce.
+
+Package: phoenix-cart-admin
+Architecture: all
+Depends: phoenix-cart
+Description: powerful ecommerce shop web administration
+
+Package: phoenix-cart-installer
+Architecture: all
+Depends: phoenix-cart-admin
+Description: powerful ecommerce shop web installer
+
diff --git a/debian/files b/debian/files
new file mode 100644
index 000000000..f9f648c59
--- /dev/null
+++ b/debian/files
@@ -0,0 +1,4 @@
+phoenix-cart-admin_1.0.8.3_all.deb web optional
+phoenix-cart-installer_1.0.8.3_all.deb web optional
+phoenix-cart_1.0.8.3_all.deb web optional
+phoenix-cart_1.0.8.3_amd64.buildinfo web optional
diff --git a/debian/phoenix-cart-admin.dirs b/debian/phoenix-cart-admin.dirs
new file mode 100644
index 000000000..e2a4156bd
--- /dev/null
+++ b/debian/phoenix-cart-admin.dirs
@@ -0,0 +1 @@
+/usr/share/phoenix-cart/admin
diff --git a/debian/phoenix-cart-admin.install b/debian/phoenix-cart-admin.install
new file mode 100644
index 000000000..e69de29bb
diff --git a/debian/phoenix-cart-admin.png b/debian/phoenix-cart-admin.png
new file mode 100644
index 0000000000000000000000000000000000000000..cc23e01ccd3bb7586615b2b2cdf22ac5e838490a
GIT binary patch
literal 33289
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
literal 0
HcmV?d00001
diff --git a/debian/phoenix-cart-installer.dirs b/debian/phoenix-cart-installer.dirs
new file mode 100644
index 000000000..9809bdfe4
--- /dev/null
+++ b/debian/phoenix-cart-installer.dirs
@@ -0,0 +1,2 @@
+/usr/share/phoenix-cart/admin
+
diff --git a/debian/phoenix-cart-installer.png b/debian/phoenix-cart-installer.png
new file mode 100644
index 0000000000000000000000000000000000000000..69e87d5d59cba8eedf14d80ab1b317c49601fbe8
GIT binary patch
literal 31831
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