Version Description
- Changes in all versions:
- New. modern toolbar with handy buttons, dropdown lists and other elements that have been redesigned and rearranged in a new smarter way.
- New. Refreshed colors of labels, icons, buttons and other UI elements for modern and clear look.
- New. Rearranged content of booking details in unified way for all Booking Calendar versions.
- New. Instant showing booking listing, using ajax without page reloading when filtering search results. Single page app design.
- New. Immediate searching of bookings for a specific keyword. Reservations are displayed just after entering a specific keyword without other user actions.
- New. Highlighting certain keywords in booking details to make it easier to find specific data when entering keywords.
- New. Saving any choice of filter options (select-boxes and other UI toolbar elements), toolbar selection or user options personally for each user. User will see last configured search filter parameters each time, when open admin panel.
- New. Keeping last selected filter or actions toolbar, during each time, when user open booking admin panel. No need to define default state of toolbars in the settings.
- New. User options toolbar, where possible to select "Emails sending" on specific actions or "Show notes" by default (in paid versions).
- New. Print feature is available in the Free version.
- New. Print layout displaying the exact content of the booking listing page.
- New. Ability to print any selected bookings**. Possibility to print all bookings / selected bookings / specific single booking.
- New. Added 2 new filter options Check in today and Check out today to display bookings on the booking list page
- New. Ability to define and save the locale for each specific booking. This locale is saved and will exist when the following pages are loaded. Previously such option was not saved and was available only in paid versions.
- New. Show action buttons when such actions can be applied to specific bookings. You need to select bookings to display additional action buttons like "Confirm" or "Reject", etc...
- Improvement. Smarter structure of request parameters escaping.
- Lots of other improvements and fixes...
- Changes in Personal / Business Small / Business Medium / Business Large / MultiUser versions:
- New. Export CSV functionality. Ability to enter field names to skip from the export.
- New. Selection export of single or all pages and CSV column separator in pop-up window.
Download this release
Release Info
Developer | wpdevelop |
Plugin | Booking Calendar |
Version | 9.2 |
Comparing to | |
See all releases |
Code changes from version 9.1.4 to 9.2
- core/admin/api-settings.php +53 -4
- core/admin/page-bookings.php +10 -0
- core/admin/page-form-free.php +3 -3
- core/admin/page-form-timeslots.php +1 -1
- core/admin/wpbc-sql.php +10 -2
- core/admin/wpbc-toolbars.php +37 -17
- core/any/js/admin-support.js +13 -4
- core/class/wpbc-class-welcome.php +286 -134
- core/lib/wpbc-ajax.php +2 -2
- core/sync/wpbc-gcal-class.php +8 -3
- core/sync/wpbc-gcal.php +1 -1
- core/wpbc-activation.php +5 -2
- core/wpbc-constants.php +1 -8
- core/wpbc-include.php +2 -1
- core/wpbc-js.php +1 -1
- core/wpbc.php +12 -0
- includes/_listing_css_js/listing_ui.css +482 -0
- includes/_listing_css_js/listing_ui.js +188 -0
- includes/_listing_css_js/listing_ui.php +78 -0
- includes/_pagination/pagination.css +53 -0
- includes/_pagination/pagination.js +35 -0
- includes/_pagination/pagination.php +318 -0
- includes/_toolbar_ui/_out/toolbar_ui.css +993 -0
- includes/_toolbar_ui/_out/toolbar_ui.js +97 -0
- includes/_toolbar_ui/_out/toolbar_ui.min.css +2 -0
- includes/_toolbar_ui/_out/toolbar_ui.min.js +2 -0
- includes/_toolbar_ui/_src/toolbar_ui.css +889 -0
- includes/_toolbar_ui/_src/toolbar_ui.js +114 -0
- includes/_toolbar_ui/toolbar_ui.php +3652 -0
- includes/index.php +2 -0
- includes/page-bookings/_out/bookings__actions.js +512 -0
- includes/page-bookings/_out/bookings__actions.min.js +2 -0
- includes/page-bookings/_out/bookings__hooks.js +143 -0
- includes/page-bookings/_out/bookings__hooks.min.js +2 -0
- includes/page-bookings/_out/bookings__listing.js +502 -0
- includes/page-bookings/_out/bookings__listing.min.js +2 -0
- includes/page-bookings/_src/bookings__actions.js +589 -0
- includes/page-bookings/_src/bookings__hooks.js +179 -0
- includes/page-bookings/_src/bookings__listing.js +534 -0
- includes/page-bookings/bookings__actions.php +1985 -0
core/admin/api-settings.php
CHANGED
@@ -45,8 +45,8 @@ class WPBC_Settings_API_General extends WPBC_Settings_API {
|
|
45 |
Â
$this->fields = array();
|
46 |
Â
|
47 |
Â
$default_options_values = wpbc_get_default_options();
|
48 |
-
|
49 |
-
|
50 |
Â
// <editor-fold defaultstate="collapsed" desc=" C a l e n d a r S e c t i o n " >
|
51 |
Â
|
52 |
Â
// Calendar Skin /////////////////////////////////////////////////////
|
@@ -647,7 +647,7 @@ class WPBC_Settings_API_General extends WPBC_Settings_API {
|
|
647 |
Â
|
648 |
Â
|
649 |
Â
// <editor-fold defaultstate="collapsed" desc=" Booking Admin Panel " >
|
650 |
-
|
651 |
Â
$field_options = array(
|
652 |
Â
'vm_listing' => __('Bookings Listing' ,'booking')
|
653 |
Â
, 'vm_calendar' => __('Calendar Overview' ,'booking')
|
@@ -662,6 +662,19 @@ class WPBC_Settings_API_General extends WPBC_Settings_API {
|
|
662 |
Â
);
|
663 |
Â
|
664 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
665 |
Â
//Default booking resources
|
666 |
Â
$this->fields = apply_filters( 'wpbc_settings_booking_listing_br_default_count', $this->fields, $default_options_values );
|
667 |
Â
|
@@ -1260,7 +1273,43 @@ class WPBC_Settings_API_General extends WPBC_Settings_API {
|
|
1260 |
Â
public function enqueue_js( $menu_slug, $active_page_tab, $active_page_subtab ) {
|
1261 |
Â
|
1262 |
Â
$js_script = '';
|
1263 |
-
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
1264 |
Â
// Hide Legend items
|
1265 |
Â
$js_script .= "
|
1266 |
Â
if ( ! jQuery('#set_gen_booking_is_show_legend').is(':checked') ) {
|
45 |
Â
$this->fields = array();
|
46 |
Â
|
47 |
Â
$default_options_values = wpbc_get_default_options();
|
48 |
+
|
49 |
+
|
50 |
Â
// <editor-fold defaultstate="collapsed" desc=" C a l e n d a r S e c t i o n " >
|
51 |
Â
|
52 |
Â
// Calendar Skin /////////////////////////////////////////////////////
|
647 |
Â
|
648 |
Â
|
649 |
Â
// <editor-fold defaultstate="collapsed" desc=" Booking Admin Panel " >
|
650 |
+
|
651 |
Â
$field_options = array(
|
652 |
Â
'vm_listing' => __('Bookings Listing' ,'booking')
|
653 |
Â
, 'vm_calendar' => __('Calendar Overview' ,'booking')
|
662 |
Â
);
|
663 |
Â
|
664 |
Â
|
665 |
+
|
666 |
+
|
667 |
+
if ( WPBC_EXIST_NEW_BOOKING_LISTING ) {
|
668 |
+
$this->fields['booking_is_use_old_booking_listing'] = array(
|
669 |
+
'type' => 'checkbox'
|
670 |
+
, 'default' => $default_options_values['booking_is_use_old_booking_listing'] //'On'
|
671 |
+
, 'title' => __('Use old Booking Listing' ,'booking')
|
672 |
+
, 'label' => __( 'Check this box to use old Booking Listing admin panel.', 'booking' ) . ' <strong>' . __( 'Deprecated', 'booking' ) . '!</strong>'
|
673 |
+
, 'description' => ''
|
674 |
+
, 'group' => 'booking_listing'
|
675 |
+
);
|
676 |
+
}
|
677 |
+
|
678 |
Â
//Default booking resources
|
679 |
Â
$this->fields = apply_filters( 'wpbc_settings_booking_listing_br_default_count', $this->fields, $default_options_values );
|
680 |
Â
|
1273 |
Â
public function enqueue_js( $menu_slug, $active_page_tab, $active_page_subtab ) {
|
1274 |
Â
|
1275 |
Â
$js_script = '';
|
1276 |
+
|
1277 |
+
if ( WPBC_EXIST_NEW_BOOKING_LISTING ) {
|
1278 |
+
// Hide or Show Booking Listing elements, depends on from checkbox selection
|
1279 |
+
$js_script .= " jQuery('#set_gen_booking_is_use_old_booking_listing').on( 'change', function(){
|
1280 |
+
if ( this.checked ) {
|
1281 |
+
jQuery('.wpbc_tr_set_gen_hr_booking_listing_before_view_days_num').removeClass('hidden_items');
|
1282 |
+
jQuery('.wpbc_tr_set_gen_booking_default_toolbar_tab').removeClass('hidden_items');
|
1283 |
+
jQuery('.wpbc_tr_set_gen_booking_num_per_page').removeClass('hidden_items');
|
1284 |
+
jQuery('.wpbc_tr_set_gen_booking_sort_order').removeClass('hidden_items');
|
1285 |
+
jQuery('.wpbc_tr_set_gen_hr_booking_listing_before_csv_export_separator').removeClass('hidden_items');
|
1286 |
+
jQuery('.wpbc_tr_set_gen_booking_csv_export_separator').removeClass('hidden_items');
|
1287 |
+
jQuery('.wpbc_tr_set_gen_booking_send_emails_off_listing').removeClass('hidden_items');
|
1288 |
+
jQuery('.wpbc_tr_set_gen_booking_listing_show_notes').removeClass('hidden_items');
|
1289 |
+
} else {
|
1290 |
+
jQuery('.wpbc_tr_set_gen_hr_booking_listing_before_view_days_num').addClass('hidden_items');
|
1291 |
+
jQuery('.wpbc_tr_set_gen_booking_default_toolbar_tab').addClass('hidden_items');
|
1292 |
+
jQuery('.wpbc_tr_set_gen_booking_num_per_page').addClass('hidden_items');
|
1293 |
+
jQuery('.wpbc_tr_set_gen_booking_sort_order').addClass('hidden_items');
|
1294 |
+
jQuery('.wpbc_tr_set_gen_hr_booking_listing_before_csv_export_separator').addClass('hidden_items');
|
1295 |
+
jQuery('.wpbc_tr_set_gen_booking_csv_export_separator').addClass('hidden_items');
|
1296 |
+
jQuery('.wpbc_tr_set_gen_booking_send_emails_off_listing').addClass('hidden_items');
|
1297 |
+
jQuery('.wpbc_tr_set_gen_booking_listing_show_notes').addClass('hidden_items');
|
1298 |
+
}
|
1299 |
+
} ); ";
|
1300 |
+
$js_script .= "
|
1301 |
+
if ( ! jQuery('#set_gen_booking_is_use_old_booking_listing').is(':checked') ) {
|
1302 |
+
jQuery('.wpbc_tr_set_gen_hr_booking_listing_before_view_days_num').addClass('hidden_items');
|
1303 |
+
jQuery('.wpbc_tr_set_gen_booking_default_toolbar_tab').addClass('hidden_items');
|
1304 |
+
jQuery('.wpbc_tr_set_gen_booking_num_per_page').addClass('hidden_items');
|
1305 |
+
jQuery('.wpbc_tr_set_gen_booking_sort_order').addClass('hidden_items');
|
1306 |
+
jQuery('.wpbc_tr_set_gen_hr_booking_listing_before_csv_export_separator').addClass('hidden_items');
|
1307 |
+
jQuery('.wpbc_tr_set_gen_booking_csv_export_separator').addClass('hidden_items');
|
1308 |
+
jQuery('.wpbc_tr_set_gen_booking_send_emails_off_listing').addClass('hidden_items');
|
1309 |
+
jQuery('.wpbc_tr_set_gen_booking_listing_show_notes').addClass('hidden_items');
|
1310 |
+
}
|
1311 |
+
";
|
1312 |
+
}
|
1313 |
Â
// Hide Legend items
|
1314 |
Â
$js_script .= "
|
1315 |
Â
if ( ! jQuery('#set_gen_booking_is_show_legend').is(':checked') ) {
|
core/admin/page-bookings.php
CHANGED
@@ -151,6 +151,16 @@ function wpbc_define_listing_page_parameters( $page_tag ) {
|
|
151 |
Â
return;
|
152 |
Â
}
|
153 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
154 |
Â
// Get saved filters set, (if its not set in request yet), like "tab" & "view_mode" and overload $_REQUEST
|
155 |
Â
wpbc_set_default_saved_params_to_request_for_booking_listing( 'default' );
|
156 |
Â
}
|
151 |
Â
return;
|
152 |
Â
}
|
153 |
Â
|
154 |
+
if (
|
155 |
+
( WPBC_EXIST_NEW_BOOKING_LISTING )
|
156 |
+
&& ( 'On' != get_bk_option( 'booking_is_use_old_booking_listing' ) )
|
157 |
+
) {
|
158 |
+
$booking_default_view_mode = wpbc_get_default_saved_view_mode_for_wpbc_page();
|
159 |
+
if ( ! isset( $_REQUEST['view_mode'] ) ) {
|
160 |
+
$_REQUEST['view_mode'] = $booking_default_view_mode; // Set to REQUEST
|
161 |
+
}
|
162 |
+
}
|
163 |
+
|
164 |
Â
// Get saved filters set, (if its not set in request yet), like "tab" & "view_mode" and overload $_REQUEST
|
165 |
Â
wpbc_set_default_saved_params_to_request_for_booking_listing( 'default' );
|
166 |
Â
}
|
core/admin/page-form-free.php
CHANGED
@@ -1430,8 +1430,8 @@ class WPBC_Page_SettingsFormFieldsFree extends WPBC_Page_Structure {
|
|
1430 |
Â
|
1431 |
Â
$('.wpbc_input_table').on( 'focus click', 'input', function( e ) {
|
1432 |
Â
|
1433 |
-
$this_table = $(this).closest('table');
|
1434 |
-
$this_row = $(this).closest('tr');
|
1435 |
Â
|
1436 |
Â
if ( ( e.type == 'focus' && hasFocus != $this_row.index() ) || ( e.type == 'click' && $(this).is(':focus') ) ) {
|
1437 |
Â
|
@@ -1568,7 +1568,7 @@ class WPBC_Page_SettingsFormFieldsFree extends WPBC_Page_Structure {
|
|
1568 |
Â
var field_type_array = [ 'text', 'textarea', 'select', 'checkbox' , 'rangetime']; //FixIn: TimeFreeGenerator
|
1569 |
Â
var field_type;
|
1570 |
Â
|
1571 |
-
for (i = 0; i < field_type_array.length; i++) {
|
1572 |
Â
field_type = field_type_array[i];
|
1573 |
Â
|
1574 |
Â
if ( ! jQuery('#' + field_type + '_field_generator_name').is(':disabled') ){ //FixIn: TimeFreeGenerator
|
1430 |
Â
|
1431 |
Â
$('.wpbc_input_table').on( 'focus click', 'input', function( e ) {
|
1432 |
Â
|
1433 |
+
var $this_table = $(this).closest('table');
|
1434 |
+
var $this_row = $(this).closest('tr');
|
1435 |
Â
|
1436 |
Â
if ( ( e.type == 'focus' && hasFocus != $this_row.index() ) || ( e.type == 'click' && $(this).is(':focus') ) ) {
|
1437 |
Â
|
1568 |
Â
var field_type_array = [ 'text', 'textarea', 'select', 'checkbox' , 'rangetime']; //FixIn: TimeFreeGenerator
|
1569 |
Â
var field_type;
|
1570 |
Â
|
1571 |
+
for (var i = 0; i < field_type_array.length; i++) {
|
1572 |
Â
field_type = field_type_array[i];
|
1573 |
Â
|
1574 |
Â
if ( ! jQuery('#' + field_type + '_field_generator_name').is(':disabled') ){ //FixIn: TimeFreeGenerator
|
core/admin/page-form-timeslots.php
CHANGED
@@ -636,7 +636,7 @@ function wpbc_timeslots_table_config_js() {
|
|
636 |
Â
|
637 |
Â
// Update A C T I O N for Delete buttons :: firstly Remove all "Delete" actions and then Add "Delete" button actions.
|
638 |
Â
jQuery( '.wpbc_input_table .delete_time_bk_link' ).off( 'click' );
|
639 |
-
is_show_confirm = false;
|
640 |
Â
wpbc_activate_table_row_delete( '.wpbc_input_table .delete_time_bk_link', is_show_confirm );
|
641 |
Â
|
642 |
Â
});
|
636 |
Â
|
637 |
Â
// Update A C T I O N for Delete buttons :: firstly Remove all "Delete" actions and then Add "Delete" button actions.
|
638 |
Â
jQuery( '.wpbc_input_table .delete_time_bk_link' ).off( 'click' );
|
639 |
+
var is_show_confirm = false;
|
640 |
Â
wpbc_activate_table_row_delete( '.wpbc_input_table .delete_time_bk_link', is_show_confirm );
|
641 |
Â
|
642 |
Â
});
|
core/admin/wpbc-sql.php
CHANGED
@@ -31,8 +31,16 @@ function wpbc_get_default_saved_view_mode_for_wpbc_page() {
|
|
31 |
Â
|
32 |
Â
//FixIn: 9.2.1
|
33 |
Â
if ( ! in_array( $booking_default_view_mode, array( 'vm_calendar', 'vm_listing', 'vm_booking_listing' ) ) )
|
34 |
-
$booking_default_view_mode = 'vm_listing';
|
35 |
-
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
36 |
Â
return $booking_default_view_mode; // 'vm_calendar' / 'vm_listing' ;
|
37 |
Â
}
|
38 |
Â
|
31 |
Â
|
32 |
Â
//FixIn: 9.2.1
|
33 |
Â
if ( ! in_array( $booking_default_view_mode, array( 'vm_calendar', 'vm_listing', 'vm_booking_listing' ) ) )
|
34 |
+
$booking_default_view_mode = 'vm_listing';
|
35 |
+
|
36 |
+
if (
|
37 |
+
( WPBC_EXIST_NEW_BOOKING_LISTING )
|
38 |
+
&& ( 'On' != get_bk_option( 'booking_is_use_old_booking_listing' ) )
|
39 |
+
&& ( 'vm_listing' == $booking_default_view_mode )
|
40 |
+
) {
|
41 |
+
$booking_default_view_mode = 'vm_booking_listing';
|
42 |
+
}
|
43 |
+
|
44 |
Â
return $booking_default_view_mode; // 'vm_calendar' / 'vm_listing' ;
|
45 |
Â
}
|
46 |
Â
|
core/admin/wpbc-toolbars.php
CHANGED
@@ -463,25 +463,35 @@ function wpbc_toolbar_btn__view_mode() {
|
|
463 |
Â
|
464 |
Â
$params = array();
|
465 |
Â
|
466 |
-
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
467 |
Â
$params['btn_vm_listing_new'] = array(
|
468 |
Â
'title' => ''
|
469 |
Â
, 'hint' => array( 'title' => __('Booking Listing' ,'booking') , 'position' => 'top' )
|
470 |
-
, 'selected' =>
|
471 |
Â
, 'link' => wpbc_get_bookings_url('booking-listing', true ) . '&view_mode=vm_booking_listing'
|
472 |
Â
, 'icon' => ''
|
473 |
Â
, 'font_icon' => 'wpbc-bi-collection'//'glyphicon glyphicon-align-justify'
|
474 |
Â
);
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
475 |
Â
}
|
476 |
Â
|
477 |
-
$params['btn_vm_listing'] = array(
|
478 |
-
'title' => ''
|
479 |
-
, 'hint' => array( 'title' => __('Booking Listing' ,'booking') , 'position' => 'top' )
|
480 |
-
, 'selected' => ( $selected_view_mode == 'vm_listing' ) ? true : false
|
481 |
-
, 'link' => $bk_admin_url . '&view_mode=vm_listing'
|
482 |
-
, 'icon' => ''
|
483 |
-
, 'font_icon' => ( function_exists( 'wpbc_ajx_get__request_params__names_default' ) ) ? 'wpbc-bi-card-list' : 'wpbc-bi-collection'//'glyphicon glyphicon-align-justify'
|
484 |
-
);
|
485 |
Â
|
486 |
Â
|
487 |
Â
$bk_admin_url = wpbc_get_params_in_url( wpbc_get_bookings_url( false ) , array() // Exclude Value of this parameter
|
@@ -2374,7 +2384,7 @@ function wpbc_datepicker_js() {
|
|
2374 |
Â
maxDate: null, //'1Y',
|
2375 |
Â
showStatus: false,
|
2376 |
Â
multiSeparator: ', ',
|
2377 |
-
closeAtTop: false,
|
2378 |
Â
firstDay:<?php echo get_bk_option( 'booking_start_day_weeek' ); ?>,
|
2379 |
Â
gotoCurrent: false,
|
2380 |
Â
hideIfNoPrevNext:true,
|
@@ -2393,11 +2403,21 @@ function wpbc_datepicker_js() {
|
|
2393 |
Â
|
2394 |
Â
/** Support CSS - datepick, etc... */
|
2395 |
Â
function wpbc_datepicker_css(){
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
2396 |
Â
?>
|
2397 |
Â
<style type="text/css">
|
2398 |
-
|
2399 |
-
|
2400 |
-
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
2401 |
Â
#datepick-div {
|
2402 |
Â
-border-radius: 3px;
|
2403 |
Â
-box-shadow: 0 0 2px #888888;
|
@@ -2405,16 +2425,16 @@ function wpbc_datepicker_css(){
|
|
2405 |
Â
-webkit-box-shadow: 0 0 2px #888888;
|
2406 |
Â
-moz-border-radius: 3px;
|
2407 |
Â
-moz-box-shadow: 0 0 2px #888888;
|
2408 |
-
width:
|
2409 |
Â
}
|
2410 |
Â
#datepick-div .datepick .datepick-days-cell a{
|
2411 |
Â
font-size: 12px;
|
2412 |
Â
}
|
2413 |
Â
#datepick-div table.datepick tr td {
|
2414 |
Â
border-top: 0 none !important;
|
2415 |
-
line-height: 24px
|
2416 |
Â
padding: 0 !important;
|
2417 |
-
width: 24px
|
2418 |
Â
}
|
2419 |
Â
#datepick-div .datepick-control {
|
2420 |
Â
font-size: 10px;
|
463 |
Â
|
464 |
Â
$params = array();
|
465 |
Â
|
466 |
+
|
467 |
+
if (
|
468 |
+
( WPBC_EXIST_NEW_BOOKING_LISTING )
|
469 |
+
&& ( 'On' != get_bk_option( 'booking_is_use_old_booking_listing' ) )
|
470 |
+
) {
|
471 |
+
|
472 |
+
$is_selected = ( ( $selected_view_mode == 'vm_booking_listing' ) || ( $selected_view_mode == 'vm_listing' ) ) ? true : false;
|
473 |
+
|
474 |
Â
$params['btn_vm_listing_new'] = array(
|
475 |
Â
'title' => ''
|
476 |
Â
, 'hint' => array( 'title' => __('Booking Listing' ,'booking') , 'position' => 'top' )
|
477 |
+
, 'selected' => $is_selected
|
478 |
Â
, 'link' => wpbc_get_bookings_url('booking-listing', true ) . '&view_mode=vm_booking_listing'
|
479 |
Â
, 'icon' => ''
|
480 |
Â
, 'font_icon' => 'wpbc-bi-collection'//'glyphicon glyphicon-align-justify'
|
481 |
Â
);
|
482 |
+
|
483 |
+
} else {
|
484 |
+
$is_selected = ( ( $selected_view_mode == 'vm_booking_listing' ) || ( $selected_view_mode == 'vm_listing' ) ) ? true : false;
|
485 |
+
$params['btn_vm_listing'] = array(
|
486 |
+
'title' => ''
|
487 |
+
, 'hint' => array( 'title' => __('Booking Listing' ,'booking') , 'position' => 'top' )
|
488 |
+
, 'selected' => $is_selected
|
489 |
+
, 'link' => $bk_admin_url . '&view_mode=vm_listing'
|
490 |
+
, 'icon' => ''
|
491 |
+
, 'font_icon' => ( function_exists( 'wpbc_ajx_get__request_params__names_default' ) ) ? 'wpbc-bi-card-list' : 'wpbc-bi-collection'//'glyphicon glyphicon-align-justify'
|
492 |
+
);
|
493 |
Â
}
|
494 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
495 |
Â
|
496 |
Â
|
497 |
Â
$bk_admin_url = wpbc_get_params_in_url( wpbc_get_bookings_url( false ) , array() // Exclude Value of this parameter
|
2384 |
Â
maxDate: null, //'1Y',
|
2385 |
Â
showStatus: false,
|
2386 |
Â
multiSeparator: ', ',
|
2387 |
+
closeAtTop: null,//!false,
|
2388 |
Â
firstDay:<?php echo get_bk_option( 'booking_start_day_weeek' ); ?>,
|
2389 |
Â
gotoCurrent: false,
|
2390 |
Â
hideIfNoPrevNext:true,
|
2403 |
Â
|
2404 |
Â
/** Support CSS - datepick, etc... */
|
2405 |
Â
function wpbc_datepicker_css(){
|
2406 |
+
|
2407 |
+
$width = 240;
|
2408 |
+
$height = 35;
|
2409 |
+
|
2410 |
Â
?>
|
2411 |
Â
<style type="text/css">
|
2412 |
+
#datepick-div .datepick-header {
|
2413 |
+
width: <?php echo $width ?>px !important;
|
2414 |
+
}
|
2415 |
+
#datepick-div .datepick-days-cell {
|
2416 |
+
height: <?php echo $height ?>px !important;
|
2417 |
+
}
|
2418 |
+
#datepick-div .datepick-control {
|
2419 |
+
display: none;
|
2420 |
+
}
|
2421 |
Â
#datepick-div {
|
2422 |
Â
-border-radius: 3px;
|
2423 |
Â
-box-shadow: 0 0 2px #888888;
|
2425 |
Â
-webkit-box-shadow: 0 0 2px #888888;
|
2426 |
Â
-moz-border-radius: 3px;
|
2427 |
Â
-moz-box-shadow: 0 0 2px #888888;
|
2428 |
+
width: <?php echo $width ?>px !important;
|
2429 |
Â
}
|
2430 |
Â
#datepick-div .datepick .datepick-days-cell a{
|
2431 |
Â
font-size: 12px;
|
2432 |
Â
}
|
2433 |
Â
#datepick-div table.datepick tr td {
|
2434 |
Â
border-top: 0 none !important;
|
2435 |
+
/*line-height: 24px;*/
|
2436 |
Â
padding: 0 !important;
|
2437 |
+
/*width: 24px;*/
|
2438 |
Â
}
|
2439 |
Â
#datepick-div .datepick-control {
|
2440 |
Â
font-size: 10px;
|
core/any/js/admin-support.js
CHANGED
@@ -118,10 +118,19 @@ function wpbc_admin_show_message( message, m_type, m_delay, is_append ){
|
|
118 |
Â
}
|
119 |
Â
|
120 |
Â
var alert_class = 'notice '; //'alert ';
|
121 |
-
if (m_type == 'error')
|
122 |
-
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
123 |
Â
if (m_type == 'info') alert_class += 'notice-info '; //'alert-info ';
|
124 |
-
if (m_type == 'success')
|
Â
|
|
Â
|
|
Â
|
|
125 |
Â
|
126 |
Â
// var ajx_working_content = '';
|
127 |
Â
// if ( is_append )
|
@@ -352,7 +361,7 @@ function wpbc_submit_client_form( submit_form, wpdev_active_locale ){
|
|
352 |
Â
var element;
|
353 |
Â
var el_type;
|
354 |
Â
|
355 |
-
for (i=0; i<count; i++) {
|
356 |
Â
element = submit_form.elements[i];
|
357 |
Â
|
358 |
Â
if ( (element.type !=='button') && (element.type !=='hidden') ) {
|
118 |
Â
}
|
119 |
Â
|
120 |
Â
var alert_class = 'notice '; //'alert ';
|
121 |
+
if (m_type == 'error'){
|
122 |
+
alert_class += 'notice-error ';
|
123 |
+
message = '<i style="margin-right: 0.5em;color: #d63638;" class="menu_icon icon-1x wpbc_icn_report_gmailerrorred"></i>' + message;
|
124 |
+
} //'alert-danger ';
|
125 |
+
if (m_type == 'warning'){
|
126 |
+
alert_class += 'notice-warning ';
|
127 |
+
message = '<i style="margin-right: 0.5em;color: #e9aa04;" class="menu_icon icon-1x wpbc_icn_warning"></i>' + message;
|
128 |
+
};
|
129 |
Â
if (m_type == 'info') alert_class += 'notice-info '; //'alert-info ';
|
130 |
+
if ( m_type == 'success' ){
|
131 |
+
alert_class += 'alert-success updated ';
|
132 |
+
message = '<i style="margin-right: 0.5em;color: #64aa45;" class="menu_icon icon-1x wpbc_icn_done_outline"></i>' + message;
|
133 |
+
}
|
134 |
Â
|
135 |
Â
// var ajx_working_content = '';
|
136 |
Â
// if ( is_append )
|
361 |
Â
var element;
|
362 |
Â
var el_type;
|
363 |
Â
|
364 |
+
for (var i=0; i<count; i++) {
|
365 |
Â
element = submit_form.elements[i];
|
366 |
Â
|
367 |
Â
if ( (element.type !=='button') && (element.type !=='hidden') ) {
|
core/class/wpbc-class-welcome.php
CHANGED
@@ -435,167 +435,319 @@ class WPBC_Welcome {
|
|
435 |
Â
</td>
|
436 |
Â
</tr>
|
437 |
Â
</table>
|
438 |
-
<?php
|
439 |
-
|
440 |
Â
|
441 |
Â
$this->maintence_section();
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
. '<li>' . wpbc_recheck_strong_symbols( '
|
460 |
-
. '<li>' . wpbc_recheck_strong_symbols( '
|
461 |
-
. '<li>' . wpbc_recheck_strong_symbols( '
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
</div
|
466 |
-
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
467 |
Â
|
468 |
Â
$this->show_separator();
|
469 |
Â
|
470 |
-
|
471 |
-
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
472 |
Â
<?php echo
|
473 |
-
|
474 |
-
|
475 |
-
. '<li>' . wpbc_recheck_strong_symbols( '**
|
476 |
-
. '<li>' . wpbc_recheck_strong_symbols( '**
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
<div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
|
490 |
Â
|
491 |
-
<img src="<?php echo $this->asset_path; ?>9.1/9.1_new_icons2.png"
|
492 |
-
style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
|
493 |
-
class="wpbc-section-image" />
|
494 |
-
<div style="font-style:italic;font-size:0.75em;padding:1em;text-align: right;">* This picture from paid version of Booking Calendar</div>
|
495 |
-
</div>
|
496 |
-
</div><?php
|
497 |
Â
|
498 |
Â
$this->show_separator();
|
499 |
Â
|
Â
|
|
500 |
Â
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
501 |
-
// 9.
|
502 |
Â
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
503 |
Â
?>
|
504 |
-
<
|
505 |
-
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
506 |
Â
|
507 |
-
|
508 |
-
<div class="col col-1" style="flex: 1 1 50%;width: 100%;">
|
509 |
-
<?php echo
|
510 |
-
'<h4>' .wpbc_recheck_strong_symbols( 'Time slots' ) . '</h4>' .
|
511 |
-
'<ul style="list-style: disc outside;padding: 20px;margin:0;">'
|
512 |
-
. '<li>' . wpbc_recheck_strong_symbols( 'Showing **time slots as dots** in calendar day cells. Modern and beautiful view of time slots within calendar days.' ) . '</li>'
|
513 |
-
. '<li>' . wpbc_recheck_strong_symbols( 'Display the **exact number** of booked **time slots** in calendar day cells. System shows **as many dots** (time slots) as many time slots have been booked for a particular day. Your customers can see occupancy by time interval from the beginning of the calendar view.' ) . '</li>'
|
514 |
-
. '<li>' . wpbc_recheck_strong_symbols( '**Improvement** CSS styling in all calendar skins. If you have customized a calendar skin before, check the changes in the new calendar skins marked with a number: 8.9.4.13 ' ) . '</li>'
|
515 |
-
. '</ul>';
|
516 |
-
?>
|
517 |
-
</div>
|
518 |
-
<div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
|
519 |
Â
|
520 |
-
|
521 |
-
style="
|
522 |
-
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
523 |
Â
|
524 |
-
|
525 |
-
</div><?php
|
526 |
Â
|
527 |
-
|
Â
|
|
Â
|
|
Â
|
|
528 |
Â
|
529 |
-
?><div class="feature-section two-col">
|
530 |
-
<div class="col col-1" style="flex: 1 1 50%;width: 100%;">
|
531 |
-
<img src="<?php echo $this->asset_path; ?>9.0/wpbc-9-0-co2.png"
|
532 |
-
style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
|
533 |
-
class="wpbc-section-image" />
|
534 |
-
</div>
|
535 |
-
<div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
|
536 |
-
<?php echo
|
537 |
-
'<h4>' .wpbc_recheck_strong_symbols( 'Change over days' ) . '</h4>' .
|
538 |
-
'<ul style="list-style: disc outside;padding: 20px;margin:0;">'
|
539 |
-
. '<li>' . wpbc_recheck_strong_symbols( 'Accurate clear display of the diagonal change over days line. Now it correctly shows the **diagonal line for any shape of day cells** (square or rectangle). This means that for any calendar size you will see the correct sharp diagonal line.' ) . '</li>'
|
540 |
-
. '<li>' . wpbc_recheck_strong_symbols( 'Show **diagonal line in dates**, where we have check in/out bookings with the **same status (pending or approved)**. It is useful to see where one booking ends and another begins when both bookings are pending or approved. Previously it was shown just full booked date without diagonal line.' ) . '</li>'
|
541 |
-
. '<li>' . wpbc_recheck_strong_symbols( 'The ability to use **change over days only on certain pages**. Useful in a situation where you need to make a booking with change over days at on a certain page(s) (check in/out dates with diagonal lines) and make bookings for specific time slots on another page(s). You can define list of pages on which to use this feature at the Booking > Settings General page in "Calendar" section.' ) . '</li>'
|
542 |
-
. '</ul>';
|
543 |
-
?>
|
544 |
-
<span style="font-size:0.8em;padding:1em;">* This feature is available in the Booking Calendar Business Small or higher versions.</span>
|
545 |
-
</div>
|
546 |
Â
</div><?php
|
547 |
Â
|
548 |
-
|
549 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
550 |
Â
|
551 |
-
|
552 |
-
<div class="col col-1" style="flex: 1 1 100%;width: 100%;">
|
553 |
-
<?php echo '<h4>' .wpbc_recheck_strong_symbols( 'Timeline' ) . '</h4>' ;?>
|
554 |
-
<img src="<?php echo $this->asset_path; ?>9.0/wpbc-9-0-timeline.png"
|
555 |
-
style="margin:30px 5px 0;width: 100%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
|
556 |
-
class="wpbc-section-image" />
|
557 |
-
</div>
|
558 |
-
<div class="col col-2 last-feature" style="flex: 1 1 100%;width: 100%;">
|
559 |
-
<?php echo
|
560 |
-
'<ul style="list-style: disc outside;padding: 20px;margin:0;">'
|
561 |
-
. '<li>' . wpbc_recheck_strong_symbols( '**Timeline**. Ability to **define how many days to show in Timeline** at the front-end side, while showing Timeline for one booking resource, and select "**Month view mode**" in shortcode (parameter "view_days_num=30" or this parameter skipped). You can define it at the Booking > Settings General page in "Calendar Overview | Timeline" section.' ) . '</li>'
|
562 |
-
. '<li>' . wpbc_recheck_strong_symbols( '**Calendar Overview** page. Ability to **define how many days to show** in the Calendar Overview page in the admin panel, while showing Calendar Overview page for one booking resource, and selected "**Day view mode**". You can define it at the Booking > Settings General page in "Calendar Overview | Timeline" section.' ) . '</li>'
|
563 |
-
. '<li>' . wpbc_recheck_strong_symbols( 'Timeline / Calendar Overview page. Scroll exactly the number of days (for one booking resource, and select "Month view mode" / "Day view mode"), that was defined at option "Days number to show in Month mode in Timeline" / "Days number to show in Day view mode in Calendar Overview page".' ) . '</li>'
|
564 |
-
. '<li>' . wpbc_recheck_strong_symbols( 'Separate settings sections for "Calendar Overview" | "Timeline" options at the Booking > Settings General page.' ) . '</li>'
|
565 |
-
. '</ul>';
|
566 |
-
?>
|
567 |
-
</div>
|
568 |
-
</div><?php
|
569 |
Â
|
570 |
-
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
571 |
Â
|
572 |
-
|
573 |
-
<div class="col col-1" style="flex: 1 1 50%;width: 100%;">
|
574 |
-
<?php echo
|
575 |
-
'<h4>' .wpbc_recheck_strong_symbols( 'Translations' ) . '</h4>' .
|
576 |
-
'<ul style="list-style: disc outside;padding: 20px;margin:0;">'
|
577 |
-
. '<li>' . wpbc_recheck_strong_symbols( '**New**. Ability to define where firstly plugin tries to use translations from "../wp-content/languages/plugins/", or from "../wp-content/plugins/{Booking Calendar Folder}/languages/" folder. You can change this behavior at the Booking > Settings General page.' ) . '</li>'
|
578 |
-
. '<li>' . wpbc_recheck_strong_symbols( '**New**. Force plugin translation update. Download and update plugin translations from WordPress translation repository and from wpbookingcalendar.com You can make updates at Booking > Settings General page in Translation section.' ) . '</li>'
|
579 |
-
. '<li>' . wpbc_recheck_strong_symbols( '**New**. Check translation status at WordPress translation repository and local translation from wpbookingcalendar.com to understand what translation to load. You can check it at the Booking > Settings General page in the Translation section.' ) . '</li>'
|
580 |
-
. '<li>' . wpbc_recheck_strong_symbols( '**Improvement**. Booking Calendar by default does not contain MO and PO translation files. You can force download them at the Booking > Settings General page in the Translation section.' ) . '</li>'
|
581 |
-
. '<li>' . wpbc_recheck_strong_symbols( '**Improvement**. Switching language/locale by using "Globe icon" in the Booking Listing page has higher priority than switching languages by translation plugins.' ) . '</li>'
|
582 |
-
. '<li>' . wpbc_recheck_strong_symbols( '**Improvement**. Optimization structure of country list file for future translations.' ) . '</li>'
|
583 |
-
. '<li>' . wpbc_recheck_strong_symbols( '**Compatibility**. Support WPML 4.5.4' ) . '</li>'
|
584 |
-
. '<li>' . wpbc_recheck_strong_symbols( '**Compatibility**. Support Polylang 3.1.4' ) . '</li>'
|
585 |
-
. '<li>' . wpbc_recheck_strong_symbols( '**Compatibility**. Support qTranslate-X 3.4.6.8 (Currently closed "qTranslate-X", was tested with Booking Calendar in php 5.6)' ) . '</li>'
|
586 |
-
. '</ul>';
|
587 |
-
?>
|
588 |
-
</div>
|
589 |
-
<div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
|
590 |
Â
|
591 |
-
<img src="<?php echo $this->asset_path; ?>9.0/wpbc-9-0-translations.png"
|
592 |
-
style="margin:30px 5px 0;width: 62%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
|
593 |
-
class="wpbc-section-image" />
|
594 |
Â
|
595 |
-
|
596 |
-
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
597 |
Â
|
598 |
-
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
599 |
Â
|
600 |
Â
// <editor-fold defaultstate="collapsed" desc=" 8.9 " >
|
601 |
Â
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
435 |
Â
</td>
|
436 |
Â
</tr>
|
437 |
Â
</table>
|
438 |
+
<?php
|
Â
|
|
439 |
Â
|
440 |
Â
$this->maintence_section();
|
441 |
+
|
442 |
+
|
443 |
+
|
444 |
+
|
445 |
+
?><h2 style='font-size: 2.1em;'>What's New in Booking Calendar <span style="font-size: 1.1em;
|
446 |
+
font-weight: 600;font-family: Consolas,Monaco,monospace;padding-left: 10px;color: #5F5F5F;">9.2</span></h2><?php
|
447 |
+
|
448 |
+
?><div class="feature-section one-col">
|
449 |
+
<div class="col col-1" style="flex: 1 1 100%;width: 100%;">
|
450 |
+
<?php echo '<h4>' .wpbc_recheck_strong_symbols( 'New Booking Listing - modern looking & instant working' ) . '</h4>' ;?>
|
451 |
+
<img src="<?php echo $this->asset_path; ?>9.2/booking_listing_text_searching_long.png"
|
452 |
+
style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
|
453 |
+
class="wpbc-section-image" />
|
454 |
+
</div>
|
455 |
+
<div class="col col-2 last-feature" style="flex: 1 1 100%;width: 100%;">
|
456 |
+
<?php echo
|
457 |
+
'<ul style="list-style: disc outside;padding: 20px;margin:0;">'
|
458 |
+
. '<li>' . wpbc_recheck_strong_symbols( '**New modern toolbar** with handy buttons, dropdown lists and other elements that have been redesigned and rearranged in a new smarter way.' ) . '</li>'
|
459 |
+
. '<li>' . wpbc_recheck_strong_symbols( '**Refreshed colors** of labels, icons, buttons and other UI elements for modern and clear look.' ) . '</li>'
|
460 |
+
. '<li>' . wpbc_recheck_strong_symbols( 'Rearranged content of booking details in unified way for all Booking Calendar versions.' ) . '</li>'
|
461 |
+
. '</ul>';
|
462 |
+
?>
|
463 |
+
</div>
|
464 |
+
</div><?php
|
465 |
+
|
466 |
+
$this->show_separator();
|
467 |
+
|
468 |
+
?><div class="feature-section two-col">
|
469 |
+
<div class="col col-1" style="flex: 1 1 50%;width: 100%;">
|
470 |
+
<?php echo
|
471 |
+
'<h4>' .wpbc_recheck_strong_symbols( 'Instant working without page reloading' ) . '</h4>' .
|
472 |
+
'<ul style="list-style: disc outside;padding: 20px;margin:0;">'
|
473 |
+
. '<li>' . wpbc_recheck_strong_symbols( '**Instant showing booking listing**, using ajax without page reloading when filtering search results. Single page app design.' ) . '</li>'
|
474 |
+
. '<li>' . wpbc_recheck_strong_symbols( 'Immediate **searching** of bookings for a **specific keyword**. Reservations are displayed just after entering a specific keyword without other user actions.' ) . '</li>'
|
475 |
+
. '<li>' . wpbc_recheck_strong_symbols( '**Highlighting** certain **keywords** in booking details to make it easier to find specific data when entering keywords.' ) . '</li>'
|
476 |
+
. '</ul>' ;
|
477 |
+
?>
|
478 |
+
</div>
|
479 |
+
<div class="col col-2 last-feature" style="flex: 1 1 auto;width: 70%;">
|
480 |
+
|
481 |
+
<img src="<?php echo $this->asset_path; ?>9.2/screenshot-01_high_res.gif"
|
482 |
+
style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
|
483 |
+
class="wpbc-section-image" />
|
484 |
+
</div>
|
485 |
+
</div><?php
|
486 |
+
|
487 |
+
$this->show_separator();
|
488 |
+
|
489 |
+
?><div class="feature-section two-col">
|
490 |
+
<div class="col col-1" style="flex: 1 1 75%;width: 100%;">
|
491 |
+
<img src="<?php echo $this->asset_path; ?>9.2/booking_listing_dates_filtering.png"
|
492 |
+
style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
|
493 |
+
class="wpbc-section-image" />
|
494 |
+
</div>
|
495 |
+
<div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
|
496 |
+
<?php echo
|
497 |
+
'<h4>' .wpbc_recheck_strong_symbols( 'User Saved Options' ) . '</h4>' .
|
498 |
+
'<ul style="list-style: disc outside;padding: 20px;margin:0;">'
|
499 |
+
. '<li>' . wpbc_recheck_strong_symbols( '**Saving** any choice of **filter options** (select-boxes and other UI toolbar elements), toolbar selection or user options **personally for each user**. User will see last configured search filter parameters each time, when open admin panel.' ) . '</li>'
|
500 |
+
. '<li>' . wpbc_recheck_strong_symbols( '**Keeping** last selected **filter or actions toolbar**, during each time, when user open booking admin panel. No need to define default state of toolbars in the settings.' ) . '</li>'
|
501 |
+
. '<li>' . wpbc_recheck_strong_symbols( '**New user options toolbar**, where possible to select "Emails sending" on specific actions or "Show notes" by default (in paid versions).' ) . '</li>'
|
502 |
+
. '</ul>';
|
503 |
+
?>
|
504 |
+
</div>
|
505 |
+
</div><?php
|
506 |
+
|
507 |
+
$this->show_separator();
|
508 |
+
|
509 |
+
?><div class="feature-section two-col">
|
510 |
+
<div class="col col-1" style="flex: 1 1 50%;width: 100%;">
|
511 |
+
<?php echo
|
512 |
+
'<h4>' .wpbc_recheck_strong_symbols( 'Print functionality' ) . '</h4>' .
|
513 |
+
'<ul style="list-style: disc outside;padding: 20px;margin:0;">'
|
514 |
+
. '<li>' . wpbc_recheck_strong_symbols( 'The new **print feature** is available in the **Free version**.' ) . '</li>'
|
515 |
+
. '<li>' . wpbc_recheck_strong_symbols( 'New **print layout** displaying the exact content of the booking listing page.' ) . '</li>'
|
516 |
+
. '<li>' . wpbc_recheck_strong_symbols( '**Print any selected bookings**. Possibility to print all bookings / selected bookings / specific single booking.' ) . '</li>'
|
517 |
+
|
518 |
+
. '</ul>' ;
|
519 |
+
?>
|
520 |
+
</div>
|
521 |
+
<div class="col col-2 last-feature" style="flex: 1 1 auto;width: 70%;">
|
522 |
+
|
523 |
+
<img src="<?php echo $this->asset_path; ?>9.2/booking_listing_printing.png"
|
524 |
+
style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
|
525 |
+
class="wpbc-section-image" />
|
526 |
+
</div>
|
527 |
+
</div><?php
|
528 |
Â
|
529 |
Â
$this->show_separator();
|
530 |
Â
|
531 |
+
|
532 |
+
|
533 |
+
?><div class="feature-section two-col">
|
534 |
+
<div class="col col-1" style="flex: 1 1 50%;width: 100%;">
|
535 |
+
<?php echo
|
536 |
+
'<h4>' .wpbc_recheck_strong_symbols( 'Other new features' ) . '</h4>' .
|
537 |
+
'<ul style="list-style: disc outside;padding: 20px;margin:0;">'
|
538 |
+
. '<li>' . wpbc_recheck_strong_symbols( 'Added 2 new filter options **Check in today** and **Check out today** to display bookings on the booking list page' ) . '</li>'
|
539 |
+
. '<li>' . wpbc_recheck_strong_symbols( 'Ability to define and **save the locale for each specific booking**. This locale is saved and will exist when the following pages are loaded.' ) . '</li>'
|
540 |
+
. '<li>' . wpbc_recheck_strong_symbols( '**Show action** buttons when such actions **can be applied to specific bookings**. You need to select bookings to display additional action buttons like "Confirm" or "Reject", etc...' ) . '</li>'
|
541 |
+
|
542 |
+
. '</ul>' ;
|
543 |
+
?>
|
544 |
+
</div>
|
545 |
+
<div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
|
546 |
Â
<?php echo
|
547 |
+
'<h4>' .wpbc_recheck_strong_symbols( 'CSV Export (paid versions)' ) . '</h4>' .
|
548 |
+
'<ul style="list-style: disc outside;padding: 20px;margin:0;">'
|
549 |
+
. '<li>' . wpbc_recheck_strong_symbols( '**New**. Ability to enter **field names to skip** from the export.' ) . '</li>'
|
550 |
+
. '<li>' . wpbc_recheck_strong_symbols( 'Selection **export of single or all pages** and CSV column separator in pop-up window.' ) . '</li>'
|
551 |
+
. '</ul>'; ?>
|
552 |
+
<?php echo
|
553 |
+
'<h4>' .wpbc_recheck_strong_symbols( 'Improvements and fixes' ) . '</h4>' .
|
554 |
+
'<ul style="list-style: disc outside;padding: 20px;margin:0;">'
|
555 |
+
. '<li>' . wpbc_recheck_strong_symbols( '**Improvement**. Smarter structure of request parameters escaping.' ) . '</li>'
|
556 |
+
. '<li>' . wpbc_recheck_strong_symbols( 'Lots of other improvements and fixes...' ) . '</li>'
|
557 |
+
. '</ul>'; ?>
|
558 |
+
</div>
|
559 |
+
</div><?php
|
560 |
+
|
561 |
+
|
562 |
+
|
Â
|
|
563 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
564 |
Â
|
565 |
Â
$this->show_separator();
|
566 |
Â
|
567 |
+
// <editor-fold defaultstate="collapsed" desc=" 9.1 " >
|
568 |
Â
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
569 |
+
// 9.1
|
570 |
Â
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
571 |
Â
?>
|
572 |
+
<div class="clear" style="margin-top:20px;"></div>
|
573 |
+
<a id="wpbc_show_advanced_section_link_show" class="wpbc_expand_section_link" href="javascript:void(0)"
|
574 |
+
onclick="javascript:jQuery( '.version_update_9_1' ).toggle();"
|
575 |
+
>+ Show changes in version update <span style="font-size: 1.35em;font-weight: 600;color: #079;font-family: Consolas,Monaco,monospace;padding-left:12px;">9.1</span></a>
|
576 |
+
|
577 |
+
<div class="version_update_9_1" style="display:none;">
|
578 |
+
|
579 |
+
<h2 style='font-size: 2.1em;'>What's New in Booking Calendar <span style="font-size: 1.1em;
|
580 |
+
font-weight: 600;font-family: Consolas,Monaco,monospace;padding-left: 10px;color: #5F5F5F;">9.1</span></h2><?php
|
581 |
+
|
582 |
+
?><div class="feature-section two-col">
|
583 |
+
<div class="col col-1" style="flex: 1 1 75%;width: 100%;">
|
584 |
+
<img src="<?php echo $this->asset_path; ?>9.1/9.1_new_popovers2.png"
|
585 |
+
style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
|
586 |
+
class="wpbc-section-image" />
|
587 |
+
</div>
|
588 |
+
<div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
|
589 |
+
<?php echo
|
590 |
+
'<h4>' .wpbc_recheck_strong_symbols( 'New Popover and Tooltips' ) . '</h4>' .
|
591 |
+
'<ul style="list-style: disc outside;padding: 20px;margin:0;">'
|
592 |
+
. '<li>' . wpbc_recheck_strong_symbols( 'Faster and more accurate display of beautiful and informative popovers and tooltips. New script for displaying popover and tooltips in the Booking Calendar.' ) . '</li>'
|
593 |
+
. '<li>' . wpbc_recheck_strong_symbols( 'For 2 or more bookings on the Timeline and Calendar Overview page, the system displays the title of the bookings exactly near to the specific booking details in popovers' ) . '</li>'
|
594 |
+
. '<li>' . wpbc_recheck_strong_symbols( 'Avoiding script conflicts regarding popovers and tooltips' ) . '</li>'
|
595 |
+
. '</ul>';
|
596 |
+
?>
|
597 |
+
<!--span style="font-size:0.8em;padding:1em;">* This feature is available in the Booking Calendar Business Small or higher versions.</span-->
|
598 |
+
</div>
|
599 |
+
</div><?php
|
600 |
Â
|
601 |
+
$this->show_separator();
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
602 |
Â
|
603 |
+
?><div class="feature-section two-col">
|
604 |
+
<div class="col col-1" style="flex: 1 1 50%;width: 100%;">
|
605 |
+
<?php echo
|
606 |
+
'<h4>' .wpbc_recheck_strong_symbols( 'New UI elements' ) . '</h4>' .
|
607 |
+
'<ul style="list-style: disc outside;padding: 20px;margin:0;">'
|
608 |
+
. '<li>' . wpbc_recheck_strong_symbols( '**Icons for UI elements** in the booking admin panel.' ) . '</li>'
|
609 |
+
. '<li>' . wpbc_recheck_strong_symbols( '**Booking Calendar Icon** for WordPress side menu.' ) . '</li>'
|
610 |
+
. '</ul>' .
|
611 |
+
'<h4>' .wpbc_recheck_strong_symbols( 'Improvements and fixes' ) . '</h4>' .
|
612 |
+
'<ul style="list-style: disc outside;padding: 20px;margin:0;">'
|
613 |
+
. '<li>' . wpbc_recheck_strong_symbols( '**Improvement**. Separate library for modal windows to prevent script conflicts' ) . '</li>'
|
614 |
+
//. '<li>' . wpbc_recheck_strong_symbols( '**Improvement**. Removing old Bootstrap library' ) . '</li>'
|
615 |
+
//. '<li>' . wpbc_recheck_strong_symbols( '**Fix**. issue of showing "Warning! Number of check in != check out times." after import .ics feed with specific start/end time' ) . '</li>'
|
616 |
+
//. '<li>' . wpbc_recheck_strong_symbols( '**Fix**. issue of not hiding booked time slots after selecting date in calendar, for the bookings that was imported from ics feed with specific timeslots' ) . '</li>'
|
617 |
+
//. '<li>' . wpbc_recheck_strong_symbols( '**Fix**. issue of unable expand or collapse right side WordPress menu, while opened Booking Calendar pages.' ) . '</li>'
|
618 |
+
. '<li>' . wpbc_recheck_strong_symbols( 'Lots of other improvements and fixes...' ) . '</li>'
|
619 |
+
. '</ul>';
|
620 |
+
?>
|
621 |
+
</div>
|
622 |
+
<div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
|
623 |
+
|
624 |
+
<img src="<?php echo $this->asset_path; ?>9.1/9.1_new_icons2.png"
|
625 |
+
style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
|
626 |
+
class="wpbc-section-image" />
|
627 |
+
<div style="font-style:italic;font-size:0.75em;padding:1em;text-align: right;">* This picture from paid version of Booking Calendar</div>
|
628 |
+
</div>
|
629 |
+
</div><?php
|
630 |
Â
|
631 |
+
$this->show_separator();
|
Â
|
|
632 |
Â
|
633 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
634 |
+
// 9.0
|
635 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
636 |
+
?>
|
637 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
638 |
Â
</div><?php
|
639 |
Â
|
640 |
+
// </editor-fold>
|
641 |
Â
|
642 |
+
// <editor-fold defaultstate="collapsed" desc=" 9.0 " >
|
643 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
644 |
+
// 9.0
|
645 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
646 |
+
?>
|
647 |
+
<div class="clear" style="margin-top:20px;"></div>
|
648 |
+
<a id="wpbc_show_advanced_section_link_show" class="wpbc_expand_section_link" href="javascript:void(0)"
|
649 |
+
onclick="javascript:jQuery( '.version_update_9_0' ).toggle();"
|
650 |
+
>+ Show changes in version update <span style="font-size: 1.35em;font-weight: 600;color: #079;font-family: Consolas,Monaco,monospace;padding-left:12px;">9.0</span></a>
|
651 |
+
|
652 |
+
<div class="version_update_9_0" style="display:none;">
|
653 |
+
|
654 |
+
<h2 style='font-size: 2.1em;'>What's New in Booking Calendar <span style="font-size: 1.1em;
|
655 |
+
font-weight: 600;font-family: Consolas,Monaco,monospace;padding-left: 10px;color: #5F5F5F;">9.0</span></h2><?php
|
656 |
+
|
657 |
+
?><div class="feature-section two-col">
|
658 |
+
<div class="col col-1" style="flex: 1 1 50%;width: 100%;">
|
659 |
+
<?php echo
|
660 |
+
'<h4>' .wpbc_recheck_strong_symbols( 'Time slots' ) . '</h4>' .
|
661 |
+
'<ul style="list-style: disc outside;padding: 20px;margin:0;">'
|
662 |
+
. '<li>' . wpbc_recheck_strong_symbols( 'Showing **time slots as dots** in calendar day cells. Modern and beautiful view of time slots within calendar days.' ) . '</li>'
|
663 |
+
. '<li>' . wpbc_recheck_strong_symbols( 'Display the **exact number** of booked **time slots** in calendar day cells. System shows **as many dots** (time slots) as many time slots have been booked for a particular day. Your customers can see occupancy by time interval from the beginning of the calendar view.' ) . '</li>'
|
664 |
+
. '<li>' . wpbc_recheck_strong_symbols( '**Improvement** CSS styling in all calendar skins. If you have customized a calendar skin before, check the changes in the new calendar skins marked with a number: 8.9.4.13 ' ) . '</li>'
|
665 |
+
. '</ul>';
|
666 |
+
?>
|
667 |
+
</div>
|
668 |
+
<div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
|
669 |
+
|
670 |
+
<img src="<?php echo $this->asset_path; ?>9.0/wpbc-9-0-time-slots.png"
|
671 |
+
style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
|
672 |
+
class="wpbc-section-image" />
|
673 |
+
|
674 |
+
</div>
|
675 |
+
</div><?php
|
676 |
Â
|
677 |
+
$this->show_separator();
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
678 |
Â
|
679 |
+
?><div class="feature-section two-col">
|
680 |
+
<div class="col col-1" style="flex: 1 1 50%;width: 100%;">
|
681 |
+
<img src="<?php echo $this->asset_path; ?>9.0/wpbc-9-0-co2.png"
|
682 |
+
style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
|
683 |
+
class="wpbc-section-image" />
|
684 |
+
</div>
|
685 |
+
<div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
|
686 |
+
<?php echo
|
687 |
+
'<h4>' .wpbc_recheck_strong_symbols( 'Change over days' ) . '</h4>' .
|
688 |
+
'<ul style="list-style: disc outside;padding: 20px;margin:0;">'
|
689 |
+
. '<li>' . wpbc_recheck_strong_symbols( 'Accurate clear display of the diagonal change over days line. Now it correctly shows the **diagonal line for any shape of day cells** (square or rectangle). This means that for any calendar size you will see the correct sharp diagonal line.' ) . '</li>'
|
690 |
+
. '<li>' . wpbc_recheck_strong_symbols( 'Show **diagonal line in dates**, where we have check in/out bookings with the **same status (pending or approved)**. It is useful to see where one booking ends and another begins when both bookings are pending or approved. Previously it was shown just full booked date without diagonal line.' ) . '</li>'
|
691 |
+
. '<li>' . wpbc_recheck_strong_symbols( 'The ability to use **change over days only on certain pages**. Useful in a situation where you need to make a booking with change over days at on a certain page(s) (check in/out dates with diagonal lines) and make bookings for specific time slots on another page(s). You can define list of pages on which to use this feature at the Booking > Settings General page in "Calendar" section.' ) . '</li>'
|
692 |
+
. '</ul>';
|
693 |
+
?>
|
694 |
+
<span style="font-size:0.8em;padding:1em;">* This feature is available in the Booking Calendar Business Small or higher versions.</span>
|
695 |
+
</div>
|
696 |
+
</div><?php
|
697 |
Â
|
698 |
+
$this->show_separator();
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
699 |
Â
|
Â
|
|
Â
|
|
Â
|
|
700 |
Â
|
701 |
+
?><div class="feature-section one-col">
|
702 |
+
<div class="col col-1" style="flex: 1 1 100%;width: 100%;">
|
703 |
+
<?php echo '<h4>' .wpbc_recheck_strong_symbols( 'Timeline' ) . '</h4>' ;?>
|
704 |
+
<img src="<?php echo $this->asset_path; ?>9.0/wpbc-9-0-timeline.png"
|
705 |
+
style="margin:30px 5px 0;width: 100%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
|
706 |
+
class="wpbc-section-image" />
|
707 |
+
</div>
|
708 |
+
<div class="col col-2 last-feature" style="flex: 1 1 100%;width: 100%;">
|
709 |
+
<?php echo
|
710 |
+
'<ul style="list-style: disc outside;padding: 20px;margin:0;">'
|
711 |
+
. '<li>' . wpbc_recheck_strong_symbols( '**Timeline**. Ability to **define how many days to show in Timeline** at the front-end side, while showing Timeline for one booking resource, and select "**Month view mode**" in shortcode (parameter "view_days_num=30" or this parameter skipped). You can define it at the Booking > Settings General page in "Calendar Overview | Timeline" section.' ) . '</li>'
|
712 |
+
. '<li>' . wpbc_recheck_strong_symbols( '**Calendar Overview** page. Ability to **define how many days to show** in the Calendar Overview page in the admin panel, while showing Calendar Overview page for one booking resource, and selected "**Day view mode**". You can define it at the Booking > Settings General page in "Calendar Overview | Timeline" section.' ) . '</li>'
|
713 |
+
. '<li>' . wpbc_recheck_strong_symbols( 'Timeline / Calendar Overview page. Scroll exactly the number of days (for one booking resource, and select "Month view mode" / "Day view mode"), that was defined at option "Days number to show in Month mode in Timeline" / "Days number to show in Day view mode in Calendar Overview page".' ) . '</li>'
|
714 |
+
. '<li>' . wpbc_recheck_strong_symbols( 'Separate settings sections for "Calendar Overview" | "Timeline" options at the Booking > Settings General page.' ) . '</li>'
|
715 |
+
. '</ul>';
|
716 |
+
?>
|
717 |
+
</div>
|
718 |
+
</div><?php
|
719 |
Â
|
720 |
+
$this->show_separator();
|
721 |
+
|
722 |
+
?><div class="feature-section two-col">
|
723 |
+
<div class="col col-1" style="flex: 1 1 50%;width: 100%;">
|
724 |
+
<?php echo
|
725 |
+
'<h4>' .wpbc_recheck_strong_symbols( 'Translations' ) . '</h4>' .
|
726 |
+
'<ul style="list-style: disc outside;padding: 20px;margin:0;">'
|
727 |
+
. '<li>' . wpbc_recheck_strong_symbols( '**New**. Ability to define where firstly plugin tries to use translations from "../wp-content/languages/plugins/", or from "../wp-content/plugins/{Booking Calendar Folder}/languages/" folder. You can change this behavior at the Booking > Settings General page.' ) . '</li>'
|
728 |
+
. '<li>' . wpbc_recheck_strong_symbols( '**New**. Force plugin translation update. Download and update plugin translations from WordPress translation repository and from wpbookingcalendar.com You can make updates at Booking > Settings General page in Translation section.' ) . '</li>'
|
729 |
+
. '<li>' . wpbc_recheck_strong_symbols( '**New**. Check translation status at WordPress translation repository and local translation from wpbookingcalendar.com to understand what translation to load. You can check it at the Booking > Settings General page in the Translation section.' ) . '</li>'
|
730 |
+
. '<li>' . wpbc_recheck_strong_symbols( '**Improvement**. Booking Calendar by default does not contain MO and PO translation files. You can force download them at the Booking > Settings General page in the Translation section.' ) . '</li>'
|
731 |
+
. '<li>' . wpbc_recheck_strong_symbols( '**Improvement**. Switching language/locale by using "Globe icon" in the Booking Listing page has higher priority than switching languages by translation plugins.' ) . '</li>'
|
732 |
+
. '<li>' . wpbc_recheck_strong_symbols( '**Improvement**. Optimization structure of country list file for future translations.' ) . '</li>'
|
733 |
+
. '<li>' . wpbc_recheck_strong_symbols( '**Compatibility**. Support WPML 4.5.4' ) . '</li>'
|
734 |
+
. '<li>' . wpbc_recheck_strong_symbols( '**Compatibility**. Support Polylang 3.1.4' ) . '</li>'
|
735 |
+
. '<li>' . wpbc_recheck_strong_symbols( '**Compatibility**. Support qTranslate-X 3.4.6.8 (Currently closed "qTranslate-X", was tested with Booking Calendar in php 5.6)' ) . '</li>'
|
736 |
+
. '</ul>';
|
737 |
+
?>
|
738 |
+
</div>
|
739 |
+
<div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
|
740 |
+
|
741 |
+
<img src="<?php echo $this->asset_path; ?>9.0/wpbc-9-0-translations.png"
|
742 |
+
style="margin:30px 5px 0;width: 62%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
|
743 |
+
class="wpbc-section-image" />
|
744 |
+
|
745 |
+
</div>
|
746 |
+
</div><?php
|
747 |
+
|
748 |
+
?></div><?php
|
749 |
+
|
750 |
+
// </editor-fold>
|
751 |
Â
|
752 |
Â
// <editor-fold defaultstate="collapsed" desc=" 8.9 " >
|
753 |
Â
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
core/lib/wpbc-ajax.php
CHANGED
@@ -334,6 +334,8 @@ function wpbc_ajax_EMPTY_TRASH() { //FixIn: 8.5.2.24
|
|
334 |
Â
$user_id = intval( $_POST['user_id'] );
|
335 |
Â
make_bk_action('check_multiuser_params_for_client_side_by_user_id', $user_id );
|
336 |
Â
|
Â
|
|
Â
|
|
337 |
Â
//FixIn: 8.8.0.1
|
338 |
Â
if ( true ) {
|
339 |
Â
|
@@ -365,8 +367,6 @@ function wpbc_ajax_EMPTY_TRASH() { //FixIn: 8.5.2.24
|
|
365 |
Â
|
366 |
Â
//debuge($sql, $bookings_in_trash );
|
367 |
Â
|
368 |
-
$bookings_id_in_trash_arr = array();
|
369 |
-
|
370 |
Â
foreach ( $bookings_in_trash as $booking_obj ) {
|
371 |
Â
$bookings_id_in_trash_arr[] = $booking_obj->booking_id;
|
372 |
Â
}
|
334 |
Â
$user_id = intval( $_POST['user_id'] );
|
335 |
Â
make_bk_action('check_multiuser_params_for_client_side_by_user_id', $user_id );
|
336 |
Â
|
337 |
+
$bookings_id_in_trash_arr = array();
|
338 |
+
|
339 |
Â
//FixIn: 8.8.0.1
|
340 |
Â
if ( true ) {
|
341 |
Â
|
367 |
Â
|
368 |
Â
//debuge($sql, $bookings_in_trash );
|
369 |
Â
|
Â
|
|
Â
|
|
370 |
Â
foreach ( $bookings_in_trash as $booking_obj ) {
|
371 |
Â
$bookings_id_in_trash_arr[] = $booking_obj->booking_id;
|
372 |
Â
}
|
core/sync/wpbc-gcal-class.php
CHANGED
@@ -47,6 +47,7 @@ class WPBC_Google_Calendar {
|
|
47 |
Â
$this->error = '';
|
48 |
Â
$this->bktype = 1;
|
49 |
Â
$this->is_silent = false;
|
Â
|
|
50 |
Â
$user = wp_get_current_user();
|
51 |
Â
$this->setUserID( $user->ID );
|
52 |
Â
|
@@ -103,7 +104,9 @@ class WPBC_Google_Calendar {
|
|
103 |
Â
return $this->bktype;
|
104 |
Â
}
|
105 |
Â
|
106 |
-
|
Â
|
|
Â
|
|
107 |
Â
public function set_events_from_with_array( $booking_gcal_events_from ) { // array( 'from type', 'offset', 'offset type' );
|
108 |
Â
|
109 |
Â
if ($booking_gcal_events_from[0]=='date') {
|
@@ -485,9 +488,11 @@ class WPBC_Google_Calendar {
|
|
485 |
Â
if ( ! empty($this->error) ) {
|
486 |
Â
$is_spin = false;
|
487 |
Â
$is_error = true;
|
488 |
-
$this->show_message( $this->error , $is_spin, $is_error);
|
Â
|
|
Â
|
|
Â
|
|
489 |
Â
die;
|
490 |
-
return false;
|
491 |
Â
} else
|
492 |
Â
$this->show_message( __('Done' ,'booking') );
|
493 |
Â
|
47 |
Â
$this->error = '';
|
48 |
Â
$this->bktype = 1;
|
49 |
Â
$this->is_silent = false;
|
50 |
+
$this->events = array();
|
51 |
Â
$user = wp_get_current_user();
|
52 |
Â
$this->setUserID( $user->ID );
|
53 |
Â
|
104 |
Â
return $this->bktype;
|
105 |
Â
}
|
106 |
Â
|
107 |
+
public function getErrorMessage(){
|
108 |
+
return $this->error;
|
109 |
+
}
|
110 |
Â
public function set_events_from_with_array( $booking_gcal_events_from ) { // array( 'from type', 'offset', 'offset type' );
|
111 |
Â
|
112 |
Â
if ($booking_gcal_events_from[0]=='date') {
|
488 |
Â
if ( ! empty($this->error) ) {
|
489 |
Â
$is_spin = false;
|
490 |
Â
$is_error = true;
|
491 |
+
$this->show_message( $this->error , $is_spin, $is_error);
|
492 |
+
if ( ( WPBC_EXIST_NEW_BOOKING_LISTING ) && ( isset( $_REQUEST['action'] ) ) && ( 'WPBC_AJX_BOOKING_ACTIONS' == $_REQUEST['action'] ) ) {
|
493 |
+
return false;
|
494 |
+
}
|
495 |
Â
die;
|
Â
|
|
496 |
Â
} else
|
497 |
Â
$this->show_message( __('Done' ,'booking') );
|
498 |
Â
|
core/sync/wpbc-gcal.php
CHANGED
@@ -375,7 +375,7 @@ function wpbc_write_content_for_modal_import_gce() {
|
|
375 |
Â
if ( ( ! class_exists('wpdev_bk_personal') ) && ( $booking_gcal_feed == '' ) ) {
|
376 |
Â
|
377 |
Â
$is_this_btn_disabled = true;
|
378 |
-
$settigns_link = wpbc_get_settings_url() ."&tab=sync" ;
|
379 |
Â
} else {
|
380 |
Â
$booking_gcal_events_from = get_bk_option( 'booking_gcal_events_from');
|
381 |
Â
$booking_gcal_events_from_offset = get_bk_option( 'booking_gcal_events_from_offset' );
|
375 |
Â
if ( ( ! class_exists('wpdev_bk_personal') ) && ( $booking_gcal_feed == '' ) ) {
|
376 |
Â
|
377 |
Â
$is_this_btn_disabled = true;
|
378 |
+
$settigns_link = wpbc_get_settings_url() ."&tab=sync&subtab=gcal" ;
|
379 |
Â
} else {
|
380 |
Â
$booking_gcal_events_from = get_bk_option( 'booking_gcal_events_from');
|
381 |
Â
$booking_gcal_events_from_offset = get_bk_option( 'booking_gcal_events_from_offset' );
|
core/wpbc-activation.php
CHANGED
@@ -850,7 +850,10 @@ function wpbc_get_default_options( $option_name = '', $is_get_multiuser_general_
|
|
850 |
Â
|
851 |
Â
$default_options = array();
|
852 |
Â
$mu_option4delete = array();
|
853 |
-
|
Â
|
|
Â
|
|
Â
|
|
854 |
Â
|
855 |
Â
$default_options['booking_admin_cal_count'] = ($is_demo) ? '3' : '2';
|
856 |
Â
$mu_option4delete[]='booking_admin_cal_count'; // $multiuser_general_option[] = implode( '', array_keys( array_slice( $default_options, -1 ) ) );
|
@@ -862,7 +865,7 @@ function wpbc_get_default_options( $option_name = '', $is_get_multiuser_general_
|
|
862 |
Â
$mu_option4delete[]='booking_sort_order'; //$mu_option4delete[]='booking_sort_order_direction';
|
863 |
Â
$default_options['booking_default_toolbar_tab'] = 'filter';
|
864 |
Â
$mu_option4delete[]='booking_default_toolbar_tab';
|
865 |
-
$default_options['booking_listing_default_view_mode'] = 'vm_calendar';
|
866 |
Â
$mu_option4delete[]='booking_listing_default_view_mode';
|
867 |
Â
$default_options['booking_view_days_num'] = ( ( ! class_exists( 'wpdev_bk_personal' ) ) ? '90' : '30' );
|
868 |
Â
$mu_option4delete[]='booking_view_days_num';
|
850 |
Â
|
851 |
Â
$default_options = array();
|
852 |
Â
$mu_option4delete = array();
|
853 |
+
|
854 |
+
$default_options['booking_is_use_old_booking_listing'] = 'Off';
|
855 |
+
$mu_option4delete[]='booking_is_use_old_booking_listing';
|
856 |
+
|
857 |
Â
|
858 |
Â
$default_options['booking_admin_cal_count'] = ($is_demo) ? '3' : '2';
|
859 |
Â
$mu_option4delete[]='booking_admin_cal_count'; // $multiuser_general_option[] = implode( '', array_keys( array_slice( $default_options, -1 ) ) );
|
865 |
Â
$mu_option4delete[]='booking_sort_order'; //$mu_option4delete[]='booking_sort_order_direction';
|
866 |
Â
$default_options['booking_default_toolbar_tab'] = 'filter';
|
867 |
Â
$mu_option4delete[]='booking_default_toolbar_tab';
|
868 |
+
$default_options['booking_listing_default_view_mode'] = 'vm_listing'; // 'vm_calendar';
|
869 |
Â
$mu_option4delete[]='booking_listing_default_view_mode';
|
870 |
Â
$default_options['booking_view_days_num'] = ( ( ! class_exists( 'wpdev_bk_personal' ) ) ? '90' : '30' );
|
871 |
Â
$mu_option4delete[]='booking_view_days_num';
|
core/wpbc-constants.php
CHANGED
@@ -26,7 +26,7 @@ if ( ! defined( 'WP_BK_CHECK_OUT_MINUS_DAY_SEARCH' ) ) { define( 'WP_BK_C
|
|
26 |
Â
////////////////////////////////////////////////////////////
|
27 |
Â
// SYSTEM CONSTANTS //////////////
|
28 |
Â
////////////////////////////////////////////////////////////
|
29 |
-
if ( ! defined( 'WP_BK_MINOR_UPDATE' ) ) { define( 'WP_BK_MINOR_UPDATE', true ); }
|
30 |
Â
if ( ! defined( 'WP_BK_RESPONSE' ) ) { define( 'WP_BK_RESPONSE', false ); }
|
31 |
Â
if ( ! defined( 'WP_BK_BETA_DATA_FILL' ) ) { define( 'WP_BK_BETA_DATA_FILL', 0 ); } // Set 0 for no filling or 2 for 241 bookings or more for more
|
32 |
Â
|
@@ -34,8 +34,6 @@ if ( ! defined( 'WP_BK_BETA_DATA_FILL' ) ) { define( 'WP_BK_BETA_DATA_FILL',
|
|
34 |
Â
////////////////////////////////////////////////////////////
|
35 |
Â
// Deprecated
|
36 |
Â
////////////////////////////////////////////////////////////
|
37 |
-
// 'WP_BK_SHOW_INFO_IN_FORM' - deprecated - configure this option at Booking > Settings General page //FixIn: 8.1.3.2x // This feature can impact to the performance
|
38 |
-
// 'WP_BK_CUSTOM_FORMS_FOR_REGULAR_USERS' - deprecated - configure this option at Booking > Settings General page //FixIn: 8.1.3.2x // Only for MultiUser version
|
39 |
Â
// 'WP_BK_PAYMENT_FORM_ONLY_IN_REQUEST' - deprecated - configure this option at Booking > Settings > Payment page //FixIn: 8.1.3.2x // Its will show payment form only in payment request during sending from Booking Listing page and do not show payment form after visitor made the booking.
|
40 |
Â
// 'WP_BK_AUTO_SEND_PAY_REQUEST_IF_ADD_IN_ADMIN_PANEL' - deprecated - configure this option at Booking > Settings > Payment page //FixIn: 8.1.3.2x // Auto send payment request, if booking was added in admin panel, and WP_BK_AUTO_APPROVE_IF_ADD_IN_ADMIN_PANEL == true
|
41 |
Â
// 'WP_BK_SHOW_DEPOSIT_AND_TOTAL_PAYMENT' - deprecated - configure this option at Booking > Settings > Payment page //FixIn: 8.1.3.2x // Show both deposit and total cost payment forms, after visitor submit booking. Important! Please note, in this case at admin panel for booking will be saved deposit cost and notes about deposit, do not depend from the visitor choise of this payment. So you need to check each such payment manually.
|
@@ -43,8 +41,3 @@ if ( ! defined( 'WP_BK_BETA_DATA_FILL' ) ) { define( 'WP_BK_BETA_DATA_FILL',
|
|
43 |
Â
// 'WP_BK_AUTO_APPROVE_WHEN_ZERO_COST' - deprecated - configure this option at Booking > Settings General page //FixIn: 8.1.3.2x // Auto approve booking, if the cost of booking == 0
|
44 |
Â
// 'WP_BK_AUTO_APPROVE_IF_ADD_IN_ADMIN_PANEL' - deprecated - configure this option at Booking > Settings General page //FixIn: 8.1.3.2x // Auto approve booking, if booking added in admin panel
|
45 |
Â
// 'WP_BK_LAST_CHECKOUT_DAY_AVAILABLE' - deprecated - configure this option at Booking > Settings General page //FixIn: 8.1.3.28 // Its will remove last selected day of booking during saving it as booking. //FixIn: 6.2.3.6
|
46 |
-
// 'WP_BK_IS_SEND_EMAILS_ON_COST_CHANGE' - deprecated - configure this option at Booking > Settings > Payment page //FixIn: 8.1.3.30 // Send modification email, if cost was changed in admin panel
|
47 |
-
// 'WP_BK_TIMILINE_LIMIT_HOURS' - deprecated - configure this option at Booking > Settings General page //FixIn: 8.1.3.31 // Limit times for showing cells in Calendar Overview page in admin panel for 1 day view mode. (7.0.1.18)
|
48 |
-
// 'WP_BK_SHOW_BOOKING_NOTES' - deprecated - configure this option at Booking > Settings General page //FixIn: 8.1.3.32 // Set notes of the specific booking visible by default.
|
49 |
-
|
50 |
-
// booking_is_days_always_available - only for specific booking resources.
|
26 |
Â
////////////////////////////////////////////////////////////
|
27 |
Â
// SYSTEM CONSTANTS //////////////
|
28 |
Â
////////////////////////////////////////////////////////////
|
29 |
+
if ( ! defined( 'WP_BK_MINOR_UPDATE' ) ) { define( 'WP_BK_MINOR_UPDATE', ! true ); }
|
30 |
Â
if ( ! defined( 'WP_BK_RESPONSE' ) ) { define( 'WP_BK_RESPONSE', false ); }
|
31 |
Â
if ( ! defined( 'WP_BK_BETA_DATA_FILL' ) ) { define( 'WP_BK_BETA_DATA_FILL', 0 ); } // Set 0 for no filling or 2 for 241 bookings or more for more
|
32 |
Â
|
34 |
Â
////////////////////////////////////////////////////////////
|
35 |
Â
// Deprecated
|
36 |
Â
////////////////////////////////////////////////////////////
|
Â
|
|
Â
|
|
37 |
Â
// 'WP_BK_PAYMENT_FORM_ONLY_IN_REQUEST' - deprecated - configure this option at Booking > Settings > Payment page //FixIn: 8.1.3.2x // Its will show payment form only in payment request during sending from Booking Listing page and do not show payment form after visitor made the booking.
|
38 |
Â
// 'WP_BK_AUTO_SEND_PAY_REQUEST_IF_ADD_IN_ADMIN_PANEL' - deprecated - configure this option at Booking > Settings > Payment page //FixIn: 8.1.3.2x // Auto send payment request, if booking was added in admin panel, and WP_BK_AUTO_APPROVE_IF_ADD_IN_ADMIN_PANEL == true
|
39 |
Â
// 'WP_BK_SHOW_DEPOSIT_AND_TOTAL_PAYMENT' - deprecated - configure this option at Booking > Settings > Payment page //FixIn: 8.1.3.2x // Show both deposit and total cost payment forms, after visitor submit booking. Important! Please note, in this case at admin panel for booking will be saved deposit cost and notes about deposit, do not depend from the visitor choise of this payment. So you need to check each such payment manually.
|
41 |
Â
// 'WP_BK_AUTO_APPROVE_WHEN_ZERO_COST' - deprecated - configure this option at Booking > Settings General page //FixIn: 8.1.3.2x // Auto approve booking, if the cost of booking == 0
|
42 |
Â
// 'WP_BK_AUTO_APPROVE_IF_ADD_IN_ADMIN_PANEL' - deprecated - configure this option at Booking > Settings General page //FixIn: 8.1.3.2x // Auto approve booking, if booking added in admin panel
|
43 |
Â
// 'WP_BK_LAST_CHECKOUT_DAY_AVAILABLE' - deprecated - configure this option at Booking > Settings General page //FixIn: 8.1.3.28 // Its will remove last selected day of booking during saving it as booking. //FixIn: 6.2.3.6
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
core/wpbc-include.php
CHANGED
@@ -76,7 +76,8 @@ require_once( WPBC_PLUGIN_DIR . '/core/admin/wpbc-dashboard.php' );
|
|
76 |
Â
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
77 |
Â
|
78 |
Â
//FixIn: 9.2.1
|
79 |
-
|
Â
|
|
80 |
Â
require_once( WPBC_PLUGIN_DIR . '/includes/_toolbar_ui/toolbar_ui.php' );
|
81 |
Â
require_once( WPBC_PLUGIN_DIR . '/includes/_listing_css_js/listing_ui.php' );
|
82 |
Â
require_once( WPBC_PLUGIN_DIR . '/includes/_pagination/pagination.php' );
|
76 |
Â
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
77 |
Â
|
78 |
Â
//FixIn: 9.2.1
|
79 |
+
|
80 |
+
if ( WPBC_EXIST_NEW_BOOKING_LISTING ) {
|
81 |
Â
require_once( WPBC_PLUGIN_DIR . '/includes/_toolbar_ui/toolbar_ui.php' );
|
82 |
Â
require_once( WPBC_PLUGIN_DIR . '/includes/_listing_css_js/listing_ui.php' );
|
83 |
Â
require_once( WPBC_PLUGIN_DIR . '/includes/_pagination/pagination.php' );
|
core/wpbc-js.php
CHANGED
@@ -291,7 +291,7 @@ function wpbc_js_load_files( $where_to_load ) {
|
|
291 |
Â
wp_enqueue_script( 'wpbc-datepick-localize', $calendar_localization_url, array( 'wpbc-datepick' ), '1.1' );
|
292 |
Â
}
|
293 |
Â
|
294 |
-
|
295 |
Â
if ( ( $where_to_load == 'client' ) || ( wpbc_is_new_booking_page() ) ) {
|
296 |
Â
|
297 |
Â
wp_enqueue_script( 'wpbc-main-client', wpbc_plugin_url( '/js/client.js' ), array( 'wpbc-datepick' ), WP_BK_VERSION_NUM ); // Client
|
291 |
Â
wp_enqueue_script( 'wpbc-datepick-localize', $calendar_localization_url, array( 'wpbc-datepick' ), '1.1' );
|
292 |
Â
}
|
293 |
Â
|
294 |
+
|
295 |
Â
if ( ( $where_to_load == 'client' ) || ( wpbc_is_new_booking_page() ) ) {
|
296 |
Â
|
297 |
Â
wp_enqueue_script( 'wpbc-main-client', wpbc_plugin_url( '/js/client.js' ), array( 'wpbc-datepick' ), WP_BK_VERSION_NUM ); // Client
|
core/wpbc.php
CHANGED
@@ -99,6 +99,18 @@ public function define_admin_menu(){
|
|
99 |
Â
$title .= $update_count_title;
|
100 |
Â
}
|
101 |
Â
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
102 |
Â
/**
|
103 |
Â
global $menu;
|
104 |
Â
if ( current_user_can( ) ) {
|
99 |
Â
$title .= $update_count_title;
|
100 |
Â
}
|
101 |
Â
|
102 |
+
$title = '<div class="name_container" style="display: flex;flex-flow: row nowrap;justify-content: flex-start;align-items: center;min-height: 16px;">'
|
103 |
+
. ' <div class="name_item" style="font-size: 6px;font-weight: 600;margin-left: -4px;margin-top: 12px;margin-right: 0px;word-wrap: normal;white-space: nowrap;position: absolute;">WP</div>'
|
104 |
+
. ' <div class="name_item" style="font-size: 11px;margin-left: -5px;margin-top: -7px;white-space: nowrap;margin-right: 4px;">Booking Calendar</div>';
|
105 |
+
if ( ( $update_count > 0 ) && ( $is_user_activated ) ) {
|
106 |
+
$badge_style= '';
|
107 |
+
} else {
|
108 |
+
$badge_style = 'display:none;';
|
109 |
+
}
|
110 |
+
|
111 |
+
$title .= '<span style="margin-top:-2px;'.$badge_style.'" class="wpbc_badge_count name_item update-plugins count-'.$update_count.'" title=""><span class="update-count bk-update-count" style="white-space: nowrap;word-wrap: normal;">' . number_format_i18n( $update_count ) . '</span></span>';
|
112 |
+
$title .= '</div>';
|
113 |
+
|
114 |
Â
/**
|
115 |
Â
global $menu;
|
116 |
Â
if ( current_user_can( ) ) {
|
includes/_listing_css_js/listing_ui.css
ADDED
@@ -0,0 +1,482 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
/* Input elements in Listing --------------------------------------------------------------------------------------- */
|
2 |
+
.wpbc_listing_container input {
|
3 |
+
/*border: 1px solid #d6d6d6;*/
|
4 |
+
border: 1px solid #c9c9c9;
|
5 |
+
}
|
6 |
+
/* :focus ---- */
|
7 |
+
.wpbc_listing_container input.focus,
|
8 |
+
.wpbc_listing_container input:focus {
|
9 |
+
border-color: #fff;
|
10 |
+
/*box-shadow: 0 0 0 1px #4f94d4, 0 0 2px 1px rgba(79, 148, 212, 0.8); This is Default: WordPress */
|
11 |
+
box-shadow: 0 0 0 1px #8fc8ff, 0 0 2px 1px rgba(79, 148, 212, 0.8);
|
12 |
+
z-index: 1;
|
13 |
+
/* Only visible in Windows High Contrast mode */
|
14 |
+
outline: 2px solid transparent;
|
15 |
+
}
|
16 |
+
|
17 |
+
/** C O N T A I N E R **/
|
18 |
+
.wpbc_listing_container {
|
19 |
+
display: flex;
|
20 |
+
flex-flow: column nowrap;
|
21 |
+
justify-content: space-between;
|
22 |
+
|
23 |
+
margin: 10px 0;
|
24 |
+
}
|
25 |
+
.wpbc_listing_container .wpbc_listing_usual_row {
|
26 |
+
flex: 1 1 auto;
|
27 |
+
|
28 |
+
display: flex;
|
29 |
+
flex-flow: row wrap;
|
30 |
+
justify-content: space-between;
|
31 |
+
align-items: stretch;
|
32 |
+
}
|
33 |
+
.wpbc_listing_container .wpbc_listing_usual_row.wpbc_list_header {
|
34 |
+
flex-flow: row nowrap;
|
35 |
+
}
|
36 |
+
.wpbc_listing_container .wpbc_listing_usual_row .wpbc_listing_col{
|
37 |
+
flex: 3.7 1 0;
|
38 |
+
word-wrap: break-word;
|
39 |
+
min-width: 150px;
|
40 |
+
}
|
41 |
+
/* //FixIn: forVideo *
|
42 |
+
.wp-admin .modal-backdrop.in {
|
43 |
+
opacity: 0.3 !important;
|
44 |
+
}
|
45 |
+
#wpbc_loading_section .wpbc_icn::before, #wpbc_loading_section [class^="wpbc_icn_"]::before {
|
46 |
+
font-size: 36px;
|
47 |
+
|
48 |
+
}
|
49 |
+
#wpbc_loading_section [class^="wpbc_icn_"]{
|
50 |
+
top:16.5em;
|
51 |
+
margin-left: -4em;
|
52 |
+
position:absolute;
|
53 |
+
}
|
54 |
+
/* //FixIn: forVideo */
|
55 |
+
/* Checkbox */
|
56 |
+
.wpbc_listing_container .wpbc_listing_usual_row .wpbc_listing_col:first-child{
|
57 |
+
flex: 40px 0 0;
|
58 |
+
min-width: 40px;
|
59 |
+
}
|
60 |
+
/* Labels */
|
61 |
+
.wpbc_listing_container .wpbc_listing_usual_row .wpbc_listing_col.wpbc_col_booking_labels{
|
62 |
+
|
63 |
+
}
|
64 |
+
/* Booking data */
|
65 |
+
.wpbc_listing_container .wpbc_listing_usual_row .wpbc_listing_col.wpbc_col_data{
|
66 |
+
flex: 10;
|
67 |
+
}
|
68 |
+
/* Dates */
|
69 |
+
.wpbc_listing_container .wpbc_listing_usual_row .wpbc_listing_col.wpbc_col_dates {
|
70 |
+
flex: 4.5 1 0;
|
71 |
+
|
72 |
+
display:flex;
|
73 |
+
flex-flow:row wrap;
|
74 |
+
justify-content: center;
|
75 |
+
align-items: flex-start;
|
76 |
+
}
|
77 |
+
/* Actions */
|
78 |
+
.wpbc_listing_container .wpbc_listing_usual_row .wpbc_item_actions {
|
79 |
+
flex: 100%;
|
80 |
+
display: flex;
|
81 |
+
flex-flow: row wrap;
|
82 |
+
justify-content: flex-start;
|
83 |
+
|
84 |
+
padding: 0 1em;
|
85 |
+
}
|
86 |
+
@media screen and (max-width: 782px) {
|
87 |
+
.wpbc_listing_container .wpbc_listing_usual_row.wpbc_list_row .wpbc_listing_col.wpbc_col_data {
|
88 |
+
flex: 1 1 auto;
|
89 |
+
}
|
90 |
+
}
|
91 |
+
/** R O W - Colors | Fonts **/
|
92 |
+
.wpbc_listing_container .wpbc_selectable_body{
|
93 |
+
border: 1px solid #dfdfdf;
|
94 |
+
border-top:none;
|
95 |
+
}
|
96 |
+
.wpbc_listing_container .wpbc_listing_usual_row{
|
97 |
+
border:none;
|
98 |
+
border-left:4px solid #f0f0f1;
|
99 |
+
background: #f0f0f1;
|
100 |
+
}
|
101 |
+
.wpbc_listing_container .wpbc_listing_usual_row:nth-of-type(2n+1) {
|
102 |
+
background: #F7F7F7;
|
103 |
+
border-left-color:#F7F7F7;
|
104 |
+
}
|
105 |
+
.wpbc_listing_container .wpbc_listing_usual_row div.content_text {
|
106 |
+
padding: 8px 1em;
|
107 |
+
line-height: 1.8em;
|
108 |
+
}
|
109 |
+
/** H E A D E R - Colors | Fonts **/
|
110 |
+
.wpbc_listing_container div.wpbc_listing_usual_row.wpbc_list_header{
|
111 |
+
background: #e4e4e4;
|
112 |
+
border: 1px solid #dfdfdf;
|
113 |
+
border-radius: 4px 4px 0 0;
|
114 |
+
color: #333;
|
115 |
+
font-size: 12px;
|
116 |
+
font-weight: 600;
|
117 |
+
text-shadow: 0 1px 1px #F5F5F5;
|
118 |
+
text-align: center;
|
119 |
+
line-height: 2.5em;
|
120 |
+
overflow: hidden;
|
121 |
+
}
|
122 |
+
.wpbc_listing_container div.wpbc_listing_usual_row.wpbc_list_header .wpbc_col_labels .content_text{
|
123 |
+
display: block;
|
124 |
+
}
|
125 |
+
.wpbc_listing_container div.wpbc_listing_usual_row.wpbc_list_header .wpbc_listing_col .content_text{
|
126 |
+
padding:8px 1em;
|
127 |
+
}
|
128 |
+
.wpbc_listing_container .wpbc_listing_usual_row.wpbc_list_header > div:last-child{
|
129 |
+
text-align: center;
|
130 |
+
}
|
131 |
+
.wpbc_listing_container .wpbc_listing_usual_row.wpbc_list_header:first-child input[type="checkbox"] {
|
132 |
+
margin-left:5px;
|
133 |
+
}
|
134 |
+
/** Header action buttons **/
|
135 |
+
.wpbc_listing_container .wpbc_listing_header_action_icon {
|
136 |
+
padding: 0 1em;
|
137 |
+
}
|
138 |
+
.wpbc_listing_container .wpbc_listing_header_action_icon a,
|
139 |
+
.wpbc_listing_container .wpbc_listing_header_action_icon a:hover{
|
140 |
+
color: #555;
|
141 |
+
text-decoration: none;
|
142 |
+
}
|
143 |
+
/**********************************************************************************************************************/
|
144 |
+
/** Content of fields data **/
|
145 |
+
.wpbc_listing_container .wpbc_list_row .wpbc_col_data .fieldvalue {
|
146 |
+
background: #FFF7D8;
|
147 |
+
margin: 0 5px 0 4px;
|
148 |
+
padding: 1px 5px;
|
149 |
+
}
|
150 |
+
.wpbc_listing_container .wpbc_list_row .wpbc_col_data .fieldvalue.fieldsearchvalue {
|
151 |
+
background: #ff9900;
|
152 |
+
}
|
153 |
+
/** Labels ------------------------------------------------------------------------------------------------------- */
|
154 |
+
.wpbc_col_labels .content_text .wpbc_label.hidden_items {
|
155 |
+
display: none;
|
156 |
+
}
|
157 |
+
.wpbc_listing_container .wpbc_listing_usual_row .wpbc_col_labels div.content_text{
|
158 |
+
overflow: hidden;
|
159 |
+
}
|
160 |
+
.wpbc_col_labels .content_text {
|
161 |
+
display: flex;
|
162 |
+
flex-flow: row wrap;
|
163 |
+
justify-content: flex-start;
|
164 |
+
align-items: first baseline;
|
165 |
+
}
|
166 |
+
.wpbc_col_labels .content_text .wpbc_label{
|
167 |
+
flex: 0 1 auto;
|
168 |
+
padding: 0 10px;
|
169 |
+
line-height: 2.1em;
|
170 |
+
margin: 0 1em 5px 0;
|
171 |
+
word-wrap: anywhere;
|
172 |
+
white-space: nowrap;
|
173 |
+
min-width: 0;
|
174 |
+
|
175 |
+
display: flex;
|
176 |
+
flex-flow: row wrap;
|
177 |
+
justify-content: flex-start;
|
178 |
+
align-items: last baseline;
|
179 |
+
}
|
180 |
+
.wpbc_label{
|
181 |
+
white-space: pre-wrap;
|
182 |
+
border: 0;
|
183 |
+
box-shadow: 0 0 1px #ddd;
|
184 |
+
padding: 4px 10px 4px;
|
185 |
+
line-height: 2.5em;
|
186 |
+
margin-right: 10px;
|
187 |
+
font-size: 0.92em;
|
188 |
+
border-radius: .2em;
|
189 |
+
font-weight: 600;
|
190 |
+
background-color: #5bc0de;
|
191 |
+
display: inline;
|
192 |
+
color: #ffffff;
|
193 |
+
text-align: center;
|
194 |
+
vertical-align: baseline;
|
195 |
+
}
|
196 |
+
.wpbc_listing_col .wpbc_label{
|
197 |
+
padding: 4px 5px;
|
198 |
+
line-height: 2.5em;
|
199 |
+
}
|
200 |
+
.wpbc_listing_col .wpbc_label .menu_icon {
|
201 |
+
margin-right: 0.5em;
|
202 |
+
}
|
203 |
+
/* Label Colors --------------------------------------------------------------------------------------------------- */
|
204 |
+
.wpbc_label.wpbc_label_booking_id {
|
205 |
+
/*background-color: #acacac;*/
|
206 |
+
/*color: #909090;*/
|
207 |
+
/*background: #c5c5c500;*/
|
208 |
+
/*background: #fff;*/
|
209 |
+
/*box-shadow: 0px 0px 1px #c0c0c0;*/
|
210 |
+
background: #adadad;
|
211 |
+
|
212 |
+
background: #fff;
|
213 |
+
color: #979797;
|
214 |
+
box-shadow: 0 0 1px #b7b7b7;
|
215 |
+
}
|
216 |
+
.wpbc_label.wpbc_label_resource {
|
217 |
+
/*background-color: #5bc0de;*/
|
218 |
+
background-color: #5aa3c0;
|
219 |
+
}
|
220 |
+
.wpbc_label.wpbc_label_deleted_resource{
|
221 |
+
background-color: #ee6f48;
|
222 |
+
}
|
223 |
+
.wpbc_label.wpbc_label_pending{
|
224 |
+
background-color: #FFBB45;
|
225 |
+
background-color: #BB864D;
|
226 |
+
background-color: #ed9f0a;
|
227 |
+
color: #fff;
|
228 |
+
box-shadow: 0 0 1px #fde4c9;
|
229 |
+
}
|
230 |
+
.wpbc_label.wpbc_label_approved{
|
231 |
+
background-color: #9BE;
|
232 |
+
|
233 |
+
background-color: #64AA45;
|
234 |
+
color: #f7fff4;
|
235 |
+
box-shadow: 0 0 1px #b8c6b1;
|
236 |
+
}
|
237 |
+
.wpbc_label.wpbc_label_payment_status {
|
238 |
+
/* General class for all payment statuses */
|
239 |
+
}
|
240 |
+
.wpbc_label.wpbc_label_payment_status_success {
|
241 |
+
background-color: #468847;
|
242 |
+
}
|
243 |
+
.wpbc_label.wpbc_label_payment_status_pending {
|
244 |
+
background-color: #992;
|
245 |
+
}
|
246 |
+
.wpbc_label.wpbc_label_payment_status_unknown {
|
247 |
+
/*background-color: #999;*/
|
248 |
+
background-color: #e7e7e7;
|
249 |
+
color: #7c7c7c;
|
250 |
+
}
|
251 |
+
.wpbc_label.wpbc_label_payment_status_error {
|
252 |
+
background-color: #FA773D;
|
253 |
+
}
|
254 |
+
.wpbc_label.wpbc_label_imported {
|
255 |
+
background-color: #81A6C6;
|
256 |
+
}
|
257 |
+
.wpbc_label.wpbc_label_trash {
|
258 |
+
background: #D94A48;
|
259 |
+
color: #fff;
|
260 |
+
text-shadow: 0 0 1px #E00;
|
261 |
+
}
|
262 |
+
|
263 |
+
/* Read booking button -- EYE ------------------------------------------------------------------------------------- */
|
264 |
+
.wpbc_is_new_button,
|
265 |
+
.wpbc_is_new_button:hover {
|
266 |
+
display: flex;
|
267 |
+
position: absolute;
|
268 |
+
left: 0;
|
269 |
+
margin-left: -17px;
|
270 |
+
border:none !important;
|
271 |
+
outline: none !important;
|
272 |
+
box-shadow:none !important;
|
273 |
+
}
|
274 |
+
@media (max-width: 782px) {
|
275 |
+
.wpbc_is_new_button {
|
276 |
+
left: auto;
|
277 |
+
margin-left: auto;
|
278 |
+
right: 0;
|
279 |
+
margin-right: 22px;
|
280 |
+
}
|
281 |
+
}
|
282 |
+
|
283 |
+
/* Dates labels ---------------------------------------------------------------------------------------------------- */
|
284 |
+
.wpbc_label.wpbc_label_booking_dates:hover,
|
285 |
+
.wpbc_label.wpbc_label_booking_dates{
|
286 |
+
background-color: #FFBB45;
|
287 |
+
text-decoration: none;
|
288 |
+
color: #ffffff;
|
289 |
+
|
290 |
+
background-color: #BB864D;
|
291 |
+
background-color: #ed9f0a;
|
292 |
+
color: #fff;
|
293 |
+
box-shadow: 0 0 1px #fde4c9;
|
294 |
+
}
|
295 |
+
.wpbc_label.wpbc_label_booking_dates:focus{
|
296 |
+
box-shadow: none;
|
297 |
+
}
|
298 |
+
.wpbc_label.wpbc_label_booking_dates.approved{
|
299 |
+
background-color: #9BE;
|
300 |
+
|
301 |
+
background-color: #64AA45;
|
302 |
+
color: #f7fff4;
|
303 |
+
box-shadow: 0 0 1px #b8c6b1;
|
304 |
+
}
|
305 |
+
|
306 |
+
/* Dates internal ------------------------------------------------------------------------------------------------- */
|
307 |
+
.wpbc_col_labels .content_text .wpbc_label.wpbc_label_booking_dates{
|
308 |
+
margin: 0 0 5px 0;
|
309 |
+
}
|
310 |
+
.wpbc_listing_container .wpbc_col_dates .wpbc_label.wpbc_label_booking_dates .field-booking-time{
|
311 |
+
color: #3e3e3e;
|
312 |
+
text-decoration: none;
|
313 |
+
text-shadow: 0 0 1px #AAA;
|
314 |
+
line-height: 2em;
|
315 |
+
white-space: nowrap;
|
316 |
+
}
|
317 |
+
.wpbc_listing_container .wpbc_col_dates .date_tire {
|
318 |
+
font-size: 17px;
|
319 |
+
font-weight: 600;
|
320 |
+
margin: 0 7px 10px;
|
321 |
+
line-height: 18px;
|
322 |
+
}
|
323 |
+
|
324 |
+
/* Booking Actions Buttons ---------------------------------------------------------------------------------------- */
|
325 |
+
.wpbc_ajx_toolbar.wpbc_buttons_row_for_booking .ui_container .ui_group .ui_element {
|
326 |
+
margin-right:5px;
|
327 |
+
}
|
328 |
+
|
329 |
+
.ui_element .wpbc_ui_button.wpbc_ui_red .menu_icon,
|
330 |
+
.ui_element .wpbc_ui_button .menu_icon.wpbc_ui_red{
|
331 |
+
color:#e06741
|
332 |
+
}
|
333 |
+
|
334 |
+
/* Remark button and textarea ------------------------------------------------------------------------------------- */
|
335 |
+
|
336 |
+
.wpbc_ajx_toolbar .ui_container .ui_remark_section {
|
337 |
+
/*display: none;*/
|
338 |
+
flex: 0 1 auto;
|
339 |
+
width:100%;
|
340 |
+
}
|
341 |
+
.wpbc_ajx_toolbar .ui_container .ui_remark_section .ui_group {
|
342 |
+
justify-content: flex-end;
|
343 |
+
}
|
344 |
+
.wpbc_ajx_toolbar .ui_container .ui_remark_section .ui_group .ui_element{
|
345 |
+
margin:0 0 0 10px;
|
346 |
+
}
|
347 |
+
|
348 |
+
|
349 |
+
/**********************************************************************************************************************/
|
350 |
+
/** Colors inside of the data fields in CONTENT DATA AREA **/
|
351 |
+
/**********************************************************************************************************************/
|
352 |
+
/* Refund */
|
353 |
+
.wpbc_listing_container .wpbc_list_row .wpbc_col_data .fieldvalue._refund{
|
354 |
+
color: #cc0202;
|
355 |
+
}
|
356 |
+
/* Order Number */
|
357 |
+
.wpbc_listing_container .wpbc_list_row .wpbc_col_data .fieldvalue._order_num{
|
358 |
+
font-weight: 600;
|
359 |
+
background: #9d9d9d;
|
360 |
+
color: #fff;
|
361 |
+
border-radius: 2px;
|
362 |
+
}
|
363 |
+
/**********************************************************************************************************************/
|
364 |
+
/** Selected row **/
|
365 |
+
.wpbc_selectable_body .row_selected_color {
|
366 |
+
/*background: #f9f9e7;*/
|
367 |
+
/*background: #ffffeb;*/
|
368 |
+
/*border-color: #d2d2d2 !important;*/
|
369 |
+
background: transparent;
|
370 |
+
border-color: #d2d2d2 !important;
|
371 |
+
border-left: 4px solid #08a !important;
|
372 |
+
}
|
373 |
+
/** Actions row with buttons **/
|
374 |
+
.wpbc_item_actions a.button,
|
375 |
+
.wpbc_item_actions a.button:hover {
|
376 |
+
flex: 0 0 auto;
|
377 |
+
|
378 |
+
margin: 0 1em 10px 0.25em;
|
379 |
+
|
380 |
+
color: #555;
|
381 |
+
border-color: #d8d8d8;
|
382 |
+
}
|
383 |
+
|
384 |
+
.wpbc_item_actions .wpbc_actions_buttons{
|
385 |
+
flex: 1 1 auto;
|
386 |
+
display: flex;
|
387 |
+
flex-flow: row wrap;
|
388 |
+
justify-content: flex-start;
|
389 |
+
margin-bottom: 5px;
|
390 |
+
}
|
391 |
+
.wpbc_item_actions .wpbc_actions_sysinfo{
|
392 |
+
flex: 0 1 auto;
|
393 |
+
margin-left:auto;
|
394 |
+
|
395 |
+
display: flex;
|
396 |
+
flex-flow: row wrap;
|
397 |
+
justify-content: flex-start;
|
398 |
+
|
399 |
+
align-items: stretch;
|
400 |
+
line-height: 4em;
|
401 |
+
font-size: 0.8em;
|
402 |
+
}
|
403 |
+
/**********************************************************************************************************************/
|
404 |
+
/* Terminal log screen section */
|
405 |
+
.wpbc_log_screen {
|
406 |
+
display: none;
|
407 |
+
margin: 0;
|
408 |
+
padding: 0.5em 1em;
|
409 |
+
line-height: 1.7em;
|
410 |
+
color: #fff;
|
411 |
+
background: #5b5b5b;
|
412 |
+
border-radius: 3px;
|
413 |
+
border: 1px solid;
|
414 |
+
text-shadow:none;
|
415 |
+
}
|
416 |
+
/* By default after page loading the sort selector is not visible*/
|
417 |
+
#wh_sort_selector {
|
418 |
+
display: none;
|
419 |
+
}
|
420 |
+
/* Source & booking ID in reminders */
|
421 |
+
.wpbc_next_booking_time{
|
422 |
+
font-size: 0.85em;
|
423 |
+
display: flex;
|
424 |
+
flex-flow: row wrap;
|
425 |
+
justify-content: flex-end;
|
426 |
+
align-items: center;
|
427 |
+
}
|
428 |
+
.wpbc_next_booking_time span {
|
429 |
+
flex: 0 1 auto;
|
430 |
+
}
|
431 |
+
|
432 |
+
/**********************************************************************************************************************/
|
433 |
+
/** Messages **/
|
434 |
+
/**********************************************************************************************************************/
|
435 |
+
#ajax_working {
|
436 |
+
position: relative;
|
437 |
+
}
|
438 |
+
#ajax_working > [id^="wpbc_notice_"] {
|
439 |
+
position: fixed;
|
440 |
+
top: 30px;
|
441 |
+
flex-flow: row nowrap;
|
442 |
+
justify-content: flex-end;
|
443 |
+
z-index: 100000;
|
444 |
+
right: 20px;
|
445 |
+
}
|
446 |
+
#ajax_working > [id^="wpbc_notice_"] .wpbc_alert_message {
|
447 |
+
display: flex;
|
448 |
+
top: 50px;
|
449 |
+
flex-flow: row nowrap;
|
450 |
+
justify-content: flex-start;
|
451 |
+
}
|
452 |
+
#ajax_working > [id^="wpbc_notice_"] .wpbc_alert_message .wpbc_inner_message {
|
453 |
+
/*display: flex;*/
|
454 |
+
/*flex-flow: row wrap;*/
|
455 |
+
/*justify-content: flex-end;*/
|
456 |
+
/*align-items: center;*/
|
457 |
+
width: 100%;
|
458 |
+
position: relative;
|
459 |
+
}
|
460 |
+
|
461 |
+
#ajax_working > [id^="wpbc_notice_"] .wpbc_alert_message .wpbc_inner_message .close{
|
462 |
+
order: 9;
|
463 |
+
margin-left: 15px;
|
464 |
+
}
|
465 |
+
#ajax_working > [id^="wpbc_notice_"] .wpbc_alert_message .wpbc_inner_message > * {
|
466 |
+
/*margin: 0 0 0 1em;*/
|
467 |
+
}
|
468 |
+
|
469 |
+
|
470 |
+
/**********************************************************************************************************************/
|
471 |
+
/** Hidden Templates **/
|
472 |
+
/**********************************************************************************************************************/
|
473 |
+
.wpbc_hidden_templates ,
|
474 |
+
.ui__under_actions_row__section_in_booking ,
|
475 |
+
.wpbc_ajx_toolbar .ui_container .ui_group .ui_element.ui__set_booking_cost__section_in_booking {
|
476 |
+
display:none;
|
477 |
+
}
|
478 |
+
.highlight_action_section {
|
479 |
+
background: #e7e7e7;
|
480 |
+
border-radius: 3px;
|
481 |
+
padding:0 10px;
|
482 |
+
}
|
includes/_listing_css_js/listing_ui.js
ADDED
@@ -0,0 +1,188 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
2 |
+
// Checkbox Selection functions for Listing
|
3 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
4 |
+
/**
|
5 |
+
* Usual DOM Listing structure:
|
6 |
+
<div class="wpbc_listing_container wpbc_selectable_table wpbc_NAME_listing_container">
|
7 |
+
<div class="wpbc_listing_usual_row wpbc_list_header wpbc_selectable_head">
|
8 |
+
<div class="wpbc_listing_col wpbc_col_id check-column"><div class="content_text"><input type="checkbox" /></div></div>
|
9 |
+
<div class="wpbc_listing_col wpbc_col_labels"><div class="content_text"><?php echo esc_js( __( 'Actions', 'email-reminders' ) ); ?></div></div>
|
10 |
+
<div class="wpbc_listing_col wpbc_col_data"><div class="content_text"><?php echo esc_js( __( 'Data', 'email-reminders' ) ); ?></div></div>
|
11 |
+
</div>
|
12 |
+
<div id="row_id_{{{data.rules_id}}}" class="wpbc_listing_usual_row wpbc_list_row wpbc_row">
|
13 |
+
<div class="wpbc_listing_col wpbc_col_id check-column"><div class="content_text"><input type="checkbox" /></div></div>
|
14 |
+
<div class="wpbc_listing_col wpbc_col_labels">
|
15 |
+
<div class="content_text"><span class="wpbc_label"><?php _e('Email', 'email-reminders'); ?>: {{{data['rule']['email_template']}}}</span></div>
|
16 |
+
</div>
|
17 |
+
...
|
18 |
+
</div>
|
19 |
+
*/
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Selections of several checkboxes like in gMail with shift :)
|
23 |
+
* Need to have this structure:
|
24 |
+
* .wpbc_selectable_table
|
25 |
+
* .wpbc_selectable_head
|
26 |
+
* .check-column
|
27 |
+
* :checkbox
|
28 |
+
* .wpbc_selectable_body
|
29 |
+
* .wpbc_row
|
30 |
+
* .check-column
|
31 |
+
* :checkbox
|
32 |
+
* .wpbc_selectable_foot
|
33 |
+
* .check-column
|
34 |
+
* :checkbox
|
35 |
+
*/
|
36 |
+
function wpbc_define_gmail_checkbox_selection( $ ){
|
37 |
+
|
38 |
+
var checks, first, last, checked, sliced, lastClicked = false;
|
39 |
+
|
40 |
+
// Check all checkboxes
|
41 |
+
$('.wpbc_selectable_body').find('.check-column').find(':checkbox').on( 'click', function(e) {
|
42 |
+
//$('.wpbc_selectable_body').children().children('.check-column').find(':checkbox').on( 'click', function(e) {
|
43 |
+
if ( 'undefined' == e.shiftKey ) { return true; }
|
44 |
+
if ( e.shiftKey ) {
|
45 |
+
if ( !lastClicked ) { return true; }
|
46 |
+
//checks = $( lastClicked ).closest( 'form' ).find( ':checkbox' ).filter( ':visible:enabled' );
|
47 |
+
checks = $( lastClicked ).closest( '.wpbc_selectable_body' ).find( ':checkbox' ).filter( ':visible:enabled' );
|
48 |
+
first = checks.index( lastClicked );
|
49 |
+
last = checks.index( this );
|
50 |
+
checked = $(this).prop('checked');
|
51 |
+
if ( 0 < first && 0 < last && first != last ) {
|
52 |
+
sliced = ( last > first ) ? checks.slice( first, last ) : checks.slice( last, first );
|
53 |
+
sliced.prop( 'checked', function() {
|
54 |
+
if ( $(this).closest('.wpbc_row').is(':visible') )
|
55 |
+
return checked;
|
56 |
+
|
57 |
+
return false;
|
58 |
+
} ).trigger( 'change' );
|
59 |
+
}
|
60 |
+
}
|
61 |
+
lastClicked = this;
|
62 |
+
|
63 |
+
// toggle "check all" checkboxes
|
64 |
+
var unchecked = $(this).closest('.wpbc_selectable_body').find(':checkbox').filter(':visible:enabled').not(':checked');
|
65 |
+
$(this).closest('.wpbc_selectable_table').children('.wpbc_selectable_head, .wpbc_selectable_foot').find(':checkbox').prop('checked', function() {
|
66 |
+
return ( 0 === unchecked.length );
|
67 |
+
}).trigger( 'change' );
|
68 |
+
|
69 |
+
return true;
|
70 |
+
});
|
71 |
+
|
72 |
+
// Head || Foot clicking to select / deselect ALL
|
73 |
+
$('.wpbc_selectable_head, .wpbc_selectable_foot').find('.check-column :checkbox').on( 'click', function( event ) {
|
74 |
+
var $this = $(this),
|
75 |
+
$table = $this.closest( '.wpbc_selectable_table' ),
|
76 |
+
controlChecked = $this.prop('checked'),
|
77 |
+
toggle = event.shiftKey || $this.data('wp-toggle');
|
78 |
+
|
79 |
+
$table.children( '.wpbc_selectable_body' ).filter(':visible')
|
80 |
+
.find('.check-column').find(':checkbox')
|
81 |
+
//.children().children('.check-column').find(':checkbox')
|
82 |
+
.prop('checked', function() {
|
83 |
+
if ( $(this).is(':hidden,:disabled') ) {
|
84 |
+
return false;
|
85 |
+
}
|
86 |
+
|
87 |
+
if ( toggle ) {
|
88 |
+
return ! $(this).prop( 'checked' );
|
89 |
+
} else if ( controlChecked ) {
|
90 |
+
return true;
|
91 |
+
}
|
92 |
+
|
93 |
+
return false;
|
94 |
+
}).trigger( 'change' );
|
95 |
+
|
96 |
+
$table.children('.wpbc_selectable_head, .wpbc_selectable_foot').filter(':visible')
|
97 |
+
.find('.check-column').find(':checkbox')
|
98 |
+
//.children().children('.check-column').find(':checkbox')
|
99 |
+
.prop('checked', function() {
|
100 |
+
if ( toggle ) {
|
101 |
+
return false;
|
102 |
+
} else if ( controlChecked ) {
|
103 |
+
return true;
|
104 |
+
}
|
105 |
+
|
106 |
+
return false;
|
107 |
+
});
|
108 |
+
});
|
109 |
+
|
110 |
+
|
111 |
+
// Visually show selected border
|
112 |
+
$( '.wpbc_selectable_body' ).find( '.check-column :checkbox' ).on( 'change', function ( event ){
|
113 |
+
if ( jQuery( this ).is( ':checked' ) ){
|
114 |
+
jQuery( this ).closest( '.wpbc_list_row' ).addClass( 'row_selected_color' );
|
115 |
+
} else {
|
116 |
+
jQuery( this ).closest( '.wpbc_list_row' ).removeClass( 'row_selected_color' );
|
117 |
+
}
|
118 |
+
|
119 |
+
// Disable text selection while pressing 'shift'
|
120 |
+
document.getSelection().removeAllRanges();
|
121 |
+
|
122 |
+
// Show or hide buttons on Actions toolbar at Booking Listing page, if we have some selected bookings.
|
123 |
+
wpbc_show_hide_action_buttons_for_selected_bookings();
|
124 |
+
} );
|
125 |
+
|
126 |
+
wpbc_show_hide_action_buttons_for_selected_bookings();
|
127 |
+
}
|
128 |
+
|
129 |
+
/**
|
130 |
+
* Get ID of row, based on clciked element
|
131 |
+
*
|
132 |
+
* @param this_inbound_element - ususlly this
|
133 |
+
* @returns {number}
|
134 |
+
*/
|
135 |
+
function wpbc_get_row_id_from_element( this_inbound_element ){
|
136 |
+
|
137 |
+
var element_id = jQuery( this_inbound_element ).closest('.wpbc_listing_usual_row').attr('id');
|
138 |
+
|
139 |
+
element_id = parseInt( element_id.replace( 'row_id_', '' ) );
|
140 |
+
|
141 |
+
return element_id;
|
142 |
+
}
|
143 |
+
|
144 |
+
/**
|
145 |
+
* Get ID array of selected elements
|
146 |
+
*/
|
147 |
+
function wpbc_get_selected_row_id(){
|
148 |
+
|
149 |
+
var $table = jQuery( '.wpbc_listing_container.wpbc_selectable_table');
|
150 |
+
|
151 |
+
var checkboxes = $table.children( '.wpbc_selectable_body' ).filter( ':visible' ).find( '.check-column' ).find( ':checkbox' );
|
152 |
+
|
153 |
+
var selected_id = [];
|
154 |
+
jQuery.each( checkboxes, function( key, checkbox ) {
|
155 |
+
|
156 |
+
if ( jQuery( checkbox ).is( ':checked' ) ) {
|
157 |
+
var element_id = wpbc_get_row_id_from_element( checkbox ); // jQuery( checkbox ).closest('.wpbc_listing_usual_row').attr('id');
|
158 |
+
|
159 |
+
// element_id = parseInt( element_id.replace( 'row_id_', '' ) );
|
160 |
+
|
161 |
+
selected_id.push(element_id);
|
162 |
+
}
|
163 |
+
|
164 |
+
});
|
165 |
+
|
166 |
+
//console.log( 'wpbc_get_selected_row_id', selected_id );
|
167 |
+
|
168 |
+
return selected_id;
|
169 |
+
|
170 |
+
// _.each( json_items_arr, function ( p_val, p_key, p_data ){
|
171 |
+
//
|
172 |
+
// });
|
173 |
+
}
|
174 |
+
|
175 |
+
|
176 |
+
/**
|
177 |
+
* Show or hide buttons on Actions toolbar at Booking Listing page, if we have some selected bookings.
|
178 |
+
*/
|
179 |
+
function wpbc_show_hide_action_buttons_for_selected_bookings(){
|
180 |
+
|
181 |
+
var selected_rows_arr = wpbc_get_selected_row_id();
|
182 |
+
|
183 |
+
if ( selected_rows_arr.length > 0 ){
|
184 |
+
jQuery( '.hide_button_if_no_selection' ).show();
|
185 |
+
} else {
|
186 |
+
jQuery( '.hide_button_if_no_selection' ).hide();
|
187 |
+
}
|
188 |
+
}
|
includes/_listing_css_js/listing_ui.php
ADDED
@@ -0,0 +1,78 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php /**
|
2 |
+
* @version 1.0
|
3 |
+
* @description Listing
|
4 |
+
* @category Contacts Listings
|
5 |
+
* @author wpdevelop
|
6 |
+
*
|
7 |
+
* @web-site http://oplugins.com/
|
8 |
+
* @email info@oplugins.com
|
9 |
+
*
|
10 |
+
* @modified 2020-02-10
|
11 |
+
*/
|
12 |
+
|
13 |
+
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
14 |
+
|
15 |
+
class WPBC_Listing {
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Define HOOKs for loading CSS and JavaScript files
|
19 |
+
*/
|
20 |
+
public function init_load_css_js() {
|
21 |
+
// JS & CSS
|
22 |
+
add_action( 'wpbc_enqueue_js_files', array( $this, 'js_load_files' ), 50 );
|
23 |
+
add_action( 'wpbc_enqueue_css_files', array( $this, 'enqueue_css_files' ), 50 );
|
24 |
+
}
|
25 |
+
|
26 |
+
/** JSS */
|
27 |
+
public function js_load_files( $where_to_load ) {
|
28 |
+
|
29 |
+
$in_footer = true;
|
30 |
+
|
31 |
+
if ( ( is_admin() ) && ( in_array( $where_to_load, array( 'admin', 'both' ) ) ) ) {
|
32 |
+
|
33 |
+
wp_enqueue_script( 'wpbc-listing_class', trailingslashit( plugins_url( '', __FILE__ ) ) . 'listing_ui.js' /* wpbc_plugin_url( '/_out/js/codemirror.js' ) */
|
34 |
+
, array( 'wpbc-global-vars' ), '1.1', $in_footer );
|
35 |
+
/**
|
36 |
+
wp_localize_script( 'wpbc-global-vars', 'wpbc_live_request_obj'
|
37 |
+
, array(
|
38 |
+
'contacts' => '',
|
39 |
+
'reminders' => ''
|
40 |
+
)
|
41 |
+
);
|
42 |
+
*/
|
43 |
+
}
|
44 |
+
}
|
45 |
+
|
46 |
+
/** CSS */
|
47 |
+
public function enqueue_css_files( $where_to_load ) {
|
48 |
+
|
49 |
+
if ( ( is_admin() ) && ( in_array( $where_to_load, array( 'admin', 'both' ) ) ) ) {
|
50 |
+
|
51 |
+
wp_enqueue_style( 'wpbc-listing_class', trailingslashit( plugins_url( '', __FILE__ ) ) . 'listing_ui.css', array(), WP_BK_VERSION_NUM );
|
52 |
+
}
|
53 |
+
}
|
54 |
+
|
55 |
+
// </editor-fold>
|
56 |
+
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Just for loading CSS and JavaScript files
|
61 |
+
*/
|
62 |
+
if ( true ) {
|
63 |
+
$js_css_loading = new WPBC_Listing;
|
64 |
+
$js_css_loading->init_load_css_js();
|
65 |
+
}
|
66 |
+
|
67 |
+
|
68 |
+
function wpbc_ajx_booking_listing__get_default_view_mode(){
|
69 |
+
|
70 |
+
if (
|
71 |
+
( WPBC_EXIST_NEW_BOOKING_LISTING )
|
72 |
+
&& ( 'On' != get_bk_option( 'booking_is_use_old_booking_listing' ) )
|
73 |
+
) {
|
74 |
+
$booking_default_view_mode = wpbc_get_default_saved_view_mode_for_wpbc_page();
|
75 |
+
return $booking_default_view_mode;
|
76 |
+
}
|
77 |
+
return false;
|
78 |
+
}
|
includes/_pagination/pagination.css
ADDED
@@ -0,0 +1,53 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
.wpbc-bottom-pagination{
|
2 |
+
display: flex;
|
3 |
+
flex-flow: row wrap;
|
4 |
+
justify-content: flex-end;
|
5 |
+
align-items: stretch;
|
6 |
+
}
|
7 |
+
.wpbc-ajax-pagination_items_per_page,
|
8 |
+
.wpbc-ajax-pagination-container {
|
9 |
+
display:flex;
|
10 |
+
flex-flow: row wrap;
|
11 |
+
justify-content: flex-start;
|
12 |
+
align-items: stretch;
|
13 |
+
|
14 |
+
margin: 0;
|
15 |
+
}
|
16 |
+
.wpbc-ajax-pagination_items_per_page{
|
17 |
+
margin-left: 1em;
|
18 |
+
margin-top: -1px;
|
19 |
+
}
|
20 |
+
.wpbc-ajax-pagination_items_per_page .ui_element,
|
21 |
+
.wpbc-ajax-pagination .ui_element {
|
22 |
+
flex: 0 0 auto;
|
23 |
+
}
|
24 |
+
.wpbc-ajax-pagination .ui_element > .wpbc_ui_button {
|
25 |
+
height: 30px;
|
26 |
+
margin: 5px 5px;
|
27 |
+
padding: 0 14px;
|
28 |
+
}
|
29 |
+
.wpbc-ajax-pagination_items_per_page .ui_element > * {
|
30 |
+
height: 30px;
|
31 |
+
margin: 6px 5px;
|
32 |
+
}
|
33 |
+
|
34 |
+
.wpbc-ajax-pagination .ui_element .wpbc_ui_button.active:not(.inactive),
|
35 |
+
.wpbc-ajax-pagination .ui_element .wpbc_ui_button.active:hover:not(.inactive) {
|
36 |
+
transform: none;
|
37 |
+
}
|
38 |
+
@media (max-width: 782px) {
|
39 |
+
|
40 |
+
.wpbc-bottom-pagination .wpbc-ajax-pagination-container .ui_element > *,
|
41 |
+
.wpbc-bottom-pagination .wpbc-ajax-pagination_items_per_page .ui_element > * {
|
42 |
+
height: 38px;
|
43 |
+
}
|
44 |
+
.wpbc-bottom-pagination .wpbc-ajax-pagination-container .ui_element > .wpbc_ui_button,
|
45 |
+
.wpbc-bottom-pagination .wpbc-ajax-pagination_items_per_page .ui_element > .wpbc_ui_button {
|
46 |
+
padding: 0 15px 2px;
|
47 |
+
padding-bottom: 1px;
|
48 |
+
display: flex;
|
49 |
+
flex-flow: row wrap;
|
50 |
+
justify-content: center;
|
51 |
+
align-items: center;
|
52 |
+
}
|
53 |
+
}
|
includes/_pagination/pagination.js
ADDED
@@ -0,0 +1,35 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
2 |
+
// Views
|
3 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Show Pagination
|
7 |
+
*
|
8 |
+
* @param pagination_container - '.wpbc_rules_pagination'
|
9 |
+
* @param params_obj - JSON object ~ { 'page_active': $page_active, 'pages_count': $pages_count }
|
10 |
+
*/
|
11 |
+
function wpbc_pagination_echo( pagination_container, params_obj ){
|
12 |
+
|
13 |
+
var pagination = wp.template( 'wpbc_pagination' );
|
14 |
+
jQuery( pagination_container ).html( '<div class="wpbc-bottom-pagination"></div>' );
|
15 |
+
|
16 |
+
// Pagination
|
17 |
+
jQuery( pagination_container + ' .wpbc-bottom-pagination').append( pagination( params_obj ) ) ;
|
18 |
+
|
19 |
+
|
20 |
+
// Number of items per page
|
21 |
+
var pagination_items_per_page = wp.template( 'wpbc_pagination_items_per_page' );
|
22 |
+
jQuery( pagination_container + ' .wpbc-bottom-pagination').append( pagination_items_per_page( params_obj ) ) ;
|
23 |
+
|
24 |
+
jQuery( pagination_container ).show();
|
25 |
+
}
|
26 |
+
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Blank function. -- Redefine this function in specific page-XXXX.php file for specific actions
|
30 |
+
*
|
31 |
+
* @param page_number int
|
32 |
+
*/
|
33 |
+
function wpbc_pagination_click_page( page_number ){
|
34 |
+
console.log( 'wpbc_pagination_click_page', page_number );
|
35 |
+
}
|
includes/_pagination/pagination.php
ADDED
@@ -0,0 +1,318 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php /**
|
2 |
+
* @version 1.0
|
3 |
+
* @description Pagination
|
4 |
+
* @category Pagination Class
|
5 |
+
* @author wpdevelop
|
6 |
+
*
|
7 |
+
* @web-site http://oplugins.com/
|
8 |
+
* @email info@oplugins.com
|
9 |
+
*
|
10 |
+
* @modified 2020-01-23
|
11 |
+
*/
|
12 |
+
|
13 |
+
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
14 |
+
|
15 |
+
|
16 |
+
/*
|
17 |
+
* Usage: Pagination Class
|
18 |
+
|
19 |
+
<div class="wpbc_rules_pagination"></div>
|
20 |
+
<?php
|
21 |
+
$wpbc_pagination = new WPBC_Pagination();
|
22 |
+
$wpbc_pagination->init(
|
23 |
+
array(
|
24 |
+
'load_on_page' => 'wpbc-rules',
|
25 |
+
'container' => '.wpbc_rules_pagination',
|
26 |
+
'on_click' => 'wpbc_rules_pagination_click' // onclick = "javascript: wpbc_rules_listing_page( page_num );" - need to define this function in JS file
|
27 |
+
)
|
28 |
+
);
|
29 |
+
$wpbc_pagination->show( // Its showing with JavaScript on document ready
|
30 |
+
array(
|
31 |
+
'page_active' => 3,
|
32 |
+
'pages_count' => 20
|
33 |
+
)
|
34 |
+
);
|
35 |
+
|
36 |
+
OR (for showing with JavaScript) :
|
37 |
+
|
38 |
+
<script type="text/javascript">
|
39 |
+
jQuery( document ).ready( function (){
|
40 |
+
|
41 |
+
wpbc_pagination_echo( '.wpbc_rules_pagination',
|
42 |
+
{
|
43 |
+
'page_active': page_number,
|
44 |
+
'pages_count': Math.ceil( ajx_count / ajx_page_items_count )
|
45 |
+
}
|
46 |
+
);
|
47 |
+
} );
|
48 |
+
</script>
|
49 |
+
|
50 |
+
*/
|
51 |
+
|
52 |
+
|
53 |
+
class WPBC_Pagination {
|
54 |
+
|
55 |
+
private $settings;
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Get parameter Value
|
59 |
+
*
|
60 |
+
* @param string $parameter - name of parameter
|
61 |
+
*
|
62 |
+
* @return mixed
|
63 |
+
*/
|
64 |
+
public function get_settings( $parameter ){
|
65 |
+
|
66 |
+
if ( ! empty( $this->settings[ $parameter ] ) ) {
|
67 |
+
return $this->settings[ $parameter ];
|
68 |
+
} else {
|
69 |
+
return false;
|
70 |
+
}
|
71 |
+
}
|
72 |
+
|
73 |
+
|
74 |
+
// <editor-fold defaultstate="collapsed" desc=" /// JS | CSS files /// " >
|
75 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
76 |
+
/// JS | CSS files
|
77 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
78 |
+
|
79 |
+
/**
|
80 |
+
* Define HOOKs for loading CSS and JavaScript files
|
81 |
+
*/
|
82 |
+
public function init_load_css_js() {
|
83 |
+
// JS & CSS
|
84 |
+
add_action( 'wpbc_enqueue_js_files', array( $this, 'js_load_files' ), 50 );
|
85 |
+
add_action( 'wpbc_enqueue_css_files', array( $this, 'enqueue_css_files' ), 50 );
|
86 |
+
}
|
87 |
+
|
88 |
+
/** JSS */
|
89 |
+
public function js_load_files( $where_to_load ) {
|
90 |
+
|
91 |
+
$in_footer = true;
|
92 |
+
|
93 |
+
if ( ( is_admin() ) && ( in_array( $where_to_load, array( 'admin', 'both' ) ) ) ) {
|
94 |
+
|
95 |
+
//wp_enqueue_script( 'wpbc-live_search', wpbc_plugin_url( '/_out/js/live_search.js' ), array( 'wpbc-global-vars' ), '1.1', $in_footer );
|
96 |
+
wp_enqueue_script( 'wpbc-pagination'
|
97 |
+
, trailingslashit( plugins_url( '', __FILE__ ) ) . 'pagination.js' /* wpbc_plugin_url( '/_out/js/codemirror.js' ) */
|
98 |
+
, array( 'wpbc-global-vars' ), '1.1', $in_footer );
|
99 |
+
|
100 |
+
/**
|
101 |
+
wp_localize_script( 'wpbc-global-vars', 'wpbc_live_request_obj'
|
102 |
+
, array(
|
103 |
+
'contacts' => '',
|
104 |
+
'reminders' => ''
|
105 |
+
)
|
106 |
+
);
|
107 |
+
*/
|
108 |
+
}
|
109 |
+
}
|
110 |
+
|
111 |
+
/** CSS */
|
112 |
+
public function enqueue_css_files( $where_to_load ) {
|
113 |
+
|
114 |
+
if ( ( is_admin() ) && ( in_array( $where_to_load, array( 'admin', 'both' ) ) ) ) {
|
115 |
+
|
116 |
+
wp_enqueue_style( 'wpbc-pagination', trailingslashit( plugins_url( '', __FILE__ ) ) . 'pagination.css', array(), WP_BK_VERSION_NUM );
|
117 |
+
}
|
118 |
+
}
|
119 |
+
|
120 |
+
// </editor-fold>
|
121 |
+
|
122 |
+
|
123 |
+
// <editor-fold defaultstate="collapsed" desc=" /// Templates /// " >
|
124 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
125 |
+
/// Templates
|
126 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
127 |
+
|
128 |
+
public function init_load_templates() {
|
129 |
+
|
130 |
+
add_action( 'wpbc_hook_settings_page_footer', array( $this, 'hook__page_footer_tmpl' ) );
|
131 |
+
}
|
132 |
+
|
133 |
+
|
134 |
+
/**
|
135 |
+
* Templates at footer of page
|
136 |
+
*
|
137 |
+
* @param $page string
|
138 |
+
*/
|
139 |
+
public function hook__page_footer_tmpl( $page ){
|
140 |
+
|
141 |
+
if ( $this->get_settings( 'load_on_page' ) === $page ) {
|
142 |
+
|
143 |
+
$this->template__pagination();
|
144 |
+
}
|
145 |
+
}
|
146 |
+
|
147 |
+
|
148 |
+
private function template__pagination(){
|
149 |
+
|
150 |
+
// Pagination
|
151 |
+
?><script type="text/html" id="tmpl-wpbc_pagination">
|
152 |
+
<div class="wpbc-ajax-pagination wpbc-ajax-pagination-container">
|
153 |
+
<# if ( data.pages_count > 1 ) { #>
|
154 |
+
<div class="ui_element">
|
155 |
+
<a class="wpbc_ui_control wpbc_ui_button <# if ( 1 == data.page_active ) { #> disabled<# } #>"
|
156 |
+
href="javascript:void(0)"
|
157 |
+
<# if ( 1 != data.page_active ) { #> onclick="javascript:<?php echo $this->get_settings( 'on_click' ); ?>( parseInt( {{ data.page_active }} ) - 1 );" <# } #>
|
158 |
+
>
|
159 |
+
<?php _e('Prev', 'booking'); ?>
|
160 |
+
</a>
|
161 |
+
</div>
|
162 |
+
<# }
|
163 |
+
|
164 |
+
/** Number visible pages (links) that linked to active page, other pages skipped by "..." */
|
165 |
+
var num_closed_steps = 2;
|
166 |
+
|
167 |
+
for ( var pg_num = 1; pg_num <= data.pages_count; pg_num++ ){
|
168 |
+
|
169 |
+
if ( ! (
|
170 |
+
( data.pages_count > ( num_closed_steps * 4) )
|
171 |
+
&& ( pg_num > num_closed_steps )
|
172 |
+
&& ( ( data.pages_count - pg_num + 1 ) > num_closed_steps )
|
173 |
+
&& ( Math.abs( data.page_active - pg_num ) > num_closed_steps )
|
174 |
+
) )
|
175 |
+
{
|
176 |
+
#> <div class="ui_element"><a class="wpbc_ui_control wpbc_ui_button <# if ( pg_num == data.page_active ) { #> active<# } #>"
|
177 |
+
href="javascript:void(0)" onclick="javascript:<?php echo $this->get_settings( 'on_click' ); ?>( {{pg_num}} );" >
|
178 |
+
{{pg_num}}</a></div> <#
|
179 |
+
|
180 |
+
if ( ( data.pages_count > ( num_closed_steps * 4) )
|
181 |
+
&& ( (pg_num+1) > num_closed_steps )
|
182 |
+
&& ( ( data.pages_count - ( pg_num + 1 ) ) > num_closed_steps )
|
183 |
+
&& ( Math.abs(data.page_active - ( pg_num + 1 ) ) > num_closed_steps )
|
184 |
+
) {
|
185 |
+
#><div class="ui_element"><a class="wpbc_ui_control wpbc_ui_button disabled" href="javascript:void(0);">...</a></div><#
|
186 |
+
}
|
187 |
+
}
|
188 |
+
}
|
189 |
+
|
190 |
+
if ( data.pages_count > 1 ) { #>
|
191 |
+
<div class="ui_element">
|
192 |
+
<a class="wpbc_ui_control wpbc_ui_button <# if ( data.pages_count == data.page_active ) { #> disabled<# } #>"
|
193 |
+
href="javascript:void(0)"
|
194 |
+
<# if ( data.pages_count != data.page_active ) { #> onclick="javascript:<?php echo $this->get_settings( 'on_click' ); ?>( parseInt( {{ data.page_active }} ) + 1 );" <# } #>
|
195 |
+
>
|
196 |
+
<?php _e('Next', 'booking'); ?>
|
197 |
+
</a>
|
198 |
+
</div>
|
199 |
+
<# } #>
|
200 |
+
</div>
|
201 |
+
</script><?php
|
202 |
+
|
203 |
+
// Pagination Items per page
|
204 |
+
?><script type="text/html" id="tmpl-wpbc_pagination_items_per_page">
|
205 |
+
<div class="wpbc-ajax-pagination_items_per_page">
|
206 |
+
<div class="ui_element">
|
207 |
+
<select class="wpbc_items_per_page wpbc_ui_control wpbc_ui_select " autocomplete="off">
|
208 |
+
<#
|
209 |
+
var my_options_arr = [5, 10, 50, 100];
|
210 |
+
var is_selected = '';
|
211 |
+
_.each( my_options_arr, function ( p_val, p_key, p_data ) {
|
212 |
+
is_selected = '';
|
213 |
+
if ( data.page_items_count == p_val ) {
|
214 |
+
is_selected = ' selected="selected" ';
|
215 |
+
}
|
216 |
+
#><option value="{{p_val}}" {{is_selected}}>{{p_val}}</option><#
|
217 |
+
});
|
218 |
+
#>
|
219 |
+
</select>
|
220 |
+
</div>
|
221 |
+
<div class="ui_element">
|
222 |
+
<label class="wpbc_ui_control_label"><?php _e('per page','booking') ?></label>
|
223 |
+
</div>
|
224 |
+
<?php
|
225 |
+
|
226 |
+
if (0) {
|
227 |
+
?>
|
228 |
+
<div class="ui_element">
|
229 |
+
<select class="wpbc_items_sort_type wpbc_ui_control wpbc_ui_select" autocomplete="off">
|
230 |
+
<#
|
231 |
+
my_options_arr = {
|
232 |
+
'ASC': '<?php echo esc_js(__( 'ASC', 'booking' )); ?>',
|
233 |
+
'DESC': '<?php echo esc_js(__( 'DESC', 'booking' )); ?>',
|
234 |
+
};
|
235 |
+
is_selected = '';
|
236 |
+
_.each( my_options_arr, function ( p_val, p_key, p_data ) {
|
237 |
+
is_selected = '';
|
238 |
+
if ( data.sort_type == p_key ) {
|
239 |
+
is_selected = ' selected="selected" ';
|
240 |
+
}
|
241 |
+
#><option value="{{p_key}}" {{is_selected}}>{{p_val}}</option><#
|
242 |
+
});
|
243 |
+
#>
|
244 |
+
</select>
|
245 |
+
</div>
|
246 |
+
<?php } ?>
|
247 |
+
</div>
|
248 |
+
</script><?php
|
249 |
+
}
|
250 |
+
|
251 |
+
// </editor-fold>
|
252 |
+
|
253 |
+
|
254 |
+
/**
|
255 |
+
* Init Pagination on start - define 'load_on_page', 'container', 'on_click' function
|
256 |
+
*
|
257 |
+
* @param array $params = array(
|
258 |
+
'load_on_page' => 'wpbc-settings', // defined at function in_page() {
|
259 |
+
'container' => '.wpbc_settings_pagination', // defined in function content(), like <div class="wpbc_rules_pagination"></div>
|
260 |
+
'on_click' => 'wpbc_pagination_click_page' // onclick = "javascript: wpbc_pagination_click_page( page_active );" - need to define this function in JS file
|
261 |
+
);
|
262 |
+
*/
|
263 |
+
public function init( $params = array() ) {
|
264 |
+
|
265 |
+
$defaults = array(
|
266 |
+
'load_on_page' => 'wpbc-settings', // defined at function in_page() {
|
267 |
+
'container' => '.wpbc_settings_pagination', // defined in function content(), like <div class="wpbc_rules_pagination"></div>
|
268 |
+
'on_click' => 'wpbc_pagination_click_page' // onclick = "javascript: wpbc_pagination_click_page( page_active );" - need to define this function in JS file
|
269 |
+
);
|
270 |
+
$this->settings = wp_parse_args( $params, $defaults );
|
271 |
+
|
272 |
+
$this->init_load_templates();
|
273 |
+
}
|
274 |
+
|
275 |
+
|
276 |
+
/**
|
277 |
+
* Show pagination
|
278 |
+
*
|
279 |
+
* @param array $params = array(
|
280 |
+
'page_active' => 1,
|
281 |
+
'pages_count' => 10
|
282 |
+
)
|
283 |
+
*/
|
284 |
+
public function show( $params = array() ) {
|
285 |
+
$defaults = array(
|
286 |
+
'page_active' => 1,
|
287 |
+
'pages_count' => 1
|
288 |
+
);
|
289 |
+
$params = wp_parse_args( $params, $defaults );
|
290 |
+
?>
|
291 |
+
<script type="text/javascript">
|
292 |
+
|
293 |
+
jQuery( document ).ready( function (){
|
294 |
+
|
295 |
+
wpbc_pagination_echo( '<?php echo $this->get_settings( 'container' ); ?>', <?php
|
296 |
+
echo wp_json_encode(
|
297 |
+
array(
|
298 |
+
'page_active' => $params['page_active'],
|
299 |
+
'pages_count' => $params['pages_count']
|
300 |
+
)
|
301 |
+
);
|
302 |
+
?> );
|
303 |
+
} );
|
304 |
+
</script>
|
305 |
+
<?php
|
306 |
+
}
|
307 |
+
}
|
308 |
+
|
309 |
+
/**
|
310 |
+
* Just for loading CSS and JavaScript files for all Settings pages
|
311 |
+
*/
|
312 |
+
if ( true ) {
|
313 |
+
$js_css_loading = new WPBC_Pagination;
|
314 |
+
$js_css_loading->init_load_css_js();
|
315 |
+
}
|
316 |
+
|
317 |
+
|
318 |
+
//TODO: delete ../email-reminders/_src/css/o-pagination.css
|
includes/_toolbar_ui/_out/toolbar_ui.css
ADDED
@@ -0,0 +1,993 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
/* UI Toolbar *************************************************************************************************/
|
2 |
+
/* To Compile file: Alt + F12 and run command: "gulp wpbc" */
|
3 |
+
/* 1. Default Button Style ------------------------------------------------------------------------------------------ */
|
4 |
+
.ui_element .wpbc_ui_button {
|
5 |
+
display: -ms-flexbox;
|
6 |
+
display: flex;
|
7 |
+
-ms-flex-flow: row nowrap;
|
8 |
+
flex-flow: row nowrap;
|
9 |
+
-ms-flex-pack: start;
|
10 |
+
justify-content: flex-start;
|
11 |
+
-ms-flex-align: center;
|
12 |
+
align-items: center;
|
13 |
+
text-decoration: none;
|
14 |
+
/*font-size: 13px;*/
|
15 |
+
/*line-height: 2.15384615; !* 28px *!*/
|
16 |
+
/*min-height: 30px;*/
|
17 |
+
min-height: 24px;
|
18 |
+
margin: 0;
|
19 |
+
padding: 0 10px 2px;
|
20 |
+
padding-bottom: 1px;
|
21 |
+
cursor: pointer;
|
22 |
+
/*border-width: 1px; - Defined at Several elements in a Group. Point #2. */
|
23 |
+
border-style: solid;
|
24 |
+
-webkit-appearance: none;
|
25 |
+
/*border-radius: 3px; - Defined at Several elements in a Group. Point #2. */
|
26 |
+
white-space: nowrap;
|
27 |
+
box-sizing: border-box;
|
28 |
+
}
|
29 |
+
|
30 |
+
.ui_element .wpbc_ui_button,
|
31 |
+
.ui_element .wpbc_ui_button-secondary {
|
32 |
+
color: #555;
|
33 |
+
border-color: #d8d8d8;
|
34 |
+
background: #f7f7f7;
|
35 |
+
vertical-align: top;
|
36 |
+
}
|
37 |
+
|
38 |
+
/* :hover ---- */
|
39 |
+
.ui_element .wpbc_ui_button.hover:not(.inactive),
|
40 |
+
.ui_element .wpbc_ui_button:hover:not(.inactive),
|
41 |
+
.ui_element .wpbc_ui_button-secondary:hover:not(.inactive) {
|
42 |
+
background: #fafafa;
|
43 |
+
border-color: #d8d8d8;
|
44 |
+
color: #23282d;
|
45 |
+
text-decoration: none;
|
46 |
+
}
|
47 |
+
|
48 |
+
.ui_element .wpbc_ui_button.hover.inactive,
|
49 |
+
.ui_element .wpbc_ui_button.inactive:hover,
|
50 |
+
.ui_element .wpbc_ui_button-secondary.inactive:hover {
|
51 |
+
cursor: default;
|
52 |
+
}
|
53 |
+
|
54 |
+
/* :focus ---- */
|
55 |
+
.ui_element .wpbc_ui_button.focus,
|
56 |
+
.ui_element .wpbc_ui_button:focus,
|
57 |
+
.ui_element .wpbc_ui_button-secondary:focus {
|
58 |
+
background: #fafafa;
|
59 |
+
border-color: #d8d8d8;
|
60 |
+
color: #23282d;
|
61 |
+
/*box-shadow: 0 0 0 1px #4f94d4, 0 0 2px 1px rgba(79, 148, 212, 0.8); This is Default: WordPress */
|
62 |
+
box-shadow: 0 0 0 0px #4f94d4, 0 0 1px 1px rgba(79, 148, 212, 0.8);
|
63 |
+
z-index: 1;
|
64 |
+
text-decoration: none;
|
65 |
+
/* Only visible in Windows High Contrast mode */
|
66 |
+
outline: 2px solid transparent;
|
67 |
+
/* Reset inherited offset from Gutenberg */
|
68 |
+
outline-offset: 0;
|
69 |
+
}
|
70 |
+
|
71 |
+
/* :active ---- */
|
72 |
+
.wpbc_ui_dropdown.open > .wpbc_ui_button:not(.inactive),
|
73 |
+
.ui_element .wpbc_ui_button:active:not(.inactive),
|
74 |
+
.ui_element .wpbc_ui_button-secondary:active:not(.inactive) {
|
75 |
+
background: #f6f7f7;
|
76 |
+
border-color: #d8d8d8;
|
77 |
+
box-shadow: inset 0 1px 7px -3px rgba(0, 0, 0, 0.3);
|
78 |
+
-ms-transform: translateY(1px);
|
79 |
+
transform: translateY(1px);
|
80 |
+
outline: 0;
|
81 |
+
text-decoration: none;
|
82 |
+
}
|
83 |
+
|
84 |
+
/* :disabled ---- */
|
85 |
+
.ui_element .wpbc_ui_button:disabled,
|
86 |
+
.ui_element .wpbc_ui_button[disabled],
|
87 |
+
.ui_element.disabled .wpbc_ui_button,
|
88 |
+
.ui_element .wpbc_ui_button.disabled,
|
89 |
+
.ui_element .wpbc_ui_button-secondary[disabled],
|
90 |
+
.ui_element .wpbc_ui_button-secondary:disabled,
|
91 |
+
.ui_element .wpbc_ui_button-secondary.disabled,
|
92 |
+
.ui_element .wpbc_ui_button-disabled {
|
93 |
+
color: #a7aaad !important;
|
94 |
+
border-color: #dcdcde !important;
|
95 |
+
background: #f6f7f7 !important;
|
96 |
+
box-shadow: none !important;
|
97 |
+
cursor: default;
|
98 |
+
-ms-transform: none !important;
|
99 |
+
transform: none !important;
|
100 |
+
}
|
101 |
+
|
102 |
+
/* .active CLASS - pressed button, pressed state e.g. a selected setting */
|
103 |
+
.ui_element .wpbc_ui_button.active:not(.inactive),
|
104 |
+
.ui_element .wpbc_ui_button.active:hover:not(.inactive) {
|
105 |
+
background: #f6f7f7;
|
106 |
+
border-color: #d8d8d8;
|
107 |
+
box-shadow: inset 0 1px 7px -3px rgba(0, 0, 0, 0.3);
|
108 |
+
-ms-transform: translateY(1px);
|
109 |
+
transform: translateY(1px);
|
110 |
+
outline: 0;
|
111 |
+
text-decoration: none;
|
112 |
+
}
|
113 |
+
|
114 |
+
.ui_element .wpbc_ui_button.active:focus:not(.inactive) {
|
115 |
+
border-color: #3582c4;
|
116 |
+
box-shadow: inset 0 1px 5px -3px #0a4b78, 0 0 1px 1px rgba(79, 148, 212, 0.1);
|
117 |
+
}
|
118 |
+
|
119 |
+
/* 2. Primary Button Style ----------------------------------------------------------------------------------------- */
|
120 |
+
.ui_element .wpbc_ui_button_primary {
|
121 |
+
background: #0085ba;
|
122 |
+
border-color: #0073aa #006799 #006799;
|
123 |
+
color: #fff;
|
124 |
+
text-shadow: 0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799;
|
125 |
+
text-decoration: none;
|
126 |
+
box-shadow: 0 1px 0px #f1f1f1;
|
127 |
+
/*background: #2271b1;*/
|
128 |
+
/*border-color: #2271b1;*/
|
129 |
+
/*color: #fff;*/
|
130 |
+
/*text-decoration: none;*/
|
131 |
+
/*text-shadow: none;*/
|
132 |
+
}
|
133 |
+
|
134 |
+
/* :hover, :focus ---- */
|
135 |
+
.ui_element .wpbc_ui_button_primary.hover:not(.inactive),
|
136 |
+
.ui_element .wpbc_ui_button_primary:hover:not(.inactive),
|
137 |
+
.ui_element .wpbc_ui_button_primary.focus:not(.inactive),
|
138 |
+
.ui_element .wpbc_ui_button_primary:focus:not(.inactive) {
|
139 |
+
/*background: #135e96;*/
|
140 |
+
/*border-color: #135e96;*/
|
141 |
+
/*color: #fff;*/
|
142 |
+
background: #008ec2;
|
143 |
+
border-color: #006799;
|
144 |
+
color: #fff;
|
145 |
+
}
|
146 |
+
|
147 |
+
/* :focus ---- */
|
148 |
+
.ui_element .wpbc_ui_button_primary.focus:not(.inactive),
|
149 |
+
.ui_element .wpbc_ui_button_primary:focus:not(.inactive) {
|
150 |
+
box-shadow: 0 0 0 0px #fff, 0 0 2px 1px #a4d7ff;
|
151 |
+
}
|
152 |
+
|
153 |
+
/* :active ---- */
|
154 |
+
.ui_element .wpbc_ui_button_primary.active:not(.inactive),
|
155 |
+
.ui_element .wpbc_ui_button_primary.active:hover:not(.inactive),
|
156 |
+
.ui_element .wpbc_ui_button_primary.active:focus:not(.inactive),
|
157 |
+
.ui_element .wpbc_ui_button_primary:active:not(.inactive) {
|
158 |
+
background: #0c7ca8;
|
159 |
+
border-color: #0b79a4;
|
160 |
+
box-shadow: inset 0 1px 7px -3px rgba(0, 0, 0, 0.3);
|
161 |
+
color: #fff;
|
162 |
+
}
|
163 |
+
|
164 |
+
/* :disabled ---- */
|
165 |
+
.ui_element .wpbc_ui_button_primary[disabled],
|
166 |
+
.ui_element .wpbc_ui_button_primary:disabled,
|
167 |
+
.ui_element .wpbc_ui_button_primary-disabled,
|
168 |
+
.ui_element .wpbc_ui_button_primary.disabled {
|
169 |
+
color: #a7aaad !important;
|
170 |
+
background: #f6f7f7 !important;
|
171 |
+
border-color: #dcdcde !important;
|
172 |
+
box-shadow: none !important;
|
173 |
+
text-shadow: none !important;
|
174 |
+
cursor: default;
|
175 |
+
}
|
176 |
+
|
177 |
+
@media (max-width: 782px) {
|
178 |
+
.ui_element .in-button-text {
|
179 |
+
display: none;
|
180 |
+
}
|
181 |
+
}
|
182 |
+
|
183 |
+
/* 3.1 Text --------------------------------------------------------------------------------------------------------- */
|
184 |
+
.ui_element .wpbc_ui_text {
|
185 |
+
border: 1px solid #d6d6d6;
|
186 |
+
-ms-flex: 1 1 120px;
|
187 |
+
flex: 1 1 120px;
|
188 |
+
}
|
189 |
+
|
190 |
+
/* :focus ---- */
|
191 |
+
.ui_element .wpbc_ui_text.focus,
|
192 |
+
.ui_element .wpbc_ui_text:focus {
|
193 |
+
border-color: #2271b1;
|
194 |
+
box-shadow: 0 0 0 1px #2271b1;
|
195 |
+
border-color: #d8d8d8;
|
196 |
+
/*box-shadow: 0 0 0 1px #4f94d4, 0 0 2px 1px rgba(79, 148, 212, 0.8); This is Default: WordPress */
|
197 |
+
box-shadow: 0 0 0 0px #4f94d4, 0 0 1px 1px rgba(79, 148, 212, 0.8);
|
198 |
+
z-index: 1;
|
199 |
+
/* Only visible in Windows High Contrast mode */
|
200 |
+
outline: 2px solid transparent;
|
201 |
+
}
|
202 |
+
|
203 |
+
/* 3.2 Select-box ------------------------------------------------------------------------------------------------- */
|
204 |
+
.ui_element .wpbc_ui_select {
|
205 |
+
border: 1px solid #d6d6d6;
|
206 |
+
-ms-flex: 1 1 auto;
|
207 |
+
flex: 1 1 auto;
|
208 |
+
}
|
209 |
+
|
210 |
+
/* :focus ---- */
|
211 |
+
.ui_element .wpbc_ui_select.focus,
|
212 |
+
.ui_element .wpbc_ui_select:focus {
|
213 |
+
border-color: #2271b1;
|
214 |
+
box-shadow: 0 0 0 1px #2271b1;
|
215 |
+
border-color: #d8d8d8;
|
216 |
+
/*box-shadow: 0 0 0 1px #4f94d4, 0 0 2px 1px rgba(79, 148, 212, 0.8); This is Default: WordPress */
|
217 |
+
box-shadow: 0 0 0 0px #4f94d4, 0 0 1px 1px rgba(79, 148, 212, 0.8);
|
218 |
+
z-index: 1;
|
219 |
+
/* Only visible in Windows High Contrast mode */
|
220 |
+
outline: 2px solid transparent;
|
221 |
+
}
|
222 |
+
|
223 |
+
/* 3.3 Check-box & Radio ----------------------------------------------------------------------------------------- */
|
224 |
+
.ui_element .wpbc_ui_checkbox,
|
225 |
+
.ui_element .wpbc_ui_radio {
|
226 |
+
border: 1px solid #bcbcbc;
|
227 |
+
border-radius: 4px;
|
228 |
+
background: #fff;
|
229 |
+
color: #50575e;
|
230 |
+
clear: none;
|
231 |
+
cursor: pointer;
|
232 |
+
display: inline-block;
|
233 |
+
line-height: 0 !important;
|
234 |
+
height: 1rem !important;
|
235 |
+
margin: -0.25rem 0.25rem 0 0;
|
236 |
+
outline: 0;
|
237 |
+
padding: 0 !important;
|
238 |
+
text-align: center;
|
239 |
+
vertical-align: middle;
|
240 |
+
width: 1rem;
|
241 |
+
min-width: 1rem;
|
242 |
+
-webkit-appearance: none;
|
243 |
+
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
244 |
+
transition: .05s border-color ease-in-out;
|
245 |
+
margin: 0;
|
246 |
+
-ms-flex-item-align: center;
|
247 |
+
align-self: center;
|
248 |
+
}
|
249 |
+
|
250 |
+
.ui_element .wpbc_ui_radio {
|
251 |
+
border-radius: 50%;
|
252 |
+
margin-right: 0.25rem;
|
253 |
+
line-height: 0.71428571;
|
254 |
+
}
|
255 |
+
|
256 |
+
/* :focus ---- */
|
257 |
+
.ui_element .wpbc_ui_checkbox.focus,
|
258 |
+
.ui_element .wpbc_ui_checkbox:focus,
|
259 |
+
.ui_element .wpbc_ui_radio.focus,
|
260 |
+
.ui_element .wpbc_ui_radio:focus {
|
261 |
+
border-color: #2271b1;
|
262 |
+
box-shadow: 0 0 0 1px #2271b1;
|
263 |
+
border-color: #d8d8d8;
|
264 |
+
/*box-shadow: 0 0 0 1px #4f94d4, 0 0 2px 1px rgba(79, 148, 212, 0.8); This is Default: WordPress */
|
265 |
+
box-shadow: 0 0 0 0px #4f94d4, 0 0 1px 1px rgba(79, 148, 212, 0.8);
|
266 |
+
z-index: 1;
|
267 |
+
/* Only visible in Windows High Contrast mode */
|
268 |
+
outline: 2px solid transparent !important;
|
269 |
+
}
|
270 |
+
|
271 |
+
.ui_element .wpbc_ui_radio + .wpbc_ui_control_label,
|
272 |
+
.ui_element .wpbc_ui_checkbox + .wpbc_ui_control_label {
|
273 |
+
padding-left: 5px;
|
274 |
+
padding-right: 5px;
|
275 |
+
}
|
276 |
+
|
277 |
+
@media screen and (max-width: 782px) {
|
278 |
+
.ui_element .wpbc_ui_checkbox,
|
279 |
+
.ui_element .wpbc_ui_radio {
|
280 |
+
height: 1.5625rem !important;
|
281 |
+
width: 1.5625rem;
|
282 |
+
}
|
283 |
+
}
|
284 |
+
|
285 |
+
/* 3.4. Addon ------------------------------------------------------------------------------------------------------ */
|
286 |
+
.ui_element .wpbc_ui_addon {
|
287 |
+
-ms-flex: 0 1 auto;
|
288 |
+
flex: 0 1 auto;
|
289 |
+
display: -ms-flexbox;
|
290 |
+
display: flex;
|
291 |
+
-ms-flex-flow: row wrap;
|
292 |
+
flex-flow: row wrap;
|
293 |
+
-ms-flex-pack: stretch;
|
294 |
+
justify-content: stretch;
|
295 |
+
-ms-flex-align: center;
|
296 |
+
align-items: center;
|
297 |
+
}
|
298 |
+
|
299 |
+
/* 3.5 Labels ------------------------------------------------------------------------------------------------------ */
|
300 |
+
.ui_element label.wpbc_ui_control_label {
|
301 |
+
-ms-flex: 0 1 auto;
|
302 |
+
flex: 0 1 auto;
|
303 |
+
display: -ms-flexbox;
|
304 |
+
display: flex;
|
305 |
+
-ms-flex-flow: row wrap;
|
306 |
+
flex-flow: row wrap;
|
307 |
+
-ms-flex-pack: start;
|
308 |
+
justify-content: flex-start;
|
309 |
+
-ms-flex-align: center;
|
310 |
+
align-items: center;
|
311 |
+
padding: 0 5px 2px 0;
|
312 |
+
padding-bottom: 1px;
|
313 |
+
}
|
314 |
+
|
315 |
+
.ui_element label.wpbc_ui_control_label + .wpbc_ui_control:first-of-type {
|
316 |
+
border-top-left-radius: 3px !important;
|
317 |
+
border-bottom-left-radius: 3px !important;
|
318 |
+
}
|
319 |
+
|
320 |
+
/**********************************************************************************************************************/
|
321 |
+
/* 4. Dropdown List */
|
322 |
+
/**********************************************************************************************************************/
|
323 |
+
.ui_element .wpbc_ui_dropdown__outside_label {
|
324 |
+
-ms-flex: 0 1 auto;
|
325 |
+
flex: 0 1 auto;
|
326 |
+
display: -ms-flexbox;
|
327 |
+
display: flex;
|
328 |
+
-ms-flex-flow: row nowrap;
|
329 |
+
flex-flow: row nowrap;
|
330 |
+
-ms-flex-pack: start;
|
331 |
+
justify-content: flex-start;
|
332 |
+
-ms-flex-align: center;
|
333 |
+
align-items: center;
|
334 |
+
padding: 0 10px 2px 0;
|
335 |
+
padding-bottom: 1px;
|
336 |
+
}
|
337 |
+
|
338 |
+
.ui_element .wpbc_ui_dropdown {
|
339 |
+
-ms-flex: 0 1 auto;
|
340 |
+
flex: 0 1 auto;
|
341 |
+
display: -ms-flexbox;
|
342 |
+
display: flex;
|
343 |
+
-ms-flex-flow: row nowrap;
|
344 |
+
flex-flow: row nowrap;
|
345 |
+
-ms-flex-pack: start;
|
346 |
+
justify-content: flex-start;
|
347 |
+
-ms-flex-align: stretch;
|
348 |
+
align-items: stretch;
|
349 |
+
position: relative;
|
350 |
+
}
|
351 |
+
|
352 |
+
.ui_element .wpbc_ui_dropdown * {
|
353 |
+
box-sizing: border-box;
|
354 |
+
}
|
355 |
+
|
356 |
+
.ui_element .wpbc_ui_dropdown .wpbc_ui_dropdown__inside_label {
|
357 |
+
font-weight: 600;
|
358 |
+
margin: 0;
|
359 |
+
padding: 0 0.5em 0 0;
|
360 |
+
}
|
361 |
+
|
362 |
+
.ui_element .wpbc_ui_dropdown .wpbc_ui_dropdown__inside_caret {
|
363 |
+
display: inline-block;
|
364 |
+
width: 0;
|
365 |
+
height: 0;
|
366 |
+
margin-left: 7px;
|
367 |
+
vertical-align: middle;
|
368 |
+
border-top: 4px dashed;
|
369 |
+
border-top: 4px solid \9;
|
370 |
+
border-right: 4px solid transparent;
|
371 |
+
border-left: 4px solid transparent;
|
372 |
+
}
|
373 |
+
|
374 |
+
/* ---------------------------------------------------------------------------------------------------------- */
|
375 |
+
/* BORDER RADIUS */
|
376 |
+
/* ---------------------------------------------------------------------------------------------------------- */
|
377 |
+
.ui_element .wpbc_ui_dropdown:last-child > .wpbc_ui_button:last-of-type {
|
378 |
+
border-top-right-radius: 3px;
|
379 |
+
border-bottom-right-radius: 3px;
|
380 |
+
}
|
381 |
+
|
382 |
+
/* In case, if have several elements in .ui_element (like "button dropdown button"), - make borders not round */
|
383 |
+
/* Left border not round */
|
384 |
+
.ui_element .wpbc_ui_dropdown:not(:first-child) > .wpbc_ui_button:first-child {
|
385 |
+
border-top-left-radius: 0;
|
386 |
+
border-bottom-left-radius: 0;
|
387 |
+
}
|
388 |
+
|
389 |
+
/* Right border not round */
|
390 |
+
.ui_element .wpbc_ui_dropdown:not(:last-child) > .wpbc_ui_button:last-child {
|
391 |
+
border-top-right-radius: 0;
|
392 |
+
border-bottom-right-radius: 0;
|
393 |
+
}
|
394 |
+
|
395 |
+
/* If we have outside label, then we need to make left border round */
|
396 |
+
.ui_element .wpbc_ui_dropdown__outside_label + .wpbc_ui_dropdown > .wpbc_ui_button:first-child {
|
397 |
+
border-top-left-radius: 3px;
|
398 |
+
border-bottom-left-radius: 3px;
|
399 |
+
}
|
400 |
+
|
401 |
+
/* ---------------------------------------------------------------------------------------------------------- */
|
402 |
+
/* OPTIONS (Drop Down Menu) in Dropdown List */
|
403 |
+
/* ---------------------------------------------------------------------------------------------------------- */
|
404 |
+
/* Complex OPTION - this option include some INPUT elements --------------- */
|
405 |
+
.wpbc_ui_dropdown .ui_dropdown_menu li.ui_complex_option_element {
|
406 |
+
display: -ms-flexbox;
|
407 |
+
display: flex;
|
408 |
+
-ms-flex-flow: row wrap;
|
409 |
+
flex-flow: row wrap;
|
410 |
+
-ms-flex-pack: start;
|
411 |
+
justify-content: flex-start;
|
412 |
+
-ms-flex-align: center;
|
413 |
+
align-items: center;
|
414 |
+
margin: 0;
|
415 |
+
padding: 0 15px;
|
416 |
+
}
|
417 |
+
|
418 |
+
.wpbc_ui_dropdown ul.ui_dropdown_menu li.ui_complex_option_element .ui_element {
|
419 |
+
-ms-flex: 0 1 50%;
|
420 |
+
flex: 0 1 50%;
|
421 |
+
display: -ms-flexbox;
|
422 |
+
display: flex;
|
423 |
+
-ms-flex-flow: row nowrap;
|
424 |
+
flex-flow: row nowrap;
|
425 |
+
-ms-flex-pack: start;
|
426 |
+
justify-content: flex-start;
|
427 |
+
-ms-flex-align: center;
|
428 |
+
align-items: center;
|
429 |
+
margin: 0;
|
430 |
+
padding: 4px 0;
|
431 |
+
}
|
432 |
+
|
433 |
+
.wpbc_ui_dropdown ul.ui_dropdown_menu li.ui_complex_option_element .ui_element > * {
|
434 |
+
-ms-flex: 0 1 auto;
|
435 |
+
flex: 0 1 auto;
|
436 |
+
margin: 0;
|
437 |
+
height: auto;
|
438 |
+
max-width: 210px;
|
439 |
+
}
|
440 |
+
|
441 |
+
/* ---------------------------- General backdrop --------------------------- */
|
442 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu {
|
443 |
+
display: none;
|
444 |
+
position: absolute;
|
445 |
+
top: 100%;
|
446 |
+
left: 0;
|
447 |
+
z-index: 1000;
|
448 |
+
float: left;
|
449 |
+
min-width: 160px;
|
450 |
+
padding: 5px 0;
|
451 |
+
margin: 0;
|
452 |
+
list-style: none;
|
453 |
+
text-align: left;
|
454 |
+
background-color: #ffffff;
|
455 |
+
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
|
456 |
+
border: 1px solid #cccccc;
|
457 |
+
border: 1px solid rgba(0, 0, 0, 0.15);
|
458 |
+
border-radius: 0 0 3px 3px;
|
459 |
+
background-clip: padding-box;
|
460 |
+
}
|
461 |
+
|
462 |
+
.ui_element .wpbc_ui_dropdown ul.ui_dropdown_menu * {
|
463 |
+
font-size: 13px;
|
464 |
+
}
|
465 |
+
|
466 |
+
@media screen and (max-width: 782px) {
|
467 |
+
.ui_element .wpbc_ui_dropdown ul.ui_dropdown_menu * {
|
468 |
+
font-size: 14px;
|
469 |
+
}
|
470 |
+
}
|
471 |
+
|
472 |
+
/* ---------------------------- Open --------------------------------------- */
|
473 |
+
.ui_element .wpbc_ui_dropdown.open > .ui_dropdown_menu {
|
474 |
+
display: block;
|
475 |
+
}
|
476 |
+
|
477 |
+
/* ---------------------------- Align: left | right ------------------------ */
|
478 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu.pull-right,
|
479 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu.ui_dropdown_menu_right {
|
480 |
+
left: auto;
|
481 |
+
right: 0;
|
482 |
+
}
|
483 |
+
|
484 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu.ui_dropdown_menu_left {
|
485 |
+
left: 0;
|
486 |
+
right: auto;
|
487 |
+
}
|
488 |
+
|
489 |
+
/* ---------------------------- Divider ------------------------------------ */
|
490 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu hr {
|
491 |
+
height: 1px;
|
492 |
+
margin: 5px 0;
|
493 |
+
overflow: hidden;
|
494 |
+
background: none;
|
495 |
+
border: 0;
|
496 |
+
border-top: 1px solid #eeeeee;
|
497 |
+
}
|
498 |
+
|
499 |
+
/* ---------------------------- Header ------------------------------------- */
|
500 |
+
.wpbc_ui_dropdown .ui_dropdown_menu li.dropdown-header {
|
501 |
+
padding: 0 15px;
|
502 |
+
color: #999;
|
503 |
+
font-size: 0.8em;
|
504 |
+
font-style: italic;
|
505 |
+
font-weight: 600;
|
506 |
+
}
|
507 |
+
|
508 |
+
/* ---------------------------- LI ----------------------------------------- */
|
509 |
+
.wpbc_ui_dropdown .ui_dropdown_menu li {
|
510 |
+
padding: 0;
|
511 |
+
margin: 0;
|
512 |
+
}
|
513 |
+
|
514 |
+
/* ---------------------------- A ------------------------------------------ */
|
515 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu a {
|
516 |
+
clear: both;
|
517 |
+
display: block;
|
518 |
+
font-weight: 400;
|
519 |
+
padding: 5px 15px;
|
520 |
+
white-space: nowrap;
|
521 |
+
/*font-size: 13px;*/
|
522 |
+
line-height: 18px;
|
523 |
+
}
|
524 |
+
|
525 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu > li > a {
|
526 |
+
color: #333333;
|
527 |
+
text-decoration: none;
|
528 |
+
font-weight: 400;
|
529 |
+
padding: 5px 15px;
|
530 |
+
white-space: nowrap;
|
531 |
+
display: block;
|
532 |
+
clear: both;
|
533 |
+
font-size: 1em;
|
534 |
+
line-height: 1.42857143;
|
535 |
+
}
|
536 |
+
|
537 |
+
/* ---------------------------- A :hover :focus .active -------------------- */
|
538 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu > li > a:hover,
|
539 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu > li > a:focus,
|
540 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .active > a,
|
541 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .active > a:hover,
|
542 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .active > a:focus {
|
543 |
+
color: #fff;
|
544 |
+
background: #08c;
|
545 |
+
text-decoration: none;
|
546 |
+
outline: none;
|
547 |
+
box-shadow: none;
|
548 |
+
}
|
549 |
+
|
550 |
+
/* ---------------------------- .disabled A ------------------------------ */
|
551 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .disabled > a,
|
552 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .disabled > a:hover,
|
553 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .disabled > a:focus {
|
554 |
+
color: #ccc;
|
555 |
+
}
|
556 |
+
|
557 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .disabled > a:hover,
|
558 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .disabled > a:focus {
|
559 |
+
text-decoration: none;
|
560 |
+
background-color: transparent;
|
561 |
+
background-image: none;
|
562 |
+
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
563 |
+
cursor: not-allowed;
|
564 |
+
}
|
565 |
+
|
566 |
+
.ui_element .wpbc_ui_dropdown .dropdown-backdrop {
|
567 |
+
position: fixed;
|
568 |
+
left: 0;
|
569 |
+
right: 0;
|
570 |
+
bottom: 0;
|
571 |
+
top: 0;
|
572 |
+
z-index: 990;
|
573 |
+
}
|
574 |
+
|
575 |
+
/**********************************************************************************************************************/
|
576 |
+
/* 5. Several elements in a ".ui_element" group -------------------------------------------------------------------- */
|
577 |
+
.ui_element .wpbc_ui_control {
|
578 |
+
border-radius: 0;
|
579 |
+
border-width: 1px;
|
580 |
+
/*border-right-width:0;*/
|
581 |
+
border-right-width: 1px;
|
582 |
+
margin-right: -1px !important;
|
583 |
+
}
|
584 |
+
|
585 |
+
.ui_element .wpbc_ui_control:first-child {
|
586 |
+
border-radius: 3px 0 0 3px;
|
587 |
+
}
|
588 |
+
|
589 |
+
.ui_element .wpbc_ui_control:last-child {
|
590 |
+
border-radius: 0 3px 3px 0;
|
591 |
+
border-width: 1px;
|
592 |
+
}
|
593 |
+
|
594 |
+
.ui_element .wpbc_ui_control:first-child:last-child {
|
595 |
+
border-radius: 3px;
|
596 |
+
}
|
597 |
+
|
598 |
+
/**********************************************************************************************************************/
|
599 |
+
/** Toolbar */
|
600 |
+
/**********************************************************************************************************************/
|
601 |
+
.ui_nowrap {
|
602 |
+
-ms-flex-wrap: nowrap !important;
|
603 |
+
flex-wrap: nowrap !important;
|
604 |
+
}
|
605 |
+
|
606 |
+
/* Toolbar --------------------------------------------------------------------------------------------------------- */
|
607 |
+
.wpbc_ajx_toolbar {
|
608 |
+
position: relative;
|
609 |
+
margin: 0 0 10px 50px;
|
610 |
+
}
|
611 |
+
|
612 |
+
.wpbc_ajx_toolbar * {
|
613 |
+
box-sizing: border-box;
|
614 |
+
}
|
615 |
+
|
616 |
+
/* Row of simple buttons somewhere in a page */
|
617 |
+
.wpbc_ajx_toolbar.wpbc_buttons_row {
|
618 |
+
position: initial;
|
619 |
+
margin: 0;
|
620 |
+
float: left;
|
621 |
+
}
|
622 |
+
|
623 |
+
.wpbc_ajx_toolbar.wpbc_buttons_row .ui_container {
|
624 |
+
background: none;
|
625 |
+
border: none;
|
626 |
+
margin: 0;
|
627 |
+
padding: 0;
|
628 |
+
}
|
629 |
+
|
630 |
+
/* Container ------------------------------------------------------------------------------------------------------- */
|
631 |
+
.wpbc_ajx_toolbar .ui_container {
|
632 |
+
display: -ms-flexbox;
|
633 |
+
display: flex;
|
634 |
+
-ms-flex-flow: row wrap;
|
635 |
+
flex-flow: row wrap;
|
636 |
+
-ms-flex-pack: start;
|
637 |
+
justify-content: flex-start;
|
638 |
+
-ms-flex-align: stretch;
|
639 |
+
align-items: stretch;
|
640 |
+
margin: 0;
|
641 |
+
box-shadow: none;
|
642 |
+
border: 1px solid #ccc;
|
643 |
+
border-top: none;
|
644 |
+
background: #f5f5f5;
|
645 |
+
font-size: 14px;
|
646 |
+
padding: 6px 15px;
|
647 |
+
}
|
648 |
+
|
649 |
+
.wpbc_ajx_toolbar .ui_container:last-child {
|
650 |
+
border-radius: 0 0 2px 2px;
|
651 |
+
}
|
652 |
+
|
653 |
+
/* Groups in container --------------------------------------------------------------------------------------------- */
|
654 |
+
.wpbc_ajx_toolbar .ui_container .ui_group {
|
655 |
+
-ms-flex: 0 1 auto;
|
656 |
+
flex: 0 1 auto;
|
657 |
+
padding: 0;
|
658 |
+
display: -ms-flexbox;
|
659 |
+
display: flex;
|
660 |
+
-ms-flex-flow: row wrap;
|
661 |
+
flex-flow: row wrap;
|
662 |
+
-ms-flex-pack: start;
|
663 |
+
justify-content: flex-start;
|
664 |
+
-ms-flex-align: stretch;
|
665 |
+
align-items: stretch;
|
666 |
+
border: none;
|
667 |
+
margin: 0 20px 0 0;
|
668 |
+
}
|
669 |
+
|
670 |
+
.wpbc_ajx_toolbar .ui_container .ui_group:last-child {
|
671 |
+
margin: 0;
|
672 |
+
}
|
673 |
+
|
674 |
+
/* Elements -------------------------------------------------------------------------------------------------------- */
|
675 |
+
.wpbc_ajx_toolbar .ui_container .ui_group .ui_element {
|
676 |
+
display: -ms-flexbox;
|
677 |
+
display: flex;
|
678 |
+
-ms-flex-flow: row wrap;
|
679 |
+
flex-flow: row wrap;
|
680 |
+
-ms-flex-pack: start;
|
681 |
+
justify-content: flex-start;
|
682 |
+
-ms-flex-align: stretch;
|
683 |
+
align-items: stretch;
|
684 |
+
-ms-flex: 0 1 auto;
|
685 |
+
flex: 0 1 auto;
|
686 |
+
position: relative;
|
687 |
+
margin: 0px 15px 0px 0;
|
688 |
+
}
|
689 |
+
|
690 |
+
.wpbc_ajx_toolbar .ui_container .ui_group .ui_element:last-child {
|
691 |
+
margin-right: 0;
|
692 |
+
}
|
693 |
+
|
694 |
+
.wpbc_ajx_toolbar .ui_container .ui_group .ui_element > * {
|
695 |
+
margin: 5px 0;
|
696 |
+
}
|
697 |
+
|
698 |
+
.ui_elements_divider {
|
699 |
+
margin-left: 15px;
|
700 |
+
}
|
701 |
+
|
702 |
+
/**********************************************************************************************************************/
|
703 |
+
/** Customization */
|
704 |
+
/**********************************************************************************************************************/
|
705 |
+
.wpbc_ajx_toolbar .ui_container.ui_container_small * {
|
706 |
+
font-size: 13px;
|
707 |
+
}
|
708 |
+
|
709 |
+
@media (max-width: 782px) {
|
710 |
+
.wpbc_ajx_toolbar .ui_container.ui_container_small * {
|
711 |
+
font-size: 14px;
|
712 |
+
}
|
713 |
+
}
|
714 |
+
|
715 |
+
/* Elements Height ------------------------------------------------------------------------------------------------- */
|
716 |
+
.wpbc_ajx_toolbar .ui_container .ui_group .ui_element > * {
|
717 |
+
height: 38px;
|
718 |
+
}
|
719 |
+
|
720 |
+
.wpbc_ajx_toolbar .ui_container.ui_container_small .ui_group .ui_element > * {
|
721 |
+
height: 30px;
|
722 |
+
}
|
723 |
+
|
724 |
+
@media (max-width: 782px) {
|
725 |
+
.wpbc_ajx_toolbar.wpbc_buttons_row .ui_container .ui_group .ui_element > *,
|
726 |
+
#toolbar_booking_listing.wpbc_ajx_toolbar .ui_container .ui_group .ui_element > * {
|
727 |
+
height: 38px;
|
728 |
+
}
|
729 |
+
.wpbc_ajx_toolbar.wpbc_buttons_row .ui_container .ui_group .ui_element > .wpbc_ui_button,
|
730 |
+
#toolbar_booking_listing.wpbc_ajx_toolbar .ui_container .ui_group .ui_element > .wpbc_ui_button {
|
731 |
+
padding: 0 15px 2px;
|
732 |
+
padding-bottom: 1px;
|
733 |
+
display: -ms-flexbox;
|
734 |
+
display: flex;
|
735 |
+
-ms-flex-flow: row wrap;
|
736 |
+
flex-flow: row wrap;
|
737 |
+
-ms-flex-pack: center;
|
738 |
+
justify-content: center;
|
739 |
+
-ms-flex-align: center;
|
740 |
+
align-items: center;
|
741 |
+
}
|
742 |
+
}
|
743 |
+
|
744 |
+
/* Keyword -------------------------------------------------------------------------------------------------------- */
|
745 |
+
.wpbc_ajx_toolbar .ui_container .ui_group.ui_group__dates_status {
|
746 |
+
margin-right: 2.5em;
|
747 |
+
}
|
748 |
+
|
749 |
+
.wpbc_ajx_toolbar .ui_container .ui_group.ui_group__keyword {
|
750 |
+
-ms-flex: 1 1 auto;
|
751 |
+
flex: 1 1 auto;
|
752 |
+
}
|
753 |
+
|
754 |
+
.wpbc_ajx_toolbar .ui_container .ui_group.ui_group__keyword .ui_element {
|
755 |
+
-ms-flex: 1 1 auto;
|
756 |
+
flex: 1 1 auto;
|
757 |
+
}
|
758 |
+
|
759 |
+
.wpbc_ajx_toolbar .ui_container .ui_group.ui_group__keyword .ui_element .wpbc_search_field {
|
760 |
+
width: 100%;
|
761 |
+
}
|
762 |
+
|
763 |
+
/* 2nd row -------------------------------------------------------------------------------------------------------- */
|
764 |
+
.wpbc_ajx_toolbar .ui_container.ui_container_filter_row_2 {
|
765 |
+
padding: 4px 15px;
|
766 |
+
}
|
767 |
+
|
768 |
+
.wpbc_ajx_toolbar .ui_container.ui_container_filter_row_2 .ui_group.ui_group__statuses {
|
769 |
+
-ms-flex: 1 1 auto;
|
770 |
+
flex: 1 1 auto;
|
771 |
+
}
|
772 |
+
|
773 |
+
/**********************************************************************************************************************/
|
774 |
+
/** Booking resources - Chosen
|
775 |
+
/**********************************************************************************************************************/
|
776 |
+
/**
|
777 |
+
* Choozen Structure
|
778 |
+
|
779 |
+
<select multiple="MULTIPLE"...
|
780 |
+
|
781 |
+
div#wh_booking_type_chosen .chzn-container.chzn-container-multi .chzn-with-drop.chzn-container-active (if active)
|
782 |
+
ul.chzn-choices
|
783 |
+
li.search-choice
|
784 |
+
<span>
|
785 |
+
a.search-choice-close
|
786 |
+
|
787 |
+
li.search-field
|
788 |
+
input[type="text"].chzn-search-input .default (if no selected values)
|
789 |
+
|
790 |
+
div.chzn-drop
|
791 |
+
ul.chzn-results
|
792 |
+
li.result-selected || li.active-result .highlighted (if active)
|
793 |
+
*/
|
794 |
+
.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi {
|
795 |
+
-ms-flex: 1 1 auto;
|
796 |
+
flex: 1 1 auto;
|
797 |
+
display: -ms-flexbox;
|
798 |
+
display: flex;
|
799 |
+
-ms-flex-flow: column wrap;
|
800 |
+
flex-flow: column wrap;
|
801 |
+
-ms-flex-pack: center;
|
802 |
+
justify-content: center;
|
803 |
+
-ms-flex-align: center;
|
804 |
+
align-items: center;
|
805 |
+
height: initial;
|
806 |
+
width: auto !important;
|
807 |
+
min-width: 10em;
|
808 |
+
margin-right: -1px;
|
809 |
+
}
|
810 |
+
|
811 |
+
@media (max-width: 782px) {
|
812 |
+
.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi {
|
813 |
+
height: initial !important;
|
814 |
+
}
|
815 |
+
}
|
816 |
+
|
817 |
+
.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices {
|
818 |
+
-ms-flex: 1 1 auto;
|
819 |
+
flex: 1 1 auto;
|
820 |
+
display: -ms-flexbox;
|
821 |
+
display: flex;
|
822 |
+
-ms-flex-flow: row wrap;
|
823 |
+
flex-flow: row wrap;
|
824 |
+
-ms-flex-pack: start;
|
825 |
+
justify-content: flex-start;
|
826 |
+
-ms-flex-align: center;
|
827 |
+
align-items: center;
|
828 |
+
-ms-flex-line-pack: center;
|
829 |
+
align-content: center;
|
830 |
+
margin: 0;
|
831 |
+
padding: 0 0 0 5px;
|
832 |
+
height: auto;
|
833 |
+
min-height: 28px !important;
|
834 |
+
border-radius: 3px 0 0 3px;
|
835 |
+
}
|
836 |
+
|
837 |
+
.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi.chzn-container-active ul.chzn-choices {
|
838 |
+
border-color: #d8d8d8 !important;
|
839 |
+
box-shadow: 0 0 0 0px #4f94d4, 0 0 1px 1px rgba(79, 148, 212, 0.8) !important;
|
840 |
+
z-index: 1;
|
841 |
+
outline: 2px solid transparent;
|
842 |
+
}
|
843 |
+
|
844 |
+
.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice {
|
845 |
+
-ms-flex: 0 1 auto;
|
846 |
+
flex: 0 1 auto;
|
847 |
+
display: -ms-flexbox;
|
848 |
+
display: flex;
|
849 |
+
-ms-flex-flow: row nowrap;
|
850 |
+
flex-flow: row nowrap;
|
851 |
+
-ms-flex-pack: start;
|
852 |
+
justify-content: flex-start;
|
853 |
+
-ms-flex-align: baseline;
|
854 |
+
align-items: baseline;
|
855 |
+
margin: 3px 0.5em 3px 0;
|
856 |
+
padding: 3px 5px 3px 8px;
|
857 |
+
}
|
858 |
+
|
859 |
+
.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice span {
|
860 |
+
word-wrap: break-word;
|
861 |
+
}
|
862 |
+
|
863 |
+
.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice a.search-choice-close {
|
864 |
+
font-family: "Glyphicons Halflings";
|
865 |
+
font-style: normal;
|
866 |
+
font-weight: 400;
|
867 |
+
font-size: 9px;
|
868 |
+
color: #555;
|
869 |
+
text-decoration: none;
|
870 |
+
position: relative;
|
871 |
+
top: auto;
|
872 |
+
left: auto;
|
873 |
+
right: auto;
|
874 |
+
bottom: auto;
|
875 |
+
margin: 0 0 0 1em;
|
876 |
+
display: -ms-flexbox;
|
877 |
+
display: flex;
|
878 |
+
-ms-flex-flow: column wrap;
|
879 |
+
flex-flow: column wrap;
|
880 |
+
-ms-flex-pack: center;
|
881 |
+
justify-content: center;
|
882 |
+
-ms-flex-line-pack: center;
|
883 |
+
align-content: center;
|
884 |
+
width: auto;
|
885 |
+
height: auto;
|
886 |
+
}
|
887 |
+
|
888 |
+
.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice a.search-choice-close:before {
|
889 |
+
content: "\e014";
|
890 |
+
}
|
891 |
+
|
892 |
+
.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice a.search-choice-close:hover {
|
893 |
+
text-decoration: none;
|
894 |
+
}
|
895 |
+
|
896 |
+
.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-field {
|
897 |
+
-ms-flex: 0 1 1px;
|
898 |
+
flex: 0 1 1px;
|
899 |
+
display: -ms-flexbox;
|
900 |
+
display: flex;
|
901 |
+
-ms-flex-flow: row wrap;
|
902 |
+
flex-flow: row wrap;
|
903 |
+
-ms-flex-pack: start;
|
904 |
+
justify-content: flex-start;
|
905 |
+
-ms-flex-align: center;
|
906 |
+
align-items: center;
|
907 |
+
margin: 0px 0 0px 0;
|
908 |
+
padding: 0;
|
909 |
+
white-space: nowrap;
|
910 |
+
}
|
911 |
+
|
912 |
+
.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-field input[type="text"].default {
|
913 |
+
min-width: 12em;
|
914 |
+
}
|
915 |
+
|
916 |
+
.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-field input[type="text"] {
|
917 |
+
font-family: inherit;
|
918 |
+
}
|
919 |
+
|
920 |
+
.ui_container .ui_group .ui_element .chzn-container div.chzn-drop ul.chzn-results li.highlighted {
|
921 |
+
color: #fff;
|
922 |
+
background: #08c;
|
923 |
+
text-decoration: none;
|
924 |
+
outline: none;
|
925 |
+
box-shadow: none;
|
926 |
+
}
|
927 |
+
|
928 |
+
/*
|
929 |
+
#wh_booking_type_chosen {
|
930 |
+
width: auto !important;
|
931 |
+
display: flex;
|
932 |
+
flex-flow: row wrap;
|
933 |
+
justify-content: center;
|
934 |
+
align-items: stretch;
|
935 |
+
flex: 1 1 auto;
|
936 |
+
height: initial;
|
937 |
+
min-width: 10em;
|
938 |
+
}
|
939 |
+
|
940 |
+
#wh_booking_type_chosen .chzn-choices {
|
941 |
+
display: flex;
|
942 |
+
flex-flow: row wrap;
|
943 |
+
justify-content: stretch;
|
944 |
+
align-items: center;
|
945 |
+
margin: 0px 0px;
|
946 |
+
padding: 0 5px;
|
947 |
+
min-height: auto !important;
|
948 |
+
flex: 1 1 auto;
|
949 |
+
border-radius: 3px 0 0 3px;
|
950 |
+
}
|
951 |
+
|
952 |
+
.chzn-container-multi .chzn-choices .search-choice a.search-choice-close {
|
953 |
+
background: none;
|
954 |
+
display: inline-block;
|
955 |
+
font-family: "Glyphicons Halflings";
|
956 |
+
font-style: normal;
|
957 |
+
font-weight: 400;
|
958 |
+
font-size: 9px;
|
959 |
+
line-height: 1;
|
960 |
+
position: relative;
|
961 |
+
top: 0px;
|
962 |
+
left: 15px;
|
963 |
+
color: #555;
|
964 |
+
text-decoration: none;
|
965 |
+
}
|
966 |
+
.chzn-container-multi .chzn-choices .search-choice a.search-choice-close:hover {
|
967 |
+
text-decoration: none;
|
968 |
+
}
|
969 |
+
.chzn-container-multi .chzn-choices .search-choice a.search-choice-close:before {
|
970 |
+
content: "\e014";
|
971 |
+
}
|
972 |
+
|
973 |
+
#wh_booking_type_chosen .chzn-search-input.default {
|
974 |
+
min-width: 12em;
|
975 |
+
}
|
976 |
+
#wh_booking_type_chosen.chzn-container.chzn-container-multi.chzn-container-active .chzn-choices {
|
977 |
+
|
978 |
+
border-color: #d8d8d8 !important;
|
979 |
+
box-shadow: 0 0 0 0px #4f94d4, 0 0 1px 1px rgba(79, 148, 212, 0.8) !important;
|
980 |
+
z-index: 1;
|
981 |
+
outline: 2px solid transparent;
|
982 |
+
}
|
983 |
+
.chzn-container-multi .chzn-choices li.search-field input[type="text"] {
|
984 |
+
font-family: inherit;
|
985 |
+
}
|
986 |
+
.chzn-container .chzn-results li.highlighted {
|
987 |
+
color: #fff;
|
988 |
+
background: #08c;
|
989 |
+
text-decoration: none;
|
990 |
+
outline: none;
|
991 |
+
box-shadow: none;
|
992 |
+
}
|
993 |
+
/**/
|
includes/_toolbar_ui/_out/toolbar_ui.js
ADDED
@@ -0,0 +1,97 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
"use strict";
|
2 |
+
/**
|
3 |
+
* Encode HTML text to safe HTML entities
|
4 |
+
*
|
5 |
+
* Replace all characters in the given range (unicode 00A0 - 9999, as well as ampersand, greater & less than)
|
6 |
+
* with their html entity equivalents, which is simply &#nnn; where nnn is the unicode value we get from charCodeAt
|
7 |
+
*
|
8 |
+
* @param rawStr
|
9 |
+
* @returns {*}
|
10 |
+
*/
|
11 |
+
|
12 |
+
function wpbc_get_safe_html_text(rawStr) {
|
13 |
+
var encodedStr = rawStr.replace(/[\u00A0-\u9999<>\&]/g, function (i) {
|
14 |
+
return '&#' + i.charCodeAt(0) + ';';
|
15 |
+
});
|
16 |
+
return encodedStr;
|
17 |
+
}
|
18 |
+
/**
|
19 |
+
* Change Value and Title of dropdown after clicking on Apply button
|
20 |
+
*
|
21 |
+
* @param params Example: { 'dropdown_id': 'wh_booking_date', 'dropdown_radio_name': 'ui_wh_booking_date_radio' }
|
22 |
+
*/
|
23 |
+
|
24 |
+
|
25 |
+
function wpbc_ui_dropdown_apply_click(params) {
|
26 |
+
// Get input values of all elements in LI section, where RADIO was selected
|
27 |
+
var filter_ui_dates_arr = jQuery('input[name="' + params['dropdown_radio_name'] + '"]:checked').parents('li').find(':input').map(function () {
|
28 |
+
return wpbc_get_safe_html_text(jQuery(this).val());
|
29 |
+
}).get();
|
30 |
+
|
31 |
+
if (0 !== filter_ui_dates_arr.length) {
|
32 |
+
// Continue only if radio button was selected, and we are having value
|
33 |
+
// Get titles of all elements in LI section, where RADIO was selected
|
34 |
+
var filter_ui_titles_arr = jQuery('input[name="' + params['dropdown_radio_name'] + '"]:checked').parents('li').find(':input').map(function () {
|
35 |
+
if ('text' == jQuery(this).prop('type')) {
|
36 |
+
return jQuery(this).val();
|
37 |
+
}
|
38 |
+
|
39 |
+
if ('select-one' == jQuery(this).prop('type')) {
|
40 |
+
return jQuery(this).find(':selected').text();
|
41 |
+
}
|
42 |
+
|
43 |
+
if ('radio' == jQuery(this).prop('type') || 'checkbox' == jQuery(this).prop('type')) {
|
44 |
+
var input_selected = jQuery(this).filter(':checked').next('.wpbc_ui_control_label').html();
|
45 |
+
|
46 |
+
if (undefined == input_selected) {
|
47 |
+
input_selected = jQuery(this).filter(':checked').prev('.wpbc_ui_control_label').html();
|
48 |
+
}
|
49 |
+
|
50 |
+
return undefined !== input_selected ? input_selected : '';
|
51 |
+
}
|
52 |
+
|
53 |
+
return jQuery(this).val();
|
54 |
+
}).get(); // Update Value to dropdown input hidden elements. Such value stringify.
|
55 |
+
|
56 |
+
jQuery('#' + params['dropdown_id']).val(JSON.stringify(filter_ui_dates_arr)); // Generate change action, for ability to send Ajax request
|
57 |
+
|
58 |
+
jQuery('#' + params['dropdown_id']).trigger('change'); // Get Label of selected Radio button
|
59 |
+
|
60 |
+
var filter_ui_dates_title = jQuery('input[name="' + params['dropdown_radio_name'] + '"]:checked').next('.wpbc_ui_control_label').html() + ': '; // Remove selected value of radio button from beginning, we will use Label title instead
|
61 |
+
|
62 |
+
filter_ui_titles_arr.shift(); // Update Title in dropdown
|
63 |
+
|
64 |
+
var encoded_html_text = wpbc_get_safe_html_text(filter_ui_dates_title + filter_ui_titles_arr.join(' - '));
|
65 |
+
jQuery('#' + params['dropdown_id'] + '_selector .wpbc_selected_in_dropdown').html(encoded_html_text);
|
66 |
+
}
|
67 |
+
|
68 |
+
jQuery('#' + params['dropdown_id'] + '_container').hide();
|
69 |
+
}
|
70 |
+
/**
|
71 |
+
* Close dropdown after clicking on Close button
|
72 |
+
*
|
73 |
+
* @param dropdown_id ID of dropdown
|
74 |
+
*/
|
75 |
+
|
76 |
+
|
77 |
+
function wpbc_ui_dropdown_close_click(dropdown_id) {
|
78 |
+
jQuery('#' + dropdown_id + '_container').hide();
|
79 |
+
}
|
80 |
+
/**
|
81 |
+
* Simple option click on dropdown
|
82 |
+
*
|
83 |
+
* @param params Example: { 'dropdown_id': 'wh_booking_date', 'is_this_simple_list': true, 'value': '5', '_this': this }
|
84 |
+
*/
|
85 |
+
|
86 |
+
|
87 |
+
function wpbc_ui_dropdown_simple_click(params) {
|
88 |
+
jQuery('#' + params['dropdown_id'] + '_selector .wpbc_selected_in_dropdown').html(jQuery(params['_this']).html());
|
89 |
+
jQuery('#' + params['dropdown_id']).val(JSON.stringify([params['value']]));
|
90 |
+
jQuery('#' + params['dropdown_id'] + '_container li input[type=checkbox],' + '#' + params['dropdown_id'] + '_container li input[type=radio]').prop('checked', false);
|
91 |
+
jQuery('#' + params['dropdown_id']).trigger('change');
|
92 |
+
|
93 |
+
if (!params['is_this_simple_list']) {
|
94 |
+
jQuery('#' + params['dropdown_id'] + '_container').hide();
|
95 |
+
}
|
96 |
+
}
|
97 |
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluY2x1ZGVzL190b29sYmFyX3VpL19zcmMvdG9vbGJhcl91aS5qcyJdLCJuYW1lcyI6WyJ3cGJjX2dldF9zYWZlX2h0bWxfdGV4dCIsInJhd1N0ciIsImVuY29kZWRTdHIiLCJyZXBsYWNlIiwiaSIsImNoYXJDb2RlQXQiLCJ3cGJjX3VpX2Ryb3Bkb3duX2FwcGx5X2NsaWNrIiwicGFyYW1zIiwiZmlsdGVyX3VpX2RhdGVzX2FyciIsImpRdWVyeSIsInBhcmVudHMiLCJmaW5kIiwibWFwIiwidmFsIiwiZ2V0IiwibGVuZ3RoIiwiZmlsdGVyX3VpX3RpdGxlc19hcnIiLCJwcm9wIiwidGV4dCIsImlucHV0X3NlbGVjdGVkIiwiZmlsdGVyIiwibmV4dCIsImh0bWwiLCJ1bmRlZmluZWQiLCJwcmV2IiwiSlNPTiIsInN0cmluZ2lmeSIsInRyaWdnZXIiLCJmaWx0ZXJfdWlfZGF0ZXNfdGl0bGUiLCJzaGlmdCIsImVuY29kZWRfaHRtbF90ZXh0Iiwiam9pbiIsImhpZGUiLCJ3cGJjX3VpX2Ryb3Bkb3duX2Nsb3NlX2NsaWNrIiwiZHJvcGRvd25faWQiLCJ3cGJjX3VpX2Ryb3Bkb3duX3NpbXBsZV9jbGljayJdLCJtYXBwaW5ncyI6IkFBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsU0FBU0EsdUJBQVQsQ0FBa0NDLE1BQWxDLEVBQTBDO0FBRXpDLE1BQUlDLFVBQVUsR0FBR0QsTUFBTSxDQUFDRSxPQUFQLENBQWdCLHNCQUFoQixFQUF3QyxVQUFXQyxDQUFYLEVBQWM7QUFDdEUsV0FBTyxPQUFPQSxDQUFDLENBQUNDLFVBQUYsQ0FBYyxDQUFkLENBQVAsR0FBMkIsR0FBbEM7QUFDQSxHQUZnQixDQUFqQjtBQUlBLFNBQU9ILFVBQVA7QUFDQTtBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFNBQVNJLDRCQUFULENBQXVDQyxNQUF2QyxFQUErQztBQUU5QztBQUNBLE1BQUlDLG1CQUFtQixHQUFHQyxN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QUUsTUFBTUYsTUFBTSxDQUFFLGFBQUYsQ0FBWixHQUFnQyxZQUFsQyxDQUFOLENBQXVEeUIsSUFBdkQ7QUFDQTtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5cclxuLyoqXHJcbiAqIEVuY29kZSBIVE1MIHRleHQgdG8gc2FmZSBIVE1MIGVudGl0aWVzXHJcbiAqXHJcbiAqIFJlcGxhY2UgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIGdpdmVuIHJhbmdlICh1bmljb2RlIDAwQTAgLSA5OTk5LCBhcyB3ZWxsIGFzIGFtcGVyc2FuZCwgZ3JlYXRlciAmIGxlc3MgdGhhbilcclxuICogd2l0aCB0aGVpciBodG1sIGVudGl0eSBlcXVpdmFsZW50cywgd2hpY2ggaXMgc2ltcGx5ICYjbm5uOyB3aGVyZSBubm4gaXMgdGhlIHVuaWNvZGUgdmFsdWUgd2UgZ2V0IGZyb20gY2hhckNvZGVBdFxyXG4gKlxyXG4gKiBAcGFyYW0gcmF3U3RyXHJcbiAqIEByZXR1cm5zIHsqfVxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19nZXRfc2FmZV9odG1sX3RleHQoIHJhd1N0ciApe1xyXG5cclxuXHR2YXIgZW5jb2RlZFN0ciA9IHJhd1N0ci5yZXBsYWNlKCAvW1xcdTAwQTAtXFx1OTk5OTw+XFwmXS9nLCBmdW5jdGlvbiAoIGkgKXtcclxuXHRcdHJldHVybiAnJiMnICsgaS5jaGFyQ29kZUF0KCAwICkgKyAnOyc7XHJcblx0fSApO1xyXG5cclxuXHRyZXR1cm4gZW5jb2RlZFN0cjtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBDaGFuZ2UgVmFsdWUgYW5kIFRpdGxlIG9mIGRyb3Bkb3duIGFmdGVyIGNsaWNraW5nIG9uIEFwcGx5IGJ1dHRvblxyXG4gKlxyXG4gKiBAcGFyYW0gcGFyYW1zXHRFeGFtcGxlOiB7ICdkcm9wZG93bl9pZCc6ICd3aF9ib29raW5nX2RhdGUnLCAnZHJvcGRvd25fcmFkaW9fbmFtZSc6ICd1aV93aF9ib29raW5nX2RhdGVfcmFkaW8nIH1cclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfdWlfZHJvcGRvd25fYXBwbHlfY2xpY2soIHBhcmFtcyApe1xyXG5cclxuXHQvLyBHZXQgaW5wdXQgdmFsdWVzIG9mIGFsbCBlbGVtZW50cyBpbiBMSSBzZWN0aW9uLCAgd2hlcmUgUkFESU8gd2FzIHNlbGVjdGVkXHJcblx0dmFyIGZpbHRlcl91aV9kYXRlc19hcnIgPSBqUXVlcnkoICdpbnB1dFtuYW1lPVwiJyArIHBhcmFtc1sgJ2Ryb3Bkb3duX3JhZGlvX25hbWUnIF0gKyAnXCJdOmNoZWNrZWQnIClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQucGFyZW50cyggJ2xpJyApLmZpbmQoICc6aW5wdXQnIClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQubWFwKCBmdW5jdGlvbiAoKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB3cGJjX2dldF9zYWZlX2h0bWxfdGV4dCggalF1ZXJ5KCB0aGlzICkudmFsKCkgKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9ICkuZ2V0KCk7XHJcblxyXG5cdGlmICggMCAhPT0gZmlsdGVyX3VpX2RhdGVzX2Fyci5sZW5ndGggKXsgIC8vIENvbnRpbnVlIG9ubHkgaWYgcmFkaW8gYnV0dG9uICB3YXMgc2VsZWN0ZWQsIGFuZCB3ZSBhcmUgaGF2aW5nIHZhbHVlXHJcblxyXG5cdFx0Ly8gR2V0IHRpdGxlcyBvZiBhbGwgZWxlbWVudHMgaW4gTEkgc2VjdGlvbiwgIHdoZXJlIFJBRElPIHdhcyBzZWxlY3RlZFxyXG5cdFx0dmFyIGZpbHRlcl91aV90aXRsZXNfYXJyID0galF1ZXJ5KCAnaW5wdXRbbmFtZT1cIicgKyBwYXJhbXNbICdkcm9wZG93bl9yYWRpb19uYW1lJyBdICsgJ1wiXTpjaGVja2VkJyApXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdC5wYXJlbnRzKCAnbGknICkuZmluZCggJzppbnB1dCcgKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lm1hcCggZnVuY3Rpb24gKCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggJ3RleHQnID09IGpRdWVyeSggdGhpcyApLnByb3AoICd0eXBlJyApICl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGpRdWVyeSggdGhpcyApLnZhbCgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggJ3NlbGVjdC1vbmUnID09IGpRdWVyeSggdGhpcyApLnByb3AoICd0eXBlJyApICl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGpRdWVyeSggdGhpcyApLmZpbmQoICc6c2VsZWN0ZWQnICkudGV4dCgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCggJ3JhZGlvJyA9PSBqUXVlcnkoIHRoaXMgKS5wcm9wKCAndHlwZScgKSApXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0IHx8ICggJ2NoZWNrYm94JyA9PSBqUXVlcnkoIHRoaXMgKS5wcm9wKCAndHlwZScgKSApXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGlucHV0X3NlbGVjdGVkID0galF1ZXJ5KCB0aGlzICkuZmlsdGVyKCc6Y2hlY2tlZCcpLm5leHQoICcud3BiY191aV9jb250cm9sX2xhYmVsJyApLmh0bWwoKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHVuZGVmaW5lZCA9PSBpbnB1dF9zZWxlY3RlZCApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlucHV0X3NlbGVjdGVkID0galF1ZXJ5KCB0aGlzICkuZmlsdGVyKCc6Y2hlY2tlZCcpLnByZXYoICcud3BiY191aV9jb250cm9sX2xhYmVsJyApLmh0bWwoKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuICggdW5kZWZpbmVkICE9PSBpbnB1dF9zZWxlY3RlZCApID8gaW5wdXRfc2VsZWN0ZWQgOiAnJztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGpRdWVyeSggdGhpcyApLnZhbCgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSApLmdldCgpO1xyXG5cclxuXHRcdC8vIFVwZGF0ZSBWYWx1ZSB0byAgZHJvcGRvd24gaW5wdXQgaGlkZGVuIGVsZW1lbnRzLiBTdWNoICB2YWx1ZSBzdHJpbmdpZnkuXHJcblx0XHRqUXVlcnkoICcjJyArIHBhcmFtc1sgJ2Ryb3Bkb3duX2lkJyBdICkudmFsKCBKU09OLnN0cmluZ2lmeSggZmlsdGVyX3VpX2RhdGVzX2FyciApICk7XHJcblxyXG5cdFx0Ly8gR2VuZXJhdGUgY2hhbmdlIGFjdGlvbiwgIGZvciBhYmlsaXR5IHRvICBzZW5kIEFqYXggcmVxdWVzdFxyXG5cdFx0alF1ZXJ5KCAnIycgKyBwYXJhbXNbICdkcm9wZG93bl9pZCcgXSApLnRyaWdnZXIoICdjaGFuZ2UnICk7XHJcblxyXG5cdFx0Ly8gR2V0IExhYmVsIG9mIHNlbGVjdGVkIFJhZGlvIGJ1dHRvblxyXG5cdFx0dmFyIGZpbHRlcl91aV9kYXRlc190aXRsZSA9IGpRdWVyeSggJ2lucHV0W25hbWU9XCInICsgcGFyYW1zWyAnZHJvcGRvd25fcmFkaW9fbmFtZScgXSArICdcIl06Y2hlY2tlZCcgKS5uZXh0KCAnLndwYmNfdWlfY29udHJvbF9sYWJlbCcgKS5odG1sKCkgKyAnOiAnO1xyXG5cclxuXHRcdC8vIFJlbW92ZSBzZWxlY3RlZCB2YWx1ZSBvZiByYWRpbyBidXR0b24gZnJvbSBiZWdpbm5pbmcsIHdlIHdpbGwgdXNlIExhYmVsIHRpdGxlIGluc3RlYWRcclxuXHRcdGZpbHRlcl91aV90aXRsZXNfYXJyLnNoaWZ0KCk7XHJcblxyXG5cdFx0Ly8gVXBkYXRlIFRpdGxlIGluIGRyb3Bkb3duXHJcblx0XHR2YXIgZW5jb2RlZF9odG1sX3RleHQgPSB3cGJjX2dldF9zYWZlX2h0bWxfdGV4dCggZmlsdGVyX3VpX2RhdGVzX3RpdGxlICsgZmlsdGVyX3VpX3RpdGxlc19hcnIuam9pbiggJyAtICcgKSApO1xyXG5cdFx0alF1ZXJ5KCAnIycgKyBwYXJhbXNbICdkcm9wZG93bl9pZCcgXSArICdfc2VsZWN0b3IgLndwYmNfc2VsZWN0ZWRfaW5fZHJvcGRvd24nICkuaHRtbCggZW5jb2RlZF9odG1sX3RleHQgKTtcclxuXHR9XHJcblxyXG5cdGpRdWVyeSggJyMnICsgcGFyYW1zWyAnZHJvcGRvd25faWQnIF0gKyAnX2NvbnRhaW5lcicgKS5oaWRlKCk7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogQ2xvc2UgZHJvcGRvd24gYWZ0ZXIgY2xpY2tpbmcgb24gQ2xvc2UgYnV0dG9uXHJcbiAqXHJcbiAqIEBwYXJhbSBkcm9wZG93bl9pZFx0SUQgb2YgZHJvcGRvd25cclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfdWlfZHJvcGRvd25fY2xvc2VfY2xpY2soIGRyb3Bkb3duX2lkICl7XHJcblxyXG5cdGpRdWVyeSggJyMnICsgZHJvcGRvd25faWQgKyAnX2NvbnRhaW5lcicgKS5oaWRlKCk7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogU2ltcGxlIG9wdGlvbiBjbGljayBvbiBkcm9wZG93blxyXG4gKlxyXG4gKiBAcGFyYW0gcGFyYW1zXHRFeGFtcGxlOiB7ICdkcm9wZG93bl9pZCc6ICd3aF9ib29raW5nX2RhdGUnLCAnaXNfdGhpc19zaW1wbGVfbGlzdCc6IHRydWUsICd2YWx1ZSc6ICc1JywgJ190aGlzJzogdGhpcyB9XHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX3VpX2Ryb3Bkb3duX3NpbXBsZV9jbGljayggcGFyYW1zICl7XHJcblxyXG5cdGpRdWVyeSggJyMnICsgcGFyYW1zWyAnZHJvcGRvd25faWQnIF0gKyAnX3NlbGVjdG9yIC53cGJjX3NlbGVjdGVkX2luX2Ryb3Bkb3duJyApLmh0bWwoIGpRdWVyeSggcGFyYW1zWyAnX3RoaXMnIF0gKS5odG1sKCkgKTtcclxuXHJcblx0alF1ZXJ5KCAnIycgKyBwYXJhbXNbICdkcm9wZG93bl9pZCcgXSApLnZhbCggSlNPTi5zdHJpbmdpZnkoIFtwYXJhbXNbICd2YWx1ZScgXV0gKSApO1xyXG5cclxuXHRqUXVlcnkoICcjJyArIHBhcmFtc1sgJ2Ryb3Bkb3duX2lkJyBdICsgJ19jb250YWluZXIgbGkgaW5wdXRbdHlwZT1jaGVja2JveF0sJ1xyXG5cdFx0ICArICcjJyArIHBhcmFtc1sgJ2Ryb3Bkb3duX2lkJyBdICsgJ19jb250YWluZXIgbGkgaW5wdXRbdHlwZT1yYWRpb10nICkucHJvcCggJ2NoZWNrZWQnLCBmYWxzZSApO1xyXG5cclxuXHRqUXVlcnkoICcjJyArIHBhcmFtc1sgJ2Ryb3Bkb3duX2lkJyBdICkudHJpZ2dlciggJ2NoYW5nZScgKTtcclxuXHJcblx0aWYgKCAhIHBhcmFtc1sgJ2lzX3RoaXNfc2ltcGxlX2xpc3QnIF0gKXtcclxuXHRcdGpRdWVyeSggJyMnICsgcGFyYW1zWyAnZHJvcGRvd25faWQnIF0gKyAnX2NvbnRhaW5lcicgKS5oaWRlKCk7XHJcblx0fVxyXG59Il0sImZpbGUiOiJpbmNsdWRlcy9fdG9vbGJhcl91aS9fb3V0L3Rvb2xiYXJfdWkuanMifQ==
|
includes/_toolbar_ui/_out/toolbar_ui.min.css
ADDED
@@ -0,0 +1,2 @@
|
|
Â
|
|
Â
|
1 |
+
.ui_element .wpbc_ui_button{-ms-flex-pack:start;-ms-flex-align:center;align-items:center;-webkit-appearance:none;border-style:solid;box-sizing:border-box;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-flow:row nowrap;flex-flow:row nowrap;justify-content:flex-start;margin:0;min-height:24px;padding:0 10px 1px;text-decoration:none;white-space:nowrap}.ui_element .wpbc_ui_button,.ui_element .wpbc_ui_button-secondary{background:#f7f7f7;border-color:#d8d8d8;color:#555;vertical-align:top}.ui_element .wpbc_ui_button-secondary:hover:not(.inactive),.ui_element .wpbc_ui_button.hover:not(.inactive),.ui_element .wpbc_ui_button:hover:not(.inactive){background:#fafafa;border-color:#d8d8d8;color:#23282d;text-decoration:none}.ui_element .wpbc_ui_button-secondary.inactive:hover,.ui_element .wpbc_ui_button.hover.inactive,.ui_element .wpbc_ui_button.inactive:hover{cursor:default}.ui_element .wpbc_ui_button-secondary:focus,.ui_element .wpbc_ui_button.focus,.ui_element .wpbc_ui_button:focus{background:#fafafa;border-color:#d8d8d8;box-shadow:0 0 0 0 #4f94d4,0 0 1px 1px rgba(79,148,212,.8);color:#23282d;outline:2px solid transparent;outline-offset:0;text-decoration:none;z-index:1}.ui_element .wpbc_ui_button-secondary:active:not(.inactive),.ui_element .wpbc_ui_button:active:not(.inactive),.wpbc_ui_dropdown.open>.wpbc_ui_button:not(.inactive){background:#f6f7f7;border-color:#d8d8d8;box-shadow:inset 0 1px 7px -3px rgba(0,0,0,.3);outline:0;text-decoration:none;-ms-transform:translateY(1px);transform:translateY(1px)}.ui_element.disabled .wpbc_ui_button,.ui_element .wpbc_ui_button-disabled,.ui_element .wpbc_ui_button-secondary.disabled,.ui_element .wpbc_ui_button-secondary:disabled,.ui_element .wpbc_ui_button-secondary[disabled],.ui_element .wpbc_ui_button.disabled,.ui_element .wpbc_ui_button:disabled,.ui_element .wpbc_ui_button[disabled]{background:#f6f7f7!important;border-color:#dcdcde!important;box-shadow:none!important;color:#a7aaad!important;cursor:default;-ms-transform:none!important;transform:none!important}.ui_element .wpbc_ui_button.active:hover:not(.inactive),.ui_element .wpbc_ui_button.active:not(.inactive){background:#f6f7f7;border-color:#d8d8d8;box-shadow:inset 0 1px 7px -3px rgba(0,0,0,.3);outline:0;text-decoration:none;-ms-transform:translateY(1px);transform:translateY(1px)}.ui_element .wpbc_ui_button.active:focus:not(.inactive){border-color:#3582c4;box-shadow:inset 0 1px 5px -3px #0a4b78,0 0 1px 1px rgba(79,148,212,.1)}.ui_element .wpbc_ui_button_primary{background:#0085ba;border-color:#0073aa #006799 #006799;box-shadow:0 1px 0 #f1f1f1;color:#fff;text-decoration:none;text-shadow:0 -1px 1px #006799,1px 0 1px #006799,0 1px 1px #006799,-1px 0 1px #006799}.ui_element .wpbc_ui_button_primary.focus:not(.inactive),.ui_element .wpbc_ui_button_primary.hover:not(.inactive),.ui_element .wpbc_ui_button_primary:focus:not(.inactive),.ui_element .wpbc_ui_button_primary:hover:not(.inactive){background:#008ec2;border-color:#006799;color:#fff}.ui_element .wpbc_ui_button_primary.focus:not(.inactive),.ui_element .wpbc_ui_button_primary:focus:not(.inactive){box-shadow:0 0 0 0 #fff,0 0 2px 1px #a4d7ff}.ui_element .wpbc_ui_button_primary.active:focus:not(.inactive),.ui_element .wpbc_ui_button_primary.active:hover:not(.inactive),.ui_element .wpbc_ui_button_primary.active:not(.inactive),.ui_element .wpbc_ui_button_primary:active:not(.inactive){background:#0c7ca8;border-color:#0b79a4;box-shadow:inset 0 1px 7px -3px rgba(0,0,0,.3);color:#fff}.ui_element .wpbc_ui_button_primary-disabled,.ui_element .wpbc_ui_button_primary.disabled,.ui_element .wpbc_ui_button_primary:disabled,.ui_element .wpbc_ui_button_primary[disabled]{background:#f6f7f7!important;border-color:#dcdcde!important;box-shadow:none!important;color:#a7aaad!important;cursor:default;text-shadow:none!important}@media (max-width:782px){.ui_element .in-button-text{display:none}}.ui_element .wpbc_ui_text{border:1px solid #d6d6d6;-ms-flex:1 1 120px;flex:1 1 120px}.ui_element .wpbc_ui_text.focus,.ui_element .wpbc_ui_text:focus{border-color:#d8d8d8;box-shadow:0 0 0 1px #2271b1;box-shadow:0 0 0 0 #4f94d4,0 0 1px 1px rgba(79,148,212,.8);outline:2px solid transparent;z-index:1}.ui_element .wpbc_ui_select{border:1px solid #d6d6d6;-ms-flex:1 1 auto;flex:1 1 auto}.ui_element .wpbc_ui_select.focus,.ui_element .wpbc_ui_select:focus{border-color:#d8d8d8;box-shadow:0 0 0 1px #2271b1;box-shadow:0 0 0 0 #4f94d4,0 0 1px 1px rgba(79,148,212,.8);outline:2px solid transparent;z-index:1}.ui_element .wpbc_ui_checkbox,.ui_element .wpbc_ui_radio{-ms-flex-item-align:center;align-self:center;-webkit-appearance:none;background:#fff;border:1px solid #bcbcbc;border-radius:4px;box-shadow:inset 0 1px 2px rgba(0,0,0,.1);clear:none;color:#50575e;cursor:pointer;display:inline-block;height:1rem!important;line-height:0!important;margin:0;min-width:1rem;outline:0;padding:0!important;text-align:center;transition:border-color .05s ease-in-out;vertical-align:middle;width:1rem}.ui_element .wpbc_ui_radio{border-radius:50%;line-height:.71428571;margin-right:.25rem}.ui_element .wpbc_ui_checkbox.focus,.ui_element .wpbc_ui_checkbox:focus,.ui_element .wpbc_ui_radio.focus,.ui_element .wpbc_ui_radio:focus{border-color:#d8d8d8;box-shadow:0 0 0 1px #2271b1;box-shadow:0 0 0 0 #4f94d4,0 0 1px 1px rgba(79,148,212,.8);outline:2px solid transparent!important;z-index:1}.ui_element .wpbc_ui_checkbox+.wpbc_ui_control_label,.ui_element .wpbc_ui_radio+.wpbc_ui_control_label{padding-left:5px;padding-right:5px}@media screen and (max-width:782px){.ui_element .wpbc_ui_checkbox,.ui_element .wpbc_ui_radio{height:1.5625rem!important;width:1.5625rem}}.ui_element .wpbc_ui_addon{-ms-flex-pack:stretch;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:0 1 auto;flex:0 1 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;justify-content:stretch}.ui_element label.wpbc_ui_control_label{-ms-flex-pack:start;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:0 1 auto;flex:0 1 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;justify-content:flex-start;padding:0 5px 1px 0}.ui_element label.wpbc_ui_control_label+.wpbc_ui_control:first-of-type{border-bottom-left-radius:3px!important;border-top-left-radius:3px!important}.ui_element .wpbc_ui_dropdown__outside_label{-ms-flex-pack:start;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:0 1 auto;flex:0 1 auto;-ms-flex-flow:row nowrap;flex-flow:row nowrap;justify-content:flex-start;padding:0 10px 1px 0}.ui_element .wpbc_ui_dropdown{-ms-flex-pack:start;-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;-ms-flex:0 1 auto;flex:0 1 auto;-ms-flex-flow:row nowrap;flex-flow:row nowrap;justify-content:flex-start;position:relative}.ui_element .wpbc_ui_dropdown *{box-sizing:border-box}.ui_element .wpbc_ui_dropdown .wpbc_ui_dropdown__inside_label{font-weight:600;margin:0;padding:0 .5em 0 0}.ui_element .wpbc_ui_dropdown .wpbc_ui_dropdown__inside_caret{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px dashed;border-top:4px solid\9;display:inline-block;height:0;margin-left:7px;vertical-align:middle;width:0}.ui_element .wpbc_ui_dropdown:last-child>.wpbc_ui_button:last-of-type{border-bottom-right-radius:3px;border-top-right-radius:3px}.ui_element .wpbc_ui_dropdown:not(:first-child)>.wpbc_ui_button:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.ui_element .wpbc_ui_dropdown:not(:last-child)>.wpbc_ui_button:last-child{border-bottom-right-radius:0;border-top-right-radius:0}.ui_element .wpbc_ui_dropdown__outside_label+.wpbc_ui_dropdown>.wpbc_ui_button:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px}.wpbc_ui_dropdown .ui_dropdown_menu li.ui_complex_option_element{-ms-flex-pack:start;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;justify-content:flex-start;margin:0;padding:0 15px}.wpbc_ui_dropdown ul.ui_dropdown_menu li.ui_complex_option_element .ui_element{-ms-flex-pack:start;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:0 1 50%;flex:0 1 50%;-ms-flex-flow:row nowrap;flex-flow:row nowrap;justify-content:flex-start;margin:0;padding:4px 0}.wpbc_ui_dropdown ul.ui_dropdown_menu li.ui_complex_option_element .ui_element>*{-ms-flex:0 1 auto;flex:0 1 auto;height:auto;margin:0;max-width:210px}.ui_element .wpbc_ui_dropdown .ui_dropdown_menu{background-clip:padding-box;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:0 0 3px 3px;box-shadow:0 6px 12px rgba(0,0,0,.175);display:none;float:left;left:0;list-style:none;margin:0;min-width:160px;padding:5px 0;position:absolute;text-align:left;top:100%;z-index:1000}.ui_element .wpbc_ui_dropdown ul.ui_dropdown_menu *{font-size:13px}@media screen and (max-width:782px){.ui_element .wpbc_ui_dropdown ul.ui_dropdown_menu *{font-size:14px}}.ui_element .wpbc_ui_dropdown.open>.ui_dropdown_menu{display:block}.ui_element .wpbc_ui_dropdown .ui_dropdown_menu.pull-right,.ui_element .wpbc_ui_dropdown .ui_dropdown_menu.ui_dropdown_menu_right{left:auto;right:0}.ui_element .wpbc_ui_dropdown .ui_dropdown_menu.ui_dropdown_menu_left{left:0;right:auto}.ui_element .wpbc_ui_dropdown .ui_dropdown_menu hr{background:none;border:0;border-top:1px solid #eee;height:1px;margin:5px 0;overflow:hidden}.wpbc_ui_dropdown .ui_dropdown_menu li.dropdown-header{color:#999;font-size:.8em;font-style:italic;font-weight:600;padding:0 15px}.wpbc_ui_dropdown .ui_dropdown_menu li{margin:0;padding:0}.ui_element .wpbc_ui_dropdown .ui_dropdown_menu a{clear:both;display:block;font-weight:400;line-height:18px;padding:5px 15px;white-space:nowrap}.ui_element .wpbc_ui_dropdown .ui_dropdown_menu>li>a{clear:both;color:#333;display:block;font-size:1em;font-weight:400;line-height:1.42857143;padding:5px 15px;text-decoration:none;white-space:nowrap}.ui_element .wpbc_ui_dropdown .ui_dropdown_menu>.active>a,.ui_element .wpbc_ui_dropdown .ui_dropdown_menu>.active>a:focus,.ui_element .wpbc_ui_dropdown .ui_dropdown_menu>.active>a:hover,.ui_element .wpbc_ui_dropdown .ui_dropdown_menu>li>a:focus,.ui_element .wpbc_ui_dropdown .ui_dropdown_menu>li>a:hover{background:#08c;box-shadow:none;color:#fff;outline:none;text-decoration:none}.ui_element .wpbc_ui_dropdown .ui_dropdown_menu>.disabled>a,.ui_element .wpbc_ui_dropdown .ui_dropdown_menu>.disabled>a:focus,.ui_element .wpbc_ui_dropdown .ui_dropdown_menu>.disabled>a:hover{color:#ccc}.ui_element .wpbc_ui_dropdown .ui_dropdown_menu>.disabled>a:focus,.ui_element .wpbc_ui_dropdown .ui_dropdown_menu>.disabled>a:hover{background-color:transparent;background-image:none;cursor:not-allowed;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);text-decoration:none}.ui_element .wpbc_ui_dropdown .dropdown-backdrop{bottom:0;left:0;position:fixed;right:0;top:0;z-index:990}.ui_element .wpbc_ui_control{border-radius:0;border-width:1px;margin-right:-1px!important}.ui_element .wpbc_ui_control:first-child{border-radius:3px 0 0 3px}.ui_element .wpbc_ui_control:last-child{border-radius:0 3px 3px 0;border-width:1px}.ui_element .wpbc_ui_control:first-child:last-child{border-radius:3px}.ui_nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.wpbc_ajx_toolbar{margin:0 0 10px 50px;position:relative}.wpbc_ajx_toolbar *{box-sizing:border-box}.wpbc_ajx_toolbar.wpbc_buttons_row{float:left;margin:0;position:static}.wpbc_ajx_toolbar.wpbc_buttons_row .ui_container{background:none;border:none;margin:0;padding:0}.wpbc_ajx_toolbar .ui_container{-ms-flex-pack:start;-ms-flex-align:stretch;align-items:stretch;background:#f5f5f5;border:1px solid #ccc;border-top:none;box-shadow:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;font-size:14px;justify-content:flex-start;margin:0;padding:6px 15px}.wpbc_ajx_toolbar .ui_container:last-child{border-radius:0 0 2px 2px}.wpbc_ajx_toolbar .ui_container .ui_group{-ms-flex-pack:start;-ms-flex-align:stretch;align-items:stretch;border:none;display:-ms-flexbox;display:flex;-ms-flex:0 1 auto;flex:0 1 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;justify-content:flex-start;margin:0 20px 0 0;padding:0}.wpbc_ajx_toolbar .ui_container .ui_group:last-child{margin:0}.wpbc_ajx_toolbar .ui_container .ui_group .ui_element{-ms-flex-pack:start;-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;-ms-flex:0 1 auto;flex:0 1 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;justify-content:flex-start;margin:0 15px 0 0;position:relative}.wpbc_ajx_toolbar .ui_container .ui_group .ui_element:last-child{margin-right:0}.wpbc_ajx_toolbar .ui_container .ui_group .ui_element>*{margin:5px 0}.ui_elements_divider{margin-left:15px}.wpbc_ajx_toolbar .ui_container.ui_container_small *{font-size:13px}@media (max-width:782px){.wpbc_ajx_toolbar .ui_container.ui_container_small *{font-size:14px}}.wpbc_ajx_toolbar .ui_container .ui_group .ui_element>*{height:38px}.wpbc_ajx_toolbar .ui_container.ui_container_small .ui_group .ui_element>*{height:30px}@media (max-width:782px){#toolbar_booking_listing.wpbc_ajx_toolbar .ui_container .ui_group .ui_element>*,.wpbc_ajx_toolbar.wpbc_buttons_row .ui_container .ui_group .ui_element>*{height:38px}#toolbar_booking_listing.wpbc_ajx_toolbar .ui_container .ui_group .ui_element>.wpbc_ui_button,.wpbc_ajx_toolbar.wpbc_buttons_row .ui_container .ui_group .ui_element>.wpbc_ui_button{-ms-flex-pack:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;justify-content:center;padding:0 15px 1px}}.wpbc_ajx_toolbar .ui_container .ui_group.ui_group__dates_status{margin-right:2.5em}.wpbc_ajx_toolbar .ui_container .ui_group.ui_group__keyword,.wpbc_ajx_toolbar .ui_container .ui_group.ui_group__keyword .ui_element{-ms-flex:1 1 auto;flex:1 1 auto}.wpbc_ajx_toolbar .ui_container .ui_group.ui_group__keyword .ui_element .wpbc_search_field{width:100%}.wpbc_ajx_toolbar .ui_container.ui_container_filter_row_2{padding:4px 15px}.wpbc_ajx_toolbar .ui_container.ui_container_filter_row_2 .ui_group.ui_group__statuses{-ms-flex:1 1 auto;flex:1 1 auto}.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi{-ms-flex-pack:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:1 1 auto;flex:1 1 auto;-ms-flex-flow:column wrap;flex-flow:column wrap;height:auto;justify-content:center;margin-right:-1px;min-width:10em;width:auto!important}@media (max-width:782px){.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi{height:auto!important}}.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices{-ms-flex-pack:start;-ms-flex-align:center;-ms-flex-line-pack:center;align-content:center;align-items:center;border-radius:3px 0 0 3px;display:-ms-flexbox;display:flex;-ms-flex:1 1 auto;flex:1 1 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;height:auto;justify-content:flex-start;margin:0;min-height:28px!important;padding:0 0 0 5px}.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi.chzn-container-active ul.chzn-choices{border-color:#d8d8d8!important;box-shadow:0 0 0 0 #4f94d4,0 0 1px 1px rgba(79,148,212,.8)!important;outline:2px solid transparent;z-index:1}.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice{-ms-flex-pack:start;-ms-flex-align:baseline;align-items:baseline;display:-ms-flexbox;display:flex;-ms-flex:0 1 auto;flex:0 1 auto;-ms-flex-flow:row nowrap;flex-flow:row nowrap;justify-content:flex-start;margin:3px .5em 3px 0;padding:3px 5px 3px 8px}.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice span{word-wrap:break-word}.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice a.search-choice-close{-ms-flex-pack:center;-ms-flex-line-pack:center;align-content:center;bottom:auto;color:#555;display:-ms-flexbox;display:flex;-ms-flex-flow:column wrap;flex-flow:column wrap;font-family:Glyphicons Halflings;font-size:9px;font-style:normal;font-weight:400;height:auto;justify-content:center;left:auto;margin:0 0 0 1em;position:relative;right:auto;text-decoration:none;top:auto;width:auto}.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice a.search-choice-close:before{content:"\e014"}.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice a.search-choice-close:hover{text-decoration:none}.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-field{-ms-flex-pack:start;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:0 1 1px;flex:0 1 1px;-ms-flex-flow:row wrap;flex-flow:row wrap;justify-content:flex-start;margin:0;padding:0;white-space:nowrap}.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-field input[type=text].default{min-width:12em}.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-field input[type=text]{font-family:inherit}.ui_container .ui_group .ui_element .chzn-container div.chzn-drop ul.chzn-results li.highlighted{background:#08c;box-shadow:none;color:#fff;outline:none;text-decoration:none}
|
2 |
+
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluY2x1ZGVzL190b29sYmFyX3VpL19vdXQvdG9vbGJhcl91aS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsNEJBS0UsbUJBQW9CLENBRXBCLHFCQUFzQixDQUNsQixrQkFBbUIsQ0FZdkIsdUJBQXdCLENBRHhCLGtCQUFtQixDQUluQixxQkFBc0IsQ0FOdEIsY0FBZSxDQWhCZixtQkFBb0IsQ0FDcEIsWUFBYSxDQUNiLHdCQUF5QixDQUNyQixvQkFBcUIsQ0FFckIsMEJBQTJCLENBUS9CLFFBQVMsQ0FEVCxlQUFnQixDQUdoQixrQkFBbUIsQ0FQbkIsb0JBQXFCLENBYXJCLGtCQUVGLENBRUEsa0VBSUUsa0JBQW1CLENBRG5CLG9CQUFxQixDQURyQixVQUFXLENBR1gsa0JBQ0YsQ0FHQSw2SkFHRSxrQkFBbUIsQ0FDbkIsb0JBQXFCLENBQ3JCLGFBQWMsQ0FDZCxvQkFDRixDQUVBLDJJQUdFLGNBQ0YsQ0FHQSxnSEFHRSxrQkFBbUIsQ0FDbkIsb0JBQXFCLENBR3JCLDBEQUFrRSxDQUZsRSxhQUFjLENBTWQsNkJBQThCLENBRTlCLGdCQUFpQixDQUpqQixvQkFBcUIsQ0FEckIsU0FNRixDQUdBLG9LQUdFLGtCQUFtQixDQUNuQixvQkFBcUIsQ0FDckIsOENBQW1ELENBR25ELFNBQVUsQ0FDVixvQkFBcUIsQ0FIckIsNkJBQThCLENBQzFCLHlCQUdOLENBR0Esd1VBVUUsNEJBQThCLENBRDlCLDhCQUFnQyxDQUVoQyx5QkFBMkIsQ0FIM0IsdUJBQXlCLENBSXpCLGNBQWUsQ0FDZiw0QkFBOEIsQ0FDMUIsd0JBQ04sQ0FHQSwwR0FFRSxrQkFBbUIsQ0FDbkIsb0JBQXFCLENBQ3JCLDhDQUFtRCxDQUduRCxTQUFVLENBQ1Ysb0JBQXFCLENBSHJCLDZCQUE4QixDQUMxQix5QkFHTixDQUVBLHdEQUNFLG9CQUFxQixDQUNyQix1RUFDRixDQUdBLG9DQUNFLGtCQUFtQixDQUNuQixvQ0FBcUMsQ0FJckMsMEJBQTZCLENBSDdCLFVBQVcsQ0FFWCxv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bi5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBVSSBUb29sYmFyICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyogVG8gQ29tcGlsZSBmaWxlOiBBbHQgKyBGMTIgICBhbmQgcnVuIGNvbW1hbmQ6ICBcImd1bHAgd3BiY1wiICAqL1xuLyogMS4gRGVmYXVsdCBCdXR0b24gU3R5bGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4udWlfZWxlbWVudCAud3BiY191aV9idXR0b24ge1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIC8qZm9udC1zaXplOiAxM3B4OyovXG4gIC8qbGluZS1oZWlnaHQ6IDIuMTUzODQ2MTU7ICEqIDI4cHggKiEqL1xuICAvKm1pbi1oZWlnaHQ6IDMwcHg7Ki9cbiAgbWluLWhlaWdodDogMjRweDtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwIDEwcHggMnB4O1xuICBwYWRkaW5nLWJvdHRvbTogMXB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIC8qYm9yZGVyLXdpZHRoOiAxcHg7ICBcdC0gRGVmaW5lZCBhdCBTZXZlcmFsIGVsZW1lbnRzIGluIGEgR3JvdXAuIFBvaW50ICMyLiAqL1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gIC8qYm9yZGVyLXJhZGl1czogM3B4O1x0LSBEZWZpbmVkIGF0IFNldmVyYWwgZWxlbWVudHMgaW4gYSBHcm91cC4gUG9pbnQgIzIuICovXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbixcbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbi1zZWNvbmRhcnkge1xuICBjb2xvcjogIzU1NTtcbiAgYm9yZGVyLWNvbG9yOiAjZDhkOGQ4O1xuICBiYWNrZ3JvdW5kOiAjZjdmN2Y3O1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xufVxuXG4vKiA6aG92ZXIgIC0tLS0gKi9cbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbi5ob3Zlcjpub3QoLmluYWN0aXZlKSxcbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbjpob3Zlcjpub3QoLmluYWN0aXZlKSxcbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbi1zZWNvbmRhcnk6aG92ZXI6bm90KC5pbmFjdGl2ZSkge1xuICBiYWNrZ3JvdW5kOiAjZmFmYWZhO1xuICBib3JkZXItY29sb3I6ICNkOGQ4ZDg7XG4gIGNvbG9yOiAjMjMyODJkO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbi5ob3Zlci5pbmFjdGl2ZSxcbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbi5pbmFjdGl2ZTpob3Zlcixcbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbi1zZWNvbmRhcnkuaW5hY3RpdmU6aG92ZXIge1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbi8qIDpmb2N1cyAgLS0tLSAqL1xuLnVpX2VsZW1lbnQgLndwYmNfdWlfYnV0dG9uLmZvY3VzLFxuLnVpX2VsZW1lbnQgLndwYmNfdWlfYnV0dG9uOmZvY3VzLFxuLnVpX2VsZW1lbnQgLndwYmNfdWlfYnV0dG9uLXNlY29uZGFyeTpmb2N1cyB7XG4gIGJhY2tncm91bmQ6ICNmYWZhZmE7XG4gIGJvcmRlci1jb2xvcjogI2Q4ZDhkODtcbiAgY29sb3I6ICMyMzI4MmQ7XG4gIC8qYm94LXNoYWRvdzogMCAwIDAgMXB4ICM0Zjk0ZDQsIDAgMCAycHggMXB4IHJnYmEoNzksIDE0OCwgMjEyLCAwLjgpO1x0XHRUaGlzIGlzIERlZmF1bHQ6IFdvcmRQcmVzcyAqL1xuICBib3gtc2hhZG93OiAwIDAgMCAwcHggIzRmOTRkNCwgMCAwIDFweCAxcHggcmdiYSg3OSwgMTQ4LCAyMTIsIDAuOCk7XG4gIHotaW5kZXg6IDE7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgLyogT25seSB2aXNpYmxlIGluIFdpbmRvd3MgSGlnaCBDb250cmFzdCBtb2RlICovXG4gIG91dGxpbmU6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgLyogUmVzZXQgaW5oZXJpdGVkIG9mZnNldCBmcm9tIEd1dGVuYmVyZyAqL1xuICBvdXRsaW5lLW9mZnNldDogMDtcbn1cblxuLyogOmFjdGl2ZSAgLS0tLSAqL1xuLndwYmNfdWlfZHJvcGRvd24ub3BlbiA+IC53cGJjX3VpX2J1dHRvbjpub3QoLmluYWN0aXZlKSxcbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbjphY3RpdmU6bm90KC5pbmFjdGl2ZSksXG4udWlfZWxlbWVudCAud3BiY191aV9idXR0b24tc2Vjb25kYXJ5OmFjdGl2ZTpub3QoLmluYWN0aXZlKSB7XG4gIGJhY2tncm91bmQ6ICNmNmY3Zjc7XG4gIGJvcmRlci1jb2xvcjogI2Q4ZDhkODtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggN3B4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjMpO1xuICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTtcbiAgb3V0bGluZTogMDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4vKiA6ZGlzYWJsZWQgIC0tLS0gKi9cbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbjpkaXNhYmxlZCxcbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbltkaXNhYmxlZF0sXG4udWlfZWxlbWVudC5kaXNhYmxlZCAud3BiY191aV9idXR0b24sXG4udWlfZWxlbWVudCAud3BiY191aV9idXR0b24uZGlzYWJsZWQsXG4udWlfZWxlbWVudCAud3BiY191aV9idXR0b24tc2Vjb25kYXJ5W2Rpc2FibGVkXSxcbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbi1zZWNvbmRhcnk6ZGlzYWJsZWQsXG4udWlfZWxlbWVudCAud3BiY191aV9idXR0b24tc2Vjb25kYXJ5LmRpc2FibGVkLFxuLnVpX2VsZW1lbnQgLndwYmNfdWlfYnV0dG9uLWRpc2FibGVkIHtcbiAgY29sb3I6ICNhN2FhYWQgIWltcG9ydGFudDtcbiAgYm9yZGVyLWNvbG9yOiAjZGNkY2RlICFpbXBvcnRhbnQ7XG4gIGJhY2tncm91bmQ6ICNmNmY3ZjcgIWltcG9ydGFudDtcbiAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIC1tcy10cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcbiAgICAgIHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4vKiAuYWN0aXZlIENMQVNTIC0gcHJlc3NlZCBidXR0b24sIHByZXNzZWQgc3RhdGUgZS5nLiBhIHNlbGVjdGVkIHNldHRpbmcgKi9cbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbi5hY3RpdmU6bm90KC5pbmFjdGl2ZSksXG4udWlfZWxlbWVudCAud3BiY191aV9idXR0b24uYWN0aXZlOmhvdmVyOm5vdCguaW5hY3RpdmUpIHtcbiAgYmFja2dyb3VuZDogI2Y2ZjdmNztcbiAgYm9yZGVyLWNvbG9yOiAjZDhkOGQ4O1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCA3cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMyk7XG4gIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxcHgpO1xuICBvdXRsaW5lOiAwO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbi5hY3RpdmU6Zm9jdXM6bm90KC5pbmFjdGl2ZSkge1xuICBib3JkZXItY29sb3I6ICMzNTgyYzQ7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDVweCAtM3B4ICMwYTRiNzgsIDAgMCAxcHggMXB4IHJnYmEoNzksIDE0OCwgMjEyLCAwLjEpO1xufVxuXG4vKiAgMi4gUHJpbWFyeSBCdXR0b24gU3R5bGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbl9wcmltYXJ5IHtcbiAgYmFja2dyb3VuZDogIzAwODViYTtcbiAgYm9yZGVyLWNvbG9yOiAjMDA3M2FhICMwMDY3OTkgIzAwNjc5OTtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtc2hhZG93OiAwIC0xcHggMXB4ICMwMDY3OTksIDFweCAwIDFweCAjMDA2Nzk5LCAwIDFweCAxcHggIzAwNjc5OSwgLTFweCAwIDFweCAjMDA2Nzk5O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGJveC1zaGFkb3c6IDAgMXB4IDBweCAjZjFmMWYxO1xuICAvKmJhY2tncm91bmQ6ICMyMjcxYjE7Ki9cbiAgLypib3JkZXItY29sb3I6ICMyMjcxYjE7Ki9cbiAgLypjb2xvcjogI2ZmZjsqL1xuICAvKnRleHQtZGVjb3JhdGlvbjogbm9uZTsqL1xuICAvKnRleHQtc2hhZG93OiBub25lOyovXG59XG5cbi8qIDpob3ZlciwgOmZvY3VzICAtLS0tICovXG4udWlfZWxlbWVudCAud3BiY191aV9idXR0b25fcHJpbWFyeS5ob3Zlcjpub3QoLmluYWN0aXZlKSxcbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbl9wcmltYXJ5OmhvdmVyOm5vdCguaW5hY3RpdmUpLFxuLnVpX2VsZW1lbnQgLndwYmNfdWlfYnV0dG9uX3ByaW1hcnkuZm9jdXM6bm90KC5pbmFjdGl2ZSksXG4udWlfZWxlbWVudCAud3BiY191aV9idXR0b25fcHJpbWFyeTpmb2N1czpub3QoLmluYWN0aXZlKSB7XG4gIC8qYmFja2dyb3VuZDogIzEzNWU5NjsqL1xuICAvKmJvcmRlci1jb2xvcjogIzEzNWU5NjsqL1xuICAvKmNvbG9yOiAjZmZmOyovXG4gIGJhY2tncm91bmQ6ICMwMDhlYzI7XG4gIGJvcmRlci1jb2xvcjogIzAwNjc5OTtcbiAgY29sb3I6ICNmZmY7XG59XG5cbi8qIDpmb2N1cyAgLS0tLSAqL1xuLnVpX2VsZW1lbnQgLndwYmNfdWlfYnV0dG9uX3ByaW1hcnkuZm9jdXM6bm90KC5pbmFjdGl2ZSksXG4udWlfZWxlbWVudCAud3BiY191aV9idXR0b25fcHJpbWFyeTpmb2N1czpub3QoLmluYWN0aXZlKSB7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDBweCAjZmZmLCAwIDAgMnB4IDFweCAjYTRkN2ZmO1xufVxuXG4vKiA6YWN0aXZlICAtLS0tICovXG4udWlfZWxlbWVudCAud3BiY191aV9idXR0b25fcHJpbWFyeS5hY3RpdmU6bm90KC5pbmFjdGl2ZSksXG4udWlfZWxlbWVudCAud3BiY191aV9idXR0b25fcHJpbWFyeS5hY3RpdmU6aG92ZXI6bm90KC5pbmFjdGl2ZSksXG4udWlfZWxlbWVudCAud3BiY191aV9idXR0b25fcHJpbWFyeS5hY3RpdmU6Zm9jdXM6bm90KC5pbmFjdGl2ZSksXG4udWlfZWxlbWVudCAud3BiY191aV9idXR0b25fcHJpbWFyeTphY3RpdmU6bm90KC5pbmFjdGl2ZSkge1xuICBiYWNrZ3JvdW5kOiAjMGM3Y2E4O1xuICBib3JkZXItY29sb3I6ICMwYjc5YTQ7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDdweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4zKTtcbiAgY29sb3I6ICNmZmY7XG59XG5cbi8qIDpkaXNhYmxlZCAgLS0tLSAqL1xuLnVpX2VsZW1lbnQgLndwYmNfdWlfYnV0dG9uX3ByaW1hcnlbZGlzYWJsZWRdLFxuLnVpX2VsZW1lbnQgLndwYmNfdWlfYnV0dG9uX3ByaW1hcnk6ZGlzYWJsZWQsXG4udWlfZWxlbWVudCAud3BiY191aV9idXR0b25fcHJpbWFyeS1kaXNhYmxlZCxcbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbl9wcmltYXJ5LmRpc2FibGVkIHtcbiAgY29sb3I6ICNhN2FhYWQgIWltcG9ydGFudDtcbiAgYmFja2dyb3VuZDogI2Y2ZjdmNyAhaW1wb3J0YW50O1xuICBib3JkZXItY29sb3I6ICNkY2RjZGUgIWltcG9ydGFudDtcbiAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICB0ZXh0LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3ODJweCkge1xuICAudWlfZWxlbWVudCAuaW4tYnV0dG9uLXRleHQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuLyogMy4xIFRleHQgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLnVpX2VsZW1lbnQgLndwYmNfdWlfdGV4dCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkNmQ2ZDY7XG4gIC1tcy1mbGV4OiAxIDEgMTIwcHg7XG4gICAgICBmbGV4OiAxIDEgMTIwcHg7XG59XG5cbi8qIDpmb2N1cyAgLS0tLSAqL1xuLnVpX2VsZW1lbnQgLndwYmNfdWlfdGV4dC5mb2N1cyxcbi51aV9lbGVtZW50IC53cGJjX3VpX3RleHQ6Zm9jdXMge1xuICBib3JkZXItY29sb3I6ICMyMjcxYjE7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCAjMjI3MWIxO1xuICBib3JkZXItY29sb3I6ICNkOGQ4ZDg7XG4gIC8qYm94LXNoYWRvdzogMCAwIDAgMXB4ICM0Zjk0ZDQsIDAgMCAycHggMXB4IHJnYmEoNzksIDE0OCwgMjEyLCAwLjgpO1x0XHRUaGlzIGlzIERlZmF1bHQ6IFdvcmRQcmVzcyAqL1xuICBib3gtc2hhZG93OiAwIDAgMCAwcHggIzRmOTRkNCwgMCAwIDFweCAxcHggcmdiYSg3OSwgMTQ4LCAyMTIsIDAuOCk7XG4gIHotaW5kZXg6IDE7XG4gIC8qIE9ubHkgdmlzaWJsZSBpbiBXaW5kb3dzIEhpZ2ggQ29udHJhc3QgbW9kZSAqL1xuICBvdXRsaW5lOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG59XG5cbi8qIDMuMiBTZWxlY3QtYm94ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLnVpX2VsZW1lbnQgLndwYmNfdWlfc2VsZWN0IHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2Q2ZDZkNjtcbiAgLW1zLWZsZXg6IDEgMSBhdXRvO1xuICAgICAgZmxleDogMSAxIGF1dG87XG59XG5cbi8qIDpmb2N1cyAgLS0tLSAqL1xuLnVpX2VsZW1lbnQgLndwYmNfdWlfc2VsZWN0LmZvY3VzLFxuLnVpX2VsZW1lbnQgLndwYmNfdWlfc2VsZWN0OmZvY3VzIHtcbiAgYm9yZGVyLWNvbG9yOiAjMjI3MWIxO1xuICBib3gtc2hhZG93OiAwIDAgMCAxcHggIzIyNzFiMTtcbiAgYm9yZGVyLWNvbG9yOiAjZDhkOGQ4O1xuICAvKmJveC1zaGFkb3c6IDAgMCAwIDFweCAjNGY5NGQ0LCAwIDAgMnB4IDFweCByZ2JhKDc5LCAxNDgsIDIxMiwgMC44KTtcdFx0VGhpcyBpcyBEZWZhdWx0OiBXb3JkUHJlc3MgKi9cbiAgYm94LXNoYWRvdzogMCAwIDAgMHB4ICM0Zjk0ZDQsIDAgMCAxcHggMXB4IHJnYmEoNzksIDE0OCwgMjEyLCAwLjgpO1xuICB6LWluZGV4OiAxO1xuICAvKiBPbmx5IHZpc2libGUgaW4gV2luZG93cyBIaWdoIENvbnRyYXN0IG1vZGUgKi9cbiAgb3V0bGluZTogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xufVxuXG4vKiAzLjMgQ2hlY2stYm94ICAmICBSYWRpbyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi51aV9lbGVtZW50IC53cGJjX3VpX2NoZWNrYm94LFxuLnVpX2VsZW1lbnQgLndwYmNfdWlfcmFkaW8ge1xuICBib3JkZXI6IDFweCBzb2xpZCAjYmNiY2JjO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGJhY2tncm91bmQ6ICNmZmY7XG4gIGNvbG9yOiAjNTA1NzVlO1xuICBjbGVhcjogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGxpbmUtaGVpZ2h0OiAwICFpbXBvcnRhbnQ7XG4gIGhlaWdodDogMXJlbSAhaW1wb3J0YW50O1xuICBtYXJnaW46IC0wLjI1cmVtIDAuMjVyZW0gMCAwO1xuICBvdXRsaW5lOiAwO1xuICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgd2lkdGg6IDFyZW07XG4gIG1pbi13aWR0aDogMXJlbTtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICB0cmFuc2l0aW9uOiAuMDVzIGJvcmRlci1jb2xvciBlYXNlLWluLW91dDtcbiAgbWFyZ2luOiAwO1xuICAtbXMtZmxleC1pdGVtLWFsaWduOiBjZW50ZXI7XG4gICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG59XG5cbi51aV9lbGVtZW50IC53cGJjX3VpX3JhZGlvIHtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBtYXJnaW4tcmlnaHQ6IDAuMjVyZW07XG4gIGxpbmUtaGVpZ2h0OiAwLjcxNDI4NTcxO1xufVxuXG4vKiA6Zm9jdXMgIC0tLS0gKi9cbi51aV9lbGVtZW50IC53cGJjX3VpX2NoZWNrYm94LmZvY3VzLFxuLnVpX2VsZW1lbnQgLndwYmNfdWlfY2hlY2tib3g6Zm9jdXMsXG4udWlfZWxlbWVudCAud3BiY191aV9yYWRpby5mb2N1cyxcbi51aV9lbGVtZW50IC53cGJjX3VpX3JhZGlvOmZvY3VzIHtcbiAgYm9yZGVyLWNvbG9yOiAjMjI3MWIxO1xuICBib3gtc2hhZG93OiAwIDAgMCAxcHggIzIyNzFiMTtcbiAgYm9yZGVyLWNvbG9yOiAjZDhkOGQ4O1xuICAvKmJveC1zaGFkb3c6IDAgMCAwIDFweCAjNGY5NGQ0LCAwIDAgMnB4IDFweCByZ2JhKDc5LCAxNDgsIDIxMiwgMC44KTtcdFx0VGhpcyBpcyBEZWZhdWx0OiBXb3JkUHJlc3MgKi9cbiAgYm94LXNoYWRvdzogMCAwIDAgMHB4ICM0Zjk0ZDQsIDAgMCAxcHggMXB4IHJnYmEoNzksIDE0OCwgMjEyLCAwLjgpO1xuICB6LWluZGV4OiAxO1xuICAvKiBPbmx5IHZpc2libGUgaW4gV2luZG93cyBIaWdoIENvbnRyYXN0IG1vZGUgKi9cbiAgb3V0bGluZTogMnB4IHNvbGlkIHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG59XG5cbi51aV9lbGVtZW50IC53cGJjX3VpX3JhZGlvICsgLndwYmNfdWlfY29udHJvbF9sYWJlbCxcbi51aV9lbGVtZW50IC53cGJjX3VpX2NoZWNrYm94ICsgLndwYmNfdWlfY29udHJvbF9sYWJlbCB7XG4gIHBhZGRpbmctbGVmdDogNXB4O1xuICBwYWRkaW5nLXJpZ2h0OiA1cHg7XG59XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc4MnB4KSB7XG4gIC51aV9lbGVtZW50IC53cGJjX3VpX2NoZWNrYm94LFxuICAudWlfZWxlbWVudCAud3BiY191aV9yYWRpbyB7XG4gICAgaGVpZ2h0OiAxLjU2MjVyZW0gIWltcG9ydGFudDtcbiAgICB3aWR0aDogMS41NjI1cmVtO1xuICB9XG59XG5cbi8qIDMuNC4gQWRkb24gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLnVpX2VsZW1lbnQgLndwYmNfdWlfYWRkb24ge1xuICAtbXMtZmxleDogMCAxIGF1dG87XG4gICAgICBmbGV4OiAwIDEgYXV0bztcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1tcy1mbGV4LWZsb3c6IHJvdyB3cmFwO1xuICAgICAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgLW1zLWZsZXgtcGFjazogc3RyZXRjaDtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3RyZXRjaDtcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi8qIDMuNSBMYWJlbHMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLnVpX2VsZW1lbnQgbGFiZWwud3BiY191aV9jb250cm9sX2xhYmVsIHtcbiAgLW1zLWZsZXg6IDAgMSBhdXRvO1xuICAgICAgZmxleDogMCAxIGF1dG87XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtbXMtZmxleC1mbG93OiByb3cgd3JhcDtcbiAgICAgIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogMCA1cHggMnB4IDA7XG4gIHBhZGRpbmctYm90dG9tOiAxcHg7XG59XG5cbi51aV9lbGVtZW50IGxhYmVsLndwYmNfdWlfY29udHJvbF9sYWJlbCArIC53cGJjX3VpX2NvbnRyb2w6Zmlyc3Qtb2YtdHlwZSB7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDNweCAhaW1wb3J0YW50O1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHggIWltcG9ydGFudDtcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiA0LiBEcm9wZG93biBMaXN0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgKi9cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLnVpX2VsZW1lbnQgLndwYmNfdWlfZHJvcGRvd25fX291dHNpZGVfbGFiZWwge1xuICAtbXMtZmxleDogMCAxIGF1dG87XG4gICAgICBmbGV4OiAwIDEgYXV0bztcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1tcy1mbGV4LWZsb3c6IHJvdyBub3dyYXA7XG4gICAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XG4gIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogMCAxMHB4IDJweCAwO1xuICBwYWRkaW5nLWJvdHRvbTogMXB4O1xufVxuXG4udWlfZWxlbWVudCAud3BiY191aV9kcm9wZG93biB7XG4gIC1tcy1mbGV4OiAwIDEgYXV0bztcbiAgICAgIGZsZXg6IDAgMSBhdXRvO1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIC1tcy1mbGV4LWFsaWduOiBzdHJldGNoO1xuICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnVpX2VsZW1lbnQgLndwYmNfdWlfZHJvcGRvd24gKiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi51aV9lbGVtZW50IC53cGJjX3VpX2Ryb3Bkb3duIC53cGJjX3VpX2Ryb3Bkb3duX19pbnNpZGVfbGFiZWwge1xuICBmb250LXdlaWdodDogNjAwO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDAgMC41ZW0gMCAwO1xufVxuXG4udWlfZWxlbWVudCAud3BiY191aV9kcm9wZG93biAud3BiY191aV9kcm9wZG93bl9faW5zaWRlX2NhcmV0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBtYXJnaW4tbGVmdDogN3B4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBib3JkZXItdG9wOiA0cHggZGFzaGVkO1xuICBib3JkZXItdG9wOiA0cHggc29saWQgXFw5O1xuICBib3JkZXItcmlnaHQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLyogQk9SREVSIFJBRElVUyAqL1xuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLnVpX2VsZW1lbnQgLndwYmNfdWlfZHJvcGRvd246bGFzdC1jaGlsZCA+IC53cGJjX3VpX2J1dHRvbjpsYXN0LW9mLXR5cGUge1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogM3B4O1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4O1xufVxuXG4vKiBJbiBjYXNlLCBpZiBoYXZlIHNldmVyYWwgZWxlbWVudHMgaW4gLnVpX2VsZW1lbnQgKGxpa2UgXCJidXR0b24gZHJvcGRvd24gYnV0dG9uXCIpLCAtIG1ha2UgYm9yZGVycyBub3Qgcm91bmQgKi9cbi8qIExlZnQgYm9yZGVyIG5vdCByb3VuZCAqL1xuLnVpX2VsZW1lbnQgLndwYmNfdWlfZHJvcGRvd246bm90KDpmaXJzdC1jaGlsZCkgPiAud3BiY191aV9idXR0b246Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xufVxuXG4vKiBSaWdodCBib3JkZXIgbm90IHJvdW5kICovXG4udWlfZWxlbWVudCAud3BiY191aV9kcm9wZG93bjpub3QoOmxhc3QtY2hpbGQpID4gLndwYmNfdWlfYnV0dG9uOmxhc3QtY2hpbGQge1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG59XG5cbi8qIElmIHdlIGhhdmUgb3V0c2lkZSBsYWJlbCwgdGhlbiB3ZSBuZWVkIHRvIG1ha2UgbGVmdCBib3JkZXIgcm91bmQgKi9cbi51aV9lbGVtZW50IC53cGJjX3VpX2Ryb3Bkb3duX19vdXRzaWRlX2xhYmVsICsgLndwYmNfdWlfZHJvcGRvd24gPiAud3BiY191aV9idXR0b246Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDNweDtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLyogT1BUSU9OUyAgIChEcm9wIERvd24gTWVudSkgICBpbiBEcm9wZG93biBMaXN0ICovXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4vKiBDb21wbGV4IE9QVElPTiAgLSB0aGlzIG9wdGlvbiBpbmNsdWRlIHNvbWUgSU5QVVQgZWxlbWVudHMgLS0tLS0tLS0tLS0tLS0tICovXG4ud3BiY191aV9kcm9wZG93biAudWlfZHJvcGRvd25fbWVudSBsaS51aV9jb21wbGV4X29wdGlvbl9lbGVtZW50IHtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1tcy1mbGV4LWZsb3c6IHJvdyB3cmFwO1xuICAgICAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDAgMTVweDtcbn1cblxuLndwYmNfdWlfZHJvcGRvd24gdWwudWlfZHJvcGRvd25fbWVudSBsaS51aV9jb21wbGV4X29wdGlvbl9lbGVtZW50IC51aV9lbGVtZW50IHtcbiAgLW1zLWZsZXg6IDAgMSA1MCU7XG4gICAgICBmbGV4OiAwIDEgNTAlO1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDRweCAwO1xufVxuXG4ud3BiY191aV9kcm9wZG93biB1bC51aV9kcm9wZG93bl9tZW51IGxpLnVpX2NvbXBsZXhfb3B0aW9uX2VsZW1lbnQgLnVpX2VsZW1lbnQgPiAqIHtcbiAgLW1zLWZsZXg6IDAgMSBhdXRvO1xuICAgICAgZmxleDogMCAxIGF1dG87XG4gIG1hcmdpbjogMDtcbiAgaGVpZ2h0OiBhdXRvO1xuICBtYXgtd2lkdGg6IDIxMHB4O1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdlbmVyYWwgYmFja2Ryb3AgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4udWlfZWxlbWVudCAud3BiY191aV9kcm9wZG93biAudWlfZHJvcGRvd25fbWVudSB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAxMDAlO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAxMDAwO1xuICBmbG9hdDogbGVmdDtcbiAgbWluLXdpZHRoOiAxNjBweDtcbiAgcGFkZGluZzogNXB4IDA7XG4gIG1hcmdpbjogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgYm94LXNoYWRvdzogMCA2cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTc1KTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NjY2NjYztcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjE1KTtcbiAgYm9yZGVyLXJhZGl1czogMCAwIDNweCAzcHg7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG59XG5cbi51aV9lbGVtZW50IC53cGJjX3VpX2Ryb3Bkb3duIHVsLnVpX2Ryb3Bkb3duX21lbnUgKiB7XG4gIGZvbnQtc2l6ZTogMTNweDtcbn1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzgycHgpIHtcbiAgLnVpX2VsZW1lbnQgLndwYmNfdWlfZHJvcGRvd24gdWwudWlfZHJvcGRvd25fbWVudSAqIHtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gIH1cbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPcGVuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLnVpX2VsZW1lbnQgLndwYmNfdWlfZHJvcGRvd24ub3BlbiA+IC51aV9kcm9wZG93bl9tZW51IHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQWxpZ246IGxlZnQgfCByaWdodCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi51aV9lbGVtZW50IC53cGJjX3VpX2Ryb3Bkb3duIC51aV9kcm9wZG93bl9tZW51LnB1bGwtcmlnaHQsXG4udWlfZWxlbWVudCAud3BiY191aV9kcm9wZG93biAudWlfZHJvcGRvd25fbWVudS51aV9kcm9wZG93bl9tZW51X3JpZ2h0IHtcbiAgbGVmdDogYXV0bztcbiAgcmlnaHQ6IDA7XG59XG5cbi51aV9lbGVtZW50IC53cGJjX3VpX2Ryb3Bkb3duIC51aV9kcm9wZG93bl9tZW51LnVpX2Ryb3Bkb3duX21lbnVfbGVmdCB7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiBhdXRvO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERpdmlkZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4udWlfZWxlbWVudCAud3BiY191aV9kcm9wZG93biAudWlfZHJvcGRvd25fbWVudSBociB7XG4gIGhlaWdodDogMXB4O1xuICBtYXJnaW46IDVweCAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBib3JkZXI6IDA7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZWVlZWVlO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhlYWRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4ud3BiY191aV9kcm9wZG93biAudWlfZHJvcGRvd25fbWVudSBsaS5kcm9wZG93bi1oZWFkZXIge1xuICBwYWRkaW5nOiAwIDE1cHg7XG4gIGNvbG9yOiAjOTk5O1xuICBmb250LXNpemU6IDAuOGVtO1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTEkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi53cGJjX3VpX2Ryb3Bkb3duIC51aV9kcm9wZG93bl9tZW51IGxpIHtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4udWlfZWxlbWVudCAud3BiY191aV9kcm9wZG93biAudWlfZHJvcGRvd25fbWVudSBhIHtcbiAgY2xlYXI6IGJvdGg7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXdlaWdodDogNDAwO1xuICBwYWRkaW5nOiA1cHggMTVweDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgLypmb250LXNpemU6IDEzcHg7Ki9cbiAgbGluZS1oZWlnaHQ6IDE4cHg7XG59XG5cbi51aV9lbGVtZW50IC53cGJjX3VpX2Ryb3Bkb3duIC51aV9kcm9wZG93bl9tZW51ID4gbGkgPiBhIHtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgcGFkZGluZzogNXB4IDE1cHg7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBjbGVhcjogYm90aDtcbiAgZm9udC1zaXplOiAxZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQzO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEEgOmhvdmVyIDpmb2N1cyAuYWN0aXZlIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4udWlfZWxlbWVudCAud3BiY191aV9kcm9wZG93biAudWlfZHJvcGRvd25fbWVudSA+IGxpID4gYTpob3Zlcixcbi51aV9lbGVtZW50IC53cGJjX3VpX2Ryb3Bkb3duIC51aV9kcm9wZG93bl9tZW51ID4gbGkgPiBhOmZvY3VzLFxuLnVpX2VsZW1lbnQgLndwYmNfdWlfZHJvcGRvd24gLnVpX2Ryb3Bkb3duX21lbnUgPiAuYWN0aXZlID4gYSxcbi51aV9lbGVtZW50IC53cGJjX3VpX2Ryb3Bkb3duIC51aV9kcm9wZG93bl9tZW51ID4gLmFjdGl2ZSA+IGE6aG92ZXIsXG4udWlfZWxlbWVudCAud3BiY191aV9kcm9wZG93biAudWlfZHJvcGRvd25fbWVudSA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQ6ICMwOGM7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgb3V0bGluZTogbm9uZTtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAuZGlzYWJsZWQgIEEgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLnVpX2VsZW1lbnQgLndwYmNfdWlfZHJvcGRvd24gLnVpX2Ryb3Bkb3duX21lbnUgPiAuZGlzYWJsZWQgPiBhLFxuLnVpX2VsZW1lbnQgLndwYmNfdWlfZHJvcGRvd24gLnVpX2Ryb3Bkb3duX21lbnUgPiAuZGlzYWJsZWQgPiBhOmhvdmVyLFxuLnVpX2VsZW1lbnQgLndwYmNfdWlfZHJvcGRvd24gLnVpX2Ryb3Bkb3duX21lbnUgPiAuZGlzYWJsZWQgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICNjY2M7XG59XG5cbi51aV9lbGVtZW50IC53cGJjX3VpX2Ryb3Bkb3duIC51aV9kcm9wZG93bl9tZW51ID4gLmRpc2FibGVkID4gYTpob3Zlcixcbi51aV9lbGVtZW50IC53cGJjX3VpX2Ryb3Bkb3duIC51aV9kcm9wZG93bl9tZW51ID4gLmRpc2FibGVkID4gYTpmb2N1cyB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQgPSBmYWxzZSk7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi51aV9lbGVtZW50IC53cGJjX3VpX2Ryb3Bkb3duIC5kcm9wZG93bi1iYWNrZHJvcCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgdG9wOiAwO1xuICB6LWluZGV4OiA5OTA7XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyogNS4gU2V2ZXJhbCBlbGVtZW50cyBpbiBhIFwiLnVpX2VsZW1lbnRcIiBncm91cCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi51aV9lbGVtZW50IC53cGJjX3VpX2NvbnRyb2wge1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgLypib3JkZXItcmlnaHQtd2lkdGg6MDsqL1xuICBib3JkZXItcmlnaHQtd2lkdGg6IDFweDtcbiAgbWFyZ2luLXJpZ2h0OiAtMXB4ICFpbXBvcnRhbnQ7XG59XG5cbi51aV9lbGVtZW50IC53cGJjX3VpX2NvbnRyb2w6Zmlyc3QtY2hpbGQge1xuICBib3JkZXItcmFkaXVzOiAzcHggMCAwIDNweDtcbn1cblxuLnVpX2VsZW1lbnQgLndwYmNfdWlfY29udHJvbDpsYXN0LWNoaWxkIHtcbiAgYm9yZGVyLXJhZGl1czogMCAzcHggM3B4IDA7XG4gIGJvcmRlci13aWR0aDogMXB4O1xufVxuXG4udWlfZWxlbWVudCAud3BiY191aV9jb250cm9sOmZpcnN0LWNoaWxkOmxhc3QtY2hpbGQge1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqIFRvb2xiYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi51aV9ub3dyYXAge1xuICAtbXMtZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDtcbiAgICAgIGZsZXgtd3JhcDogbm93cmFwICFpbXBvcnRhbnQ7XG59XG5cbi8qIFRvb2xiYXIgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLndwYmNfYWp4X3Rvb2xiYXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbjogMCAwIDEwcHggNTBweDtcbn1cblxuLndwYmNfYWp4X3Rvb2xiYXIgKiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi8qIFJvdyBvZiBzaW1wbGUgYnV0dG9ucyBzb21ld2hlcmUgaW4gYSBwYWdlICovXG4ud3BiY19hanhfdG9vbGJhci53cGJjX2J1dHRvbnNfcm93IHtcbiAgcG9zaXRpb246IGluaXRpYWw7XG4gIG1hcmdpbjogMDtcbiAgZmxvYXQ6IGxlZnQ7XG59XG5cbi53cGJjX2FqeF90b29sYmFyLndwYmNfYnV0dG9uc19yb3cgLnVpX2NvbnRhaW5lciB7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIGJvcmRlcjogbm9uZTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xufVxuXG4vKiBDb250YWluZXIgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi53cGJjX2FqeF90b29sYmFyIC51aV9jb250YWluZXIge1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtZmxvdzogcm93IHdyYXA7XG4gICAgICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgLW1zLWZsZXgtYWxpZ246IHN0cmV0Y2g7XG4gICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgbWFyZ2luOiAwO1xuICBib3gtc2hhZG93OiBub25lO1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICBib3JkZXItdG9wOiBub25lO1xuICBiYWNrZ3JvdW5kOiAjZjVmNWY1O1xuICBmb250LXNpemU6IDE0cHg7XG4gIHBhZGRpbmc6IDZweCAxNXB4O1xufVxuXG4ud3BiY19hanhfdG9vbGJhciAudWlfY29udGFpbmVyOmxhc3QtY2hpbGQge1xuICBib3JkZXItcmFkaXVzOiAwIDAgMnB4IDJweDtcbn1cblxuLyogR3JvdXBzIGluIGNvbnRhaW5lciAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4ud3BiY19hanhfdG9vbGJhciAudWlfY29udGFpbmVyIC51aV9ncm91cCB7XG4gIC1tcy1mbGV4OiAwIDEgYXV0bztcbiAgICAgIGZsZXg6IDAgMSBhdXRvO1xuICBwYWRkaW5nOiAwO1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtZmxvdzogcm93IHdyYXA7XG4gICAgICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgLW1zLWZsZXgtYWxpZ246IHN0cmV0Y2g7XG4gICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgYm9yZGVyOiBub25lO1xuICBtYXJnaW46IDAgMjBweCAwIDA7XG59XG5cbi53cGJjX2FqeF90b29sYmFyIC51aV9jb250YWluZXIgLnVpX2dyb3VwOmxhc3QtY2hpbGQge1xuICBtYXJnaW46IDA7XG59XG5cbi8qIEVsZW1lbnRzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLndwYmNfYWp4X3Rvb2xiYXIgLnVpX2NvbnRhaW5lciAudWlfZ3JvdXAgLnVpX2VsZW1lbnQge1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtZmxvdzogcm93IHdyYXA7XG4gICAgICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgLW1zLWZsZXgtYWxpZ246IHN0cmV0Y2g7XG4gICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgLW1zLWZsZXg6IDAgMSBhdXRvO1xuICAgICAgZmxleDogMCAxIGF1dG87XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luOiAwcHggMTVweCAwcHggMDtcbn1cblxuLndwYmNfYWp4X3Rvb2xiYXIgLnVpX2NvbnRhaW5lciAudWlfZ3JvdXAgLnVpX2VsZW1lbnQ6bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1yaWdodDogMDtcbn1cblxuLndwYmNfYWp4X3Rvb2xiYXIgLnVpX2NvbnRhaW5lciAudWlfZ3JvdXAgLnVpX2VsZW1lbnQgPiAqIHtcbiAgbWFyZ2luOiA1cHggMDtcbn1cblxuLnVpX2VsZW1lbnRzX2RpdmlkZXIge1xuICBtYXJnaW4tbGVmdDogMTVweDtcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiogQ3VzdG9taXphdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLndwYmNfYWp4X3Rvb2xiYXIgLnVpX2NvbnRhaW5lci51aV9jb250YWluZXJfc21hbGwgKiB7XG4gIGZvbnQtc2l6ZTogMTNweDtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc4MnB4KSB7XG4gIC53cGJjX2FqeF90b29sYmFyIC51aV9jb250YWluZXIudWlfY29udGFpbmVyX3NtYWxsICoge1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgfVxufVxuXG4vKiBFbGVtZW50cyBIZWlnaHQgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi53cGJjX2FqeF90b29sYmFyIC51aV9jb250YWluZXIgLnVpX2dyb3VwIC51aV9lbGVtZW50ID4gKiB7XG4gIGhlaWdodDogMzhweDtcbn1cblxuLndwYmNfYWp4X3Rvb2xiYXIgLnVpX2NvbnRhaW5lci51aV9jb250YWluZXJfc21hbGwgLnVpX2dyb3VwIC51aV9lbGVtZW50ID4gKiB7XG4gIGhlaWdodDogMzBweDtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc4MnB4KSB7XG4gIC53cGJjX2FqeF90b29sYmFyLndwYmNfYnV0dG9uc19yb3cgLnVpX2NvbnRhaW5lciAudWlfZ3JvdXAgLnVpX2VsZW1lbnQgPiAqLFxuICAjdG9vbGJhcl9ib29raW5nX2xpc3Rpbmcud3BiY19hanhfdG9vbGJhciAudWlfY29udGFpbmVyIC51aV9ncm91cCAudWlfZWxlbWVudCA+ICoge1xuICAgIGhlaWdodDogMzhweDtcbiAgfVxuICAud3BiY19hanhfdG9vbGJhci53cGJjX2J1dHRvbnNfcm93IC51aV9jb250YWluZXIgLnVpX2dyb3VwIC51aV9lbGVtZW50ID4gLndwYmNfdWlfYnV0dG9uLFxuICAjdG9vbGJhcl9ib29raW5nX2xpc3Rpbmcud3BiY19hanhfdG9vbGJhciAudWlfY29udGFpbmVyIC51aV9ncm91cCAudWlfZWxlbWVudCA+IC53cGJjX3VpX2J1dHRvbiB7XG4gICAgcGFkZGluZzogMCAxNXB4IDJweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMXB4O1xuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgLW1zLWZsZXgtZmxvdzogcm93IHdyYXA7XG4gICAgICAgIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB9XG59XG5cbi8qIEtleXdvcmQgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLndwYmNfYWp4X3Rvb2xiYXIgLnVpX2NvbnRhaW5lciAudWlfZ3JvdXAudWlfZ3JvdXBfX2RhdGVzX3N0YXR1cyB7XG4gIG1hcmdpbi1yaWdodDogMi41ZW07XG59XG5cbi53cGJjX2FqeF90b29sYmFyIC51aV9jb250YWluZXIgLnVpX2dyb3VwLnVpX2dyb3VwX19rZXl3b3JkIHtcbiAgLW1zLWZsZXg6IDEgMSBhdXRvO1xuICAgICAgZmxleDogMSAxIGF1dG87XG59XG5cbi53cGJjX2FqeF90b29sYmFyIC51aV9jb250YWluZXIgLnVpX2dyb3VwLnVpX2dyb3VwX19rZXl3b3JkIC51aV9lbGVtZW50IHtcbiAgLW1zLWZsZXg6IDEgMSBhdXRvO1xuICAgICAgZmxleDogMSAxIGF1dG87XG59XG5cbi53cGJjX2FqeF90b29sYmFyIC51aV9jb250YWluZXIgLnVpX2dyb3VwLnVpX2dyb3VwX19rZXl3b3JkIC51aV9lbGVtZW50IC53cGJjX3NlYXJjaF9maWVsZCB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4vKiAybmQgcm93ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi53cGJjX2FqeF90b29sYmFyIC51aV9jb250YWluZXIudWlfY29udGFpbmVyX2ZpbHRlcl9yb3dfMiB7XG4gIHBhZGRpbmc6IDRweCAxNXB4O1xufVxuXG4ud3BiY19hanhfdG9vbGJhciAudWlfY29udGFpbmVyLnVpX2NvbnRhaW5lcl9maWx0ZXJfcm93XzIgLnVpX2dyb3VwLnVpX2dyb3VwX19zdGF0dXNlcyB7XG4gIC1tcy1mbGV4OiAxIDEgYXV0bztcbiAgICAgIGZsZXg6IDEgMSBhdXRvO1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKiBCb29raW5nIHJlc291cmNlcyBcdC1cdENob3NlblxyXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxyXG4gKiBDaG9vemVuIFN0cnVjdHVyZVxyXG5cclxuPHNlbGVjdCBtdWx0aXBsZT1cIk1VTFRJUExFXCIuLi5cclxuXHJcbmRpdiN3aF9ib29raW5nX3R5cGVfY2hvc2VuICAgLmNoem4tY29udGFpbmVyLmNoem4tY29udGFpbmVyLW11bHRpXHQuY2h6bi13aXRoLWRyb3AuY2h6bi1jb250YWluZXItYWN0aXZlIChpZiBhY3RpdmUpXHJcblx0dWwuY2h6bi1jaG9pY2VzXHJcblx0XHRsaS5zZWFyY2gtY2hvaWNlXHJcblx0XHRcdDxzcGFuPlxyXG5cdFx0XHRhLnNlYXJjaC1jaG9pY2UtY2xvc2VcclxuXHJcblx0XHRsaS5zZWFyY2gtZmllbGRcclxuXHRcdFx0aW5wdXRbdHlwZT1cInRleHRcIl0uY2h6bi1zZWFyY2gtaW5wdXRcdFx0XHRcdFx0LmRlZmF1bHQgKGlmIG5vIHNlbGVjdGVkIHZhbHVlcylcclxuXHJcblx0ZGl2LmNoem4tZHJvcFxyXG5cdFx0dWwuY2h6bi1yZXN1bHRzXHJcblx0XHRcdGxpLnJlc3VsdC1zZWxlY3RlZFx0fHwgIGxpLmFjdGl2ZS1yZXN1bHQgIFx0XHRcdFx0LmhpZ2hsaWdodGVkIChpZiBhY3RpdmUpXHJcbiovXG4udWlfY29udGFpbmVyIC51aV9ncm91cCAudWlfZWxlbWVudCAuY2h6bi1jb250YWluZXIuY2h6bi1jb250YWluZXItbXVsdGkge1xuICAtbXMtZmxleDogMSAxIGF1dG87XG4gICAgICBmbGV4OiAxIDEgYXV0bztcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1tcy1mbGV4LWZsb3c6IGNvbHVtbiB3cmFwO1xuICAgICAgZmxleC1mbG93OiBjb2x1bW4gd3JhcDtcbiAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBoZWlnaHQ6IGluaXRpYWw7XG4gIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7XG4gIG1pbi13aWR0aDogMTBlbTtcbiAgbWFyZ2luLXJpZ2h0OiAtMXB4O1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzgycHgpIHtcbiAgLnVpX2NvbnRhaW5lciAudWlfZ3JvdXAgLnVpX2VsZW1lbnQgLmNoem4tY29udGFpbmVyLmNoem4tY29udGFpbmVyLW11bHRpIHtcbiAgICBoZWlnaHQ6IGluaXRpYWwgIWltcG9ydGFudDtcbiAgfVxufVxuXG4udWlfY29udGFpbmVyIC51aV9ncm91cCAudWlfZWxlbWVudCAuY2h6bi1jb250YWluZXIuY2h6bi1jb250YWluZXItbXVsdGkgdWwuY2h6bi1jaG9pY2VzIHtcbiAgLW1zLWZsZXg6IDEgMSBhdXRvO1xuICAgICAgZmxleDogMSAxIGF1dG87XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtbXMtZmxleC1mbG93OiByb3cgd3JhcDtcbiAgICAgIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgLW1zLWZsZXgtbGluZS1wYWNrOiBjZW50ZXI7XG4gICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMCAwIDAgNXB4O1xuICBoZWlnaHQ6IGF1dG87XG4gIG1pbi1oZWlnaHQ6IDI4cHggIWltcG9ydGFudDtcbiAgYm9yZGVyLXJhZGl1czogM3B4IDAgMCAzcHg7XG59XG5cbi51aV9jb250YWluZXIgLnVpX2dyb3VwIC51aV9lbGVtZW50IC5jaHpuLWNvbnRhaW5lci5jaHpuLWNvbnRhaW5lci1tdWx0aS5jaHpuLWNvbnRhaW5lci1hY3RpdmUgdWwuY2h6bi1jaG9pY2VzIHtcbiAgYm9yZGVyLWNvbG9yOiAjZDhkOGQ4ICFpbXBvcnRhbnQ7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDBweCAjNGY5NGQ0LCAwIDAgMXB4IDFweCByZ2JhKDc5LCAxNDgsIDIxMiwgMC44KSAhaW1wb3J0YW50O1xuICB6LWluZGV4OiAxO1xuICBvdXRsaW5lOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG59XG5cbi51aV9jb250YWluZXIgLnVpX2dyb3VwIC51aV9lbGVtZW50IC5jaHpuLWNvbnRhaW5lci5jaHpuLWNvbnRhaW5lci1tdWx0aSB1bC5jaHpuLWNob2ljZXMgbGkuc2VhcmNoLWNob2ljZSB7XG4gIC1tcy1mbGV4OiAwIDEgYXV0bztcbiAgICAgIGZsZXg6IDAgMSBhdXRvO1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIC1tcy1mbGV4LWFsaWduOiBiYXNlbGluZTtcbiAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgbWFyZ2luOiAzcHggMC41ZW0gM3B4IDA7XG4gIHBhZGRpbmc6IDNweCA1cHggM3B4IDhweDtcbn1cblxuLnVpX2NvbnRhaW5lciAudWlfZ3JvdXAgLnVpX2VsZW1lbnQgLmNoem4tY29udGFpbmVyLmNoem4tY29udGFpbmVyLW11bHRpIHVsLmNoem4tY2hvaWNlcyBsaS5zZWFyY2gtY2hvaWNlIHNwYW4ge1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG59XG5cbi51aV9jb250YWluZXIgLnVpX2dyb3VwIC51aV9lbGVtZW50IC5jaHpuLWNvbnRhaW5lci5jaHpuLWNvbnRhaW5lci1tdWx0aSB1bC5jaHpuLWNob2ljZXMgbGkuc2VhcmNoLWNob2ljZSBhLnNlYXJjaC1jaG9pY2UtY2xvc2Uge1xuICBmb250LWZhbWlseTogXCJHbHlwaGljb25zIEhhbGZsaW5nc1wiO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtc2l6ZTogOXB4O1xuICBjb2xvcjogIzU1NTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogYXV0bztcbiAgbGVmdDogYXV0bztcbiAgcmlnaHQ6IGF1dG87XG4gIGJvdHRvbTogYXV0bztcbiAgbWFyZ2luOiAwIDAgMCAxZW07XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtbXMtZmxleC1mbG93OiBjb2x1bW4gd3JhcDtcbiAgICAgIGZsZXgtZmxvdzogY29sdW1uIHdyYXA7XG4gIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlcjtcbiAgICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcbiAgd2lkdGg6IGF1dG87XG4gIGhlaWdodDogYXV0bztcbn1cblxuLnVpX2NvbnRhaW5lciAudWlfZ3JvdXAgLnVpX2VsZW1lbnQgLmNoem4tY29udGFpbmVyLmNoem4tY29udGFpbmVyLW11bHRpIHVsLmNoem4tY2hvaWNlcyBsaS5zZWFyY2gtY2hvaWNlIGEuc2VhcmNoLWNob2ljZS1jbG9zZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAxNFwiO1xufVxuXG4udWlfY29udGFpbmVyIC51aV9ncm91cCAudWlfZWxlbWVudCAuY2h6bi1jb250YWluZXIuY2h6bi1jb250YWluZXItbXVsdGkgdWwuY2h6bi1jaG9pY2VzIGxpLnNlYXJjaC1jaG9pY2UgYS5zZWFyY2gtY2hvaWNlLWNsb3NlOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4udWlfY29udGFpbmVyIC51aV9ncm91cCAudWlfZWxlbWVudCAuY2h6bi1jb250YWluZXIuY2h6bi1jb250YWluZXItbXVsdGkgdWwuY2h6bi1jaG9pY2VzIGxpLnNlYXJjaC1maWVsZCB7XG4gIC1tcy1mbGV4OiAwIDEgMXB4O1xuICAgICAgZmxleDogMCAxIDFweDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1tcy1mbGV4LWZsb3c6IHJvdyB3cmFwO1xuICAgICAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXJnaW46IDBweCAwIDBweCAwO1xuICBwYWRkaW5nOiAwO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4udWlfY29udGFpbmVyIC51aV9ncm91cCAudWlfZWxlbWVudCAuY2h6bi1jb250YWluZXIuY2h6bi1jb250YWluZXItbXVsdGkgdWwuY2h6bi1jaG9pY2VzIGxpLnNlYXJjaC1maWVsZCBpbnB1dFt0eXBlPVwidGV4dFwiXS5kZWZhdWx0IHtcbiAgbWluLXdpZHRoOiAxMmVtO1xufVxuXG4udWlfY29udGFpbmVyIC51aV9ncm91cCAudWlfZWxlbWVudCAuY2h6bi1jb250YWluZXIuY2h6bi1jb250YWluZXItbXVsdGkgdWwuY2h6bi1jaG9pY2VzIGxpLnNlYXJjaC1maWVsZCBpbnB1dFt0eXBlPVwidGV4dFwiXSB7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xufVxuXG4udWlfY29udGFpbmVyIC51aV9ncm91cCAudWlfZWxlbWVudCAuY2h6bi1jb250YWluZXIgZGl2LmNoem4tZHJvcCB1bC5jaHpuLXJlc3VsdHMgbGkuaGlnaGxpZ2h0ZWQge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZDogIzA4YztcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBvdXRsaW5lOiBub25lO1xuICBib3gtc2hhZG93OiBub25lO1xufVxuXG4vKlxyXG4jd2hfYm9va2luZ190eXBlX2Nob3NlbiB7XHJcblx0d2lkdGg6IGF1dG8gIWltcG9ydGFudDtcclxuXHRkaXNwbGF5OiBmbGV4O1xyXG5cdGZsZXgtZmxvdzogcm93IHdyYXA7XHJcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcblx0YWxpZ24taXRlbXM6IHN0cmV0Y2g7XHJcblx0ZmxleDogMSAxIGF1dG87XHJcblx0aGVpZ2h0OiBpbml0aWFsO1xyXG5cdG1pbi13aWR0aDogMTBlbTtcclxufVxyXG5cclxuI3doX2Jvb2tpbmdfdHlwZV9jaG9zZW4gLmNoem4tY2hvaWNlcyB7XHJcblx0ZGlzcGxheTogZmxleDtcclxuXHRmbGV4LWZsb3c6IHJvdyB3cmFwO1xyXG5cdGp1c3RpZnktY29udGVudDogc3RyZXRjaDtcclxuXHRhbGlnbi1pdGVtczogY2VudGVyO1xyXG5cdG1hcmdpbjogMHB4IDBweDtcclxuXHRwYWRkaW5nOiAwIDVweDtcclxuXHRtaW4taGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XHJcblx0ZmxleDogMSAxIGF1dG87XHJcblx0Ym9yZGVyLXJhZGl1czogM3B4IDAgMCAzcHg7XHJcbn1cclxuXHJcbi5jaHpuLWNvbnRhaW5lci1tdWx0aSAuY2h6bi1jaG9pY2VzIC5zZWFyY2gtY2hvaWNlIGEuc2VhcmNoLWNob2ljZS1jbG9zZSB7XHJcblx0YmFja2dyb3VuZDogbm9uZTtcclxuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0Zm9udC1mYW1pbHk6IFwiR2x5cGhpY29ucyBIYWxmbGluZ3NcIjtcclxuXHRmb250LXN0eWxlOiBub3JtYWw7XHJcblx0Zm9udC13ZWlnaHQ6IDQwMDtcclxuXHRmb250LXNpemU6IDlweDtcclxuXHRsaW5lLWhlaWdodDogMTtcclxuXHRwb3NpdGlvbjogcmVsYXRpdmU7XHJcblx0dG9wOiAwcHg7XHJcblx0bGVmdDogMTVweDtcclxuXHRjb2xvcjogIzU1NTtcclxuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbn1cclxuXHQuY2h6bi1jb250YWluZXItbXVsdGkgLmNoem4tY2hvaWNlcyAuc2VhcmNoLWNob2ljZSBhLnNlYXJjaC1jaG9pY2UtY2xvc2U6aG92ZXIge1xyXG5cdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG5cdH1cclxuXHQuY2h6bi1jb250YWluZXItbXVsdGkgLmNoem4tY2hvaWNlcyAuc2VhcmNoLWNob2ljZSBhLnNlYXJjaC1jaG9pY2UtY2xvc2U6YmVmb3JlIHtcclxuXHRcdGNvbnRlbnQ6IFwiXFxlMDE0XCI7XHJcblx0fVxyXG5cclxuI3doX2Jvb2tpbmdfdHlwZV9jaG9zZW4gLmNoem4tc2VhcmNoLWlucHV0LmRlZmF1bHQge1xyXG5cdG1pbi13aWR0aDogMTJlbTtcclxufVxyXG4jd2hfYm9va2luZ190eXBlX2Nob3Nlbi5jaHpuLWNvbnRhaW5lci5jaHpuLWNvbnRhaW5lci1tdWx0aS5jaHpuLWNvbnRhaW5lci1hY3RpdmUgLmNoem4tY2hvaWNlcyB7XHJcblxyXG5cdGJvcmRlci1jb2xvcjogI2Q4ZDhkOCAhaW1wb3J0YW50O1xyXG5cdGJveC1zaGFkb3c6IDAgMCAwIDBweCAjNGY5NGQ0LCAwIDAgMXB4IDFweCByZ2JhKDc5LCAxNDgsIDIxMiwgMC44KSAhaW1wb3J0YW50O1xyXG5cdHotaW5kZXg6IDE7XHJcblx0b3V0bGluZTogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xyXG59XHJcbi5jaHpuLWNvbnRhaW5lci1tdWx0aSAuY2h6bi1jaG9pY2VzIGxpLnNlYXJjaC1maWVsZCBpbnB1dFt0eXBlPVwidGV4dFwiXSB7XHJcblx0Zm9udC1mYW1pbHk6IGluaGVyaXQ7XHJcbn1cclxuLmNoem4tY29udGFpbmVyIC5jaHpuLXJlc3VsdHMgbGkuaGlnaGxpZ2h0ZWQge1xyXG5cdGNvbG9yOiAjZmZmO1xyXG5cdGJhY2tncm91bmQ6ICMwOGM7XHJcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG5cdG91dGxpbmU6IG5vbmU7XHJcblx0Ym94LXNoYWRvdzogbm9uZTtcclxufVxyXG4vKiovXG4iXX0= */
|
includes/_toolbar_ui/_out/toolbar_ui.min.js
ADDED
@@ -0,0 +1,2 @@
|
|
Â
|
|
Â
|
1 |
+
"use strict";function wpbc_get_safe_html_text(e){return e.replace(/[\u00A0-\u9999<>\&]/g,function(e){return"&#"+e.charCodeAt(0)+";"})}function wpbc_ui_dropdown_apply_click(e){var t,r=jQuery('input[name="'+e.dropdown_radio_name+'"]:checked').parents("li").find(":input").map(function(){return wpbc_get_safe_html_text(jQuery(this).val())}).get();0!==r.length&&(t=jQuery('input[name="'+e.dropdown_radio_name+'"]:checked').parents("li").find(":input").map(function(){if("text"==jQuery(this).prop("type"))return jQuery(this).val();if("select-one"==jQuery(this).prop("type"))return jQuery(this).find(":selected").text();if("radio"!=jQuery(this).prop("type")&&"checkbox"!=jQuery(this).prop("type"))return jQuery(this).val();var e=jQuery(this).filter(":checked").next(".wpbc_ui_control_label").html();return void 0!==(e=null==e?jQuery(this).filter(":checked").prev(".wpbc_ui_control_label").html():e)?e:""}).get(),jQuery("#"+e.dropdown_id).val(JSON.stringify(r)),jQuery("#"+e.dropdown_id).trigger("change"),r=jQuery('input[name="'+e.dropdown_radio_name+'"]:checked').next(".wpbc_ui_control_label").html()+": ",t.shift(),t=wpbc_get_safe_html_text(r+t.join(" - ")),jQuery("#"+e.dropdown_id+"_selector .wpbc_selected_in_dropdown").html(t)),jQuery("#"+e.dropdown_id+"_container").hide()}function wpbc_ui_dropdown_close_click(e){jQuery("#"+e+"_container").hide()}function wpbc_ui_dropdown_simple_click(e){jQuery("#"+e.dropdown_id+"_selector .wpbc_selected_in_dropdown").html(jQuery(e._this).html()),jQuery("#"+e.dropdown_id).val(JSON.stringify([e.value])),jQuery("#"+e.dropdown_id+"_container li input[type=checkbox],#"+e.dropdown_id+"_container li input[type=radio]").prop("checked",!1),jQuery("#"+e.dropdown_id).trigger("change"),e.is_this_simple_list||jQuery("#"+e.dropdown_id+"_container").hide()}
|
2 |
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvX3Rvb2xiYXJfdWkvX291dC90b29sYmFyX3VpLm1pbi5qcyIsInNvdXJjZXMiOlsiaW5jbHVkZXMvX3Rvb2xiYXJfdWkvX291dC90b29sYmFyX3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXHJcbiAqIEVuY29kZSBIVE1MIHRleHQgdG8gc2FmZSBIVE1MIGVudGl0aWVzXHJcbiAqXHJcbiAqIFJlcGxhY2UgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIGdpdmVuIHJhbmdlICh1bmljb2RlIDAwQTAgLSA5OTk5LCBhcyB3ZWxsIGFzIGFtcGVyc2FuZCwgZ3JlYXRlciAmIGxlc3MgdGhhbilcclxuICogd2l0aCB0aGVpciBodG1sIGVudGl0eSBlcXVpdmFsZW50cywgd2hpY2ggaXMgc2ltcGx5ICYjbm5uOyB3aGVyZSBubm4gaXMgdGhlIHVuaWNvZGUgdmFsdWUgd2UgZ2V0IGZyb20gY2hhckNvZGVBdFxyXG4gKlxyXG4gKiBAcGFyYW0gcmF3U3RyXHJcbiAqIEByZXR1cm5zIHsqfVxyXG4gKi9cblxuZnVuY3Rpb24gd3BiY19nZXRfc2FmZV9odG1sX3RleHQocmF3U3RyKSB7XG4gIHZhciBlbmNvZGVkU3RyID0gcmF3U3RyLnJlcGxhY2UoL1tcXHUwMEEwLVxcdTk5OTk8PlxcJl0vZywgZnVuY3Rpb24gKGkpIHtcbiAgICByZXR1cm4gJyYjJyArIGkuY2hhckNvZGVBdCgwKSArICc7JztcbiAgfSk7XG4gIHJldHVybiBlbmNvZGVkU3RyO1xufVxuLyoqXHJcbiAqIENoYW5nZSBWYWx1ZSBhbmQgVGl0bGUgb2YgZHJvcGRvd24gYWZ0ZXIgY2xpY2tpbmcgb24gQXBwbHkgYnV0dG9uXHJcbiAqXHJcbiAqIEBwYXJhbSBwYXJhbXNcdEV4YW1wbGU6IHsgJ2Ryb3Bkb3duX2lkJzogJ3doX2Jvb2tpbmdfZGF0ZScsICdkcm9wZG93bl9yYWRpb19uYW1lJzogJ3VpX3doX2Jvb2tpbmdfZGF0ZV9yYWRpbycgfVxyXG4gKi9cblxuXG5mdW5jdGlvbiB3cGJjX3VpX2Ryb3Bkb3duX2FwcGx5X2NsaWNrKHBhcmFtcykge1xuICAvLyBHZXQgaW5wdXQgdmFsdWVzIG9mIGFsbCBlbGVtZW50cyBpbiBMSSBzZWN0aW9uLCAgd2hlcmUgUkFESU8gd2FzIHNlbGVjdGVkXG4gIHZhciBmaWx0ZXJfdWlfZGF0ZXNfYXJyID0galF1ZXJ5KCdpbnB1dFtuYW1lPVwiJyArIHBhcmFtc1snZHJvcGRvd25fcmFkaW9fbmFtZSddICsgJ1wiXTpjaGVja2VkJykucGFyZW50cygnbGknKS5maW5kKCc6aW5wdXQnKS5tYXAoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB3cGJjX2dldF9zYWZlX2h0bWxfdGV4dChqUXVlcnkodGhpcykudmFsKCkpO1xuICB9KS5nZXQoKTtcblxuICBpZiAoMCAhPT0gZmlsdGVyX3VpX2RhdGVzX2Fyci5sZW5ndGgpIHtcbiAgICAvLyBDb250aW51ZSBvbmx5IGlmIHJhZGlvIGJ1dHRvbiAgd2FzIHNlbGVjdGVkLCBhbmQgd2UgYXJlIGhhdmluZyB2YWx1ZVxuICAgIC8vIEdldCB0aXRsZXMgb2YgYWxsIGVsZW1lbnRzIGluIExJIHNlY3Rpb24sICB3aGVyZSBSQURJTyB3YXMgc2VsZWN0ZWRcbiAgICB2YXIgZmlsdGVyX3VpX3RpdGxlc19hcnIgPSBqUXVlcnkoJ2lucHV0W25hbWU9XCInICsgcGFyYW1zWydkcm9wZG93bl9yYWRpb19uYW1lJ10gKyAnXCJdOmNoZWNrZWQnKS5wYXJlbnRzKCdsaScpLmZpbmQoJzppbnB1dCcpLm1hcChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoJ3RleHQnID09IGpRdWVyeSh0aGlzKS5wcm9wKCd0eXBlJykpIHtcbiAgICAgICAgcmV0dXJuIGpRdWVyeSh0aGlzKS52YWwoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCdzZWxlY3Qtb25lJyA9PSBqUXVlcnkodGhpcykucHJvcCgndHlwZScpKSB7XG4gICAgICAgIHJldHVybiBqUXVlcnkodGhpcykuZmluZCgnOnNlbGVjdGVkJykudGV4dCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoJ3JhZGlvJyA9PSBqUXVlcnkodGhpcykucHJvcCgndHlwZScpIHx8ICdjaGVja2JveCcgPT0galF1ZXJ5KHRoaXMpLnByb3AoJ3R5cGUnKSkge1xuICAgICAgICB2YXIgaW5wdXRfc2VsZWN0ZWQgPSBqUXVlcnkodGhpcykuZmlsdGVyKCc6Y2hlY2tlZCcpLm5leHQoJy53cGJjX3VpX2NvbnRyb2xfbGFiZWwnKS5odG1sKCk7XG5cbiAgICAgICAgaWYgKHVuZGVmaW5lZCA9PSBpbnB1dF9zZWxlY3RlZCkge1xuICAgICAgICAgIGlucHV0X3NlbGVjdGVkID0galF1ZXJ5KHRoaXMpLmZpbHRlcignOmNoZWNrZWQnKS5wcmV2KCcud3BiY191aV9jb250cm9sX2xhYmVsJykuaHRtbCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZCAhPT0gaW5wdXRfc2VsZWN0ZWQgPyBpbnB1dF9zZWxlY3RlZCA6ICcnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4galF1ZXJ5KHRoaXMpLnZhbCgpO1xuICAgIH0pLmdldCgpOyAvLyBVcGRhdGUgVmFsdWUgdG8gIGRyb3Bkb3duIGlucHV0IGhpZGRlbiBlbGVtZW50cy4gU3VjaCAgdmFsdWUgc3RyaW5naWZ5LlxuXG4gICAgalF1ZXJ5KCcjJyArIHBhcmFtc1snZHJvcGRvd25faWQnXSkudmFsKEpTT04uc3RyaW5naWZ5KGZpbHRlcl91aV9kYXRlc19hcnIpKTsgLy8gR2VuZXJhdGUgY2hhbmdlIGFjdGlvbiwgIGZvciBhYmlsaXR5IHRvICBzZW5kIEFqYXggcmVxdWVzdFxuXG4gICAgalF1ZXJ5KCcjJyArIHBhcmFtc1snZHJvcGRvd25faWQnXSkudHJpZ2dlcignY2hhbmdlJyk7IC8vIEdldCBMYWJlbCBvZiBzZWxlY3RlZCBSYWRpbyBidXR0b25cblxuICAgIHZhciBmaWx0ZXJfdWlfZGF0ZXNfdGl0bGUgPSBqUXVlcnkoJ2lucHV0W25hbWU9XCInICsgcGFyYW1zWydkcm9wZG93bl9yYWRpb19uYW1lJ10gKyAnXCJdOmNoZWNrZWQnKS5uZXh0KCcud3BiY191aV9jb250cm9sX2xhYmVsJykuaHRtbCgpICsgJzogJzsgLy8gUmVtb3ZlIHNlbGVjdGVkIHZhbHVlIG9mIHJhZGlvIGJ1dHRvbiBmcm9tIGJlZ2lubmluZywgd2Ugd2lsbCB1c2UgTGFiZWwgdGl0bGUgaW5zdGVhZFxuXG4gICAgZmlsdGVyX3VpX3RpdGxlc19hcnIuc2hpZnQoKTsgLy8gVXBkYXRlIFRpdGxlIGluIGRyb3Bkb3duXG5cbiAgICB2YXIgZW5jb2RlZF9odG1sX3RleHQgPSB3cGJjX2dldF9zYWZlX2h0bWxfdGV4dChmaWx0ZXJfdWlfZGF0ZXNfdGl0bGUgKyBmaWx0ZXJfdWlfdGl0bGVzX2Fyci5qb2luKCcgLSAnKSk7XG4gICAgalF1ZXJ5KCcjJyArIHBhcmFtc1snZHJvcGRvd25faWQnXSArICdfc2VsZWN0b3IgLndwYmNfc2VsZWN0ZWRfaW5fZHJvcGRvd24nKS5odG1sKGVuY29kZWRfaHRtbF90ZXh0KTtcbiAgfVxuXG4gIGpRdWVyeSgnIycgKyBwYXJhbXNbJ2Ryb3Bkb3duX2lkJ10gKyAnX2NvbnRhaW5lcicpLmhpZGUoKTtcbn1cbi8qKlxyXG4gKiBDbG9zZSBkcm9wZG93biBhZnRlciBjbGlja2luZyBvbiBDbG9zZSBidXR0b25cclxuICpcclxuICogQHBhcmFtIGRyb3Bkb3duX2lkXHRJRCBvZiBkcm9wZG93blxyXG4gKi9cblxuXG5mdW5jdGlvbiB3cGJjX3VpX2Ryb3Bkb3duX2Nsb3NlX2NsaWNrKGRyb3Bkb3duX2lkKSB7XG4gIGpRdWVyeSgnIycgKyBkcm9wZG93bl9pZCArICdfY29udGFpbmVyJykuaGlkZSgpO1xufVxuLyoqXHJcbiAqIFNpbXBsZSBvcHRpb24gY2xpY2sgb24gZHJvcGRvd25cclxuICpcclxuICogQHBhcmFtIHBhcmFtc1x0RXhhbXBsZTogeyAnZHJvcGRvd25faWQnOiAnd2hfYm9va2luZ19kYXRlJywgJ2lzX3RoaXNfc2ltcGxlX2xpc3QnOiB0cnVlLCAndmFsdWUnOiAnNScsICdfdGhpcyc6IHRoaXMgfVxyXG4gKi9cblxuXG5mdW5jdGlvbiB3cGJjX3VpX2Ryb3Bkb3duX3NpbXBsZV9jbGljayhwYXJhbXMpIHtcbiAgalF1ZXJ5KCcjJyArIHBhcmFtc1snZHJvcGRvd25faWQnXSArICdfc2VsZWN0b3IgLndwYmNfc2VsZWN0ZWRfaW5fZHJvcGRvd24nKS5odG1sKGpRdWVyeShwYXJhbXNbJ190aGlzJ10pLmh0bWwoKSk7XG4gIGpRdWVyeSgnIycgKyBwYXJhbXNbJ2Ryb3Bkb3duX2lkJ10pLnZhbChKU09OLnN0cmluZ2lmeShbcGFyYW1zWyd2YWx1ZSddXSkpO1xuICBqUXVlcnkoJyMnICsgcGFyYW1zWydkcm9wZG93bl9pZCddICsgJ19jb250YWluZXIgbGkgaW5wdXRbdHlwZT1jaGVja2JveF0sJyArICcjJyArIHBhcmFtc1snZHJvcGRvd25faWQnXSArICdfY29udGFpbmVyIGxpIGlucHV0W3R5cGU9cmFkaW9dJykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcbiAgalF1ZXJ5KCcjJyArIHBhcmFtc1snZHJvcGRvd25faWQnXSkudHJpZ2dlcignY2hhbmdlJyk7XG5cbiAgaWYgKCFwYXJhbXNbJ2lzX3RoaXNfc2ltcGxlX2xpc3QnXSkge1xuICAgIGpRdWVyeSgnIycgKyBwYXJhbXNbJ2Ryb3Bkb3duX2lkJ10gKyAnX2NvbnRhaW5lcicpLmhpZGUoKTtcbiAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbWx1WTJ4MVpHVnpMMTkwYjI5c1ltRnlYM1ZwTDE5emNtTXZkRzl2YkdKaGNsOTFhUzVxY3lKZExDSnVZVzFsY3lJNld5SjNjR0pqWDJkbGRGOXpZV1psWDJoMGJXeGZkR1Y0ZENJc0luSmhkMU4wY2lJc0ltVnVZMjlrWldSVGRISWlMQ0p5WlhCc1lXTmxJaXdpYVNJc0ltTm9ZWEpEYjJSbFFYUWlMQ0ozY0dKalgzVnBYMlJ5YjNCa2IzZHVYMkZ3Y0d4NVgyTnNhV05ySWl3aWNHRnlZVzF6SWl3aVptbHNkR1Z5WDNWcFgyUmhkR1Z6WDJGeWNpSXNJbXBSZFdWeWVTSXNJbkJoY21WdWRITWlMQ0ptYVc1a0lpd2liV0Z3SWl3aWRtRnNJaXdpWjJWMElpd2liR1Z1WjNSb0lpd2labWxzZEdWeVgzVnBYM1JwZEd4bGMxOWhjbklpTENKd2NtOXdJaXdpZEdWNGRDSXNJbWx1Y0hWMFgzTmxiR1ZqZEdWa0lpd2labWxzZEdWeUlpd2libVY0ZENJc0ltaDBiV3dpTENKMWJtUmxabWx1WldRaUxDSndjbVYySWl3aVNsTlBUaUlzSW5OMGNtbHVaMmxtZVNJc0luUnlhV2RuWlhJaUxDSm1hV3gwWlhKZmRXbGZaR0YwWlhOZmRHbDBiR1VpTENKemFHbG1kQ0lzSW1WdVkyOWtaV1JmYUhSdGJGOTBaWGgwSWl3aWFtOXBiaUlzSW1ocFpHVWlMQ0ozY0dKalgzVnBYMlJ5YjNCa2IzZHVYMk5zYjNObFgyTnNhV05ySWl3aVpISnZjR1J2ZDI1ZmFXUWlMQ0ozY0dKalgzVnBYMlJ5YjNCa2IzZHVYM05wYlhCc1pWOWpiR2xqYXlKZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFN1FVRkhRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN08wRkJRMEVzVTBGQlUwRXNkVUpCUVZRc1EwRkJhME5ETEUxQlFXeERMRVZCUVRCRE8wRkJSWHBETEUxQlFVbERMRlZCUVZVc1IwRkJSMFFzVFVGQlRTeERRVUZEUlN4UFFVRlFMRU5CUVdkQ0xITkNRVUZvUWl4RlFVRjNReXhWUVVGWFF5eERRVUZZTEVWQlFXTTdRVUZEZEVVc1YwRkJUeXhQUVVGUFFTeERRVUZETEVOQlFVTkRMRlZCUVVZc1EwRkJZeXhEUVVGa0xFTkJRVkFzUjBGQk1rSXNSMEZCYkVNN1FVRkRRU3hIUVVablFpeERRVUZxUWp0QlFVbEJMRk5CUVU5SUxGVkJRVkE3UVVGRFFUdEJRVWRFTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN096dEJRVU5CTEZOQlFWTkpMRFJDUVVGVUxFTkJRWFZEUXl4TlFVRjJReXhGUVVFclF6dEJRVVU1UXp0QlFVTkJMRTFCUVVsRExHMUNRVUZ0UWl4SFFVRkhReXhOUVVGTkxFTkJRVVVzYVVKQlFXbENSaXhOUVVGTkxFTkJRVVVzY1VKQlFVWXNRMEZCZGtJc1IwRkJiVVFzV1VGQmNrUXNRMEZCVGl4RFFVTm9Ra2NzVDBGRVowSXNRMEZEVUN4SlFVUlBMRVZCUTBGRExFbEJSRUVzUTBGRFRTeFJRVVJPTEVWQlJXaENReXhIUVVablFpeERRVVZZTEZsQlFWYzdRVUZEYUVJc1YwRkJUMW9zZFVKQlFYVkNMRU5CUVVWVExFMUJRVTBzUTBGQlJTeEpRVUZHTEVOQlFVNHNRMEZCWlVrc1IwRkJaaXhGUVVGR0xFTkJRVGxDTzBGQlEwRXNSMEZLWjBJc1JVRkpZa01zUjBGS1lTeEZRVUV4UWpzN1FVRk5RU3hOUVVGTExFMUJRVTFPTEcxQ1FVRnRRaXhEUVVGRFR5eE5RVUV2UWl4RlFVRjFRenRCUVVGSE8wRkJSWHBETzBGQlEwRXNVVUZCU1VNc2IwSkJRVzlDTEVkQlFVZFFMRTFCUVUwc1EwRkJSU3hwUWtGQmFVSkdMRTFCUVUwc1EwRkJSU3h4UWtGQlJpeERRVUYyUWl4SFFVRnRSQ3haUVVGeVJDeERRVUZPTEVOQlEyWkhMRTlCUkdVc1EwRkRUaXhKUVVSTkxFVkJRME5ETEVsQlJFUXNRMEZEVHl4UlFVUlFMRVZCUldwQ1F5eEhRVVpwUWl4RFFVVmFMRmxCUVZjN1FVRkRhRUlzVlVGQlN5eFZRVUZWU0N4TlFVRk5MRU5CUVVVc1NVRkJSaXhEUVVGT0xFTkJRV1ZSTEVsQlFXWXNRMEZCY1VJc1RVRkJja0lzUTBGQlppeEZRVUU0UXp0QlFVTTNReXhsUVVGUFVpeE5RVUZOTEVOQlFVVXNTVUZCUml4RFFVRk9MRU5CUVdWSkxFZEJRV1lzUlVGQlVEdEJRVU5CT3p0QlFVTkVMRlZCUVVzc1owSkJRV2RDU2l4TlFVRk5MRU5CUVVVc1NVRkJSaXhEUVVGT0xFTkJRV1ZSTEVsQlFXWXNRMEZCY1VJc1RVRkJja0lzUTBGQmNrSXNSVUZCYjBRN1FVRkRia1FzWlVGQlQxSXNUVUZCVFN4RFFVRkZMRWxCUVVZc1EwRkJUaXhEUVVGbFJTeEpRVUZtTEVOQlFYRkNMRmRCUVhKQ0xFVkJRVzFEVHl4SlFVRnVReXhGUVVGUU8wRkJRMEU3TzBGQlEwUXNWVUZEU1N4WFFVRlhWQ3hOUVVGTkxFTkJRVVVzU1VGQlJpeERRVUZPTEVOQlFXVlJMRWxCUVdZc1EwRkJjVUlzVFVGQmNrSXNRMEZCWWl4SlFVTkxMR05CUVdOU0xFMUJRVTBzUTBGQlJTeEpRVUZHTEVOQlFVNHNRMEZCWlZFc1NVRkJaaXhEUVVGeFFpeE5RVUZ5UWl4RFFVWnlRaXhGUVVkRE8wRkJRMEVzV1VGQlNVVXNZMEZCWXl4SFFVRkhWaXhOUVVGTkxFTkJRVVVzU1VGQlJpeERRVUZPTEVOQlFXVlhMRTFCUVdZc1EwRkJjMElzVlVGQmRFSXNSVUZCYTBORExFbEJRV3hETEVOQlFYZERMSGRDUVVGNFF5eEZRVUZ0UlVNc1NVRkJia1VzUlVGQmNrSTdPMEZCUTBFc1dVRkJTME1zVTBGQlV5eEpRVUZKU2l4alFVRnNRaXhGUVVGdFF6dEJRVU5zUTBFc1ZVRkJRVUVzWTBGQll5eEhRVUZIVml4TlFVRk5MRU5CUVVVc1NVRkJSaXhEUVVGT0xFTkJRV1ZYTEUxQlFXWXNRMEZCYzBJc1ZVRkJkRUlzUlVGQmEwTkpMRWxCUVd4RExFTkJRWGRETEhkQ1FVRjRReXhGUVVGdFJVWXNTVUZCYmtVc1JVRkJha0k3UVVGRFFUczdRVUZEUkN4bFFVRlRReXhUUVVGVExFdEJRVXRLTEdOQlFXaENMRWRCUVcxRFFTeGpRVUZ1UXl4SFFVRnZSQ3hGUVVFelJEdEJRVU5CT3p0QlFVVkVMR0ZCUVU5V0xFMUJRVTBzUTBGQlJTeEpRVUZHTEVOQlFVNHNRMEZCWlVrc1IwRkJaaXhGUVVGUU8wRkJRMEVzUzBGeVFtbENMRVZCY1VKa1F5eEhRWEpDWXl4RlFVRXpRaXhEUVVoelF5eERRVEJDZEVNN08wRkJRMEZNTEVsQlFVRkJMRTFCUVUwc1EwRkJSU3hOUVVGTlJpeE5RVUZOTEVOQlFVVXNZVUZCUml4RFFVRmtMRU5CUVU0c1EwRkJkME5OTEVkQlFYaERMRU5CUVRaRFdTeEpRVUZKTEVOQlFVTkRMRk5CUVV3c1EwRkJaMEpzUWl4dFFrRkJhRUlzUTBGQk4wTXNSVUV6UW5ORExFTkJOa0owUXpzN1FVRkRRVU1zU1VGQlFVRXNUVUZCVFN4RFFVRkZMRTFCUVUxR0xFMUJRVTBzUTBGQlJTeGhRVUZHTEVOQlFXUXNRMEZCVGl4RFFVRjNRMjlDTEU5QlFYaERMRU5CUVdsRUxGRkJRV3BFTEVWQk9VSnpReXhEUVdkRGRFTTdPMEZCUTBFc1VVRkJTVU1zY1VKQlFYRkNMRWRCUVVkdVFpeE5RVUZOTEVOQlFVVXNhVUpCUVdsQ1JpeE5RVUZOTEVOQlFVVXNjVUpCUVVZc1EwRkJka0lzUjBGQmJVUXNXVUZCY2tRc1EwRkJUaXhEUVVFd1JXTXNTVUZCTVVVc1EwRkJaMFlzZDBKQlFXaEdMRVZCUVRKSFF5eEpRVUV6Unl4TFFVRnZTQ3hKUVVGb1NpeERRV3BEYzBNc1EwRnRRM1JET3p0QlFVTkJUaXhKUVVGQlFTeHZRa0ZCYjBJc1EwRkJRMkVzUzBGQmNrSXNSMEZ3UTNORExFTkJjME4wUXpzN1FVRkRRU3hSUVVGSlF5eHBRa0ZCYVVJc1IwRkJSemxDTEhWQ1FVRjFRaXhEUVVGRk5FSXNjVUpCUVhGQ0xFZEJRVWRhTEc5Q1FVRnZRaXhEUVVGRFpTeEpRVUZ5UWl4RFFVRXlRaXhMUVVFelFpeERRVUV4UWl4RFFVRXZRenRCUVVOQmRFSXNTVUZCUVVFc1RVRkJUU3hEUVVGRkxFMUJRVTFHTEUxQlFVMHNRMEZCUlN4aFFVRkdMRU5CUVZvc1IwRkJaME1zYzBOQlFXeERMRU5CUVU0c1EwRkJhVVpsTEVsQlFXcEdMRU5CUVhWR1VTeHBRa0ZCZGtZN1FVRkRRVHM3UVVGRlJISkNMRVZCUVVGQkxFMUJRVTBzUTBGQlJTeE5RVUZOUml4TlFVRk5MRU5CUVVVc1lVRkJSaXhEUVVGYUxFZEJRV2RETEZsQlFXeERMRU5CUVU0c1EwRkJkVVI1UWl4SlFVRjJSRHRCUVVOQk8wRkJSMFE3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVRzN08wRkJRMEVzVTBGQlUwTXNORUpCUVZRc1EwRkJkVU5ETEZkQlFYWkRMRVZCUVc5RU8wRkJSVzVFZWtJc1JVRkJRVUVzVFVGQlRTeERRVUZGTEUxQlFVMTVRaXhYUVVGT0xFZEJRVzlDTEZsQlFYUkNMRU5CUVU0c1EwRkJNa05HTEVsQlFUTkRPMEZCUTBFN1FVRkhSRHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CT3pzN1FVRkRRU3hUUVVGVFJ5dzJRa0ZCVkN4RFFVRjNRelZDTEUxQlFYaERMRVZCUVdkRU8wRkJSUzlEUlN4RlFVRkJRU3hOUVVGTkxFTkJRVVVzVFVGQlRVWXNUVUZCVFN4RFFVRkZMR0ZCUVVZc1EwRkJXaXhIUVVGblF5eHpRMEZCYkVNc1EwRkJUaXhEUVVGcFJtVXNTVUZCYWtZc1EwRkJkVVppTEUxQlFVMHNRMEZCUlVZc1RVRkJUU3hEUVVGRkxFOUJRVVlzUTBGQlVpeERRVUZPTEVOQlFUUkNaU3hKUVVFMVFpeEZRVUYyUmp0QlFVVkJZaXhGUVVGQlFTeE5RVUZOTEVOQlFVVXNUVUZCVFVZc1RVRkJUU3hEUVVGRkxHRkJRVVlzUTBGQlpDeERRVUZPTEVOQlFYZERUU3hIUVVGNFF5eERRVUUyUTFrc1NVRkJTU3hEUVVGRFF5eFRRVUZNTEVOQlFXZENMRU5CUVVOdVFpeE5RVUZOTEVOQlFVVXNUMEZCUml4RFFVRlFMRU5CUVdoQ0xFTkJRVGRETzBGQlJVRkZMRVZCUVVGQkxFMUJRVTBzUTBGQlJTeE5RVUZOUml4TlFVRk5MRU5CUVVVc1lVRkJSaXhEUVVGYUxFZEJRV2RETEhGRFFVRm9ReXhIUVVOSUxFZEJSRWNzUjBGRFIwRXNUVUZCVFN4RFFVRkZMR0ZCUVVZc1EwRkVWQ3hIUVVNMlFpeHBRMEZFTDBJc1EwRkJUaXhEUVVONVJWVXNTVUZFZWtVc1EwRkRLMFVzVTBGRUwwVXNSVUZETUVZc1MwRkVNVVk3UVVGSFFWSXNSVUZCUVVFc1RVRkJUU3hEUVVGRkxFMUJRVTFHTEUxQlFVMHNRMEZCUlN4aFFVRkdMRU5CUVdRc1EwRkJUaXhEUVVGM1EyOUNMRTlCUVhoRExFTkJRV2xFTEZGQlFXcEVPenRCUVVWQkxFMUJRVXNzUTBGQlJYQkNMRTFCUVUwc1EwRkJSU3h4UWtGQlJpeERRVUZpTEVWQlFYZERPMEZCUTNaRFJTeEpRVUZCUVN4TlFVRk5MRU5CUVVVc1RVRkJUVVlzVFVGQlRTeERRVUZGTEdGQlFVWXNRMEZCV2l4SFFVRm5ReXhaUVVGc1F5eERRVUZPTEVOQlFYVkVlVUlzU1VGQmRrUTdRVUZEUVR0QlFVTkVJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWENKMWMyVWdjM1J5YVdOMFhDSTdYSEpjYmx4eVhHNWNjbHh1THlvcVhISmNiaUFxSUVWdVkyOWtaU0JJVkUxTUlIUmxlSFFnZEc4Z2MyRm1aU0JJVkUxTUlHVnVkR2wwYVdWelhISmNiaUFxWEhKY2JpQXFJRkpsY0d4aFkyVWdZV3hzSUdOb1lYSmhZM1JsY25NZ2FXNGdkR2hsSUdkcGRtVnVJSEpoYm1kbElDaDFibWxqYjJSbElEQXdRVEFnTFNBNU9UazVMQ0JoY3lCM1pXeHNJR0Z6SUdGdGNHVnljMkZ1WkN3Z1ozSmxZWFJsY2lBbUlHeGxjM01nZEdoaGJpbGNjbHh1SUNvZ2QybDBhQ0IwYUdWcGNpQm9kRzFzSUdWdWRHbDBlU0JsY1hWcGRtRnNaVzUwY3l3Z2QyaHBZMmdnYVhNZ2MybHRjR3g1SUNZamJtNXVPeUIzYUdWeVpTQnVibTRnYVhNZ2RHaGxJSFZ1YVdOdlpHVWdkbUZzZFdVZ2QyVWdaMlYwSUdaeWIyMGdZMmhoY2tOdlpHVkJkRnh5WEc0Z0tseHlYRzRnS2lCQWNHRnlZVzBnY21GM1UzUnlYSEpjYmlBcUlFQnlaWFIxY201eklIc3FmVnh5WEc0Z0tpOWNjbHh1Wm5WdVkzUnBiMjRnZDNCaVkxOW5aWFJmYzJGbVpWOW9kRzFzWDNSbGVIUW9JSEpoZDFOMGNpQXBlMXh5WEc1Y2NseHVYSFIyWVhJZ1pXNWpiMlJsWkZOMGNpQTlJSEpoZDFOMGNpNXlaWEJzWVdObEtDQXZXMXhjZFRBd1FUQXRYRngxT1RrNU9UdytYRndtWFM5bkxDQm1kVzVqZEdsdmJpQW9JR2tnS1h0Y2NseHVYSFJjZEhKbGRIVnliaUFuSmlNbklDc2dhUzVqYUdGeVEyOWtaVUYwS0NBd0lDa2dLeUFuT3ljN1hISmNibHgwZlNBcE8xeHlYRzVjY2x4dVhIUnlaWFIxY200Z1pXNWpiMlJsWkZOMGNqdGNjbHh1ZlZ4eVhHNWNjbHh1WEhKY2JpOHFLbHh5WEc0Z0tpQkRhR0Z1WjJVZ1ZtRnNkV1VnWVc1a0lGUnBkR3hsSUc5bUlHUnliM0JrYjNkdUlHRm1kR1Z5SUdOc2FXTnJhVzVuSUc5dUlFRndjR3g1SUdKMWRIUnZibHh5WEc0Z0tseHlYRzRnS2lCQWNHRnlZVzBnY0dGeVlXMXpYSFJGZUdGdGNHeGxPaUI3SUNka2NtOXdaRzkzYmw5cFpDYzZJQ2QzYUY5aWIyOXJhVzVuWDJSaGRHVW5MQ0FuWkhKdmNHUnZkMjVmY21Ga2FXOWZibUZ0WlNjNklDZDFhVjkzYUY5aWIyOXJhVzVuWDJSaGRHVmZjbUZrYVc4bklIMWNjbHh1SUNvdlhISmNibVoxYm1OMGFXOXVJSGR3WW1OZmRXbGZaSEp2Y0dSdmQyNWZZWEJ3YkhsZlkyeHBZMnNvSUhCaGNtRnRjeUFwZTF4eVhHNWNjbHh1WEhRdkx5QkhaWFFnYVc1d2RYUWdkbUZzZFdWeklHOW1JR0ZzYkNCbGJHVnRaVzUwY3lCcGJpQk1TU0J6WldOMGFXOXVMQ0FnZDJobGNtVWdVa0ZFU1U4Z2QyRnpJSE5sYkdWamRHVmtYSEpjYmx4MGRtRnlJR1pwYkhSbGNsOTFhVjlrWVhSbGMxOWhjbklnUFNCcVVYVmxjbmtvSUNkcGJuQjFkRnR1WVcxbFBWd2lKeUFySUhCaGNtRnRjMXNnSjJSeWIzQmtiM2R1WDNKaFpHbHZYMjVoYldVbklGMGdLeUFuWENKZE9tTm9aV05yWldRbklDbGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhRdWNHRnlaVzUwY3lnZ0oyeHBKeUFwTG1acGJtUW9JQ2M2YVc1d2RYUW5JQ2xjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUXViV0Z3S0NCbWRXNWpkR2x2YmlBb0tYdGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RISmxkSFZ5YmlCM2NHSmpYMmRsZEY5ellXWmxYMmgwYld4ZmRHVjRkQ2dnYWxGMVpYSjVLQ0IwYUdseklDa3VkbUZzS0NrZ0tUdGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSOUlDa3VaMlYwS0NrN1hISmNibHh5WEc1Y2RHbG1JQ2dnTUNBaFBUMGdabWxzZEdWeVgzVnBYMlJoZEdWelgyRnljaTVzWlc1bmRHZ2dLWHNnSUM4dklFTnZiblJwYm5WbElHOXViSGtnYVdZZ2NtRmthVzhnWW5WMGRHOXVJQ0IzWVhNZ2MyVnNaV04wWldRc0lHRnVaQ0IzWlNCaGNtVWdhR0YyYVc1bklIWmhiSFZsWEhKY2JseHlYRzVjZEZ4MEx5OGdSMlYwSUhScGRHeGxjeUJ2WmlCaGJHd2daV3hsYldWdWRITWdhVzRnVEVrZ2MyVmpkR2x2Yml3Z0lIZG9aWEpsSUZKQlJFbFBJSGRoY3lCelpXeGxZM1JsWkZ4eVhHNWNkRngwZG1GeUlHWnBiSFJsY2w5MWFWOTBhWFJzWlhOZllYSnlJRDBnYWxGMVpYSjVLQ0FuYVc1d2RYUmJibUZ0WlQxY0lpY2dLeUJ3WVhKaGJYTmJJQ2RrY205d1pHOTNibDl5WVdScGIxOXVZVzFsSnlCZElDc2dKMXdpWFRwamFHVmphMlZrSnlBcFhISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwSUNCY2RDNXdZWEpsYm5SektDQW5iR2tuSUNrdVptbHVaQ2dnSnpwcGJuQjFkQ2NnS1Z4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwTG0xaGNDZ2dablZ1WTNScGIyNGdLQ2w3WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEdsbUlDZ2dKM1JsZUhRbklEMDlJR3BSZFdWeWVTZ2dkR2hwY3lBcExuQnliM0FvSUNkMGVYQmxKeUFwSUNsN1hISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBjbVYwZFhKdUlHcFJkV1Z5ZVNnZ2RHaHBjeUFwTG5aaGJDZ3BPMXh5WEc1Y2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFI5WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEdsbUlDZ2dKM05sYkdWamRDMXZibVVuSUQwOUlHcFJkV1Z5ZVNnZ2RHaHBjeUFwTG5CeWIzQW9JQ2QwZVhCbEp5QXBJQ2w3WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MGNtVjBkWEp1SUdwUmRXVnllU2dnZEdocGN5QXBMbVpwYm1Rb0lDYzZjMlZzWldOMFpXUW5JQ2t1ZEdWNGRDZ3BPMXh5WEc1Y2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFI5WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEdsbUlDaGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENnZ0ozSmhaR2x2SnlBOVBTQnFVWFZsY25rb0lIUm9hWE1nS1M1d2NtOXdLQ0FuZEhsd1pTY2dLU0FwWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MElIeDhJQ2dnSjJOb1pXTnJZbTk0SnlBOVBTQnFVWFZsY25rb0lIUm9hWE1nS1M1d2NtOXdLQ0FuZEhsd1pTY2dLU0FwWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENsN1hISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBkbUZ5SUdsdWNIVjBYM05sYkdWamRHVmtJRDBnYWxGMVpYSjVLQ0IwYUdseklDa3VabWxzZEdWeUtDYzZZMmhsWTJ0bFpDY3BMbTVsZUhRb0lDY3VkM0JpWTE5MWFWOWpiMjUwY205c1gyeGhZbVZzSnlBcExtaDBiV3dvS1R0Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUnBaaUFvSUhWdVpHVm1hVzVsWkNBOVBTQnBibkIxZEY5elpXeGxZM1JsWkNBcElIdGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEdsdWNIVjBYM05sYkdWamRHVmtJRDBnYWxGMVpYSjVLQ0IwYUdseklDa3VabWxzZEdWeUtDYzZZMmhsWTJ0bFpDY3BMbkJ5WlhZb0lDY3VkM0JpWTE5MWFWOWpiMjUwY205c1gyeGhZbVZzSnlBcExtaDBiV3dvS1R0Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUjlYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwY21WMGRYSnVJQ2dnZFc1a1pXWnBibVZrSUNFOVBTQnBibkIxZEY5elpXeGxZM1JsWkNBcElEOGdhVzV3ZFhSZmMyVnNaV04wWldRZ09pQW5KenRjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwZlZ4eVhHNWNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBjbVYwZFhKdUlHcFJkV1Z5ZVNnZ2RHaHBjeUFwTG5aaGJDZ3BPMXh5WEc1Y2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBmU0FwTG1kbGRDZ3BPMXh5WEc1Y2NseHVYSFJjZEM4dklGVndaR0YwWlNCV1lXeDFaU0IwYnlBZ1pISnZjR1J2ZDI0Z2FXNXdkWFFnYUdsa1pHVnVJR1ZzWlcxbGJuUnpMaUJUZFdOb0lDQjJZV3gxWlNCemRISnBibWRwWm5rdVhISmNibHgwWEhScVVYVmxjbmtvSUNjakp5QXJJSEJoY21GdGMxc2dKMlJ5YjNCa2IzZHVYMmxrSnlCZElDa3VkbUZzS0NCS1UwOU9Mbk4wY21sdVoybG1lU2dnWm1sc2RHVnlYM1ZwWDJSaGRHVnpYMkZ5Y2lBcElDazdYSEpjYmx4eVhHNWNkRngwTHk4Z1IyVnVaWEpoZEdVZ1kyaGhibWRsSUdGamRHbHZiaXdnSUdadmNpQmhZbWxzYVhSNUlIUnZJQ0J6Wlc1a0lFRnFZWGdnY21WeGRXVnpkRnh5WEc1Y2RGeDBhbEYxWlhKNUtDQW5JeWNnS3lCd1lYSmhiWE5iSUNka2NtOXdaRzkzYmw5cFpDY2dYU0FwTG5SeWFXZG5aWElvSUNkamFHRnVaMlVuSUNrN1hISmNibHh5WEc1Y2RGeDBMeThnUjJWMElFeGhZbVZzSUc5bUlITmxiR1ZqZEdWa0lGSmhaR2x2SUdKMWRIUnZibHh5WEc1Y2RGeDBkbUZ5SUdacGJIUmxjbDkxYVY5a1lYUmxjMTkwYVhSc1pTQTlJR3BSZFdWeWVTZ2dKMmx1Y0hWMFcyNWhiV1U5WENJbklDc2djR0Z5WVcxeld5QW5aSEp2Y0dSdmQyNWZjbUZrYVc5ZmJtRnRaU2NnWFNBcklDZGNJbDA2WTJobFkydGxaQ2NnS1M1dVpYaDBLQ0FuTG5kd1ltTmZkV2xmWTI5dWRISnZiRjlzWVdKbGJDY2dLUzVvZEcxc0tDa2dLeUFuT2lBbk8xeHlYRzVjY2x4dVhIUmNkQzh2SUZKbGJXOTJaU0J6Wld4bFkzUmxaQ0IyWVd4MVpTQnZaaUJ5WVdScGJ5QmlkWFIwYjI0Z1puSnZiU0JpWldkcGJtNXBibWNzSUhkbElIZHBiR3dnZFhObElFeGhZbVZzSUhScGRHeGxJR2x1YzNSbFlXUmNjbHh1WEhSY2RHWnBiSFJsY2w5MWFWOTBhWFJzWlhOZllYSnlMbk5vYVdaMEtDazdYSEpjYmx4eVhHNWNkRngwTHk4Z1ZYQmtZWFJsSUZScGRHeGxJR2x1SUdSeWIzQmtiM2R1WEhKY2JseDBYSFIyWVhJZ1pXNWpiMlJsWkY5b2RHMXNYM1JsZUhRZ1BTQjNjR0pqWDJkbGRGOXpZV1psWDJoMGJXeGZkR1Y0ZENnZ1ptbHNkR1Z5WDNWcFgyUmhkR1Z6WDNScGRHeGxJQ3NnWm1sc2RHVnlYM1ZwWDNScGRHeGxjMTloY25JdWFtOXBiaWdnSnlBdElDY2dLU0FwTzF4eVhHNWNkRngwYWxGMVpYSjVLQ0FuSXljZ0t5QndZWEpoYlhOYklDZGtjbTl3Wkc5M2JsOXBaQ2NnWFNBcklDZGZjMlZzWldOMGIzSWdMbmR3WW1OZmMyVnNaV04wWldSZmFXNWZaSEp2Y0dSdmQyNG5JQ2t1YUhSdGJDZ2daVzVqYjJSbFpGOW9kRzFzWDNSbGVIUWdLVHRjY2x4dVhIUjlYSEpjYmx4eVhHNWNkR3BSZFdWeWVTZ2dKeU1uSUNzZ2NHRnlZVzF6V3lBblpISnZjR1J2ZDI1ZmFXUW5JRjBnS3lBblgyTnZiblJoYVc1bGNpY2dLUzVvYVdSbEtDazdYSEpjYm4xY2NseHVYSEpjYmx4eVhHNHZLaXBjY2x4dUlDb2dRMnh2YzJVZ1pISnZjR1J2ZDI0Z1lXWjBaWElnWTJ4cFkydHBibWNnYjI0Z1EyeHZjMlVnWW5WMGRHOXVYSEpjYmlBcVhISmNiaUFxSUVCd1lYSmhiU0JrY205d1pHOTNibDlwWkZ4MFNVUWdiMllnWkhKdmNHUnZkMjVjY2x4dUlDb3ZYSEpjYm1aMWJtTjBhVzl1SUhkd1ltTmZkV2xmWkhKdmNHUnZkMjVmWTJ4dmMyVmZZMnhwWTJzb0lHUnliM0JrYjNkdVgybGtJQ2w3WEhKY2JseHlYRzVjZEdwUmRXVnllU2dnSnlNbklDc2daSEp2Y0dSdmQyNWZhV1FnS3lBblgyTnZiblJoYVc1bGNpY2dLUzVvYVdSbEtDazdYSEpjYm4xY2NseHVYSEpjYmx4eVhHNHZLaXBjY2x4dUlDb2dVMmx0Y0d4bElHOXdkR2x2YmlCamJHbGpheUJ2YmlCa2NtOXdaRzkzYmx4eVhHNGdLbHh5WEc0Z0tpQkFjR0Z5WVcwZ2NHRnlZVzF6WEhSRmVHRnRjR3hsT2lCN0lDZGtjbTl3Wkc5M2JsOXBaQ2M2SUNkM2FGOWliMjlyYVc1blgyUmhkR1VuTENBbmFYTmZkR2hwYzE5emFXMXdiR1ZmYkdsemRDYzZJSFJ5ZFdVc0lDZDJZV3gxWlNjNklDYzFKeXdnSjE5MGFHbHpKem9nZEdocGN5QjlYSEpjYmlBcUwxeHlYRzVtZFc1amRHbHZiaUIzY0dKalgzVnBYMlJ5YjNCa2IzZHVYM05wYlhCc1pWOWpiR2xqYXlnZ2NHRnlZVzF6SUNsN1hISmNibHh5WEc1Y2RHcFJkV1Z5ZVNnZ0p5TW5JQ3NnY0dGeVlXMXpXeUFuWkhKdmNHUnZkMjVmYVdRbklGMGdLeUFuWDNObGJHVmpkRzl5SUM1M2NHSmpYM05sYkdWamRHVmtYMmx1WDJSeWIzQmtiM2R1SnlBcExtaDBiV3dvSUdwUmRXVnllU2dnY0dGeVlXMXpXeUFuWDNSb2FYTW5JRjBnS1M1b2RHMXNLQ2tnS1R0Y2NseHVYSEpjYmx4MGFsRjFaWEo1S0NBbkl5Y2dLeUJ3WVhKaGJYTmJJQ2RrY205d1pHOTNibDlwWkNjZ1hTQXBMblpoYkNnZ1NsTlBUaTV6ZEhKcGJtZHBabmtvSUZ0d1lYSmhiWE5iSUNkMllXeDFaU2NnWFYwZ0tTQXBPMXh5WEc1Y2NseHVYSFJxVVhWbGNua29JQ2NqSnlBcklIQmhjbUZ0YzFzZ0oyUnliM0JrYjNkdVgybGtKeUJkSUNzZ0oxOWpiMjUwWVdsdVpYSWdiR2tnYVc1d2RYUmJkSGx3WlQxamFHVmphMkp2ZUYwc0oxeHlYRzVjZEZ4MElDQXJJQ2NqSnlBcklIQmhjbUZ0YzFzZ0oyUnliM0JrYjNkdVgybGtKeUJkSUNzZ0oxOWpiMjUwWVdsdVpYSWdiR2tnYVc1d2RYUmJkSGx3WlQxeVlXUnBiMTBuSUNrdWNISnZjQ2dnSjJOb1pXTnJaV1FuTENCbVlXeHpaU0FwTzF4eVhHNWNjbHh1WEhScVVYVmxjbmtvSUNjakp5QXJJSEJoY21GdGMxc2dKMlJ5YjNCa2IzZHVYMmxrSnlCZElDa3VkSEpwWjJkbGNpZ2dKMk5vWVc1blpTY2dLVHRjY2x4dVhISmNibHgwYVdZZ0tDQWhJSEJoY21GdGMxc2dKMmx6WDNSb2FYTmZjMmx0Y0d4bFgyeHBjM1FuSUYwZ0tYdGNjbHh1WEhSY2RHcFJkV1Z5ZVNnZ0p5TW5JQ3NnY0dGeVlXMXpXeUFuWkhKdmNHUnZkMjVmYVdRbklGMGdLeUFuWDJOdmJuUmhhVzVsY2ljZ0tTNW9hV1JsS0NrN1hISmNibHgwZlZ4eVhHNTlJbDBzSW1acGJHVWlPaUpwYm1Oc2RXUmxjeTlmZEc5dmJHSmhjbDkxYVM5ZmIzVjBMM1J2YjJ4aVlYSmZkV2t1YW5NaWZRPT1cbiJdLCJuYW1lcyI6WyJ3cGJjX2dldF9zYWZlX2h0bWxfdGV4dCIsInJhd1N0ciIsInJlcGxhY2UiLCJpIiwiY2hhckNvZGVBdCIsIndwYmNfdWlfZHJvcGRvd25fYXBwbHlfY2xpY2siLCJwYXJhbXMiLCJlbmNvZGVkX2h0bWxfdGV4dCIsImZpbHRlcl91aV9kYXRlc19hcnIiLCJqUXVlcnkiLCJwYXJlbnRzIiwiZmluZCIsIm1hcCIsInRoaXMiLCJ2YWwiLCJnZXQiLCJsZW5ndGgiLCJmaWx0ZXJfdWlfdGl0bGVzX2FyciIsInByb3AiLCJ0ZXh0IiwiaW5wdXRfc2VsZWN0ZWQiLCJmaWx0ZXIiLCJuZXh0IiwiaHRtbCIsInVuZGVmaW5lZCIsInByZXYiLCJKU09OIiwic3RyaW5naWZ5IiwidHJpZ2dlciIsImZpbHRlcl91aV9kYXRlc190aXRsZSIsInNoaWZ0Iiwiam9pbiIsImhpZGUiLCJ3cGJjX3VpX2Ryb3Bkb3duX2Nsb3NlX2NsaWNrIiwiZHJvcGRvd25faWQiLCJ3cGJjX3VpX2Ryb3Bkb3duX3NpbXBsZV9jbGljayJdLCJtYXBwaW5ncyI6ImFBV0EsU0FBU0Esd0JBQXdCQyxHQUkvQixPQUhpQkEsRUFBT0MsUUFBUSx1QkFBd0IsU0FBVUMsR0FDaEUsTUFBTyxLQUFPQSxFQUFFQyxXQUFXLEdBQUssTUFXcEMsU0FBU0MsNkJBQTZCQyxHQUVwQyxJQXFDTUMsRUFyQ0ZDLEVBQXNCQyxPQUFPLGVBQWlCSCxFQUE0QixvQkFBSSxjQUFjSSxRQUFRLE1BQU1DLEtBQUssVUFBVUMsSUFBSSxXQUMvSCxPQUFPWix3QkFBd0JTLE9BQU9JLE1BQU1DLFNBQzNDQyxNQUVDLElBQU1QLEVBQW9CUSxTQUd4QkMsRUFBdUJSLE9BQU8sZUFBaUJILEVBQTRCLG9CQUFJLGNBQWNJLFFBQVEsTUFBTUMsS0FBSyxVQUFVQyxJQUFJLFdBQ2hJLEdBQUksUUFBVUgsT0FBT0ksTUFBTUssS0FBSyxRQUM5QixPQUFPVCxPQUFPSSxNQUFNQyxNQUd0QixHQUFJLGNBQWdCTCxPQUFPSSxNQUFNSyxLQUFLLFFBQ3BDLE9BQU9ULE9BQU9JLE1BQU1GLEtBQUssYUFBYVEsT0FHeEMsR0FBSSxTQUFXVixPQUFPSSxNQUFNSyxLQUFLLFNBQVcsWUFBY1QsT0FBT0ksTUFBTUssS0FBSyxRQVU1RSxPQUFPVCxPQUFPSSxNQUFNQyxNQVRsQixJQUFJTSxFQUFpQlgsT0FBT0ksTUFBTVEsT0FBTyxZQUFZQyxLQUFLLDBCQUEwQkMsT0FNcEYsWUFBT0MsS0FITEosRUFERUksTUFBYUosRUFDRVgsT0FBT0ksTUFBTVEsT0FBTyxZQUFZSSxLQUFLLDBCQUEwQkYsT0FHN0RILEdBQWlCQSxFQUFpQixLQUl4REwsTUFFSE4sT0FBTyxJQUFNSCxFQUFvQixhQUFHUSxJQUFJWSxLQUFLQyxVQUFVbkIsSUFFdkRDLE9BQU8sSUFBTUgsRUFBb0IsYUFBR3NCLFFBQVEsVUFFeENDLEVBQXdCcEIsT0FBTyxlQUFpQkgsRUFBNEIsb0JBQUksY0FBY2dCLEtBQUssMEJBQTBCQyxPQUFTLEtBRTFJTixFQUFxQmEsUUFFakJ2QixFQUFvQlAsd0JBQXdCNkIsRUFBd0JaLEVBQXFCYyxLQUFLLFFBQ2xHdEIsT0FBTyxJQUFNSCxFQUFvQixZQUFJLHdDQUF3Q2lCLEtBQUtoQixJQUdwRkUsT0FBTyxJQUFNSCxFQUFvQixZQUFJLGNBQWMwQixPQVNyRCxTQUFTQyw2QkFBNkJDLEdBQ3BDekIsT0FBTyxJQUFNeUIsRUFBYyxjQUFjRixPQVMzQyxTQUFTRyw4QkFBOEI3QixHQUNyQ0csT0FBTyxJQUFNSCxFQUFvQixZQUFJLHdDQUF3Q2lCLEtBQUtkLE9BQU9ILEVBQWMsT0FBR2lCLFFBQzFHZCxPQUFPLElBQU1ILEVBQW9CLGFBQUdRLElBQUlZLEtBQUtDLFVBQVUsQ0FBQ3JCLEVBQWMsU0FDdEVHLE9BQU8sSUFBTUgsRUFBb0IsWUFBSSx1Q0FBOENBLEVBQW9CLFlBQUksbUNBQW1DWSxLQUFLLFdBQVcsR0FDOUpULE9BQU8sSUFBTUgsRUFBb0IsYUFBR3NCLFFBQVEsVUFFdkN0QixFQUE0QixxQkFDL0JHLE9BQU8sSUFBTUgsRUFBb0IsWUFBSSxjQUFjMEIifQ==
|
includes/_toolbar_ui/_src/toolbar_ui.css
ADDED
@@ -0,0 +1,889 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
/* UI Toolbar *************************************************************************************************/
|
2 |
+
/* To Compile file: Alt + F12 and run command: "gulp wpbc" */
|
3 |
+
|
4 |
+
/* 1. Default Button Style ------------------------------------------------------------------------------------------ */
|
5 |
+
.ui_element .wpbc_ui_button{
|
6 |
+
display: flex;
|
7 |
+
flex-flow: row nowrap;
|
8 |
+
justify-content: flex-start;
|
9 |
+
align-items: center;
|
10 |
+
|
11 |
+
text-decoration: none;
|
12 |
+
/*font-size: 13px;*/
|
13 |
+
/*line-height: 2.15384615; !* 28px *!*/
|
14 |
+
/*min-height: 30px;*/
|
15 |
+
min-height: 24px;
|
16 |
+
margin: 0;
|
17 |
+
padding: 0 10px 2px;
|
18 |
+
padding-bottom: 1px;
|
19 |
+
cursor: pointer;
|
20 |
+
/*border-width: 1px; - Defined at Several elements in a Group. Point #2. */
|
21 |
+
border-style: solid;
|
22 |
+
-webkit-appearance: none;
|
23 |
+
/*border-radius: 3px; - Defined at Several elements in a Group. Point #2. */
|
24 |
+
white-space: nowrap;
|
25 |
+
box-sizing: border-box;
|
26 |
+
}
|
27 |
+
.ui_element .wpbc_ui_button,
|
28 |
+
.ui_element .wpbc_ui_button-secondary {
|
29 |
+
color: #555;
|
30 |
+
border-color: #d8d8d8;
|
31 |
+
background: #f7f7f7;
|
32 |
+
vertical-align: top;
|
33 |
+
}
|
34 |
+
/* :hover ---- */
|
35 |
+
.ui_element .wpbc_ui_button.hover:not(.inactive),
|
36 |
+
.ui_element .wpbc_ui_button:hover:not(.inactive),
|
37 |
+
.ui_element .wpbc_ui_button-secondary:hover:not(.inactive){
|
38 |
+
background: #fafafa;
|
39 |
+
border-color: #d8d8d8;;
|
40 |
+
color: #23282d;
|
41 |
+
text-decoration: none;
|
42 |
+
}
|
43 |
+
.ui_element .wpbc_ui_button.hover.inactive,
|
44 |
+
.ui_element .wpbc_ui_button.inactive:hover,
|
45 |
+
.ui_element .wpbc_ui_button-secondary.inactive:hover{
|
46 |
+
cursor: default;
|
47 |
+
}
|
48 |
+
/* :focus ---- */
|
49 |
+
.ui_element .wpbc_ui_button.focus,
|
50 |
+
.ui_element .wpbc_ui_button:focus,
|
51 |
+
.ui_element .wpbc_ui_button-secondary:focus {
|
52 |
+
background: #fafafa;
|
53 |
+
border-color: #d8d8d8;
|
54 |
+
color: #23282d;
|
55 |
+
/*box-shadow: 0 0 0 1px #4f94d4, 0 0 2px 1px rgba(79, 148, 212, 0.8); This is Default: WordPress */
|
56 |
+
box-shadow: 0 0 0 0px #4f94d4, 0 0 1px 1px rgba(79, 148, 212, 0.8);
|
57 |
+
z-index: 1;
|
58 |
+
text-decoration: none;
|
59 |
+
|
60 |
+
/* Only visible in Windows High Contrast mode */
|
61 |
+
outline: 2px solid transparent;
|
62 |
+
/* Reset inherited offset from Gutenberg */
|
63 |
+
outline-offset: 0;
|
64 |
+
}
|
65 |
+
/* :active ---- */
|
66 |
+
.wpbc_ui_dropdown.open > .wpbc_ui_button:not(.inactive),
|
67 |
+
.ui_element .wpbc_ui_button:active:not(.inactive),
|
68 |
+
.ui_element .wpbc_ui_button-secondary:active:not(.inactive) {
|
69 |
+
background: #f6f7f7;
|
70 |
+
border-color: #d8d8d8;
|
71 |
+
box-shadow: inset 0 1px 7px -3px rgba(0, 0, 0, .3);
|
72 |
+
transform: translateY(1px);
|
73 |
+
outline: 0;
|
74 |
+
text-decoration: none;
|
75 |
+
}
|
76 |
+
/* :disabled ---- */
|
77 |
+
.ui_element .wpbc_ui_button:disabled,
|
78 |
+
.ui_element .wpbc_ui_button[disabled],
|
79 |
+
.ui_element.disabled .wpbc_ui_button,
|
80 |
+
.ui_element .wpbc_ui_button.disabled,
|
81 |
+
.ui_element .wpbc_ui_button-secondary[disabled],
|
82 |
+
.ui_element .wpbc_ui_button-secondary:disabled,
|
83 |
+
.ui_element .wpbc_ui_button-secondary.disabled,
|
84 |
+
.ui_element .wpbc_ui_button-disabled {
|
85 |
+
color: #a7aaad !important;
|
86 |
+
border-color: #dcdcde !important;
|
87 |
+
background: #f6f7f7 !important;
|
88 |
+
box-shadow: none !important;
|
89 |
+
cursor: default;
|
90 |
+
transform: none !important;
|
91 |
+
}
|
92 |
+
/* .active CLASS - pressed button, pressed state e.g. a selected setting */
|
93 |
+
.ui_element .wpbc_ui_button.active:not(.inactive),
|
94 |
+
.ui_element .wpbc_ui_button.active:hover:not(.inactive) {
|
95 |
+
background: #f6f7f7;
|
96 |
+
border-color: #d8d8d8;
|
97 |
+
box-shadow: inset 0 1px 7px -3px rgba(0, 0, 0, .3);
|
98 |
+
transform: translateY(1px);
|
99 |
+
outline: 0;
|
100 |
+
text-decoration: none;
|
101 |
+
}
|
102 |
+
.ui_element .wpbc_ui_button.active:focus:not(.inactive) {
|
103 |
+
border-color: #3582c4;
|
104 |
+
box-shadow:inset 0 1px 5px -3px #0a4b78, 0 0 1px 1px rgba(79, 148, 212, 0.1);
|
105 |
+
}
|
106 |
+
|
107 |
+
/* 2. Primary Button Style ----------------------------------------------------------------------------------------- */
|
108 |
+
.ui_element .wpbc_ui_button_primary {
|
109 |
+
background: #0085ba;
|
110 |
+
border-color: #0073aa #006799 #006799;
|
111 |
+
color: #fff;
|
112 |
+
text-shadow: 0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799;
|
113 |
+
text-decoration: none;
|
114 |
+
box-shadow: 0 1px 0px #f1f1f1;
|
115 |
+
/*background: #2271b1;*/
|
116 |
+
/*border-color: #2271b1;*/
|
117 |
+
/*color: #fff;*/
|
118 |
+
/*text-decoration: none;*/
|
119 |
+
/*text-shadow: none;*/
|
120 |
+
}
|
121 |
+
/* :hover, :focus ---- */
|
122 |
+
.ui_element .wpbc_ui_button_primary.hover:not(.inactive),
|
123 |
+
.ui_element .wpbc_ui_button_primary:hover:not(.inactive),
|
124 |
+
.ui_element .wpbc_ui_button_primary.focus:not(.inactive),
|
125 |
+
.ui_element .wpbc_ui_button_primary:focus:not(.inactive) {
|
126 |
+
/*background: #135e96;*/
|
127 |
+
/*border-color: #135e96;*/
|
128 |
+
/*color: #fff;*/
|
129 |
+
background: #008ec2;
|
130 |
+
border-color: #006799;
|
131 |
+
color: #fff;
|
132 |
+
}
|
133 |
+
/* :focus ---- */
|
134 |
+
.ui_element .wpbc_ui_button_primary.focus:not(.inactive),
|
135 |
+
.ui_element .wpbc_ui_button_primary:focus:not(.inactive) {
|
136 |
+
box-shadow:0 0 0 0px #fff, 0 0 2px 1px #a4d7ff;
|
137 |
+
}
|
138 |
+
/* :active ---- */
|
139 |
+
.ui_element .wpbc_ui_button_primary.active:not(.inactive),
|
140 |
+
.ui_element .wpbc_ui_button_primary.active:hover:not(.inactive),
|
141 |
+
.ui_element .wpbc_ui_button_primary.active:focus:not(.inactive),
|
142 |
+
.ui_element .wpbc_ui_button_primary:active:not(.inactive) {
|
143 |
+
background: #0c7ca8;
|
144 |
+
border-color: #0b79a4;
|
145 |
+
box-shadow: inset 0 1px 7px -3px rgba(0, 0, 0, .3);
|
146 |
+
color: #fff;
|
147 |
+
}
|
148 |
+
/* :disabled ---- */
|
149 |
+
.ui_element .wpbc_ui_button_primary[disabled],
|
150 |
+
.ui_element .wpbc_ui_button_primary:disabled,
|
151 |
+
.ui_element .wpbc_ui_button_primary-disabled,
|
152 |
+
.ui_element .wpbc_ui_button_primary.disabled {
|
153 |
+
color: #a7aaad !important;
|
154 |
+
background: #f6f7f7 !important;
|
155 |
+
border-color: #dcdcde !important;
|
156 |
+
box-shadow: none !important;
|
157 |
+
text-shadow: none !important;
|
158 |
+
cursor: default;
|
159 |
+
}
|
160 |
+
|
161 |
+
@media (max-width: 782px) {
|
162 |
+
.ui_element .in-button-text {
|
163 |
+
display: none;
|
164 |
+
}
|
165 |
+
}
|
166 |
+
|
167 |
+
/* 3.1 Text --------------------------------------------------------------------------------------------------------- */
|
168 |
+
.ui_element .wpbc_ui_text {
|
169 |
+
border: 1px solid #d6d6d6;
|
170 |
+
flex: 1 1 120px;
|
171 |
+
}
|
172 |
+
/* :focus ---- */
|
173 |
+
.ui_element .wpbc_ui_text.focus,
|
174 |
+
.ui_element .wpbc_ui_text:focus {
|
175 |
+
|
176 |
+
border-color: #2271b1;
|
177 |
+
box-shadow: 0 0 0 1px #2271b1;
|
178 |
+
|
179 |
+
border-color: #d8d8d8;
|
180 |
+
/*box-shadow: 0 0 0 1px #4f94d4, 0 0 2px 1px rgba(79, 148, 212, 0.8); This is Default: WordPress */
|
181 |
+
box-shadow: 0 0 0 0px #4f94d4, 0 0 1px 1px rgba(79, 148, 212, 0.8);
|
182 |
+
z-index: 1;
|
183 |
+
/* Only visible in Windows High Contrast mode */
|
184 |
+
outline: 2px solid transparent;
|
185 |
+
}
|
186 |
+
|
187 |
+
/* 3.2 Select-box ------------------------------------------------------------------------------------------------- */
|
188 |
+
.ui_element .wpbc_ui_select {
|
189 |
+
border: 1px solid #d6d6d6;
|
190 |
+
flex: 1 1 auto;
|
191 |
+
}
|
192 |
+
/* :focus ---- */
|
193 |
+
.ui_element .wpbc_ui_select.focus,
|
194 |
+
.ui_element .wpbc_ui_select:focus {
|
195 |
+
|
196 |
+
border-color: #2271b1;
|
197 |
+
box-shadow: 0 0 0 1px #2271b1;
|
198 |
+
|
199 |
+
border-color: #d8d8d8;
|
200 |
+
/*box-shadow: 0 0 0 1px #4f94d4, 0 0 2px 1px rgba(79, 148, 212, 0.8); This is Default: WordPress */
|
201 |
+
box-shadow: 0 0 0 0px #4f94d4, 0 0 1px 1px rgba(79, 148, 212, 0.8);
|
202 |
+
z-index: 1;
|
203 |
+
/* Only visible in Windows High Contrast mode */
|
204 |
+
outline: 2px solid transparent;
|
205 |
+
}
|
206 |
+
|
207 |
+
/* 3.3 Check-box & Radio ----------------------------------------------------------------------------------------- */
|
208 |
+
.ui_element .wpbc_ui_checkbox,
|
209 |
+
.ui_element .wpbc_ui_radio {
|
210 |
+
border: 1px solid #bcbcbc;
|
211 |
+
border-radius: 4px;
|
212 |
+
background: #fff;
|
213 |
+
color: #50575e;
|
214 |
+
clear: none;
|
215 |
+
cursor: pointer;
|
216 |
+
display: inline-block;
|
217 |
+
line-height: 0 !important;
|
218 |
+
height: 1rem !important;
|
219 |
+
margin: -0.25rem 0.25rem 0 0;
|
220 |
+
outline: 0;
|
221 |
+
padding: 0 !important;
|
222 |
+
text-align: center;
|
223 |
+
vertical-align: middle;
|
224 |
+
width: 1rem;
|
225 |
+
min-width: 1rem;
|
226 |
+
-webkit-appearance: none;
|
227 |
+
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
228 |
+
transition: .05s border-color ease-in-out;
|
229 |
+
|
230 |
+
margin: 0;
|
231 |
+
align-self: center;
|
232 |
+
}
|
233 |
+
.ui_element .wpbc_ui_radio {
|
234 |
+
border-radius: 50%;
|
235 |
+
margin-right: 0.25rem;
|
236 |
+
line-height: 0.71428571;
|
237 |
+
}
|
238 |
+
/* :focus ---- */
|
239 |
+
.ui_element .wpbc_ui_checkbox.focus,
|
240 |
+
.ui_element .wpbc_ui_checkbox:focus,
|
241 |
+
.ui_element .wpbc_ui_radio.focus,
|
242 |
+
.ui_element .wpbc_ui_radio:focus {
|
243 |
+
|
244 |
+
border-color: #2271b1;
|
245 |
+
box-shadow: 0 0 0 1px #2271b1;
|
246 |
+
|
247 |
+
border-color: #d8d8d8;
|
248 |
+
/*box-shadow: 0 0 0 1px #4f94d4, 0 0 2px 1px rgba(79, 148, 212, 0.8); This is Default: WordPress */
|
249 |
+
box-shadow: 0 0 0 0px #4f94d4, 0 0 1px 1px rgba(79, 148, 212, 0.8);
|
250 |
+
z-index: 1;
|
251 |
+
/* Only visible in Windows High Contrast mode */
|
252 |
+
outline: 2px solid transparent !important;
|
253 |
+
}
|
254 |
+
.ui_element .wpbc_ui_radio + .wpbc_ui_control_label,
|
255 |
+
.ui_element .wpbc_ui_checkbox + .wpbc_ui_control_label {
|
256 |
+
padding-left: 5px;
|
257 |
+
padding-right: 5px;
|
258 |
+
}
|
259 |
+
@media screen and (max-width: 782px) {
|
260 |
+
.ui_element .wpbc_ui_checkbox,
|
261 |
+
.ui_element .wpbc_ui_radio {
|
262 |
+
height: 1.5625rem !important;
|
263 |
+
width: 1.5625rem;
|
264 |
+
}
|
265 |
+
}
|
266 |
+
|
267 |
+
/* 3.4. Addon ------------------------------------------------------------------------------------------------------ */
|
268 |
+
.ui_element .wpbc_ui_addon {
|
269 |
+
flex: 0 1 auto;
|
270 |
+
display: flex;
|
271 |
+
flex-flow: row wrap;
|
272 |
+
justify-content: stretch;
|
273 |
+
align-items: center;
|
274 |
+
}
|
275 |
+
|
276 |
+
/* 3.5 Labels ------------------------------------------------------------------------------------------------------ */
|
277 |
+
.ui_element label.wpbc_ui_control_label {
|
278 |
+
flex: 0 1 auto;
|
279 |
+
display: flex;
|
280 |
+
flex-flow: row wrap;
|
281 |
+
justify-content: flex-start;
|
282 |
+
align-items: center;
|
283 |
+
padding: 0 5px 2px 0;
|
284 |
+
padding-bottom: 1px;
|
285 |
+
}
|
286 |
+
.ui_element label.wpbc_ui_control_label + .wpbc_ui_control:first-of-type {
|
287 |
+
border-top-left-radius: 3px !important;
|
288 |
+
border-bottom-left-radius: 3px !important;
|
289 |
+
}
|
290 |
+
|
291 |
+
/**********************************************************************************************************************/
|
292 |
+
/* 4. Dropdown List */
|
293 |
+
/**********************************************************************************************************************/
|
294 |
+
.ui_element .wpbc_ui_dropdown__outside_label{
|
295 |
+
flex: 0 1 auto;
|
296 |
+
display: flex;
|
297 |
+
flex-flow: row nowrap;
|
298 |
+
justify-content: flex-start;
|
299 |
+
align-items: center;
|
300 |
+
padding: 0 10px 2px 0;
|
301 |
+
padding-bottom: 1px;
|
302 |
+
}
|
303 |
+
.ui_element .wpbc_ui_dropdown {
|
304 |
+
flex: 0 1 auto;
|
305 |
+
|
306 |
+
display: flex;
|
307 |
+
flex-flow: row nowrap;
|
308 |
+
justify-content: flex-start;
|
309 |
+
align-items: stretch;
|
310 |
+
|
311 |
+
position: relative;
|
312 |
+
}
|
313 |
+
.ui_element .wpbc_ui_dropdown * {
|
314 |
+
box-sizing: border-box;
|
315 |
+
}
|
316 |
+
.ui_element .wpbc_ui_dropdown .wpbc_ui_dropdown__inside_label{
|
317 |
+
font-weight: 600;
|
318 |
+
margin:0;
|
319 |
+
padding:0 0.5em 0 0;
|
320 |
+
}
|
321 |
+
.ui_element .wpbc_ui_dropdown .wpbc_ui_dropdown__inside_caret {
|
322 |
+
display: inline-block;
|
323 |
+
width: 0;
|
324 |
+
height: 0;
|
325 |
+
margin-left: 7px;
|
326 |
+
vertical-align: middle;
|
327 |
+
border-top: 4px dashed;
|
328 |
+
border-top: 4px solid \9;
|
329 |
+
border-right: 4px solid transparent;
|
330 |
+
border-left: 4px solid transparent;
|
331 |
+
}
|
332 |
+
/* ---------------------------------------------------------------------------------------------------------- */
|
333 |
+
/* BORDER RADIUS */
|
334 |
+
/* ---------------------------------------------------------------------------------------------------------- */
|
335 |
+
.ui_element .wpbc_ui_dropdown:last-child > .wpbc_ui_button:last-of-type {
|
336 |
+
border-top-right-radius: 3px;
|
337 |
+
border-bottom-right-radius: 3px;
|
338 |
+
}
|
339 |
+
/* In case, if have several elements in .ui_element (like "button dropdown button"), - make borders not round */
|
340 |
+
/* Left border not round */
|
341 |
+
.ui_element .wpbc_ui_dropdown:not(:first-child) > .wpbc_ui_button:first-child{
|
342 |
+
border-top-left-radius: 0;
|
343 |
+
border-bottom-left-radius: 0;
|
344 |
+
}
|
345 |
+
/* Right border not round */
|
346 |
+
.ui_element .wpbc_ui_dropdown:not(:last-child) > .wpbc_ui_button:last-child{
|
347 |
+
border-top-right-radius: 0;
|
348 |
+
border-bottom-right-radius: 0;
|
349 |
+
}
|
350 |
+
/* If we have outside label, then we need to make left border round */
|
351 |
+
.ui_element .wpbc_ui_dropdown__outside_label + .wpbc_ui_dropdown > .wpbc_ui_button:first-child{
|
352 |
+
border-top-left-radius: 3px;
|
353 |
+
border-bottom-left-radius: 3px;
|
354 |
+
}
|
355 |
+
/* ---------------------------------------------------------------------------------------------------------- */
|
356 |
+
/* OPTIONS (Drop Down Menu) in Dropdown List */
|
357 |
+
/* ---------------------------------------------------------------------------------------------------------- */
|
358 |
+
/* Complex OPTION - this option include some INPUT elements --------------- */
|
359 |
+
.wpbc_ui_dropdown .ui_dropdown_menu li.ui_complex_option_element{
|
360 |
+
display: flex;
|
361 |
+
flex-flow: row wrap;
|
362 |
+
justify-content: flex-start;
|
363 |
+
align-items: center;
|
364 |
+
|
365 |
+
margin:0;
|
366 |
+
padding: 0 15px;
|
367 |
+
}
|
368 |
+
.wpbc_ui_dropdown ul.ui_dropdown_menu li.ui_complex_option_element .ui_element {
|
369 |
+
flex: 0 1 50%;
|
370 |
+
|
371 |
+
display: flex;
|
372 |
+
flex-flow: row nowrap;
|
373 |
+
justify-content: flex-start;
|
374 |
+
align-items: center;
|
375 |
+
|
376 |
+
margin:0;
|
377 |
+
padding: 4px 0;
|
378 |
+
}
|
379 |
+
.wpbc_ui_dropdown ul.ui_dropdown_menu li.ui_complex_option_element .ui_element > * {
|
380 |
+
flex: 0 1 auto;
|
381 |
+
|
382 |
+
margin:0;
|
383 |
+
height:auto;
|
384 |
+
max-width: 210px;
|
385 |
+
}
|
386 |
+
/* ---------------------------- General backdrop --------------------------- */
|
387 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu {
|
388 |
+
display: none;
|
389 |
+
|
390 |
+
position: absolute;
|
391 |
+
top: 100%;
|
392 |
+
left: 0;
|
393 |
+
z-index: 1000;
|
394 |
+
float: left;
|
395 |
+
|
396 |
+
min-width: 160px;
|
397 |
+
padding: 5px 0;
|
398 |
+
margin: 0;
|
399 |
+
|
400 |
+
list-style: none;
|
401 |
+
|
402 |
+
text-align: left;
|
403 |
+
|
404 |
+
background-color: #ffffff;
|
405 |
+
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
|
406 |
+
|
407 |
+
border: 1px solid #cccccc;
|
408 |
+
border: 1px solid rgba(0, 0, 0, 0.15);
|
409 |
+
|
410 |
+
border-radius: 0 0 3px 3px;
|
411 |
+
background-clip: padding-box;
|
412 |
+
}
|
413 |
+
.ui_element .wpbc_ui_dropdown ul.ui_dropdown_menu *{
|
414 |
+
font-size: 13px;
|
415 |
+
}
|
416 |
+
@media screen and (max-width: 782px) {
|
417 |
+
.ui_element .wpbc_ui_dropdown ul.ui_dropdown_menu *{
|
418 |
+
font-size: 14px;
|
419 |
+
}
|
420 |
+
}
|
421 |
+
/* ---------------------------- Open --------------------------------------- */
|
422 |
+
.ui_element .wpbc_ui_dropdown.open > .ui_dropdown_menu {
|
423 |
+
display: block;
|
424 |
+
}
|
425 |
+
/* ---------------------------- Align: left | right ------------------------ */
|
426 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu.pull-right,
|
427 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu.ui_dropdown_menu_right {
|
428 |
+
left: auto;
|
429 |
+
right: 0;
|
430 |
+
}
|
431 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu.ui_dropdown_menu_left {
|
432 |
+
left: 0;
|
433 |
+
right: auto;
|
434 |
+
}
|
435 |
+
/* ---------------------------- Divider ------------------------------------ */
|
436 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu hr{
|
437 |
+
height: 1px;
|
438 |
+
margin: 5px 0;
|
439 |
+
overflow: hidden;
|
440 |
+
background: none;
|
441 |
+
border: 0;
|
442 |
+
border-top: 1px solid #eeeeee;
|
443 |
+
}
|
444 |
+
/* ---------------------------- Header ------------------------------------- */
|
445 |
+
.wpbc_ui_dropdown .ui_dropdown_menu li.dropdown-header {
|
446 |
+
padding:0 15px;
|
447 |
+
color: #999;
|
448 |
+
font-size: 0.8em;
|
449 |
+
font-style: italic;
|
450 |
+
font-weight: 600;
|
451 |
+
}
|
452 |
+
/* ---------------------------- LI ----------------------------------------- */
|
453 |
+
.wpbc_ui_dropdown .ui_dropdown_menu li {
|
454 |
+
padding:0;
|
455 |
+
margin:0;
|
456 |
+
}
|
457 |
+
/* ---------------------------- A ------------------------------------------ */
|
458 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu a {
|
459 |
+
clear: both;
|
460 |
+
display: block;
|
461 |
+
font-weight: 400;
|
462 |
+
padding: 5px 15px;
|
463 |
+
white-space: nowrap;
|
464 |
+
/*font-size: 13px;*/
|
465 |
+
line-height: 18px;
|
466 |
+
}
|
467 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu > li > a {
|
468 |
+
color: #333333;
|
469 |
+
text-decoration: none;
|
470 |
+
font-weight: 400;
|
471 |
+
padding:5px 15px;
|
472 |
+
white-space: nowrap;
|
473 |
+
|
474 |
+
display: block;
|
475 |
+
clear: both;
|
476 |
+
|
477 |
+
font-size: 1em;
|
478 |
+
line-height: 1.42857143;
|
479 |
+
}
|
480 |
+
/* ---------------------------- A :hover :focus .active -------------------- */
|
481 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu > li > a:hover,
|
482 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu > li > a:focus,
|
483 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .active > a,
|
484 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .active > a:hover,
|
485 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .active > a:focus {
|
486 |
+
color: #fff;
|
487 |
+
background: #08c;
|
488 |
+
text-decoration: none;
|
489 |
+
outline: none;
|
490 |
+
box-shadow: none;
|
491 |
+
}
|
492 |
+
/* ---------------------------- .disabled A ------------------------------ */
|
493 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .disabled > a,
|
494 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .disabled > a:hover,
|
495 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .disabled > a:focus {
|
496 |
+
color: #ccc;
|
497 |
+
}
|
498 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .disabled > a:hover,
|
499 |
+
.ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .disabled > a:focus {
|
500 |
+
text-decoration: none;
|
501 |
+
background-color: transparent;
|
502 |
+
background-image: none;
|
503 |
+
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
504 |
+
cursor: not-allowed;
|
505 |
+
}
|
506 |
+
|
507 |
+
.ui_element .wpbc_ui_dropdown .dropdown-backdrop {
|
508 |
+
position: fixed;
|
509 |
+
left: 0;
|
510 |
+
right: 0;
|
511 |
+
bottom: 0;
|
512 |
+
top: 0;
|
513 |
+
z-index: 990;
|
514 |
+
}
|
515 |
+
|
516 |
+
/**********************************************************************************************************************/
|
517 |
+
|
518 |
+
/* 5. Several elements in a ".ui_element" group -------------------------------------------------------------------- */
|
519 |
+
.ui_element .wpbc_ui_control {
|
520 |
+
border-radius: 0;
|
521 |
+
border-width:1px;
|
522 |
+
/*border-right-width:0;*/
|
523 |
+
border-right-width:1px;
|
524 |
+
margin-right:-1px!important;
|
525 |
+
}
|
526 |
+
.ui_element .wpbc_ui_control:first-child{
|
527 |
+
border-radius: 3px 0 0 3px;
|
528 |
+
}
|
529 |
+
.ui_element .wpbc_ui_control:last-child {
|
530 |
+
border-radius: 0 3px 3px 0;
|
531 |
+
border-width:1px;
|
532 |
+
}
|
533 |
+
.ui_element .wpbc_ui_control:first-child:last-child {
|
534 |
+
border-radius: 3px;
|
535 |
+
}
|
536 |
+
|
537 |
+
/**********************************************************************************************************************/
|
538 |
+
/** Toolbar */
|
539 |
+
/**********************************************************************************************************************/
|
540 |
+
|
541 |
+
.ui_nowrap {
|
542 |
+
flex-wrap:nowrap !important;
|
543 |
+
}
|
544 |
+
|
545 |
+
/* Toolbar --------------------------------------------------------------------------------------------------------- */
|
546 |
+
.wpbc_ajx_toolbar {
|
547 |
+
position:relative;
|
548 |
+
margin: 0 0 10px 50px;
|
549 |
+
}
|
550 |
+
.wpbc_ajx_toolbar * {
|
551 |
+
box-sizing: border-box;
|
552 |
+
}
|
553 |
+
/* Row of simple buttons somewhere in a page */
|
554 |
+
.wpbc_ajx_toolbar.wpbc_buttons_row {
|
555 |
+
position: initial;
|
556 |
+
margin:0;
|
557 |
+
float:left;
|
558 |
+
|
559 |
+
}
|
560 |
+
.wpbc_ajx_toolbar.wpbc_buttons_row .ui_container {
|
561 |
+
background: none;
|
562 |
+
border: none;
|
563 |
+
margin: 0;
|
564 |
+
padding: 0;
|
565 |
+
}
|
566 |
+
/* Container ------------------------------------------------------------------------------------------------------- */
|
567 |
+
.wpbc_ajx_toolbar .ui_container{
|
568 |
+
display: flex;
|
569 |
+
flex-flow: row wrap;
|
570 |
+
justify-content: flex-start;
|
571 |
+
align-items: stretch;
|
572 |
+
|
573 |
+
margin: 0;
|
574 |
+
|
575 |
+
box-shadow: none;
|
576 |
+
border: 1px solid #ccc;
|
577 |
+
border-top: none;
|
578 |
+
background: #f5f5f5;
|
579 |
+
|
580 |
+
font-size:14px;
|
581 |
+
padding: 6px 15px;
|
582 |
+
}
|
583 |
+
.wpbc_ajx_toolbar .ui_container:last-child{
|
584 |
+
border-radius: 0 0 2px 2px;
|
585 |
+
}
|
586 |
+
|
587 |
+
/* Groups in container --------------------------------------------------------------------------------------------- */
|
588 |
+
.wpbc_ajx_toolbar .ui_container .ui_group{
|
589 |
+
flex: 0 1 auto;
|
590 |
+
padding: 0;
|
591 |
+
|
592 |
+
display: flex;
|
593 |
+
flex-flow: row wrap;
|
594 |
+
justify-content: flex-start;
|
595 |
+
align-items: stretch;
|
596 |
+
border:none;
|
597 |
+
margin: 0 20px 0 0;
|
598 |
+
}
|
599 |
+
.wpbc_ajx_toolbar .ui_container .ui_group:last-child {
|
600 |
+
margin: 0;
|
601 |
+
}
|
602 |
+
|
603 |
+
/* Elements -------------------------------------------------------------------------------------------------------- */
|
604 |
+
.wpbc_ajx_toolbar .ui_container .ui_group .ui_element {
|
605 |
+
display: flex;
|
606 |
+
flex-flow: row wrap;
|
607 |
+
justify-content: flex-start;
|
608 |
+
align-items: stretch;
|
609 |
+
flex: 0 1 auto;
|
610 |
+
position: relative;
|
611 |
+
|
612 |
+
margin: 0px 15px 0px 0;
|
613 |
+
}
|
614 |
+
.wpbc_ajx_toolbar .ui_container .ui_group .ui_element:last-child {
|
615 |
+
margin-right: 0;
|
616 |
+
}
|
617 |
+
.wpbc_ajx_toolbar .ui_container .ui_group .ui_element > * {
|
618 |
+
margin: 5px 0;
|
619 |
+
}
|
620 |
+
|
621 |
+
.ui_elements_divider {
|
622 |
+
margin-left: 15px;
|
623 |
+
}
|
624 |
+
/**********************************************************************************************************************/
|
625 |
+
/** Customization */
|
626 |
+
/**********************************************************************************************************************/
|
627 |
+
|
628 |
+
.wpbc_ajx_toolbar .ui_container.ui_container_small *{
|
629 |
+
font-size:13px;
|
630 |
+
}
|
631 |
+
@media (max-width: 782px) {
|
632 |
+
.wpbc_ajx_toolbar .ui_container.ui_container_small *{
|
633 |
+
font-size:14px;
|
634 |
+
}
|
635 |
+
}
|
636 |
+
/* Elements Height ------------------------------------------------------------------------------------------------- */
|
637 |
+
.wpbc_ajx_toolbar .ui_container .ui_group .ui_element > * {
|
638 |
+
height: 38px;
|
639 |
+
}
|
640 |
+
.wpbc_ajx_toolbar .ui_container.ui_container_small .ui_group .ui_element > * {
|
641 |
+
height: 30px;
|
642 |
+
}
|
643 |
+
@media (max-width: 782px) {
|
644 |
+
.wpbc_ajx_toolbar.wpbc_buttons_row .ui_container .ui_group .ui_element > *,
|
645 |
+
#toolbar_booking_listing.wpbc_ajx_toolbar .ui_container .ui_group .ui_element > * {
|
646 |
+
height: 38px;
|
647 |
+
}
|
648 |
+
.wpbc_ajx_toolbar.wpbc_buttons_row .ui_container .ui_group .ui_element > .wpbc_ui_button,
|
649 |
+
#toolbar_booking_listing.wpbc_ajx_toolbar .ui_container .ui_group .ui_element > .wpbc_ui_button {
|
650 |
+
padding: 0 15px 2px;
|
651 |
+
padding-bottom: 1px;
|
652 |
+
display: flex;
|
653 |
+
flex-flow: row wrap;
|
654 |
+
justify-content: center;
|
655 |
+
align-items: center;
|
656 |
+
}
|
657 |
+
}
|
658 |
+
|
659 |
+
/* Keyword -------------------------------------------------------------------------------------------------------- */
|
660 |
+
.wpbc_ajx_toolbar .ui_container .ui_group.ui_group__dates_status {
|
661 |
+
margin-right:2.5em;
|
662 |
+
}
|
663 |
+
.wpbc_ajx_toolbar .ui_container .ui_group.ui_group__keyword {
|
664 |
+
flex: 1 1 auto;
|
665 |
+
}
|
666 |
+
.wpbc_ajx_toolbar .ui_container .ui_group.ui_group__keyword .ui_element{
|
667 |
+
flex: 1 1 auto;
|
668 |
+
}
|
669 |
+
.wpbc_ajx_toolbar .ui_container .ui_group.ui_group__keyword .ui_element .wpbc_search_field {
|
670 |
+
width: 100%;
|
671 |
+
}
|
672 |
+
|
673 |
+
/* 2nd row -------------------------------------------------------------------------------------------------------- */
|
674 |
+
.wpbc_ajx_toolbar .ui_container.ui_container_filter_row_2 {
|
675 |
+
padding: 4px 15px;
|
676 |
+
}
|
677 |
+
.wpbc_ajx_toolbar .ui_container.ui_container_filter_row_2 .ui_group.ui_group__statuses {
|
678 |
+
flex: 1 1 auto;
|
679 |
+
}
|
680 |
+
|
681 |
+
|
682 |
+
|
683 |
+
/**********************************************************************************************************************/
|
684 |
+
/** Booking resources - Chosen
|
685 |
+
/**********************************************************************************************************************/
|
686 |
+
|
687 |
+
/**
|
688 |
+
* Choozen Structure
|
689 |
+
|
690 |
+
<select multiple="MULTIPLE"...
|
691 |
+
|
692 |
+
div#wh_booking_type_chosen .chzn-container.chzn-container-multi .chzn-with-drop.chzn-container-active (if active)
|
693 |
+
ul.chzn-choices
|
694 |
+
li.search-choice
|
695 |
+
<span>
|
696 |
+
a.search-choice-close
|
697 |
+
|
698 |
+
li.search-field
|
699 |
+
input[type="text"].chzn-search-input .default (if no selected values)
|
700 |
+
|
701 |
+
div.chzn-drop
|
702 |
+
ul.chzn-results
|
703 |
+
li.result-selected || li.active-result .highlighted (if active)
|
704 |
+
*/
|
705 |
+
|
706 |
+
.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi {
|
707 |
+
flex: 1 1 auto;
|
708 |
+
|
709 |
+
display: flex;
|
710 |
+
flex-flow: column wrap;
|
711 |
+
justify-content: center;
|
712 |
+
align-items: center;
|
713 |
+
|
714 |
+
height: initial;
|
715 |
+
width: auto !important;
|
716 |
+
min-width: 10em;
|
717 |
+
|
718 |
+
margin-right: -1px;
|
719 |
+
}
|
720 |
+
@media (max-width: 782px) {
|
721 |
+
.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi {
|
722 |
+
height: initial !important;
|
723 |
+
}
|
724 |
+
}
|
725 |
+
.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices {
|
726 |
+
flex: 1 1 auto;
|
727 |
+
|
728 |
+
display: flex;
|
729 |
+
flex-flow: row wrap;
|
730 |
+
justify-content: flex-start;
|
731 |
+
align-items: center;
|
732 |
+
align-content: center;
|
733 |
+
|
734 |
+
margin: 0;
|
735 |
+
padding: 0 0 0 5px;
|
736 |
+
|
737 |
+
height: auto;
|
738 |
+
min-height: 28px !important;
|
739 |
+
|
740 |
+
border-radius: 3px 0 0 3px;
|
741 |
+
}
|
742 |
+
.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi.chzn-container-active ul.chzn-choices {
|
743 |
+
border-color: #d8d8d8 !important;
|
744 |
+
box-shadow: 0 0 0 0px #4f94d4, 0 0 1px 1px rgba(79, 148, 212, 0.8) !important;
|
745 |
+
z-index: 1;
|
746 |
+
outline: 2px solid transparent;
|
747 |
+
}
|
748 |
+
|
749 |
+
.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice{
|
750 |
+
flex: 0 1 auto;
|
751 |
+
|
752 |
+
display: flex;
|
753 |
+
flex-flow: row nowrap;
|
754 |
+
justify-content: flex-start;
|
755 |
+
align-items: baseline;
|
756 |
+
|
757 |
+
margin: 3px 0.5em 3px 0;
|
758 |
+
padding: 3px 5px 3px 8px;
|
759 |
+
}
|
760 |
+
.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice span {
|
761 |
+
word-wrap: break-word;
|
762 |
+
}
|
763 |
+
.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice a.search-choice-close{
|
764 |
+
font-family: "Glyphicons Halflings";
|
765 |
+
font-style: normal;
|
766 |
+
font-weight: 400;
|
767 |
+
font-size: 9px;
|
768 |
+
|
769 |
+
color: #555;
|
770 |
+
text-decoration: none;
|
771 |
+
|
772 |
+
position: relative;
|
773 |
+
top: auto;
|
774 |
+
left: auto;
|
775 |
+
right: auto;
|
776 |
+
bottom: auto;
|
777 |
+
|
778 |
+
margin: 0 0 0 1em;
|
779 |
+
|
780 |
+
display: flex;
|
781 |
+
flex-flow: column wrap;
|
782 |
+
justify-content: center;
|
783 |
+
align-content: center;
|
784 |
+
|
785 |
+
width: auto;
|
786 |
+
height: auto;
|
787 |
+
}
|
788 |
+
.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice a.search-choice-close:before {
|
789 |
+
content: "\e014";
|
790 |
+
}
|
791 |
+
.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice a.search-choice-close:hover {
|
792 |
+
text-decoration: none;
|
793 |
+
}
|
794 |
+
|
795 |
+
|
796 |
+
.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-field{
|
797 |
+
flex: 0 1 1px;
|
798 |
+
|
799 |
+
display: flex;
|
800 |
+
flex-flow: row wrap;
|
801 |
+
justify-content: flex-start;
|
802 |
+
align-items: center;
|
803 |
+
|
804 |
+
margin: 0px 0 0px 0;
|
805 |
+
padding: 0;
|
806 |
+
|
807 |
+
white-space: nowrap;
|
808 |
+
}
|
809 |
+
.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-field input[type="text"].default {
|
810 |
+
min-width: 12em;
|
811 |
+
}
|
812 |
+
.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-field input[type="text"] {
|
813 |
+
font-family: inherit;
|
814 |
+
}
|
815 |
+
|
816 |
+
.ui_container .ui_group .ui_element .chzn-container div.chzn-drop ul.chzn-results li.highlighted {
|
817 |
+
color: #fff;
|
818 |
+
background: #08c;
|
819 |
+
text-decoration: none;
|
820 |
+
outline: none;
|
821 |
+
box-shadow: none;
|
822 |
+
}
|
823 |
+
|
824 |
+
/*
|
825 |
+
#wh_booking_type_chosen {
|
826 |
+
width: auto !important;
|
827 |
+
display: flex;
|
828 |
+
flex-flow: row wrap;
|
829 |
+
justify-content: center;
|
830 |
+
align-items: stretch;
|
831 |
+
flex: 1 1 auto;
|
832 |
+
height: initial;
|
833 |
+
min-width: 10em;
|
834 |
+
}
|
835 |
+
|
836 |
+
#wh_booking_type_chosen .chzn-choices {
|
837 |
+
display: flex;
|
838 |
+
flex-flow: row wrap;
|
839 |
+
justify-content: stretch;
|
840 |
+
align-items: center;
|
841 |
+
margin: 0px 0px;
|
842 |
+
padding: 0 5px;
|
843 |
+
min-height: auto !important;
|
844 |
+
flex: 1 1 auto;
|
845 |
+
border-radius: 3px 0 0 3px;
|
846 |
+
}
|
847 |
+
|
848 |
+
.chzn-container-multi .chzn-choices .search-choice a.search-choice-close {
|
849 |
+
background: none;
|
850 |
+
display: inline-block;
|
851 |
+
font-family: "Glyphicons Halflings";
|
852 |
+
font-style: normal;
|
853 |
+
font-weight: 400;
|
854 |
+
font-size: 9px;
|
855 |
+
line-height: 1;
|
856 |
+
position: relative;
|
857 |
+
top: 0px;
|
858 |
+
left: 15px;
|
859 |
+
color: #555;
|
860 |
+
text-decoration: none;
|
861 |
+
}
|
862 |
+
.chzn-container-multi .chzn-choices .search-choice a.search-choice-close:hover {
|
863 |
+
text-decoration: none;
|
864 |
+
}
|
865 |
+
.chzn-container-multi .chzn-choices .search-choice a.search-choice-close:before {
|
866 |
+
content: "\e014";
|
867 |
+
}
|
868 |
+
|
869 |
+
#wh_booking_type_chosen .chzn-search-input.default {
|
870 |
+
min-width: 12em;
|
871 |
+
}
|
872 |
+
#wh_booking_type_chosen.chzn-container.chzn-container-multi.chzn-container-active .chzn-choices {
|
873 |
+
|
874 |
+
border-color: #d8d8d8 !important;
|
875 |
+
box-shadow: 0 0 0 0px #4f94d4, 0 0 1px 1px rgba(79, 148, 212, 0.8) !important;
|
876 |
+
z-index: 1;
|
877 |
+
outline: 2px solid transparent;
|
878 |
+
}
|
879 |
+
.chzn-container-multi .chzn-choices li.search-field input[type="text"] {
|
880 |
+
font-family: inherit;
|
881 |
+
}
|
882 |
+
.chzn-container .chzn-results li.highlighted {
|
883 |
+
color: #fff;
|
884 |
+
background: #08c;
|
885 |
+
text-decoration: none;
|
886 |
+
outline: none;
|
887 |
+
box-shadow: none;
|
888 |
+
}
|
889 |
+
/**/
|
includes/_toolbar_ui/_src/toolbar_ui.js
ADDED
@@ -0,0 +1,114 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
"use strict";
|
2 |
+
|
3 |
+
|
4 |
+
/**
|
5 |
+
* Encode HTML text to safe HTML entities
|
6 |
+
*
|
7 |
+
* Replace all characters in the given range (unicode 00A0 - 9999, as well as ampersand, greater & less than)
|
8 |
+
* with their html entity equivalents, which is simply &#nnn; where nnn is the unicode value we get from charCodeAt
|
9 |
+
*
|
10 |
+
* @param rawStr
|
11 |
+
* @returns {*}
|
12 |
+
*/
|
13 |
+
function wpbc_get_safe_html_text( rawStr ){
|
14 |
+
|
15 |
+
var encodedStr = rawStr.replace( /[\u00A0-\u9999<>\&]/g, function ( i ){
|
16 |
+
return '&#' + i.charCodeAt( 0 ) + ';';
|
17 |
+
} );
|
18 |
+
|
19 |
+
return encodedStr;
|
20 |
+
}
|
21 |
+
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Change Value and Title of dropdown after clicking on Apply button
|
25 |
+
*
|
26 |
+
* @param params Example: { 'dropdown_id': 'wh_booking_date', 'dropdown_radio_name': 'ui_wh_booking_date_radio' }
|
27 |
+
*/
|
28 |
+
function wpbc_ui_dropdown_apply_click( params ){
|
29 |
+
|
30 |
+
// Get input values of all elements in LI section, where RADIO was selected
|
31 |
+
var filter_ui_dates_arr = jQuery( 'input[name="' + params[ 'dropdown_radio_name' ] + '"]:checked' )
|
32 |
+
.parents( 'li' ).find( ':input' )
|
33 |
+
.map( function (){
|
34 |
+
return wpbc_get_safe_html_text( jQuery( this ).val() );
|
35 |
+
} ).get();
|
36 |
+
|
37 |
+
if ( 0 !== filter_ui_dates_arr.length ){ // Continue only if radio button was selected, and we are having value
|
38 |
+
|
39 |
+
// Get titles of all elements in LI section, where RADIO was selected
|
40 |
+
var filter_ui_titles_arr = jQuery( 'input[name="' + params[ 'dropdown_radio_name' ] + '"]:checked' )
|
41 |
+
.parents( 'li' ).find( ':input' )
|
42 |
+
.map( function (){
|
43 |
+
if ( 'text' == jQuery( this ).prop( 'type' ) ){
|
44 |
+
return jQuery( this ).val();
|
45 |
+
}
|
46 |
+
if ( 'select-one' == jQuery( this ).prop( 'type' ) ){
|
47 |
+
return jQuery( this ).find( ':selected' ).text();
|
48 |
+
}
|
49 |
+
if (
|
50 |
+
( 'radio' == jQuery( this ).prop( 'type' ) )
|
51 |
+
|| ( 'checkbox' == jQuery( this ).prop( 'type' ) )
|
52 |
+
){
|
53 |
+
var input_selected = jQuery( this ).filter(':checked').next( '.wpbc_ui_control_label' ).html();
|
54 |
+
if ( undefined == input_selected ) {
|
55 |
+
input_selected = jQuery( this ).filter(':checked').prev( '.wpbc_ui_control_label' ).html();
|
56 |
+
}
|
57 |
+
return ( undefined !== input_selected ) ? input_selected : '';
|
58 |
+
}
|
59 |
+
|
60 |
+
return jQuery( this ).val();
|
61 |
+
} ).get();
|
62 |
+
|
63 |
+
// Update Value to dropdown input hidden elements. Such value stringify.
|
64 |
+
jQuery( '#' + params[ 'dropdown_id' ] ).val( JSON.stringify( filter_ui_dates_arr ) );
|
65 |
+
|
66 |
+
// Generate change action, for ability to send Ajax request
|
67 |
+
jQuery( '#' + params[ 'dropdown_id' ] ).trigger( 'change' );
|
68 |
+
|
69 |
+
// Get Label of selected Radio button
|
70 |
+
var filter_ui_dates_title = jQuery( 'input[name="' + params[ 'dropdown_radio_name' ] + '"]:checked' ).next( '.wpbc_ui_control_label' ).html() + ': ';
|
71 |
+
|
72 |
+
// Remove selected value of radio button from beginning, we will use Label title instead
|
73 |
+
filter_ui_titles_arr.shift();
|
74 |
+
|
75 |
+
// Update Title in dropdown
|
76 |
+
var encoded_html_text = wpbc_get_safe_html_text( filter_ui_dates_title + filter_ui_titles_arr.join( ' - ' ) );
|
77 |
+
jQuery( '#' + params[ 'dropdown_id' ] + '_selector .wpbc_selected_in_dropdown' ).html( encoded_html_text );
|
78 |
+
}
|
79 |
+
|
80 |
+
jQuery( '#' + params[ 'dropdown_id' ] + '_container' ).hide();
|
81 |
+
}
|
82 |
+
|
83 |
+
|
84 |
+
/**
|
85 |
+
* Close dropdown after clicking on Close button
|
86 |
+
*
|
87 |
+
* @param dropdown_id ID of dropdown
|
88 |
+
*/
|
89 |
+
function wpbc_ui_dropdown_close_click( dropdown_id ){
|
90 |
+
|
91 |
+
jQuery( '#' + dropdown_id + '_container' ).hide();
|
92 |
+
}
|
93 |
+
|
94 |
+
|
95 |
+
/**
|
96 |
+
* Simple option click on dropdown
|
97 |
+
*
|
98 |
+
* @param params Example: { 'dropdown_id': 'wh_booking_date', 'is_this_simple_list': true, 'value': '5', '_this': this }
|
99 |
+
*/
|
100 |
+
function wpbc_ui_dropdown_simple_click( params ){
|
101 |
+
|
102 |
+
jQuery( '#' + params[ 'dropdown_id' ] + '_selector .wpbc_selected_in_dropdown' ).html( jQuery( params[ '_this' ] ).html() );
|
103 |
+
|
104 |
+
jQuery( '#' + params[ 'dropdown_id' ] ).val( JSON.stringify( [params[ 'value' ]] ) );
|
105 |
+
|
106 |
+
jQuery( '#' + params[ 'dropdown_id' ] + '_container li input[type=checkbox],'
|
107 |
+
+ '#' + params[ 'dropdown_id' ] + '_container li input[type=radio]' ).prop( 'checked', false );
|
108 |
+
|
109 |
+
jQuery( '#' + params[ 'dropdown_id' ] ).trigger( 'change' );
|
110 |
+
|
111 |
+
if ( ! params[ 'is_this_simple_list' ] ){
|
112 |
+
jQuery( '#' + params[ 'dropdown_id' ] + '_container' ).hide();
|
113 |
+
}
|
114 |
+
}
|
includes/_toolbar_ui/toolbar_ui.php
ADDED
@@ -0,0 +1,3652 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php /**
|
2 |
+
* @version 1.1
|
3 |
+
* @package Any
|
4 |
+
* @category Toolbar. UI Elements for Admin Panel
|
5 |
+
* @author wpdevelop
|
6 |
+
*
|
7 |
+
* @web-site http://oplugins.com/
|
8 |
+
* @email info@oplugins.com
|
9 |
+
*
|
10 |
+
* @modified 2022-05-07
|
11 |
+
*/
|
12 |
+
|
13 |
+
if ( ! defined( 'ABSPATH' ) ) exit; // Exit, if accessed directly
|
14 |
+
|
15 |
+
////////////////////////////////////////////////////////////////////////////////
|
16 |
+
// T o o l b a r s
|
17 |
+
////////////////////////////////////////////////////////////////////////////////
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Show top toolbar on Booking Listing page
|
21 |
+
*
|
22 |
+
* @param $escaped_search_request_params - escaped search request parameters array
|
23 |
+
*/
|
24 |
+
function wpbc_ajx_bookings_toolbar( $escaped_search_request_params ) {
|
25 |
+
|
26 |
+
wpbc_clear_div();
|
27 |
+
|
28 |
+
//wpbc_toolbar_search_by_id_bookings(); // Search bookings by ID - form at the top right side of the page
|
29 |
+
|
30 |
+
wpbc_toolbar_btn__view_mode(); // Vertical Buttons
|
31 |
+
|
32 |
+
// Toolbar ////////////////////////////////////////////////////////////////
|
33 |
+
|
34 |
+
$default_param_values = wpbc_ajx_get__request_params__names_default( 'default' );
|
35 |
+
|
36 |
+
$selected_tab = ( isset( $escaped_search_request_params['ui_usr__default_selected_toolbar'] ) )
|
37 |
+
? $escaped_search_request_params['ui_usr__default_selected_toolbar']
|
38 |
+
: $default_param_values['ui_usr__default_selected_toolbar'];
|
39 |
+
|
40 |
+
?><div id="toolbar_booking_listing" class="wpbc_ajx_toolbar"><?php
|
41 |
+
|
42 |
+
// <editor-fold defaultstate="collapsed" desc=" T O P T A B s " >
|
43 |
+
|
44 |
+
wpbc_bs_toolbar_tabs_html_container_start();
|
45 |
+
|
46 |
+
wpbc_bs_display_tab( array(
|
47 |
+
'title' => ' ' . __('Filters', 'booking')
|
48 |
+
, 'hint' => array( 'title' => __('Filter bookings' ,'booking') , 'position' => 'top' )
|
49 |
+
, 'onclick' => "jQuery('.ui_container_toolbar').hide();"
|
50 |
+
. "jQuery('.ui_container_filters').show();"
|
51 |
+
. "jQuery('.nav-tab').removeClass('nav-tab-active');"
|
52 |
+
. "jQuery(this).addClass('nav-tab-active');"
|
53 |
+
. "jQuery('.nav-tab i.icon-white').removeClass('icon-white');"
|
54 |
+
. "jQuery('.nav-tab-active i').addClass('icon-white');"
|
55 |
+
/**
|
56 |
+
* It will save such changes, and if we have selected bookings, then deselect them
|
57 |
+
*/
|
58 |
+
// . "wpbc_ajx_booking_send_search_request_with_params( { 'ui_usr__default_selected_toolbar': 'filters' });"
|
59 |
+
/**
|
60 |
+
* It will save changes with NEXT search request, but not immediately
|
61 |
+
* it is handy, in case if we have selected bookings,
|
62 |
+
* we will not lose selection.
|
63 |
+
*/
|
64 |
+
. "wpbc_ajx_booking_listing.search_set_param( 'ui_usr__default_selected_toolbar', 'filters' );"
|
65 |
+
, 'font_icon' => 'wpbc_icn_published_with_changes' //FixIn: 9.0.1.4 'glyphicon glyphicon-random'
|
66 |
+
, 'default' => ( $selected_tab == 'filters' ) ? true : false
|
67 |
+
) );
|
68 |
+
wpbc_bs_display_tab( array(
|
69 |
+
'title' => __('Actions', 'booking')
|
70 |
+
, 'hint' => array( 'title' => __('Manage bookings' ,'booking') , 'position' => 'top' )
|
71 |
+
, 'onclick' => "jQuery('.ui_container_toolbar').hide();"
|
72 |
+
. "jQuery('.ui_container_actions').show();"
|
73 |
+
. "jQuery('.nav-tab').removeClass('nav-tab-active');"
|
74 |
+
. "jQuery(this).addClass('nav-tab-active');"
|
75 |
+
. "jQuery('.nav-tab i.icon-white').removeClass('icon-white');"
|
76 |
+
. "jQuery('.nav-tab-active i').addClass('icon-white');"
|
77 |
+
/**
|
78 |
+
* It will save such changes, and if we have selected bookings, then deselect them
|
79 |
+
*/
|
80 |
+
// . "wpbc_ajx_booking_send_search_request_with_params( { 'ui_usr__default_selected_toolbar': 'actions' });"
|
81 |
+
/**
|
82 |
+
* It will save changes with NEXT search request, but not immediately
|
83 |
+
* it is handy, in case if we have selected bookings,
|
84 |
+
* we will not lose selection.
|
85 |
+
*/
|
86 |
+
. "wpbc_ajx_booking_listing.search_set_param( 'ui_usr__default_selected_toolbar', 'actions' );"
|
87 |
+
, 'font_icon' => 'wpbc_icn_adjust' //FixIn: 9.0.1.4 'glyphicon glyphicon-fire'
|
88 |
+
, 'default' => ( $selected_tab == 'actions' ) ? true : false
|
89 |
+
|
90 |
+
) );
|
91 |
+
|
92 |
+
wpbc_bs_display_tab( array(
|
93 |
+
'title' => ''//__('Options', 'booking')
|
94 |
+
, 'hint' => array( 'title' => __('User Options' ,'booking') , 'position' => 'top' )
|
95 |
+
, 'onclick' => "jQuery('.ui_container_toolbar').hide();"
|
96 |
+
. "jQuery('.ui_container_options').show();"
|
97 |
+
. "jQuery('.nav-tab').removeClass('nav-tab-active');"
|
98 |
+
. "jQuery(this).addClass('nav-tab-active');"
|
99 |
+
. "jQuery('.nav-tab i.icon-white').removeClass('icon-white');"
|
100 |
+
. "jQuery('.nav-tab-active i').addClass('icon-white');"
|
101 |
+
/**
|
102 |
+
* It will save such changes, and if we have selected bookings, then deselect them
|
103 |
+
*/
|
104 |
+
// . "wpbc_ajx_booking_send_search_request_with_params( { 'ui_usr__default_selected_toolbar': 'options' });"
|
105 |
+
/**
|
106 |
+
* It will save changes with NEXT search request, but not immediately
|
107 |
+
* it is handy, in case if we have selected bookings,
|
108 |
+
* we will not lose selection.
|
109 |
+
*/
|
110 |
+
. "wpbc_ajx_booking_listing.search_set_param( 'ui_usr__default_selected_toolbar', 'options' );"
|
111 |
+
, 'font_icon' => 'wpbc_icn_tune' //FixIn: 9.0.1.4 'glyphicon glyphicon-fire'
|
112 |
+
, 'default' => ( $selected_tab == 'options' ) ? true : false
|
113 |
+
//, 'position' => 'right'
|
114 |
+
|
115 |
+
) );
|
116 |
+
|
117 |
+
wpbc_bs_dropdown_menu_help();
|
118 |
+
|
119 |
+
wpbc_bs_toolbar_tabs_html_container_end();
|
120 |
+
|
121 |
+
// </editor-fold>
|
122 |
+
|
123 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
124 |
+
// Filters
|
125 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
126 |
+
?><div><?php //Required for bottom border radius in container
|
127 |
+
|
128 |
+
?><div class="ui_container ui_container_toolbar ui_container_filters ui_container_filter_row_1" style="<?php echo ( $selected_tab == 'filters' ) ? 'display: flex' : 'display: none' ?>;"><?php
|
129 |
+
|
130 |
+
?><div class="ui_group ui_group__dates_status ui_search_fields_group_1"><?php // array( 'class' => 'group_nowrap' ) // Elements at Several or One Line
|
131 |
+
|
132 |
+
wpbc_ajx__ui__booked_dates( $escaped_search_request_params, $default_param_values );
|
133 |
+
|
134 |
+
wpbc_ajx__ui__booking_status( $escaped_search_request_params, $default_param_values );
|
135 |
+
|
136 |
+
?></div><?php
|
137 |
+
|
138 |
+
?><div class="ui_group ui_group__keyword ui_search_fields_group_2"><?php // array( 'class' => 'group_nowrap' ) // Elements at Several or One Line
|
139 |
+
|
140 |
+
wpbc_ajx_toolbar_keyword_search( $escaped_search_request_params, $default_param_values );
|
141 |
+
|
142 |
+
wpbc_ajx_toolbar_reset_button( $escaped_search_request_params, $default_param_values );
|
143 |
+
|
144 |
+
?></div><?php
|
145 |
+
|
146 |
+
?></div><?php
|
147 |
+
|
148 |
+
|
149 |
+
?><div class="ui_container ui_container_toolbar ui_container_small ui_container_filters ui_container_filter_row_2" style="<?php echo ( $selected_tab == 'filters' ) ? 'display: flex' : 'display: none' ?>;"><?php
|
150 |
+
|
151 |
+
?><div class="ui_group ui_group__statuses ui_search_fields_group_1"><?php // array( 'class' => 'group_nowrap' ) // Elements at Several or One Line
|
152 |
+
|
153 |
+
wpbc_ajx__ui__booking_resources( $escaped_search_request_params, $default_param_values );
|
154 |
+
|
155 |
+
wpbc_ajx__ui__existing_or_trash( $escaped_search_request_params, $default_param_values );
|
156 |
+
|
157 |
+
wpbc_ajx__ui__all_or_new( $escaped_search_request_params, $default_param_values );
|
158 |
+
|
159 |
+
wpbc_ajx__ui__creation_date( $escaped_search_request_params, $default_param_values );
|
160 |
+
|
161 |
+
wpbc_ajx__ui__payment_status( $escaped_search_request_params, $default_param_values );
|
162 |
+
|
163 |
+
wpbc_ajx__ui__cost_min_max( $escaped_search_request_params, $default_param_values );
|
164 |
+
|
165 |
+
wpbc_ajx_toolbar_force_reload_button( $escaped_search_request_params, $default_param_values );
|
166 |
+
|
167 |
+
?></div><?php
|
168 |
+
|
169 |
+
?></div><?php
|
170 |
+
|
171 |
+
?></div><?php //Required for bottom border radius in container
|
172 |
+
|
173 |
+
|
174 |
+
// <editor-fold defaultstate="collapsed" desc=" A c t i o n s t o o l b a r " >
|
175 |
+
|
176 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
177 |
+
// Actions
|
178 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
179 |
+
|
180 |
+
?><div class="ui_container ui_container_toolbar ui_container_small ui_container_actions ui_container_actions_row_1" style="<?php echo ( $selected_tab == 'actions' ) ? 'display: flex' : 'display: none' ?>;"><?php
|
181 |
+
|
182 |
+
?><div class="ui_group"><?php
|
183 |
+
|
184 |
+
// Approve // Pending
|
185 |
+
?><div class="ui_element hide_button_if_no_selection"><?php
|
186 |
+
wpbc_ajx__ui__action_button__approve( $escaped_search_request_params );
|
187 |
+
wpbc_ajx__ui__action_button__pending( $escaped_search_request_params );
|
188 |
+
?></div><?php
|
189 |
+
|
190 |
+
// Trash / Reject // Restore // Delete
|
191 |
+
?><div class="ui_element hide_button_if_no_selection"><?php
|
192 |
+
wpbc_ajx__ui__action_button__trash( $escaped_search_request_params );
|
193 |
+
wpbc_ajx__ui__action_button__restore( $escaped_search_request_params );
|
194 |
+
wpbc_ajx__ui__action_button__delete( $escaped_search_request_params );
|
195 |
+
wpbc_ajx__ui__action_text__delete_reason( $escaped_search_request_params );
|
196 |
+
?></div><?php
|
197 |
+
|
198 |
+
// Empty Trash
|
199 |
+
?><div class="ui_element"><?php
|
200 |
+
wpbc_ajx__ui__action_button__empty_trash( $escaped_search_request_params );
|
201 |
+
?></div><?php
|
202 |
+
|
203 |
+
// Read All // Read // Unread
|
204 |
+
?><div class="ui_element"><?php
|
205 |
+
wpbc_ajx__ui__action_button__readall( $escaped_search_request_params );
|
206 |
+
wpbc_ajx__ui__action_button__read( $escaped_search_request_params );
|
207 |
+
wpbc_ajx__ui__action_button__unread( $escaped_search_request_params );
|
208 |
+
?></div><?php
|
209 |
+
|
210 |
+
// Print
|
211 |
+
?><div class="ui_element"><?php
|
212 |
+
wpbc_ajx__ui__action_button__print( $escaped_search_request_params );
|
213 |
+
?></div><?php
|
214 |
+
|
215 |
+
// Import
|
216 |
+
?><div class="ui_element"><?php
|
217 |
+
wpbc_ajx__ui__action_button__import( $escaped_search_request_params );
|
218 |
+
?></div><?php
|
219 |
+
|
220 |
+
// Export page to CSV // Export all pages to CSV
|
221 |
+
?><div class="ui_element"><?php
|
222 |
+
wpbc_ajx__ui__action_button__export_csv( $escaped_search_request_params );
|
223 |
+
// wpbc_ajx__ui__action_button__export_csv_page( $escaped_search_request_params );
|
224 |
+
// wpbc_ajx__ui__action_button__export_csv_all( $escaped_search_request_params );
|
225 |
+
?></div><?php
|
226 |
+
|
227 |
+
?></div><?php
|
228 |
+
|
229 |
+
?></div><?php
|
230 |
+
// </editor-fold>
|
231 |
+
|
232 |
+
|
233 |
+
// <editor-fold defaultstate="collapsed" desc=" O p t i o n s t o o l b a r " >
|
234 |
+
|
235 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
236 |
+
// Options
|
237 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
238 |
+
|
239 |
+
?><div class="ui_container ui_container_toolbar ui_container_small ui_container_options ui_container_options_row_1" style="<?php echo ( $selected_tab == 'options' ) ? 'display: flex' : 'display: none' ?>;"><?php
|
240 |
+
|
241 |
+
?><div class="ui_group"><?php
|
242 |
+
|
243 |
+
|
244 |
+
// Is send Emails
|
245 |
+
?><div class="ui_element"><?php
|
246 |
+
wpbc_ajx__ui__options_checkbox__send_emails( $escaped_search_request_params, $default_param_values );
|
247 |
+
?></div><?php
|
248 |
+
|
249 |
+
if ( class_exists( 'wpdev_bk_personal' ) ) {
|
250 |
+
// Is Expand Notes
|
251 |
+
?><div class="ui_element"><?php
|
252 |
+
|
253 |
+
wpbc_ajx__ui__options_checkbox__is_expand_remarks( $escaped_search_request_params, $default_param_values );
|
254 |
+
|
255 |
+
?></div><?php
|
256 |
+
}
|
257 |
+
|
258 |
+
?></div><?php
|
259 |
+
|
260 |
+
?></div><?php
|
261 |
+
// </editor-fold>
|
262 |
+
|
263 |
+
?></div><?php
|
264 |
+
}
|
265 |
+
|
266 |
+
/**
|
267 |
+
* Sorting
|
268 |
+
*
|
269 |
+
* @param $escaped_search_request_params - escaped search request parameters array
|
270 |
+
* @param $defaults - default parameters values
|
271 |
+
*/
|
272 |
+
function wpbc_ajx__ui__booking_sorting( $escaped_search_request_params, $defaults ){
|
273 |
+
|
274 |
+
$params_addon = array(
|
275 |
+
'type' => 'span'
|
276 |
+
, 'html' => ''// '<i class="menu_icon icon-1x wpbc_icn_event"></i>' //'<strong>' . __( 'Dates', 'booking ' ) . '</strong>'
|
277 |
+
, 'icon' => array( 'icon_font' => 'wpbc_icn_swap_vert', 'position' => 'right', 'icon_img' => '' )
|
278 |
+
, 'class' => 'wpbc_ui_button inactive'
|
279 |
+
, 'style' => ''
|
280 |
+
, 'attr' => array()
|
281 |
+
);
|
282 |
+
|
283 |
+
$select_options = array (
|
284 |
+
'booking_id__asc' => __( 'ID', 'booking' ) . ' <i class="menu_icon icon-1x wpbc-bi-arrow-up-short"></i>',
|
285 |
+
'booking_id__desc' => __( 'ID', 'booking' ) . ' <i class="menu_icon icon-1x wpbc-bi-arrow-down-short"></i>',
|
286 |
+
'divider1' => array( 'type' => 'html', 'html' => '<hr/>' ),
|
287 |
+
'dates__asc' => __( 'Dates', 'booking' ) . ' <i class="menu_icon icon-1x wpbc-bi-arrow-up-short"></i>',
|
288 |
+
'dates__desc' => __( 'Dates', 'booking' ) . ' <i class="menu_icon icon-1x wpbc-bi-arrow-down-short"></i>',
|
289 |
+
);
|
290 |
+
if ( class_exists( 'wpdev_bk_personal' ) ) {
|
291 |
+
$select_options['divider2'] = array( 'type' => 'html', 'html' => '<hr/>' );
|
292 |
+
$select_options['resource__asc'] = __( 'Resource', 'booking' ) . ' <i class="menu_icon icon-1x wpbc-bi-arrow-up-short"></i>';
|
293 |
+
$select_options['resource__desc'] = __( 'Resource', 'booking' ) . ' <i class="menu_icon icon-1x wpbc-bi-arrow-down-short"></i>';
|
294 |
+
|
295 |
+
}
|
296 |
+
if ( class_exists( 'wpdev_bk_biz_s' ) ) {
|
297 |
+
$select_options['divider3'] = array( 'type' => 'html', 'html' => '<hr/>' );
|
298 |
+
$select_options['cost__asc'] = __( 'Cost', 'booking' ) . ' <i class="menu_icon icon-1x wpbc-bi-arrow-up-short"></i>';
|
299 |
+
$select_options['cost__desc'] = __( 'Cost', 'booking' ) . ' <i class="menu_icon icon-1x wpbc-bi-arrow-down-short"></i>';
|
300 |
+
}
|
301 |
+
|
302 |
+
$params = array(
|
303 |
+
'id' => 'wh_sort'
|
304 |
+
, 'default' => isset( $escaped_search_request_params['wh_sort'] ) ? $escaped_search_request_params['wh_sort'] : $defaults['wh_sort']
|
305 |
+
, 'label' => ''//__('Sort by', 'booking') . ':'
|
306 |
+
, 'title' => __('Sort by', 'booking')
|
307 |
+
, 'hint' => array( 'title' => __('Sort bookings by' ,'booking') , 'position' => 'top' )
|
308 |
+
, 'li_options' => $select_options
|
309 |
+
);
|
310 |
+
|
311 |
+
?><div class="wpbc_ajx_toolbar wpbc_buttons_row">
|
312 |
+
<div class="ui_container ui_container_small">
|
313 |
+
<div class="ui_group">
|
314 |
+
<div class="ui_element"><?php
|
315 |
+
|
316 |
+
//wpbc_flex_addon( $params_addon );
|
317 |
+
|
318 |
+
wpbc_flex_dropdown( $params );
|
319 |
+
|
320 |
+
?></div></div></div></div><?php
|
321 |
+
}
|
322 |
+
|
323 |
+
|
324 |
+
|
325 |
+
// <editor-fold defaultstate="collapsed" desc=" T o o l b a r F i l t e r B u t t o n s " >
|
326 |
+
|
327 |
+
////////////////////////////////////////////////////////////////////////////////
|
328 |
+
/// 1st row
|
329 |
+
////////////////////////////////////////////////////////////////////////////////
|
330 |
+
|
331 |
+
/**
|
332 |
+
* Booked dates
|
333 |
+
*
|
334 |
+
* @param $escaped_search_request_params - escaped search request parameters array
|
335 |
+
* @param $defaults - default parameters values
|
336 |
+
*/
|
337 |
+
function wpbc_ajx__ui__booked_dates( $escaped_search_request_params, $defaults ){
|
338 |
+
|
339 |
+
$params_addon = array(
|
340 |
+
'type' => 'span'
|
341 |
+
, 'html' => ''// '<i class="menu_icon icon-1x wpbc_icn_event"></i>' //'<strong>' . __( 'Dates', 'booking ' ) . '</strong>'
|
342 |
+
, 'icon' => array( 'icon_font' => 'wpbc_icn_event', 'position' => 'right', 'icon_img' => '' )
|
343 |
+
, 'class' => 'wpbc_ui_button inactive'
|
344 |
+
, 'style' => ''
|
345 |
+
, 'hint' => array( 'title' => __('Filter bookings by booking dates' ,'booking') , 'position' => 'top' )
|
346 |
+
, 'attr' => array()
|
347 |
+
);
|
348 |
+
|
349 |
+
$dates_interval = array(
|
350 |
+
1 => '1' . ' ' . __('day' ,'booking')
|
351 |
+
, 2 => '2' . ' ' . __('days' ,'booking')
|
352 |
+
, 3 => '3' . ' ' . __('days' ,'booking')
|
353 |
+
, 4 => '4' . ' ' . __('days' ,'booking')
|
354 |
+
, 5 => '5' . ' ' . __('days' ,'booking')
|
355 |
+
, 6 => '6' . ' ' . __('days' ,'booking')
|
356 |
+
, 7 => '1' . ' ' . __('week' ,'booking')
|
357 |
+
, 14 => '2' . ' ' . __('weeks' ,'booking')
|
358 |
+
, 30 => '1' . ' ' . __('month' ,'booking')
|
359 |
+
, 60 => '2' . ' ' . __('months' ,'booking')
|
360 |
+
, 90 => '3' . ' ' . __('months' ,'booking')
|
361 |
+
, 183 => '6' . ' ' . __('months' ,'booking')
|
362 |
+
, 365 => '1' . ' ' . __('Year' ,'booking')
|
363 |
+
);
|
364 |
+
|
365 |
+
$request_input_el_default = array(
|
366 |
+
'wh_booking_date' => isset( $escaped_search_request_params['wh_booking_date'] ) ? $escaped_search_request_params['wh_booking_date'] : $defaults['wh_booking_date'],
|
367 |
+
'ui_wh_booking_date_radio' => isset( $escaped_search_request_params['ui_wh_booking_date_radio'] ) ? $escaped_search_request_params['ui_wh_booking_date_radio'] : $defaults['ui_wh_booking_date_radio'],
|
368 |
+
'ui_wh_booking_date_next' => isset( $escaped_search_request_params['ui_wh_booking_date_next'] ) ? $escaped_search_request_params['ui_wh_booking_date_next'] : $defaults['ui_wh_booking_date_next'],
|
369 |
+
'ui_wh_booking_date_prior' => isset( $escaped_search_request_params['ui_wh_booking_date_prior'] ) ? $escaped_search_request_params['ui_wh_booking_date_prior'] : $defaults['ui_wh_booking_date_prior'],
|
370 |
+
'ui_wh_booking_date_checkin' => isset( $escaped_search_request_params['ui_wh_booking_date_checkin'] ) ? $escaped_search_request_params['ui_wh_booking_date_checkin'] : $defaults['ui_wh_booking_date_checkin'],
|
371 |
+
'ui_wh_booking_date_checkout' => isset( $escaped_search_request_params['ui_wh_booking_date_checkout'] ) ? $escaped_search_request_params['ui_wh_booking_date_checkout'] : $defaults['ui_wh_booking_date_checkout']
|
372 |
+
);
|
373 |
+
|
374 |
+
$options = array (
|
375 |
+
// 'header2' => array( 'type' => 'header', 'title' => __( 'Complex Days', 'booking' ) ),
|
376 |
+
// 'disabled1' => array( 'type' => 'simple', 'value' => '19', 'title' => __( 'This is option was disabled', 'booking' ), 'disabled' => true ),
|
377 |
+
|
378 |
+
'0' => __( 'Current dates', 'booking' ),
|
379 |
+
'1' => __( 'Today', 'booking' ),
|
380 |
+
'2' => __( 'Previous dates', 'booking' ),
|
381 |
+
'3' => __( 'All dates', 'booking' ),
|
382 |
+
|
383 |
+
'divider1' => array( 'type' => 'html', 'html' => '<hr/>' ),
|
384 |
+
|
385 |
+
'9' => __( 'Today check in/out', 'booking' ),
|
386 |
+
'10' => __( 'Check in - Today', 'booking' ),
|
387 |
+
'11' => __( 'Check out - Today', 'booking' ),
|
388 |
+
'7' => __( 'Check in - Tomorrow', 'booking' ),
|
389 |
+
'8' => __( 'Check out - Tomorrow', 'booking' ),
|
390 |
+
|
391 |
+
'divider2' => array( 'type' => 'html', 'html' => '<hr/>' ),
|
392 |
+
|
393 |
+
// Next [ '4', '10' ] - radio button (if selected) value '4' and select-box with selected value '10'
|
394 |
+
'next' => array(
|
395 |
+
'type' => 'complex',
|
396 |
+
'class' => 'ui_complex_option_element',
|
397 |
+
// recheck if LI selected: $options['next']['selected_options_value'] == $params['default], e.g. ~ [ '4', '10' ]
|
398 |
+
'selected_options_value' => array(
|
399 |
+
1 => array( 'value' ), // $options['next']['input_options'][ 1 ]['value'] '4'
|
400 |
+
4 => array( 'value' ) // $options['next']['input_options'][ 4 ]['value'] '10'
|
401 |
+
),
|
402 |
+
// Get selected Title, for dropdown if $options['next'] selected
|
403 |
+
'selected_options_title' => array(
|
404 |
+
1 => array( 'label', 'title' ), // $options['next']['input_options'][ 1 ]['label'][ 'title' ] 'Next'
|
405 |
+
'text1' => ': ', // if key 'text1' not exist in ['input_options'], then it text ': '
|
406 |
+
4 => array( 'options', $request_input_el_default['ui_wh_booking_date_next'] ) // '10 days'
|
407 |
+
),
|
408 |
+
'input_options' => array(
|
409 |
+
array( 'type' => 'html', 'html' => '<div class="ui_element">' )
|
410 |
+
, array( // Default options from simple input element, like: wpbc_flex_radio()
|
411 |
+
'type' => 'radio'
|
412 |
+
, 'id' => 'ui_wh_booking_date_radio_1' // HTML ID of element
|
413 |
+
, 'name' => 'ui_wh_booking_date_radio'
|
414 |
+
, 'label' => array( 'title' => __('Next' ,'booking') , 'position' => 'right' )
|
415 |
+
, 'style' => '' // CSS of select element
|
416 |
+
, 'class' => '' // CSS Class of select element
|
417 |
+
, 'disabled' => false
|
418 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
419 |
+
, 'legend' => '' // aria-label parameter
|
420 |
+
, 'value' => '4'
|
421 |
+
, 'selected' => ( $request_input_el_default[ 'ui_wh_booking_date_radio' ] == '4' ) ? true : false // Selected or not
|
422 |
+
//, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
423 |
+
//, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
424 |
+
)
|
425 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
426 |
+
, array( 'type' => 'html', 'html' => '<div class="ui_element">' )
|
427 |
+
, array(
|
428 |
+
'type' => 'select'
|
429 |
+
, 'attr' => array()
|
430 |
+
, 'name' => 'ui_wh_booking_date_next'
|
431 |
+
, 'id' => 'ui_wh_booking_date_next'
|
432 |
+
, 'options' => $dates_interval
|
433 |
+
, 'value' => $request_input_el_default[ 'ui_wh_booking_date_next']
|
434 |
+
, 'onfocus' => "jQuery('#ui_wh_booking_date_radio_1').prop('checked', true);" // JavaScript code
|
435 |
+
//, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
436 |
+
)
|
437 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
438 |
+
)
|
439 |
+
),
|
440 |
+
|
441 |
+
// Prior [ '5', '10' ]
|
442 |
+
'prior' => array(
|
443 |
+
'type' => 'complex',
|
444 |
+
'class' => 'ui_complex_option_element',
|
445 |
+
'style' => 'min-width: 244px;',
|
446 |
+
'selected_options_value' => array( 1 => array( 'value' ), 4 => array( 'value' ) ), // 4 => array( 'value' ) --> $complex_option['input_options'][4]['value']
|
447 |
+
'selected_options_title' => array( 1 => array( 'label', 'title' )
|
448 |
+
, 'text1' => ': '
|
449 |
+
, 4 => array( 'options' , $request_input_el_default[ 'ui_wh_booking_date_prior'] )
|
450 |
+
), // 1 => array( 'label', 'title' ) --> $complex_option['input_options'][1]['label'][ 'title' ]
|
451 |
+
'input_options' => array(
|
452 |
+
array( 'type' => 'html', 'html' => '<div class="ui_element">' )
|
453 |
+
, array(
|
454 |
+
'type' => 'radio'
|
455 |
+
|
456 |
+
, 'id' => 'ui_wh_booking_date_radio_2' // HTML ID of element
|
457 |
+
, 'name' => 'ui_wh_booking_date_radio'
|
458 |
+
, 'label' => array( 'title' => __('Prior' ,'booking') , 'position' => 'right' )
|
459 |
+
, 'style' => '' // CSS of select element
|
460 |
+
, 'class' => '' // CSS Class of select element
|
461 |
+
, 'disabled' => false
|
462 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
463 |
+
, 'legend' => '' // aria-label parameter
|
464 |
+
, 'value' => '5' // Some Value from optins array that selected by default
|
465 |
+
, 'selected' => ( $request_input_el_default[ 'ui_wh_booking_date_radio' ] == '5' ) ? true : false // Selected or not
|
466 |
+
//, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
467 |
+
//, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
468 |
+
)
|
469 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
470 |
+
, array( 'type' => 'html', 'html' => '<div class="ui_element">' )
|
471 |
+
, array(
|
472 |
+
'type' => 'select'
|
473 |
+
, 'attr' => array()
|
474 |
+
, 'name' => 'ui_wh_booking_date_prior'
|
475 |
+
, 'id' => 'ui_wh_booking_date_prior'
|
476 |
+
, 'options' => $dates_interval
|
477 |
+
, 'value' => $request_input_el_default[ 'ui_wh_booking_date_prior']
|
478 |
+
, 'onfocus' => "jQuery('#ui_wh_booking_date_radio_2').prop('checked', true);" // JavaScript code
|
479 |
+
//, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
480 |
+
)
|
481 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
482 |
+
)
|
483 |
+
),
|
484 |
+
|
485 |
+
// Fixed [ '6', '', '2022-05-21']
|
486 |
+
'fixed' => array(
|
487 |
+
'type' => 'complex',
|
488 |
+
'class' => 'ui_complex_option_element',
|
489 |
+
'selected_options_value' => array( 1 => array( 'value' ), 4 => array( 'value' ), 7 => array( 'value' ) ), // 4 => array( 'value' ) --> $complex_option['input_options'][4]['value']
|
490 |
+
'selected_options_title' => array( 1 => array( 'label', 'title' ), 'text1' => ': ', 4 => array( 'value' ), 'text2' => ' - ' ,7 => array( 'value' ) ), // 1 => array( 'label', 'title' ) --> $complex_option['input_options'][1]['label'][ 'title' ]
|
491 |
+
'input_options' => array(
|
492 |
+
array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex:1 1 100%;margin-top:5px;">' )
|
493 |
+
, array(
|
494 |
+
'type' => 'radio'
|
495 |
+
|
496 |
+
, 'id' => 'ui_wh_booking_date_radio_3' // HTML ID of element
|
497 |
+
, 'name' => 'ui_wh_booking_date_radio'
|
498 |
+
, 'label' => array( 'title' => __('Dates' ,'booking') , 'position' => 'right' )
|
499 |
+
, 'style' => '' // CSS of select element
|
500 |
+
, 'class' => '' // CSS Class of select element
|
501 |
+
, 'disabled' => false
|
502 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
503 |
+
, 'legend' => '' // aria-label parameter
|
504 |
+
, 'value' => '6' // Some Value from optins array that selected by default
|
505 |
+
, 'selected' => ( $request_input_el_default[ 'ui_wh_booking_date_radio' ] == '6' ) ? true : false // Selected or not
|
506 |
+
//, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
507 |
+
//, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
508 |
+
)
|
509 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
510 |
+
, array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex-flow: row wrap;padding: 4px 4px 4px 0;">' )
|
511 |
+
, array(
|
512 |
+
'type' => 'text'
|
513 |
+
, 'id' => 'ui_wh_booking_date_checkin' // HTML ID of element
|
514 |
+
, 'name' => 'ui_wh_booking_date_checkin'
|
515 |
+
, 'label' => ''//__('Check-in' ,'booking')
|
516 |
+
, 'style' => 'width:100%;' // CSS of select element
|
517 |
+
, 'class' => 'wpdevbk-filters-section-calendar' // CSS Class of select element
|
518 |
+
, 'disabled' => false
|
519 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
520 |
+
, 'placeholder' => __('Check-in' ,'booking')
|
521 |
+
, 'value' => $request_input_el_default[ 'ui_wh_booking_date_checkin'] // Some Value from optins array that selected by default
|
522 |
+
, 'onfocus' => "jQuery('#ui_wh_booking_date_radio_3').prop('checked', true);" // JavaScript code
|
523 |
+
//, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
524 |
+
)
|
525 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
526 |
+
, array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex-flow: row wrap;padding: 4px 0 4px 4px;">' )
|
527 |
+
, array(
|
528 |
+
'type' => 'text'
|
529 |
+
, 'id' => 'ui_wh_booking_date_checkout' // HTML ID of element
|
530 |
+
, 'name' => 'ui_wh_booking_date_checkout'
|
531 |
+
, 'label' => ''//__('Check-out' ,'booking')
|
532 |
+
, 'style' => 'width:100%;' // CSS of select element
|
533 |
+
, 'class' => 'wpdevbk-filters-section-calendar' // CSS Class of select element
|
534 |
+
, 'disabled' => false
|
535 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
536 |
+
, 'placeholder' => __('Check-out' ,'booking')
|
537 |
+
, 'value' => $request_input_el_default[ 'ui_wh_booking_date_checkout'] // Some Value from optins array that selected by default
|
538 |
+
, 'onfocus' => "jQuery('#ui_wh_booking_date_radio_3').prop('checked', true);" // JavaScript code
|
539 |
+
//, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
540 |
+
)
|
541 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
542 |
+
)
|
543 |
+
),
|
544 |
+
|
545 |
+
'divider3' => array( 'type' => 'html', 'html' => '<hr/>' ),
|
546 |
+
|
547 |
+
// Buttons
|
548 |
+
'buttons1' => array(
|
549 |
+
'type' => 'complex',
|
550 |
+
'class' => 'ui_complex_option_element',
|
551 |
+
'style' => 'justify-content: flex-end;',
|
552 |
+
'input_options' => array(
|
553 |
+
array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex: 0 1 auto;margin: 0;">' )
|
554 |
+
, array(
|
555 |
+
'type' => 'button'
|
556 |
+
, 'title' => __( 'Apply', 'booking' ) // Title of the button
|
557 |
+
, 'hint' => '' // , 'hint' => array( 'title' => __('Select status' ,'booking') , 'position' => 'bottom' )
|
558 |
+
, 'link' => 'javascript:void(0)' // Direct link or skip it
|
559 |
+
, 'action' => "wpbc_ui_dropdown_apply_click( {
|
560 |
+
'dropdown_id' : 'wh_booking_date',
|
561 |
+
'dropdown_radio_name': 'ui_wh_booking_date_radio'
|
562 |
+
} );" // JavaScript code
|
563 |
+
, 'class' => 'wpbc_ui_button_primary' // wpbc_ui_button | wpbc_ui_button_primary
|
564 |
+
, 'icon' => ''
|
565 |
+
, 'font_icon' => ''
|
566 |
+
, 'icon_position' => 'left' // Position of icon relative to Text: left | right
|
567 |
+
, 'style' => '' // Any CSS class here
|
568 |
+
, 'mobile_show_text' => false // Show or hide text, when viewing on Mobile devices (small window size).
|
569 |
+
, 'attr' => array()
|
570 |
+
)
|
571 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
572 |
+
, array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex: 0 1 auto;margin: 0 0 0 1em;">' )
|
573 |
+
, array(
|
574 |
+
'type' => 'button'
|
575 |
+
, 'title' => __( 'Close', 'booking' ) // Title of the button
|
576 |
+
, 'hint' => '' // , 'hint' => array( 'title' => __('Select status' ,'booking') , 'position' => 'bottom' )
|
577 |
+
, 'link' => 'javascript:void(0)' // Direct link or skip it
|
578 |
+
, 'action' => "wpbc_ui_dropdown_close_click( 'wh_booking_date' );" // JavaScript code
|
579 |
+
, 'class' => '' // wpbc_ui_button | wpbc_ui_button_primary
|
580 |
+
, 'icon' => ''
|
581 |
+
, 'font_icon' => ''
|
582 |
+
, 'icon_position' => 'left' // Position of icon relative to Text: left | right
|
583 |
+
, 'style' => '' // Any CSS class here
|
584 |
+
, 'mobile_show_text' => false // Show or hide text, when viewing on Mobile devices (small window size).
|
585 |
+
, 'attr' => array()
|
586 |
+
)
|
587 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
588 |
+
)
|
589 |
+
),
|
590 |
+
);
|
591 |
+
|
592 |
+
$params = array(
|
593 |
+
'id' => 'wh_booking_date'
|
594 |
+
, 'default' => $request_input_el_default[ 'wh_booking_date' ]
|
595 |
+
, 'label' => ''//__('Approve 1', 'booking') . ':'
|
596 |
+
, 'title' => ''//__('Approve 2', 'booking')
|
597 |
+
, 'hint' => array( 'title' => __('Filter bookings by booking dates' ,'booking') , 'position' => 'top' )
|
598 |
+
, 'align' => 'left'
|
599 |
+
, 'li_options' => $options
|
600 |
+
);
|
601 |
+
|
602 |
+
?><div class="ui_element ui_nowrap"><?php
|
603 |
+
|
604 |
+
wpbc_flex_addon( $params_addon );
|
605 |
+
|
606 |
+
wpbc_flex_dropdown( $params );
|
607 |
+
|
608 |
+
?></div><?php
|
609 |
+
}
|
610 |
+
|
611 |
+
/**
|
612 |
+
* Approved | Pending | All
|
613 |
+
*
|
614 |
+
* @param $escaped_search_request_params - escaped search request parameters array
|
615 |
+
* @param $defaults - default parameters values
|
616 |
+
*/
|
617 |
+
function wpbc_ajx__ui__booking_status( $escaped_search_request_params, $defaults ){
|
618 |
+
|
619 |
+
$params_addon = array(
|
620 |
+
'type' => 'span'
|
621 |
+
, 'html' => ''// '<i class="menu_icon icon-1x wpbc_icn_event"></i>' //'<strong>' . __( 'Dates', 'booking ' ) . '</strong>'
|
622 |
+
, 'icon' => array( 'icon_font' => 'wpbc_icn_done_all', 'position' => 'right', 'icon_img' => '' )
|
623 |
+
, 'class' => 'wpbc_ui_button inactive'
|
624 |
+
, 'style' => ''
|
625 |
+
, 'attr' => array()
|
626 |
+
);
|
627 |
+
|
628 |
+
$params = array(
|
629 |
+
'id' => 'wh_approved'
|
630 |
+
, 'default' => isset( $escaped_search_request_params['wh_approved'] ) ? $escaped_search_request_params['wh_approved'] : $defaults['wh_approved']
|
631 |
+
, 'label' => ''//__('Status', 'booking') . ':'
|
632 |
+
, 'title' => __('Status', 'booking')
|
633 |
+
, 'hint' => array( 'title' => __('Filter bookings by booking status' ,'booking') , 'position' => 'top' )
|
634 |
+
, 'li_options' => array (
|
635 |
+
'0' => __( 'Pending', 'booking' ),
|
636 |
+
'1' => __( 'Approved', 'booking' ),
|
637 |
+
'divider1' => array( 'type' => 'html', 'html' => '<hr/>' ),
|
638 |
+
// 'header1' => array( 'type' => 'header', 'title' => __( 'Default', 'booking' ) ),
|
639 |
+
'any' => array(
|
640 |
+
'type' => 'simple',
|
641 |
+
'value' => '',
|
642 |
+
// 'disabled' => true,
|
643 |
+
'title' => __( 'Any', 'booking' )
|
644 |
+
),
|
645 |
+
)
|
646 |
+
);
|
647 |
+
|
648 |
+
?><div class="ui_element ui_nowrap"><?php
|
649 |
+
|
650 |
+
//wpbc_flex_addon( $params_addon );
|
651 |
+
|
652 |
+
wpbc_flex_dropdown( $params );
|
653 |
+
|
654 |
+
?></div><?php
|
655 |
+
}
|
656 |
+
|
657 |
+
/**
|
658 |
+
* Keywords
|
659 |
+
*
|
660 |
+
* @param $escaped_search_request_params - escaped search request parameters array
|
661 |
+
* @param $defaults - default parameters values
|
662 |
+
*/
|
663 |
+
function wpbc_ajx_toolbar_keyword_search( $escaped_search_request_params, $defaults ){
|
664 |
+
|
665 |
+
$el_id = 'wpbc_search_field';
|
666 |
+
|
667 |
+
$default_value = '';
|
668 |
+
|
669 |
+
// Old way of searching booking ID
|
670 |
+
if ( ! empty( $_REQUEST['wh_booking_id'] ) ) {
|
671 |
+
$wh_booking_id = intval( $_REQUEST['wh_booking_id'] );
|
672 |
+
if ( $wh_booking_id > 0 ) {
|
673 |
+
$_REQUEST['overwrite'] = 1;
|
674 |
+
$_REQUEST['keyword'] = 'id:' . $wh_booking_id;
|
675 |
+
}
|
676 |
+
}
|
677 |
+
|
678 |
+
if ( ( ! empty( $_REQUEST['overwrite'] ) ) && ( ! empty( $_REQUEST['keyword'] ) ) ) {
|
679 |
+
|
680 |
+
// Searching for booking(s) from URL: http://beta/wp-admin/admin.php?page=wpbc&view_mode=vm_booking_listing&keyword=id:2&overwrite=1
|
681 |
+
|
682 |
+
$default_value = wpbc_sanitize_text( $_REQUEST['keyword'] );
|
683 |
+
|
684 |
+
?><script type="text/javascript">
|
685 |
+
jQuery( document ).ready( function (){
|
686 |
+
// setTimeout( function () {
|
687 |
+
// wpbc_ajx_booking_listing.search_set_param( 'wh_booking_type', [0] );
|
688 |
+
// }, 950 );
|
689 |
+
wpbc_ajx_booking_searching_after_few_seconds( '#<?php echo $el_id; ?>', 1000 ); // Immediate search after 0.5 second
|
690 |
+
} );
|
691 |
+
</script><?php
|
692 |
+
}
|
693 |
+
|
694 |
+
$params = array(
|
695 |
+
'type' => 'text'
|
696 |
+
, 'id' => $el_id
|
697 |
+
, 'name' => $el_id
|
698 |
+
, 'label' => ''
|
699 |
+
, 'disabled' => false
|
700 |
+
, 'class' => ''
|
701 |
+
, 'style' => ''
|
702 |
+
, 'placeholder' => __( 'Enter keyword to search...', 'booking' )
|
703 |
+
, 'attr' => array()
|
704 |
+
, 'value' => $default_value
|
705 |
+
, 'onfocus' => ''
|
706 |
+
);
|
707 |
+
?><div class="ui_element"><?php
|
708 |
+
wpbc_flex_text( $params );
|
709 |
+
?></div><?php
|
710 |
+
}
|
711 |
+
|
712 |
+
/**
|
713 |
+
* Reset button - init default filter options
|
714 |
+
*
|
715 |
+
* @param $escaped_search_request_params - escaped search request parameters array
|
716 |
+
* @param $defaults - default parameters values
|
717 |
+
*/
|
718 |
+
function wpbc_ajx_toolbar_reset_button( $escaped_search_request_params, $defaults ){
|
719 |
+
|
720 |
+
$params = array(
|
721 |
+
'type' => 'button' ,
|
722 |
+
'title' => '',//__( 'Reset', 'booking' ) . ' ', // Title of the button
|
723 |
+
'hint' => array( 'title' => __( 'Reset search filter and user options to default values', 'booking' ), 'position' => 'top' ), // Hint
|
724 |
+
'link' => 'javascript:void(0)', // Direct link or skip it
|
725 |
+
'action' => "wpbc_ajx_booking_send_search_request_with_params( {
|
726 |
+
'ui_reset': 'make_reset',
|
727 |
+
'page_num': 1
|
728 |
+
} );", // JavaScript
|
729 |
+
'icon' => array(
|
730 |
+
'icon_font' => 'wpbc_icn_settings_backup_restore', //'wpbc_icn_rotate_left',
|
731 |
+
'position' => 'left',
|
732 |
+
'icon_img' => ''
|
733 |
+
),
|
734 |
+
'class' => 'wpbc_ui_button', // '' | 'wpbc_ui_button_primary'
|
735 |
+
'style' => '', // Any CSS class here
|
736 |
+
'mobile_show_text' => true, // Show or hide text, when viewing on Mobile devices (small window size).
|
737 |
+
'attr' => array()
|
738 |
+
);
|
739 |
+
|
740 |
+
?><div class="ui_element" style="flex: 0 1 auto;"><?php
|
741 |
+
wpbc_flex_button( $params );
|
742 |
+
?></div><?php
|
743 |
+
}
|
744 |
+
|
745 |
+
////////////////////////////////////////////////////////////////////////////////
|
746 |
+
/// 2nd row
|
747 |
+
////////////////////////////////////////////////////////////////////////////////
|
748 |
+
|
749 |
+
/**
|
750 |
+
* Booking resources
|
751 |
+
*
|
752 |
+
* @param $escaped_search_request_params - escaped search request parameters array
|
753 |
+
* @param $defaults - default parameters values
|
754 |
+
*/
|
755 |
+
function wpbc_ajx__ui__booking_resources( $escaped_search_request_params, $defaults ){
|
756 |
+
|
757 |
+
if ( ! class_exists( 'wpdev_bk_personal' ) ) {
|
758 |
+
return false;
|
759 |
+
}
|
760 |
+
|
761 |
+
$params_button = array(
|
762 |
+
'type' => 'button' ,
|
763 |
+
'title' => '',//__( 'Reset', 'booking' ) . ' ', // Title of the button
|
764 |
+
'hint' => array( 'title' => __( 'Remove all booking resources', 'booking' ), 'position' => 'top' ), // Hint
|
765 |
+
'link' => 'javascript:void(0)', // Direct link or skip it
|
766 |
+
'action' => "remove_all_options_from_choozen('#wh_booking_type');", // JavaScript
|
767 |
+
'icon' => array(
|
768 |
+
'icon_font' => 'wpbc_icn_close',
|
769 |
+
'position' => 'left',
|
770 |
+
'icon_img' => ''
|
771 |
+
),
|
772 |
+
'class' => 'wpbc_ui_button', // '' | 'wpbc_ui_button_primary'
|
773 |
+
'style' => '', // Any CSS class here
|
774 |
+
'mobile_show_text' => true, // Show or hide text, when viewing on Mobile devices (small window size).
|
775 |
+
'attr' => array( 'id' => 'wpbc_booking_listing_reload_button')
|
776 |
+
);
|
777 |
+
|
778 |
+
/**
|
779 |
+
* result = {array} [12]
|
780 |
+
1 = {array} [10]
|
781 |
+
booking_type_id = "1"
|
782 |
+
title = "Standard"
|
783 |
+
users = "3"
|
784 |
+
import = null
|
785 |
+
export = null
|
786 |
+
cost = "25"
|
787 |
+
default_form = "owner-custom-form-1"
|
788 |
+
prioritet = "2"
|
789 |
+
parent = "0"
|
790 |
+
visitors = "2"
|
791 |
+
2 = {array} [10]
|
792 |
+
booking_type_id = "2"
|
793 |
+
title = "Apartment#1" ...
|
794 |
+
*/
|
795 |
+
$resources_sql_arr = wpbc_ajx_get_all_booking_resources_arr();
|
796 |
+
|
797 |
+
/**
|
798 |
+
* $resources_arr = array( linear_resources = {array} [12] single_or_parent = {array} [5] child = {array} [2] )
|
799 |
+
*
|
800 |
+
$resources_arr = {array} [3]
|
801 |
+
linear_resources = {array} [12]
|
802 |
+
1 = {array} [12]
|
803 |
+
booking_type_id = "1"
|
804 |
+
title = "Standard"
|
805 |
+
users = "3"
|
806 |
+
import = null
|
807 |
+
export = null
|
808 |
+
cost = "25"
|
809 |
+
default_form = "owner-custom-form-1"
|
810 |
+
prioritet = "2"
|
811 |
+
parent = "0"
|
812 |
+
visitors = "2"
|
813 |
+
id = "1"
|
814 |
+
count = {int} 5
|
815 |
+
5 = {array} [12]
|
816 |
+
booking_type_id = "5"
|
817 |
+
title = "Standard-1"
|
818 |
+
users = "1"
|
819 |
+
import = null
|
820 |
+
*/
|
821 |
+
$resources_arr = wpbc_ajx_arrange_booking_resources_arr( $resources_sql_arr );
|
822 |
+
$style = '';
|
823 |
+
if ( ! empty( $resources_arr ) ) {
|
824 |
+
|
825 |
+
$linear_resources_arr = $resources_arr['linear_resources'];
|
826 |
+
|
827 |
+
$select_box_options = array();
|
828 |
+
|
829 |
+
if ( count( $linear_resources_arr ) > 1 ) {
|
830 |
+
|
831 |
+
$resources_id_arr = array();
|
832 |
+
foreach ( $linear_resources_arr as $bkr ) {
|
833 |
+
$resources_id_arr[] = $bkr['id'];
|
834 |
+
}
|
835 |
+
|
836 |
+
$select_box_options[ /*implode( ',', $resources_id_arr )*/0 ] = array(
|
837 |
+
'title' => __( 'All resources', 'booking' )
|
838 |
+
, 'attr' => array( 'title' => '<strong>' . __( 'All resources', 'booking' ) . '</strong>' )
|
839 |
+
, 'style' => 'font-weight:600;'
|
840 |
+
);
|
841 |
+
}
|
842 |
+
|
843 |
+
foreach ( $linear_resources_arr as $bkr ) {
|
844 |
+
|
845 |
+
$option_title = apply_bk_filter( 'wpdev_check_for_active_language', $bkr['title'] );
|
846 |
+
|
847 |
+
if ( isset( $bkr['parent'] ) ) {
|
848 |
+
if ( $bkr ['parent'] == 0 ) {
|
849 |
+
$option_title = $option_title;
|
850 |
+
$style = 'font-weight:600;';
|
851 |
+
} else {
|
852 |
+
$option_title = ' ' . $option_title;
|
853 |
+
$style = 'font-weight:400;';
|
854 |
+
}
|
855 |
+
}
|
856 |
+
$select_box_options[ $bkr ['id'] ] = array(
|
857 |
+
'title' => $option_title
|
858 |
+
, 'attr' => array( 'title' => $option_title )
|
859 |
+
, 'style' => $style
|
860 |
+
);
|
861 |
+
}
|
862 |
+
}
|
863 |
+
|
864 |
+
|
865 |
+
|
866 |
+
$el_id = 'wh_booking_type';
|
867 |
+
$params_select = array(
|
868 |
+
'id' => $el_id // HTML ID of element
|
869 |
+
, 'name' => $el_id
|
870 |
+
, 'label' => '' // __( 'Next Days', 'booking' ) // Label (optional)
|
871 |
+
, 'style' => '' // CSS of select element
|
872 |
+
, 'class' => 'chzn-select' // CSS Class of select element
|
873 |
+
, 'multiple' => true
|
874 |
+
, 'attr' => array( 'data-placeholder' => __( 'Select booking resources', 'booking' ) ) // Any additional attributes, if this radio | checkbox element
|
875 |
+
, 'disabled' => false
|
876 |
+
, 'disabled_options' => array() // If some options disabled, then it has to list here
|
877 |
+
, 'options' => $select_box_options
|
878 |
+
|
879 |
+
, 'value' => isset( $escaped_search_request_params[ $el_id ] ) ? $escaped_search_request_params[ $el_id ] : $defaults[ $el_id ] // Some Value from options array that selected by default
|
880 |
+
//, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).val(), 'in element:' , jQuery( this ) );" // JavaScript code
|
881 |
+
//, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).val(), 'in element:' , jQuery( this ) );" // JavaScript code
|
882 |
+
|
883 |
+
);
|
884 |
+
|
885 |
+
// Booking resources
|
886 |
+
?><div class="ui_element ui_nowrap"><?php
|
887 |
+
|
888 |
+
wpbc_flex_select( $params_select );
|
889 |
+
|
890 |
+
wpbc_flex_button( $params_button );
|
891 |
+
|
892 |
+
?></div><?php
|
893 |
+
|
894 |
+
?><script type="text/javascript">
|
895 |
+
function remove_all_options_from_choozen( selectbox_id ){
|
896 |
+
jQuery( selectbox_id + ' option' ).prop( 'selected', false ); // Disable selection in the real selectbox
|
897 |
+
jQuery( selectbox_id ).trigger( 'chosen:updated' ); // Remove all fields from the Choozen field //FixIn: 8.7.9.9
|
898 |
+
jQuery( selectbox_id ).trigger( 'change' );
|
899 |
+
}
|
900 |
+
|
901 |
+
if ( 'function' === typeof( jQuery("#<?php echo $el_id; ?>").chosen ) ) {
|
902 |
+
|
903 |
+
jQuery( "#<?php echo $el_id; ?>" ).chosen( {no_results_text: "No results matched"} );
|
904 |
+
|
905 |
+
jQuery("#<?php echo $el_id; ?>").chosen().on('change', function(va){ // Catch any selections in the Choozen
|
906 |
+
|
907 |
+
if ( jQuery( "#<?php echo $el_id; ?>" ).val() != null ){
|
908 |
+
//So we are having aready values
|
909 |
+
jQuery.each( jQuery( "#<?php echo $el_id; ?>" ).val(), function ( index, value ){
|
910 |
+
|
911 |
+
if ( (value.indexOf( ',' ) > 0) || ('0' === value) ){ // Ok we are have array with all booking resources ID
|
912 |
+
|
913 |
+
// Disable selection in the real selectbox
|
914 |
+
jQuery( '#<?php echo $el_id; ?>' + ' option' ).removeAttr( 'selected' );
|
915 |
+
|
916 |
+
// Select "All resources" option in real selectbox
|
917 |
+
jQuery( '#<?php echo $el_id; ?>' + ' option:first-child' ).prop( "selected", true );
|
918 |
+
|
919 |
+
//Highlight options in chosen, before removing
|
920 |
+
jQuery( '#<?php echo $el_id; ?>_chosen li.search-choice:not(:contains(' + '<?php echo html_entity_decode( esc_js( __( 'All resources', 'booking' ) ) ); ?>' + '))' )
|
921 |
+
.fadeOut( 350 ).fadeIn( 300 )
|
922 |
+
.fadeOut( 350 ).fadeIn( 400 )
|
923 |
+
.fadeOut( 350 ).fadeIn( 300 )
|
924 |
+
.fadeOut( 350 ).fadeIn( 400 )
|
925 |
+
.animate( {opacity: 1}, 4000 ) ;
|
926 |
+
|
927 |
+
// Update chosen LI choices, relative selected options in selectbox
|
928 |
+
var all_resources_timer = setTimeout( function (){
|
929 |
+
|
930 |
+
jQuery( '#<?php echo $el_id; ?>' ).trigger( 'chosen:updated' ); // Remove all fields from the Choozen field
|
931 |
+
}, 2000 );
|
932 |
+
|
933 |
+
var my_message = '<?php echo html_entity_decode( esc_js( __( 'Please note, its not possible to add new resources, if "All resources" option is selected. Please clear the selection, then add new resources.', 'booking' ) ), ENT_QUOTES ); ?>';
|
934 |
+
wpbc_admin_show_message( my_message, 'warning', 10000 );
|
935 |
+
}
|
936 |
+
} );
|
937 |
+
}
|
938 |
+
});
|
939 |
+
|
940 |
+
} else {
|
941 |
+
alert( 'WPBC Error. JavaScript library "chosen" was not defined.' );
|
942 |
+
}
|
943 |
+
</script><?php
|
944 |
+
}
|
945 |
+
|
946 |
+
/**
|
947 |
+
* Existing | Trash | Any
|
948 |
+
*
|
949 |
+
* @param $escaped_search_request_params - escaped search request parameters array
|
950 |
+
* @param $defaults - default parameters values
|
951 |
+
*/
|
952 |
+
function wpbc_ajx__ui__existing_or_trash( $escaped_search_request_params, $defaults ){
|
953 |
+
|
954 |
+
$params_addon = array(
|
955 |
+
'type' => 'span'
|
956 |
+
, 'html' => ''// '<i class="menu_icon icon-1x wpbc_icn_event"></i>' //'<strong>' . __( 'Dates', 'booking ' ) . '</strong>'
|
957 |
+
, 'icon' => array( 'icon_font' => 'wpbc_icn_delete_outline', 'position' => 'right', 'icon_img' => '' )
|
958 |
+
, 'class' => 'wpbc_ui_button inactive'
|
959 |
+
, 'style' => ''
|
960 |
+
, 'attr' => array()
|
961 |
+
, 'hint' => array( 'title' => __('Show trashed or existing bookings' ,'booking') , 'position' => 'top' )
|
962 |
+
);
|
963 |
+
|
964 |
+
$el_id = 'wh_trash';
|
965 |
+
$params = array(
|
966 |
+
'id' => $el_id
|
967 |
+
, 'default' => isset( $escaped_search_request_params[ $el_id ] ) ? $escaped_search_request_params[ $el_id ] : $defaults[ $el_id ]
|
968 |
+
, 'label' => ''
|
969 |
+
, 'title' => '' //__('Bookings', 'booking')
|
970 |
+
, 'hint' => array( 'title' => __('Show trashed or existing bookings' ,'booking') , 'position' => 'top' )
|
971 |
+
, 'li_options' => array(
|
972 |
+
'0' => __( 'Existing', 'booking' ),
|
973 |
+
'trash' => __( 'In Trash / Rejected', 'booking' ),
|
974 |
+
'divider1' => array( 'type' => 'html', 'html' => '<hr/>' ),
|
975 |
+
'any' => __( 'Any', 'booking' )
|
976 |
+
)
|
977 |
+
//, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( '#{$el_id}' ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
|
978 |
+
//, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
|
979 |
+
//, 'onchange' => "wpbc_ajx_booking_send_search_request_with_params( { '{$el_id}': JSON.parse( jQuery( this ).val() )[0], 'page_num': 1 } );"
|
980 |
+
);
|
981 |
+
|
982 |
+
?><div class="ui_element ui_nowrap"><?php
|
983 |
+
|
984 |
+
wpbc_flex_addon( $params_addon );
|
985 |
+
|
986 |
+
wpbc_flex_dropdown( $params );
|
987 |
+
|
988 |
+
?></div><?php
|
989 |
+
}
|
990 |
+
|
991 |
+
/**
|
992 |
+
* All bookings | New bookings | Imported bookings | Plugin bookings
|
993 |
+
*
|
994 |
+
* @param $escaped_search_request_params - escaped search request parameters array
|
995 |
+
* @param $defaults - default parameters values
|
996 |
+
*/
|
997 |
+
function wpbc_ajx__ui__all_or_new( $escaped_search_request_params, $defaults ){
|
998 |
+
|
999 |
+
$params_addon = array(
|
1000 |
+
'type' => 'span'
|
1001 |
+
, 'html' => ''// '<i class="menu_icon icon-1x wpbc_icn_event"></i>' //'<strong>' . __( 'Dates', 'booking ' ) . '</strong>'
|
1002 |
+
, 'icon' => array( 'icon_font' => 'wpbc_icn_visibility', 'position' => 'right', 'icon_img' => '' )
|
1003 |
+
, 'class' => 'wpbc_ui_button inactive'
|
1004 |
+
, 'style' => ''
|
1005 |
+
, 'attr' => array()
|
1006 |
+
, 'hint' => array( 'title' => __('Filter bookings by additional criteria' ,'booking') , 'position' => 'top' )
|
1007 |
+
);
|
1008 |
+
|
1009 |
+
$el_id = 'wh_what_bookings';
|
1010 |
+
$params = array(
|
1011 |
+
'id' => $el_id
|
1012 |
+
, 'default' => isset( $escaped_search_request_params[ $el_id ] ) ? $escaped_search_request_params[ $el_id ] : $defaults[ $el_id ]
|
1013 |
+
, 'label' => ''
|
1014 |
+
, 'title' => '' //__('Show', 'booking')
|
1015 |
+
, 'hint' => array( 'title' => __('Filter bookings by additional criteria' ,'booking') , 'position' => 'top' )
|
1016 |
+
, 'li_options' => array(
|
1017 |
+
'all' => array(
|
1018 |
+
'type' => 'simple',
|
1019 |
+
'value' => 'any',
|
1020 |
+
'title' => __( 'Any', 'booking' )
|
1021 |
+
),
|
1022 |
+
'divider1' => array( 'type' => 'html', 'html' => '<hr/>' ),
|
1023 |
+
'new' => __( 'New', 'booking' ),
|
1024 |
+
'imported' => __( 'Imported', 'booking' ),
|
1025 |
+
'in_plugin' => __( 'Plugin bookings', 'booking' )
|
1026 |
+
)
|
1027 |
+
//, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( '#{$el_id}' ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
|
1028 |
+
//, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
|
1029 |
+
//, 'onchange' => "wpbc_ajx_booking_send_search_request_with_params( { '{$el_id}': JSON.parse( jQuery( this ).val() )[0], 'page_num': 1 } );"
|
1030 |
+
);
|
1031 |
+
|
1032 |
+
|
1033 |
+
?><div class="ui_element ui_nowrap"><?php
|
1034 |
+
|
1035 |
+
wpbc_flex_addon( $params_addon );
|
1036 |
+
|
1037 |
+
wpbc_flex_dropdown( $params );
|
1038 |
+
|
1039 |
+
?></div><?php
|
1040 |
+
}
|
1041 |
+
|
1042 |
+
/**
|
1043 |
+
* "Creation Date" of bookings
|
1044 |
+
*
|
1045 |
+
* @param $escaped_search_request_params - escaped search request parameters array
|
1046 |
+
* @param $defaults - default parameters values
|
1047 |
+
*/
|
1048 |
+
function wpbc_ajx__ui__creation_date( $escaped_search_request_params, $defaults ){
|
1049 |
+
|
1050 |
+
$params_addon = array(
|
1051 |
+
'type' => 'span'
|
1052 |
+
, 'html' => ''// '<i class="menu_icon icon-1x wpbc_icn_event"></i>' //'<strong>' . __( 'Dates', 'booking ' ) . '</strong>'
|
1053 |
+
, 'icon' => array( 'icon_font' => 'wpbc_icn_edit_calendar', 'position' => 'right', 'icon_img' => '' )
|
1054 |
+
, 'class' => 'wpbc_ui_button inactive'
|
1055 |
+
, 'style' => ''
|
1056 |
+
, 'attr' => array()
|
1057 |
+
, 'hint' => array( 'title' => __('Filter bookings by creation booking date' ,'booking') , 'position' => 'top' )
|
1058 |
+
);
|
1059 |
+
|
1060 |
+
$dates_interval = array(
|
1061 |
+
1 => '1' . ' ' . __('day' ,'booking')
|
1062 |
+
, 2 => '2' . ' ' . __('days' ,'booking')
|
1063 |
+
, 3 => '3' . ' ' . __('days' ,'booking')
|
1064 |
+
, 4 => '4' . ' ' . __('days' ,'booking')
|
1065 |
+
, 5 => '5' . ' ' . __('days' ,'booking')
|
1066 |
+
, 6 => '6' . ' ' . __('days' ,'booking')
|
1067 |
+
, 7 => '1' . ' ' . __('week' ,'booking')
|
1068 |
+
, 14 => '2' . ' ' . __('weeks' ,'booking')
|
1069 |
+
, 30 => '1' . ' ' . __('month' ,'booking')
|
1070 |
+
, 60 => '2' . ' ' . __('months' ,'booking')
|
1071 |
+
, 90 => '3' . ' ' . __('months' ,'booking')
|
1072 |
+
, 183 => '6' . ' ' . __('months' ,'booking')
|
1073 |
+
, 365 => '1' . ' ' . __('Year' ,'booking')
|
1074 |
+
);
|
1075 |
+
|
1076 |
+
$el_id = 'wh_modification_date';
|
1077 |
+
|
1078 |
+
$request_input_el_default = array(
|
1079 |
+
$el_id => isset( $escaped_search_request_params[ $el_id ] ) ? $escaped_search_request_params[ $el_id ] : $defaults[ $el_id ],
|
1080 |
+
'ui_wh_modification_date_radio' => isset( $escaped_search_request_params['ui_wh_modification_date_radio'] ) ? $escaped_search_request_params['ui_wh_modification_date_radio'] : $defaults['ui_wh_modification_date_radio'],
|
1081 |
+
'ui_wh_modification_date_prior' => isset( $escaped_search_request_params['ui_wh_modification_date_prior'] ) ? $escaped_search_request_params['ui_wh_modification_date_prior'] : $defaults['ui_wh_modification_date_prior'],
|
1082 |
+
'ui_wh_modification_date_checkin' => isset( $escaped_search_request_params['ui_wh_modification_date_checkin'] ) ? $escaped_search_request_params['ui_wh_modification_date_checkin'] : $defaults['ui_wh_modification_date_checkin'],
|
1083 |
+
'ui_wh_modification_date_checkout' => isset( $escaped_search_request_params['ui_wh_modification_date_checkout'] ) ? $escaped_search_request_params['ui_wh_modification_date_checkout'] : $defaults['ui_wh_modification_date_checkout']
|
1084 |
+
);
|
1085 |
+
|
1086 |
+
$options = array (
|
1087 |
+
'1' => __( 'Today', 'booking' ),
|
1088 |
+
'3' => __( 'All dates', 'booking' ),
|
1089 |
+
|
1090 |
+
'divider1' => array( 'type' => 'html', 'html' => '<hr/>' ),
|
1091 |
+
|
1092 |
+
// Prior [ '5', '10' ]
|
1093 |
+
'prior' => array(
|
1094 |
+
'type' => 'complex',
|
1095 |
+
'class' => 'ui_complex_option_element',
|
1096 |
+
'style' => 'min-width: 244px;',
|
1097 |
+
'selected_options_value' => array( 1 => array( 'value' ), 4 => array( 'value' ) ), // 4 => array( 'value' ) --> $complex_option['input_options'][4]['value']
|
1098 |
+
'selected_options_title' => array( 1 => array( 'label', 'title' )
|
1099 |
+
, 'text1' => ': '
|
1100 |
+
, 4 => array( 'options' , $request_input_el_default[ 'ui_wh_modification_date_prior'] )
|
1101 |
+
), // 1 => array( 'label', 'title' ) --> $complex_option['input_options'][1]['label'][ 'title' ]
|
1102 |
+
'input_options' => array(
|
1103 |
+
array( 'type' => 'html', 'html' => '<div class="ui_element">' )
|
1104 |
+
, array(
|
1105 |
+
'type' => 'radio'
|
1106 |
+
|
1107 |
+
, 'id' => 'ui_wh_modification_date_radio_2' // HTML ID of element
|
1108 |
+
, 'name' => 'ui_wh_modification_date_radio'
|
1109 |
+
, 'label' => array( 'title' => __('Prior' ,'booking') , 'position' => 'right' )
|
1110 |
+
, 'style' => '' // CSS of select element
|
1111 |
+
, 'class' => '' // CSS Class of select element
|
1112 |
+
, 'disabled' => false
|
1113 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
1114 |
+
, 'legend' => '' // aria-label parameter
|
1115 |
+
, 'value' => '5' // Some Value from optins array that selected by default
|
1116 |
+
, 'selected' => ( $request_input_el_default[ 'ui_wh_modification_date_radio' ] == '5' ) ? true : false // Selected or not
|
1117 |
+
//, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
1118 |
+
//, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
1119 |
+
)
|
1120 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
1121 |
+
, array( 'type' => 'html', 'html' => '<div class="ui_element">' )
|
1122 |
+
, array(
|
1123 |
+
'type' => 'select'
|
1124 |
+
, 'attr' => array()
|
1125 |
+
, 'name' => 'ui_wh_modification_date_prior'
|
1126 |
+
, 'id' => 'ui_wh_modification_date_prior'
|
1127 |
+
, 'options' => $dates_interval
|
1128 |
+
, 'value' => $request_input_el_default[ 'ui_wh_modification_date_prior']
|
1129 |
+
, 'onfocus' => "jQuery('#ui_wh_modification_date_radio_2').prop('checked', true);" // JavaScript code
|
1130 |
+
//, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
1131 |
+
)
|
1132 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
1133 |
+
)
|
1134 |
+
),
|
1135 |
+
|
1136 |
+
// Fixed [ '6', '', '2022-05-21']
|
1137 |
+
'fixed' => array(
|
1138 |
+
'type' => 'complex',
|
1139 |
+
'class' => 'ui_complex_option_element',
|
1140 |
+
'selected_options_value' => array( 1 => array( 'value' ), 4 => array( 'value' ), 7 => array( 'value' ) ), // 4 => array( 'value' ) --> $complex_option['input_options'][4]['value']
|
1141 |
+
'selected_options_title' => array( 1 => array( 'label', 'title' ), 'text1' => ': ', 4 => array( 'value' ), 'text2' => ' - ' ,7 => array( 'value' ) ), // 1 => array( 'label', 'title' ) --> $complex_option['input_options'][1]['label'][ 'title' ]
|
1142 |
+
'input_options' => array(
|
1143 |
+
array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex:1 1 100%;margin-top:5px;">' )
|
1144 |
+
, array(
|
1145 |
+
'type' => 'radio'
|
1146 |
+
|
1147 |
+
, 'id' => 'ui_wh_modification_date_radio_3' // HTML ID of element
|
1148 |
+
, 'name' => 'ui_wh_modification_date_radio'
|
1149 |
+
, 'label' => array( 'title' => __('Dates' ,'booking') , 'position' => 'right' )
|
1150 |
+
, 'style' => '' // CSS of select element
|
1151 |
+
, 'class' => '' // CSS Class of select element
|
1152 |
+
, 'disabled' => false
|
1153 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
1154 |
+
, 'legend' => '' // aria-label parameter
|
1155 |
+
, 'value' => '6' // Some Value from optins array that selected by default
|
1156 |
+
, 'selected' => ( $request_input_el_default[ 'ui_wh_modification_date_radio' ] == '6' ) ? true : false // Selected or not
|
1157 |
+
//, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
1158 |
+
//, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
1159 |
+
)
|
1160 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
1161 |
+
, array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex-flow: row wrap;padding: 4px 4px 4px 0;">' )
|
1162 |
+
, array(
|
1163 |
+
'type' => 'text'
|
1164 |
+
, 'id' => 'ui_wh_modification_date_checkin' // HTML ID of element
|
1165 |
+
, 'name' => 'ui_wh_modification_date_checkin'
|
1166 |
+
, 'label' => ''//__('Check-in' ,'booking')
|
1167 |
+
, 'style' => 'width:100%;' // CSS of select element
|
1168 |
+
, 'class' => 'wpdevbk-filters-section-calendar' // CSS Class of select element
|
1169 |
+
, 'disabled' => false
|
1170 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
1171 |
+
, 'placeholder' => __('From' ,'booking') // date( 'Y-m-d' )
|
1172 |
+
, 'value' => $request_input_el_default[ 'ui_wh_modification_date_checkin'] // Some Value from optins array that selected by default
|
1173 |
+
, 'onfocus' => "jQuery('#ui_wh_modification_date_radio_3').prop('checked', true);" // JavaScript code
|
1174 |
+
//, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
1175 |
+
)
|
1176 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
1177 |
+
, array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex-flow: row wrap;padding: 4px 0 4px 4px;">' )
|
1178 |
+
, array(
|
1179 |
+
'type' => 'text'
|
1180 |
+
, 'id' => 'ui_wh_modification_date_checkout' // HTML ID of element
|
1181 |
+
, 'name' => 'ui_wh_modification_date_checkout'
|
1182 |
+
, 'label' => ''//__('Check-out' ,'booking')
|
1183 |
+
, 'style' => 'width:100%;' // CSS of select element
|
1184 |
+
, 'class' => 'wpdevbk-filters-section-calendar' // CSS Class of select element
|
1185 |
+
, 'disabled' => false
|
1186 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
1187 |
+
, 'placeholder' => __('To' ,'booking') // date( 'Y-m-d' )
|
1188 |
+
, 'value' => $request_input_el_default[ 'ui_wh_modification_date_checkout'] // Some Value from optins array that selected by default
|
1189 |
+
, 'onfocus' => "jQuery('#ui_wh_modification_date_radio_3').prop('checked', true);" // JavaScript code
|
1190 |
+
//, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
1191 |
+
)
|
1192 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
1193 |
+
)
|
1194 |
+
),
|
1195 |
+
|
1196 |
+
'divider3' => array( 'type' => 'html', 'html' => '<hr/>' ),
|
1197 |
+
|
1198 |
+
// Buttons
|
1199 |
+
'buttons1' => array(
|
1200 |
+
'type' => 'complex',
|
1201 |
+
'class' => 'ui_complex_option_element',
|
1202 |
+
'style' => 'justify-content: flex-end;',
|
1203 |
+
'input_options' => array(
|
1204 |
+
array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex: 0 1 auto;margin: 0;">' )
|
1205 |
+
, array(
|
1206 |
+
'type' => 'button'
|
1207 |
+
, 'title' => __( 'Apply', 'booking' ) // Title of the button
|
1208 |
+
, 'hint' => '' // , 'hint' => array( 'title' => __('Select status' ,'booking') , 'position' => 'bottom' )
|
1209 |
+
, 'link' => 'javascript:void(0)' // Direct link or skip it
|
1210 |
+
, 'action' => "wpbc_ui_dropdown_apply_click( {
|
1211 |
+
'dropdown_id' : 'wh_modification_date',
|
1212 |
+
'dropdown_radio_name': 'ui_wh_modification_date_radio'
|
1213 |
+
} );" // JavaScript code
|
1214 |
+
, 'class' => 'wpbc_ui_button_primary' // wpbc_ui_button | wpbc_ui_button_primary
|
1215 |
+
, 'icon' => ''
|
1216 |
+
, 'font_icon' => ''
|
1217 |
+
, 'icon_position' => 'left' // Position of icon relative to Text: left | right
|
1218 |
+
, 'style' => '' // Any CSS class here
|
1219 |
+
, 'mobile_show_text' => false // Show or hide text, when viewing on Mobile devices (small window size).
|
1220 |
+
, 'attr' => array()
|
1221 |
+
)
|
1222 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
1223 |
+
, array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex: 0 1 auto;margin: 0 0 0 1em;">' )
|
1224 |
+
, array(
|
1225 |
+
'type' => 'button'
|
1226 |
+
, 'title' => __( 'Close', 'booking' ) // Title of the button
|
1227 |
+
, 'hint' => '' // , 'hint' => array( 'title' => __('Select status' ,'booking') , 'position' => 'bottom' )
|
1228 |
+
, 'link' => 'javascript:void(0)' // Direct link or skip it
|
1229 |
+
, 'action' => "wpbc_ui_dropdown_close_click( 'wh_modification_date' );" // JavaScript code
|
1230 |
+
, 'class' => '' // wpbc_ui_button | wpbc_ui_button_primary
|
1231 |
+
, 'icon' => ''
|
1232 |
+
, 'font_icon' => ''
|
1233 |
+
, 'icon_position' => 'left' // Position of icon relative to Text: left | right
|
1234 |
+
, 'style' => '' // Any CSS class here
|
1235 |
+
, 'mobile_show_text' => false // Show or hide text, when viewing on Mobile devices (small window size).
|
1236 |
+
, 'attr' => array()
|
1237 |
+
)
|
1238 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
1239 |
+
)
|
1240 |
+
),
|
1241 |
+
);
|
1242 |
+
|
1243 |
+
$params = array(
|
1244 |
+
'id' => $el_id
|
1245 |
+
, 'default' => isset( $escaped_search_request_params[ $el_id ] ) ? $escaped_search_request_params[ $el_id ] : $defaults[ $el_id ]
|
1246 |
+
, 'label' => ''
|
1247 |
+
, 'title' => ''//__('Creation', 'booking')
|
1248 |
+
, 'hint' => array( 'title' => __('Filter bookings by creation booking date' ,'booking') , 'position' => 'top' )
|
1249 |
+
, 'li_options' => $options
|
1250 |
+
//, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( '#{$el_id}' ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
|
1251 |
+
//, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
|
1252 |
+
//, 'onchange' => "wpbc_ajx_booking_send_search_request_with_params( { '{$el_id}': JSON.parse( jQuery( this ).val() ), 'page_num': 1 "
|
1253 |
+
// // Frontend selected elements (saving for future use, after F5)
|
1254 |
+
// . " ,'ui_wh_modification_date_radio' : jQuery( 'input[name=\"ui_wh_modification_date_radio\"]:checked' ).val()"
|
1255 |
+
// . " ,'ui_wh_modification_date_prior' : jQuery( '#ui_wh_modification_date_prior' ).val()"
|
1256 |
+
// . " ,'ui_wh_modification_date_checkin' : jQuery( '#ui_wh_modification_date_checkin' ).val()"
|
1257 |
+
// . " ,'ui_wh_modification_date_checkout': jQuery( '#ui_wh_modification_date_checkout' ).val()"
|
1258 |
+
// ."} );"
|
1259 |
+
);
|
1260 |
+
|
1261 |
+
?><div class="ui_element ui_nowrap"><?php
|
1262 |
+
|
1263 |
+
wpbc_flex_addon( $params_addon );
|
1264 |
+
|
1265 |
+
wpbc_flex_dropdown( $params );
|
1266 |
+
|
1267 |
+
?></div><?php
|
1268 |
+
}
|
1269 |
+
|
1270 |
+
/**
|
1271 |
+
* Payment Status
|
1272 |
+
*
|
1273 |
+
* @param $escaped_search_request_params - escaped search request parameters array
|
1274 |
+
* @param $defaults - default parameters values
|
1275 |
+
*/
|
1276 |
+
function wpbc_ajx__ui__payment_status( $escaped_search_request_params, $defaults ){
|
1277 |
+
|
1278 |
+
if ( ! class_exists( 'wpdev_bk_biz_s' ) ) {
|
1279 |
+
return false;
|
1280 |
+
}
|
1281 |
+
|
1282 |
+
$params_addon = array(
|
1283 |
+
'type' => 'span'
|
1284 |
+
, 'html' => ''// '<i class="menu_icon icon-1x wpbc_icn_event"></i>' //'<strong>' . __( 'Dates', 'booking ' ) . '</strong>'
|
1285 |
+
, 'icon' => array( 'icon_font' => 'wpbc_icn_payments', 'position' => 'right', 'icon_img' => '' )
|
1286 |
+
, 'class' => 'wpbc_ui_button inactive'
|
1287 |
+
, 'style' => ''
|
1288 |
+
, 'attr' => array()
|
1289 |
+
, 'hint' => array( 'title' => __('Filter bookings by payment status' ,'booking') , 'position' => 'top' )
|
1290 |
+
);
|
1291 |
+
|
1292 |
+
$el_id = 'wh_pay_status';
|
1293 |
+
|
1294 |
+
$request_input_el_default = array(
|
1295 |
+
$el_id => isset( $escaped_search_request_params[ $el_id ] ) ? $escaped_search_request_params[ $el_id ] : $defaults[ $el_id ],
|
1296 |
+
'ui_wh_pay_status_radio' => isset( $escaped_search_request_params['ui_wh_pay_status_radio'] ) ? $escaped_search_request_params['ui_wh_pay_status_radio'] : $defaults['ui_wh_pay_status_radio'],
|
1297 |
+
'ui_wh_pay_status_custom' => isset( $escaped_search_request_params['ui_wh_pay_status_custom'] ) ? $escaped_search_request_params['ui_wh_pay_status_custom'] : $defaults['ui_wh_pay_status_custom']
|
1298 |
+
);
|
1299 |
+
|
1300 |
+
$options = array (
|
1301 |
+
'all' => __( 'Any Status', 'booking' ),
|
1302 |
+
'divider0' => array( 'type' => 'html', 'html' => '<hr/>' ),
|
1303 |
+
'group_ok' => __( 'Paid OK', 'booking' ),
|
1304 |
+
'group_unknown' => __( 'Unknown Status', 'booking' ),
|
1305 |
+
'group_pending' => __( 'Not Completed', 'booking' ),
|
1306 |
+
'group_failed' => __( 'Failed', 'booking' ),
|
1307 |
+
|
1308 |
+
'divider1' => array( 'type' => 'html', 'html' => '<hr/>' ),
|
1309 |
+
|
1310 |
+
// Fixed [ '6', '', '2022-05-21']
|
1311 |
+
'custom' => array(
|
1312 |
+
'type' => 'complex',
|
1313 |
+
'class' => 'ui_complex_option_element',
|
1314 |
+
'selected_options_value' => array( 1 => array( 'value' ), 4 => array( 'value' ) ), // 4 => array( 'value' ) --> $complex_option['input_options'][4]['value']
|
1315 |
+
'selected_options_title' => array( 1 => array( 'label', 'title' ), 'text1' => ': ', 4 => array( 'value' ) ), // 1 => array( 'label', 'title' ) --> $complex_option['input_options'][1]['label'][ 'title' ]
|
1316 |
+
'input_options' => array(
|
1317 |
+
array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex:1 1 100%;margin-top:5px;">' )
|
1318 |
+
, array(
|
1319 |
+
'type' => 'radio'
|
1320 |
+
|
1321 |
+
, 'id' => 'ui_wh_pay_status_radio_1' // HTML ID of element
|
1322 |
+
, 'name' => 'ui_wh_pay_status_radio'
|
1323 |
+
, 'label' => array( 'title' => __('Custom' ,'booking') , 'position' => 'right' )
|
1324 |
+
, 'style' => '' // CSS of select element
|
1325 |
+
, 'class' => '' // CSS Class of select element
|
1326 |
+
, 'disabled' => false
|
1327 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
1328 |
+
, 'legend' => '' // aria-label parameter
|
1329 |
+
, 'value' => 'user_entered' // Some Value from optins array that selected by default
|
1330 |
+
, 'selected' => ( $request_input_el_default[ 'ui_wh_pay_status_radio' ] == 'user_entered' ) ? true : false // Selected or not
|
1331 |
+
//, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
1332 |
+
//, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
1333 |
+
)
|
1334 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
1335 |
+
, array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex:1 1 100%;">' )
|
1336 |
+
, array(
|
1337 |
+
'type' => 'text'
|
1338 |
+
, 'id' => 'ui_wh_pay_status_custom' // HTML ID of element
|
1339 |
+
, 'name' => 'ui_wh_pay_status_custom'
|
1340 |
+
, 'label' => ''//__('Check-out' ,'booking')
|
1341 |
+
, 'style' => 'max-width:100%;width:100%;' // CSS of select element
|
1342 |
+
, 'class' => '' // CSS Class of select element
|
1343 |
+
, 'disabled' => false
|
1344 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
1345 |
+
, 'placeholder' => __('Payment status' ,'booking') // date( 'Y-m-d' )
|
1346 |
+
, 'value' => $request_input_el_default[ 'ui_wh_pay_status_custom'] // Some Value from optins array that selected by default
|
1347 |
+
, 'onfocus' => "jQuery('#ui_wh_pay_status_radio_1').prop('checked', true);" // JavaScript code
|
1348 |
+
//, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
1349 |
+
)
|
1350 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
1351 |
+
)
|
1352 |
+
),
|
1353 |
+
|
1354 |
+
|
1355 |
+
// Buttons
|
1356 |
+
'buttons1' => array(
|
1357 |
+
'type' => 'complex',
|
1358 |
+
'class' => 'ui_complex_option_element',
|
1359 |
+
'style' => 'justify-content: flex-end;',
|
1360 |
+
'input_options' => array(
|
1361 |
+
array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex: 0 1 auto;margin: 0;">' )
|
1362 |
+
, array(
|
1363 |
+
'type' => 'button'
|
1364 |
+
, 'title' => __( 'Apply', 'booking' ) // Title of the button
|
1365 |
+
, 'hint' => '' // , 'hint' => array( 'title' => __('Select status' ,'booking') , 'position' => 'bottom' )
|
1366 |
+
, 'link' => 'javascript:void(0)' // Direct link or skip it
|
1367 |
+
, 'action' => "wpbc_ui_dropdown_apply_click( {
|
1368 |
+
'dropdown_id' : 'wh_pay_status',
|
1369 |
+
'dropdown_radio_name': 'ui_wh_pay_status_radio'
|
1370 |
+
} );" // JavaScript code
|
1371 |
+
, 'class' => 'wpbc_ui_button_primary' // wpbc_ui_button | wpbc_ui_button_primary
|
1372 |
+
, 'icon' => ''
|
1373 |
+
, 'font_icon' => ''
|
1374 |
+
, 'icon_position' => 'left' // Position of icon relative to Text: left | right
|
1375 |
+
, 'style' => '' // Any CSS class here
|
1376 |
+
, 'mobile_show_text' => false // Show or hide text, when viewing on Mobile devices (small window size).
|
1377 |
+
, 'attr' => array()
|
1378 |
+
)
|
1379 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
1380 |
+
, array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex: 0 1 auto;margin: 0 0 0 1em;">' )
|
1381 |
+
, array(
|
1382 |
+
'type' => 'button'
|
1383 |
+
, 'title' => __( 'Close', 'booking' ) // Title of the button
|
1384 |
+
, 'hint' => '' // , 'hint' => array( 'title' => __('Select status' ,'booking') , 'position' => 'bottom' )
|
1385 |
+
, 'link' => 'javascript:void(0)' // Direct link or skip it
|
1386 |
+
, 'action' => "wpbc_ui_dropdown_close_click( 'wh_pay_status' );" // JavaScript code
|
1387 |
+
, 'class' => '' // wpbc_ui_button | wpbc_ui_button_primary
|
1388 |
+
, 'icon' => ''
|
1389 |
+
, 'font_icon' => ''
|
1390 |
+
, 'icon_position' => 'left' // Position of icon relative to Text: left | right
|
1391 |
+
, 'style' => '' // Any CSS class here
|
1392 |
+
, 'mobile_show_text' => false // Show or hide text, when viewing on Mobile devices (small window size).
|
1393 |
+
, 'attr' => array()
|
1394 |
+
)
|
1395 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
1396 |
+
)
|
1397 |
+
),
|
1398 |
+
);
|
1399 |
+
|
1400 |
+
$params = array(
|
1401 |
+
'id' => $el_id
|
1402 |
+
, 'default' => isset( $escaped_search_request_params[ $el_id ] ) ? $escaped_search_request_params[ $el_id ] : $defaults[ $el_id ]
|
1403 |
+
, 'label' => ''
|
1404 |
+
, 'title' => ''//__('Payment', 'booking')
|
1405 |
+
, 'hint' => array( 'title' => __('Filter bookings by payment status' ,'booking') , 'position' => 'top' )
|
1406 |
+
, 'li_options' => $options
|
1407 |
+
//, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( '#{$el_id}' ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
|
1408 |
+
//, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
|
1409 |
+
///*, 'onchange' =>*/. "wpbc_ajx_booking_send_search_request_with_params( { '{$el_id}': JSON.parse( jQuery( this ).val() ), 'page_num': 1 "
|
1410 |
+
// // Frontend selected elements (saving for future use, after F5)
|
1411 |
+
// . " ,'ui_wh_pay_status_radio' : ( undefined === jQuery( 'input[name=\"ui_wh_pay_status_radio\"]:checked' ).val() ) ? '' : jQuery( 'input[name=\"ui_wh_pay_status_radio\"]:checked' ).val()"
|
1412 |
+
// . " ,'ui_wh_pay_status_custom' : jQuery( '#ui_wh_pay_status_custom' ).val()"
|
1413 |
+
// ."} );"
|
1414 |
+
);
|
1415 |
+
|
1416 |
+
|
1417 |
+
?><div class="ui_element ui_nowrap"><?php
|
1418 |
+
|
1419 |
+
wpbc_flex_addon( $params_addon );
|
1420 |
+
|
1421 |
+
wpbc_flex_dropdown( $params );
|
1422 |
+
|
1423 |
+
?></div><?php
|
1424 |
+
}
|
1425 |
+
|
1426 |
+
/**
|
1427 |
+
* Costs Min - Max
|
1428 |
+
*
|
1429 |
+
* @param $escaped_search_request_params - escaped search request parameters array
|
1430 |
+
* @param $defaults - default parameters values
|
1431 |
+
*/
|
1432 |
+
function wpbc_ajx__ui__cost_min_max( $escaped_search_request_params, $defaults ){
|
1433 |
+
|
1434 |
+
if ( ! class_exists( 'wpdev_bk_biz_s' ) ) {
|
1435 |
+
return false;
|
1436 |
+
}
|
1437 |
+
|
1438 |
+
$el_id = 'wh_cost';
|
1439 |
+
|
1440 |
+
$params = array(
|
1441 |
+
'id' => $el_id // HTML ID of element
|
1442 |
+
, 'name' => $el_id
|
1443 |
+
, 'label' => '<span class="" style="font-weight:600;">' . __( 'Cost', 'booking' ) . ' <em style="color:#888;">(' . __( 'min-max', 'booking' ) . '):</em></span>'
|
1444 |
+
, 'style' => 'max-width: 69px;' // CSS of select element
|
1445 |
+
, 'class' => '' // CSS Class of select element
|
1446 |
+
, 'disabled' => false
|
1447 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
1448 |
+
, 'placeholder' => '0'
|
1449 |
+
, 'value' => isset( $escaped_search_request_params[ $el_id ] ) ? $escaped_search_request_params[ $el_id ] : $defaults[ $el_id ]
|
1450 |
+
//, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
|
1451 |
+
//, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
|
1452 |
+
);
|
1453 |
+
?><div class="ui_element" style="margin-right: 5px;"><?php
|
1454 |
+
|
1455 |
+
wpbc_flex_text( $params );
|
1456 |
+
|
1457 |
+
?></div><?php
|
1458 |
+
|
1459 |
+
|
1460 |
+
$el_id = 'wh_cost2';
|
1461 |
+
|
1462 |
+
$params = array(
|
1463 |
+
'id' => $el_id // HTML ID of element
|
1464 |
+
, 'name' => $el_id
|
1465 |
+
, 'label' => '<span class="" style="font-weight:600;"> ‐ </span>'
|
1466 |
+
, 'style' => 'max-width: 69px;' // CSS of select element
|
1467 |
+
, 'class' => '' // CSS Class of select element
|
1468 |
+
, 'disabled' => false
|
1469 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
1470 |
+
, 'placeholder' => '10000'
|
1471 |
+
, 'value' => isset( $escaped_search_request_params[ $el_id ] ) ? $escaped_search_request_params[ $el_id ] : $defaults[ $el_id ]
|
1472 |
+
//, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
|
1473 |
+
//, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
|
1474 |
+
);
|
1475 |
+
?><div class="ui_element"><?php
|
1476 |
+
|
1477 |
+
wpbc_flex_text( $params );
|
1478 |
+
|
1479 |
+
?></div><?php
|
1480 |
+
|
1481 |
+
}
|
1482 |
+
|
1483 |
+
/**
|
1484 |
+
* Reload button - force loading of ajax data
|
1485 |
+
*
|
1486 |
+
* @param $escaped_search_request_params - escaped search request parameters array
|
1487 |
+
* @param $defaults - default parameters values
|
1488 |
+
*/
|
1489 |
+
function wpbc_ajx_toolbar_force_reload_button( $escaped_search_request_params, $defaults ){
|
1490 |
+
|
1491 |
+
$params = array(
|
1492 |
+
'type' => 'button' ,
|
1493 |
+
'title' => '',//__( 'Reset', 'booking' ) . ' ', // Title of the button
|
1494 |
+
'hint' => array( 'title' => __( 'Reload bookings listing', 'booking' ), 'position' => 'top' ), // Hint
|
1495 |
+
'link' => 'javascript:void(0)', // Direct link or skip it
|
1496 |
+
'action' => "wpbc_ajx_booking_send_search_request_with_params( { } );", // Some JavaScript
|
1497 |
+
'icon' => array(
|
1498 |
+
'icon_font' => 'wpbc_icn_rotate_right wpbc_spin', //'wpbc_icn_rotate_left',
|
1499 |
+
'position' => 'left',
|
1500 |
+
'icon_img' => ''
|
1501 |
+
),
|
1502 |
+
'class' => 'wpbc_ui_button wpbc_ui_button_primary', // '' | 'wpbc_ui_button_primary'
|
1503 |
+
'style' => '', // Any CSS class here
|
1504 |
+
'mobile_show_text' => true, // Show or hide text, when viewing on Mobile devices (small window size).
|
1505 |
+
'attr' => array( 'id' => 'wpbc_booking_listing_reload_button')
|
1506 |
+
);
|
1507 |
+
|
1508 |
+
?><div class="ui_element" style="margin-left: auto;"><?php
|
1509 |
+
wpbc_flex_button( $params );
|
1510 |
+
?></div><?php
|
1511 |
+
}
|
1512 |
+
|
1513 |
+
// </editor-fold>
|
1514 |
+
|
1515 |
+
|
1516 |
+
// <editor-fold defaultstate="collapsed" desc=" T o o l b a r A c t i o n B u t t o n s " >
|
1517 |
+
|
1518 |
+
////////////////////////////////////////////////////////////////////////////////
|
1519 |
+
// T o o l b a r A C T I O N S UI elements
|
1520 |
+
////////////////////////////////////////////////////////////////////////////////
|
1521 |
+
|
1522 |
+
function wpbc_ajx__ui__action_button__approve( $escaped_search_request_params ){
|
1523 |
+
|
1524 |
+
$booking_action = 'set_booking_approved';
|
1525 |
+
|
1526 |
+
$el_id = 'ui_btn_' . $booking_action;
|
1527 |
+
|
1528 |
+
if ( ! wpbc_is_user_can( $booking_action, get_current_user_id() ) ) {
|
1529 |
+
return false;
|
1530 |
+
}
|
1531 |
+
|
1532 |
+
$params = array(
|
1533 |
+
'type' => 'button' ,
|
1534 |
+
'title' => __( 'Approve', 'booking' ) . ' ', // Title of the button
|
1535 |
+
'hint' => array( 'title' => __( 'Approve selected bookings', 'booking' ), 'position' => 'top' ), // Hint
|
1536 |
+
'link' => 'javascript:void(0)', // Direct link or skip it
|
1537 |
+
'action' => "wpbc_ajx_booking_ajax_action_request( {
|
1538 |
+
'booking_action' : '{$booking_action}',
|
1539 |
+
'booking_id' : wpbc_get_selected_row_id(),
|
1540 |
+
'reason_of_action' : jQuery( '#reason_of_action' ).val(),
|
1541 |
+
'ui_clicked_element_id': '{$el_id}'
|
1542 |
+
} );
|
1543 |
+
wpbc_button_enable_loading_icon( this ); " ,
|
1544 |
+
'icon' => array(
|
1545 |
+
'icon_font' => 'wpbc_icn_check_circle_outline',
|
1546 |
+
'position' => 'right',
|
1547 |
+
'icon_img' => ''
|
1548 |
+
),
|
1549 |
+
'class' => 'wpbc_ui_button_primary hide_button_if_no_selection', // '' | 'wpbc_ui_button_primary'
|
1550 |
+
'style' => '', // Any CSS class here
|
1551 |
+
'mobile_show_text' => true, // Show or hide text, when viewing on Mobile devices (small window size).
|
1552 |
+
'attr' => array( 'id' => $el_id )
|
1553 |
+
);
|
1554 |
+
|
1555 |
+
wpbc_flex_button( $params );
|
1556 |
+
}
|
1557 |
+
|
1558 |
+
function wpbc_ajx__ui__action_button__pending( $escaped_search_request_params ){
|
1559 |
+
|
1560 |
+
$booking_action = 'set_booking_pending';
|
1561 |
+
|
1562 |
+
$el_id = 'ui_btn_' . $booking_action;
|
1563 |
+
|
1564 |
+
if ( ! wpbc_is_user_can( $booking_action, get_current_user_id() ) ) {
|
1565 |
+
return false;
|
1566 |
+
}
|
1567 |
+
|
1568 |
+
$params = array(
|
1569 |
+
'type' => 'button' ,
|
1570 |
+
'title' => __( 'Pending', 'booking' ) . ' ', // Title of the button
|
1571 |
+
'hint' => array( 'title' => __( 'Set selected bookings as pending', 'booking' ), 'position' => 'top' ), // Hint
|
1572 |
+
'link' => 'javascript:void(0)', // Direct link or skip it
|
1573 |
+
'action' => "if ( wpbc_are_you_sure('" . esc_attr( __( 'Do you really want to set booking as pending ?', 'booking' ) ) . "') ) {
|
1574 |
+
wpbc_ajx_booking_ajax_action_request( {
|
1575 |
+
'booking_action' : '{$booking_action}',
|
1576 |
+
'booking_id' : wpbc_get_selected_row_id(),
|
1577 |
+
'reason_of_action' : jQuery( '#reason_of_action' ).val(),
|
1578 |
+
'ui_clicked_element_id': '{$el_id}'
|
1579 |
+
} );
|
1580 |
+
wpbc_button_enable_loading_icon( this );
|
1581 |
+
}" ,
|
1582 |
+
'icon' => array(
|
1583 |
+
'icon_font' => 'wpbc_icn_block',
|
1584 |
+
'position' => 'right',
|
1585 |
+
'icon_img' => ''
|
1586 |
+
),
|
1587 |
+
'class' => 'hide_button_if_no_selection', // '' | 'wpbc_ui_button_primary'
|
1588 |
+
'style' => '', // Any CSS class here
|
1589 |
+
'mobile_show_text' => true, // Show or hide text, when viewing on Mobile devices (small window size).
|
1590 |
+
'attr' => array( 'id' => $el_id )
|
1591 |
+
);
|
1592 |
+
|
1593 |
+
wpbc_flex_button( $params );
|
1594 |
+
}
|
1595 |
+
|
1596 |
+
function wpbc_ajx__ui__action_button__trash( $escaped_search_request_params ){
|
1597 |
+
|
1598 |
+
$booking_action = 'move_booking_to_trash';
|
1599 |
+
|
1600 |
+
$el_id = 'ui_btn_' . $booking_action;
|
1601 |
+
|
1602 |
+
if ( ! wpbc_is_user_can( $booking_action, get_current_user_id() ) ) {
|
1603 |
+
return false;
|
1604 |
+
}
|
1605 |
+
|
1606 |
+
$params = array(
|
1607 |
+
'type' => 'button' ,
|
1608 |
+
'title' => __( 'Trash / Reject', 'booking' ) . ' ', // Title of the button
|
1609 |
+
'hint' => array( 'title' => __( 'Reject booking - move selected bookings to trash', 'booking' ), 'position' => 'top' ), // Hint
|
1610 |
+
'link' => 'javascript:void(0)', // Direct link or skip it
|
1611 |
+
'action' => "if ( wpbc_are_you_sure('" . esc_attr( __( 'Do you really want to do this ?', 'booking' ) ) . "') ) {
|
1612 |
+
wpbc_ajx_booking_ajax_action_request( {
|
1613 |
+
'booking_action' : '{$booking_action}',
|
1614 |
+
'booking_id' : wpbc_get_selected_row_id(),
|
1615 |
+
'reason_of_action' : jQuery( '#reason_of_action' ).val(),
|
1616 |
+
'ui_clicked_element_id': '{$el_id}'
|
1617 |
+
} );
|
1618 |
+
wpbc_button_enable_loading_icon( this );
|
1619 |
+
}" ,
|
1620 |
+
'icon' => array(
|
1621 |
+
'icon_font' => 'wpbc_icn_delete_outline',
|
1622 |
+
'position' => 'right',
|
1623 |
+
'icon_img' => ''
|
1624 |
+
),
|
1625 |
+
'class' => 'hide_button_if_no_selection', // '' | 'wpbc_ui_button_primary'
|
1626 |
+
'style' => '', // Any CSS class here
|
1627 |
+
'mobile_show_text' => true, // Show or hide text, when viewing on Mobile devices (small window size).
|
1628 |
+
'attr' => array( 'id' => $el_id )
|
1629 |
+
);
|
1630 |
+
|
1631 |
+
wpbc_flex_button( $params );
|
1632 |
+
}
|
1633 |
+
|
1634 |
+
function wpbc_ajx__ui__action_button__restore( $escaped_search_request_params ){
|
1635 |
+
|
1636 |
+
$booking_action = 'restore_booking_from_trash';
|
1637 |
+
|
1638 |
+
$el_id = 'ui_btn_' . $booking_action;
|
1639 |
+
|
1640 |
+
if ( ! wpbc_is_user_can( $booking_action, get_current_user_id() ) ) {
|
1641 |
+
return false;
|
1642 |
+
}
|
1643 |
+
|
1644 |
+
$params = array(
|
1645 |
+
'type' => 'button' ,
|
1646 |
+
'title' => __( 'Restore', 'booking' ) . ' ', // Title of the button
|
1647 |
+
'hint' => array( 'title' => __( 'Restore selected bookings', 'booking' ), 'position' => 'top' ), // Hint
|
1648 |
+
'link' => 'javascript:void(0)', // Direct link or skip it
|
1649 |
+
'action' => "if ( wpbc_are_you_sure('" . esc_attr( __( 'Do you really want to do this ?', 'booking' ) ) . "') ) {
|
1650 |
+
wpbc_ajx_booking_ajax_action_request( {
|
1651 |
+
'booking_action' : '{$booking_action}',
|
1652 |
+
'booking_id' : wpbc_get_selected_row_id(),
|
1653 |
+
'reason_of_action' : jQuery( '#reason_of_action' ).val(),
|
1654 |
+
'ui_clicked_element_id': '{$el_id}'
|
1655 |
+
} );
|
1656 |
+
wpbc_button_enable_loading_icon( this );
|
1657 |
+
}" ,
|
1658 |
+
'icon' => array(
|
1659 |
+
'icon_font' => 'wpbc_icn_rotate_left',
|
1660 |
+
'position' => 'right',
|
1661 |
+
'icon_img' => ''
|
1662 |
+
),
|
1663 |
+
'class' => 'hide_button_if_no_selection', // '' | 'wpbc_ui_button_primary'
|
1664 |
+
'style' => '', // Any CSS class here
|
1665 |
+
'mobile_show_text' => true, // Show or hide text, when viewing on Mobile devices (small window size).
|
1666 |
+
'attr' => array( 'id' => $el_id )
|
1667 |
+
);
|
1668 |
+
|
1669 |
+
wpbc_flex_button( $params );
|
1670 |
+
}
|
1671 |
+
|
1672 |
+
function wpbc_ajx__ui__action_button__delete( $escaped_search_request_params ){
|
1673 |
+
|
1674 |
+
$booking_action = 'delete_booking_completely';
|
1675 |
+
|
1676 |
+
$el_id = 'ui_btn_' . $booking_action;
|
1677 |
+
|
1678 |
+
if ( ! wpbc_is_user_can( $booking_action, get_current_user_id() ) ) {
|
1679 |
+
return false;
|
1680 |
+
}
|
1681 |
+
|
1682 |
+
$params = array(
|
1683 |
+
'type' => 'button' ,
|
1684 |
+
'title' => __( 'Delete', 'booking' ) . ' ', // Title of the button
|
1685 |
+
'hint' => array( 'title' => __( 'Delete selected bookings', 'booking' ), 'position' => 'top' ), // Hint
|
1686 |
+
'link' => 'javascript:void(0)', // Direct link or skip it
|
1687 |
+
'action' => "if ( wpbc_are_you_sure('" . esc_attr( __( 'Do you really want to delete selected booking(s) ?', 'booking' ) ) . "') ) {
|
1688 |
+
wpbc_ajx_booking_ajax_action_request( {
|
1689 |
+
'booking_action' : '{$booking_action}',
|
1690 |
+
'booking_id' : wpbc_get_selected_row_id(),
|
1691 |
+
'reason_of_action' : jQuery( '#reason_of_action' ).val(),
|
1692 |
+
'ui_clicked_element_id': '{$el_id}'
|
1693 |
+
} );
|
1694 |
+
wpbc_button_enable_loading_icon( this );
|
1695 |
+
}" ,
|
1696 |
+
'icon' => array(
|
1697 |
+
'icon_font' => 'wpbc_icn_close',
|
1698 |
+
'position' => 'right',
|
1699 |
+
'icon_img' => ''
|
1700 |
+
),
|
1701 |
+
'class' => 'hide_button_if_no_selection', // '' | 'wpbc_ui_button_primary'
|
1702 |
+
'style' => '', // Any CSS class here
|
1703 |
+
'mobile_show_text' => true, // Show or hide text, when viewing on Mobile devices (small window size).
|
1704 |
+
'attr' => array( 'id' => $el_id )
|
1705 |
+
);
|
1706 |
+
|
1707 |
+
wpbc_flex_button( $params );
|
1708 |
+
}
|
1709 |
+
|
1710 |
+
function wpbc_ajx__ui__action_text__delete_reason( $escaped_search_request_params ){
|
1711 |
+
|
1712 |
+
$params = array(
|
1713 |
+
'type' => 'text'
|
1714 |
+
, 'id' => 'reason_of_action'
|
1715 |
+
, 'name' => 'reason_of_action'
|
1716 |
+
, 'label' => ''
|
1717 |
+
, 'disabled' => false
|
1718 |
+
, 'class' => 'hide_button_if_no_selection'
|
1719 |
+
, 'style' => ''
|
1720 |
+
, 'placeholder' => __( 'Reason of action', 'booking' )
|
1721 |
+
, 'attr' => array()
|
1722 |
+
, 'value' => ''
|
1723 |
+
, 'onfocus' => ''
|
1724 |
+
);
|
1725 |
+
wpbc_flex_text( $params );
|
1726 |
+
}
|
1727 |
+
|
1728 |
+
function wpbc_ajx__ui__action_button__readall( $escaped_search_request_params ){
|
1729 |
+
|
1730 |
+
$booking_action = 'set_booking_as_read';
|
1731 |
+
|
1732 |
+
$el_id = 'ui_btn_all_' . $booking_action;
|
1733 |
+
|
1734 |
+
if ( ! wpbc_is_user_can( $booking_action, get_current_user_id() ) ) {
|
1735 |
+
return false;
|
1736 |
+
}
|
1737 |
+
|
1738 |
+
$params = array(
|
1739 |
+
'type' => 'button' ,
|
1740 |
+
'title' => __( 'Read All', 'booking' ) . ' ', // Title of the button
|
1741 |
+
'hint' => array( 'title' => __( 'Mark as read all bookings', 'booking' ), 'position' => 'top' ), // Hint
|
1742 |
+
'link' => 'javascript:void(0)', // Direct link or skip it
|
1743 |
+
'action' => "wpbc_ajx_booking_ajax_action_request( {
|
1744 |
+
'booking_action' : '{$booking_action}',
|
1745 |
+
'booking_id' : '-1',
|
1746 |
+
'reason_of_action' : jQuery( '#reason_of_action' ).val(),
|
1747 |
+
'ui_clicked_element_id': '{$el_id}'
|
1748 |
+
} );
|
1749 |
+
wpbc_button_enable_loading_icon( this ); " ,
|
1750 |
+
'icon' => array(
|
1751 |
+
'icon_font' => 'wpbc_icn_disabled_visible',
|
1752 |
+
'position' => 'right',
|
1753 |
+
'icon_img' => ''
|
1754 |
+
),
|
1755 |
+
'class' => '', // '' | 'wpbc_ui_button_primary'
|
1756 |
+
'style' => '', // Any CSS class here
|
1757 |
+
'mobile_show_text' => !true, // Show or hide text, when viewing on Mobile devices (small window size).
|
1758 |
+
'attr' => array( 'id' => $el_id )
|
1759 |
+
);
|
1760 |
+
|
1761 |
+
wpbc_flex_button( $params );
|
1762 |
+
}
|
1763 |
+
|
1764 |
+
function wpbc_ajx__ui__action_button__read( $escaped_search_request_params ){
|
1765 |
+
|
1766 |
+
$booking_action = 'set_booking_as_read';
|
1767 |
+
|
1768 |
+
$el_id = 'ui_btn_' . $booking_action;
|
1769 |
+
|
1770 |
+
if ( ! wpbc_is_user_can( $booking_action, get_current_user_id() ) ) {
|
1771 |
+
return false;
|
1772 |
+
}
|
1773 |
+
|
1774 |
+
$params = array(
|
1775 |
+
'type' => 'button' ,
|
1776 |
+
'title' => __( 'Read', 'booking' ) . ' ', // Title of the button
|
1777 |
+
'hint' => array( 'title' => __( 'Mark as read selected bookings', 'booking' ), 'position' => 'top' ), // Hint
|
1778 |
+
'link' => 'javascript:void(0)', // Direct link or skip it
|
1779 |
+
'action' => "wpbc_ajx_booking_ajax_action_request( {
|
1780 |
+
'booking_action' : '{$booking_action}',
|
1781 |
+
'booking_id' : wpbc_get_selected_row_id(),
|
1782 |
+
'reason_of_action' : jQuery( '#reason_of_action' ).val(),
|
1783 |
+
'ui_clicked_element_id': '{$el_id}'
|
1784 |
+
} );
|
1785 |
+
wpbc_button_enable_loading_icon( this ); " ,
|
1786 |
+
'icon' => array(
|
1787 |
+
'icon_font' => 'wpbc_icn_visibility_off',
|
1788 |
+
'position' => 'right',
|
1789 |
+
'icon_img' => ''
|
1790 |
+
),
|
1791 |
+
'class' => 'hide_button_if_no_selection', // '' | 'wpbc_ui_button_primary'
|
1792 |
+
'style' => '', // Any CSS class here
|
1793 |
+
'mobile_show_text' => !true, // Show or hide text, when viewing on Mobile devices (small window size).
|
1794 |
+
'attr' => array( 'id' => $el_id )
|
1795 |
+
);
|
1796 |
+
|
1797 |
+
wpbc_flex_button( $params );
|
1798 |
+
}
|
1799 |
+
|
1800 |
+
function wpbc_ajx__ui__action_button__unread( $escaped_search_request_params ){
|
1801 |
+
|
1802 |
+
$booking_action = 'set_booking_as_unread';
|
1803 |
+
|
1804 |
+
$el_id = 'ui_btn_' . $booking_action;
|
1805 |
+
|
1806 |
+
if ( ! wpbc_is_user_can( $booking_action, get_current_user_id() ) ) {
|
1807 |
+
return false;
|
1808 |
+
}
|
1809 |
+
|
1810 |
+
$params = array(
|
1811 |
+
'type' => 'button' ,
|
1812 |
+
'title' => __( 'Unread', 'booking' ) . ' ', // Title of the button
|
1813 |
+
'hint' => array( 'title' => __( 'Mark as Unread selected bookings', 'booking' ), 'position' => 'top' ), // Hint
|
1814 |
+
'link' => 'javascript:void(0)', // Direct link or skip it
|
1815 |
+
'action' => "wpbc_ajx_booking_ajax_action_request( {
|
1816 |
+
'booking_action' : '{$booking_action}',
|
1817 |
+
'booking_id' : wpbc_get_selected_row_id(),
|
1818 |
+
'reason_of_action' : jQuery( '#reason_of_action' ).val(),
|
1819 |
+
'ui_clicked_element_id': '{$el_id}'
|
1820 |
+
} );
|
1821 |
+
wpbc_button_enable_loading_icon( this ); " ,
|
1822 |
+
'icon' => array(
|
1823 |
+
'icon_font' => 'wpbc_icn_visibility',
|
1824 |
+
'position' => 'right',
|
1825 |
+
'icon_img' => ''
|
1826 |
+
),
|
1827 |
+
'class' => 'hide_button_if_no_selection', // '' | 'wpbc_ui_button_primary'
|
1828 |
+
'style' => '', // Any CSS class here
|
1829 |
+
'mobile_show_text' => !true, // Show or hide text, when viewing on Mobile devices (small window size).
|
1830 |
+
'attr' => array( 'id' => $el_id )
|
1831 |
+
);
|
1832 |
+
|
1833 |
+
wpbc_flex_button( $params );
|
1834 |
+
}
|
1835 |
+
|
1836 |
+
function wpbc_ajx__ui__action_button__print( $escaped_search_request_params ){
|
1837 |
+
$user_bk_id = 1;
|
1838 |
+
$params = array(
|
1839 |
+
'type' => 'button',
|
1840 |
+
'title' => __( 'Print', 'booking' ) . ' ',
|
1841 |
+
'hint' => array(
|
1842 |
+
'title' => __( 'Print bookings listing', 'booking' ),
|
1843 |
+
'position' => 'top'
|
1844 |
+
),
|
1845 |
+
'link' => 'javascript:void(0)',
|
1846 |
+
'action' => "wpbc_print_dialog__show();",
|
1847 |
+
'icon' => array(
|
1848 |
+
'icon_font' => 'wpbc_icn_print',
|
1849 |
+
'position' => 'right',
|
1850 |
+
'icon_img' => ''
|
1851 |
+
),
|
1852 |
+
'class' => '',
|
1853 |
+
'style' => '',
|
1854 |
+
'attr' => array(),
|
1855 |
+
'mobile_show_text' => true
|
1856 |
+
);
|
1857 |
+
wpbc_flex_button( $params );
|
1858 |
+
}
|
1859 |
+
|
1860 |
+
function wpbc_ajx__ui__action_button__import( $escaped_search_request_params ){
|
1861 |
+
|
1862 |
+
$booking_action = 'import_google_calendar';
|
1863 |
+
|
1864 |
+
if ( ! wpbc_is_user_can( $booking_action, get_current_user_id() ) ) {
|
1865 |
+
return false;
|
1866 |
+
}
|
1867 |
+
|
1868 |
+
|
1869 |
+
$booking_gcal_feed = get_bk_option( 'booking_gcal_feed');
|
1870 |
+
|
1871 |
+
if ( ( ! class_exists( 'wpdev_bk_personal' ) ) && ( $booking_gcal_feed == '' ) ) {
|
1872 |
+
$is_this_btn_disabled = true;
|
1873 |
+
} else {
|
1874 |
+
$is_this_btn_disabled = false;
|
1875 |
+
}
|
1876 |
+
|
1877 |
+
$params = array(
|
1878 |
+
'type' => 'button',
|
1879 |
+
'title' => __( 'Import', 'booking' ) . ' ',
|
1880 |
+
'hint' => array(
|
1881 |
+
'title' => __( 'Import Google Calendar Events', 'booking' ),
|
1882 |
+
'position' => 'top'
|
1883 |
+
),
|
1884 |
+
'link' => 'javascript:void(0)',
|
1885 |
+
'action' => " if ( 'function' === typeof( jQuery('#wpbc_modal__import_google_calendar__section').wpbc_my_modal ) ) {
|
1886 |
+
jQuery('#wpbc_modal__import_google_calendar__section').wpbc_my_modal('show');
|
1887 |
+
} else {
|
1888 |
+
alert( 'Warning! wpbc_my_modal module has not found. Please, recheck about any conflicts by deactivating other plugins.');
|
1889 |
+
}",
|
1890 |
+
'icon' => array(
|
1891 |
+
'icon_font' => 'wpbc_icn_event',
|
1892 |
+
'position' => 'right',
|
1893 |
+
'icon_img' => ''
|
1894 |
+
),
|
1895 |
+
'class' => '',//( $is_this_btn_disabled ? ' disabled' : '' ),
|
1896 |
+
'style' => '',
|
1897 |
+
'attr' => array(),
|
1898 |
+
'mobile_show_text' => true
|
1899 |
+
);
|
1900 |
+
wpbc_flex_button( $params );
|
1901 |
+
}
|
1902 |
+
|
1903 |
+
function wpbc_ajx__ui__action_button__export_csv( $escaped_search_request_params ){
|
1904 |
+
|
1905 |
+
if ( ! class_exists( 'wpdev_bk_personal' ) ) {
|
1906 |
+
return false;
|
1907 |
+
}
|
1908 |
+
|
1909 |
+
$booking_action = 'export_csv';
|
1910 |
+
$el_id = 'ui_btn_' . $booking_action;
|
1911 |
+
|
1912 |
+
if ( ! wpbc_is_user_can( $booking_action, get_current_user_id() ) ) {
|
1913 |
+
return false;
|
1914 |
+
}
|
1915 |
+
|
1916 |
+
$params = array(
|
1917 |
+
'type' => 'button',
|
1918 |
+
'title' => __( 'Export to CSV', 'booking' ) . ' ',
|
1919 |
+
'hint' => array(
|
1920 |
+
'title' => __( 'Export bookings to CSV format', 'booking' ),
|
1921 |
+
'position' => 'top'
|
1922 |
+
),
|
1923 |
+
'link' => 'javascript:void(0)',
|
1924 |
+
//'action' => wpbc_csv_get_url_for_button( 'page' ),
|
1925 |
+
'action' => "if ( 'function' === typeof( jQuery('#wpbc_modal__export_csv__section').wpbc_my_modal ) ) {
|
1926 |
+
jQuery('#wpbc_modal__export_csv__section').wpbc_my_modal('show');
|
1927 |
+
} else {
|
1928 |
+
alert( 'Warning! wpbc_my_modal module has not found. Please, recheck about any conflicts by deactivating other plugins.');
|
1929 |
+
}",
|
1930 |
+
'icon' => array(
|
1931 |
+
'icon_font' => 'wpbc_icn_file_upload',
|
1932 |
+
'position' => 'right',
|
1933 |
+
'icon_img' => ''
|
1934 |
+
),
|
1935 |
+
'class' => '',
|
1936 |
+
'style' => '',
|
1937 |
+
'attr' => array( 'id' => $el_id ),
|
1938 |
+
'mobile_show_text' => true
|
1939 |
+
);
|
1940 |
+
wpbc_flex_button( $params );
|
1941 |
+
}
|
1942 |
+
|
1943 |
+
function wpbc_ajx__ui__action_button__export_csv_page( $escaped_search_request_params ){
|
1944 |
+
|
1945 |
+
if ( ! class_exists( 'wpdev_bk_personal' ) ) {
|
1946 |
+
return false;
|
1947 |
+
}
|
1948 |
+
|
1949 |
+
$booking_action = 'export_csv';
|
1950 |
+
$el_id = 'ui_btn_' . $booking_action;
|
1951 |
+
|
1952 |
+
if ( ! wpbc_is_user_can( $booking_action, get_current_user_id() ) ) {
|
1953 |
+
return false;
|
1954 |
+
}
|
1955 |
+
|
1956 |
+
$params = array(
|
1957 |
+
'type' => 'button',
|
1958 |
+
'title' => __( 'Export page to CSV', 'booking' ) . ' ',
|
1959 |
+
'hint' => array(
|
1960 |
+
'title' => __( 'Export only current page of bookings to CSV format', 'booking' ),
|
1961 |
+
'position' => 'top'
|
1962 |
+
),
|
1963 |
+
'link' => 'javascript:void(0)',
|
1964 |
+
//'action' => wpbc_csv_get_url_for_button( 'page' ),
|
1965 |
+
'action' => "wpbc_ajx_booking__ui_click__export_csv( {
|
1966 |
+
'booking_action' : '{$booking_action}',
|
1967 |
+
'ui_clicked_element_id': '{$el_id}',
|
1968 |
+
'export_type': 'csv_page'
|
1969 |
+
} );",
|
1970 |
+
'icon' => array(
|
1971 |
+
'icon_font' => 'wpbc_icn_file_upload',
|
1972 |
+
'position' => 'right',
|
1973 |
+
'icon_img' => ''
|
1974 |
+
),
|
1975 |
+
'class' => '',
|
1976 |
+
'style' => '',
|
1977 |
+
'attr' => array( 'id' => $el_id ),
|
1978 |
+
'mobile_show_text' => true
|
1979 |
+
);
|
1980 |
+
wpbc_flex_button( $params );
|
1981 |
+
}
|
1982 |
+
|
1983 |
+
function wpbc_ajx__ui__action_button__export_csv_all( $escaped_search_request_params ){
|
1984 |
+
|
1985 |
+
if ( ! class_exists( 'wpdev_bk_personal' ) ) {
|
1986 |
+
return false;
|
1987 |
+
}
|
1988 |
+
|
1989 |
+
$booking_action = 'export_csv';
|
1990 |
+
$el_id = 'ui_btn_' . $booking_action . '_all';
|
1991 |
+
|
1992 |
+
if ( ! wpbc_is_user_can( $booking_action, get_current_user_id() ) ) {
|
1993 |
+
return false;
|
1994 |
+
}
|
1995 |
+
|
1996 |
+
$params = array(
|
1997 |
+
'type' => 'button',
|
1998 |
+
'title' => __( 'Export all pages to CSV', 'booking' ) . ' ',
|
1999 |
+
'hint' => array(
|
2000 |
+
'title' => __( 'Export All bookings to CSV format', 'booking' ),
|
2001 |
+
'position' => 'top'
|
2002 |
+
),
|
2003 |
+
'link' => 'javascript:void(0)',
|
2004 |
+
//'action' => wpbc_csv_get_url_for_button( 'all' ),
|
2005 |
+
'action' => "wpbc_ajx_booking__ui_click__export_csv( {
|
2006 |
+
'booking_action' : '{$booking_action}',
|
2007 |
+
'ui_clicked_element_id': '{$el_id}',
|
2008 |
+
'export_type': 'csv_all'
|
2009 |
+
} );",
|
2010 |
+
|
2011 |
+
'icon' => array(
|
2012 |
+
'icon_font' => 'wpbc_icn_publish',
|
2013 |
+
'position' => 'right',
|
2014 |
+
'icon_img' => ''
|
2015 |
+
),
|
2016 |
+
'class' => '',
|
2017 |
+
'style' => '',
|
2018 |
+
'attr' => array( 'id' => $el_id ),
|
2019 |
+
'mobile_show_text' => true
|
2020 |
+
);
|
2021 |
+
wpbc_flex_button( $params );
|
2022 |
+
}
|
2023 |
+
|
2024 |
+
function wpbc_ajx__ui__action_button__empty_trash( $escaped_search_request_params ){
|
2025 |
+
|
2026 |
+
$booking_action = 'empty_trash';
|
2027 |
+
|
2028 |
+
$el_id = 'ui_btn_' . $booking_action;
|
2029 |
+
|
2030 |
+
if ( ! wpbc_is_user_can( $booking_action, get_current_user_id() ) ) {
|
2031 |
+
return false;
|
2032 |
+
}
|
2033 |
+
|
2034 |
+
$params = array(
|
2035 |
+
'type' => 'button' ,
|
2036 |
+
'title' => __( 'Empty Trash', 'booking' ) . ' ', // Title of the button
|
2037 |
+
'hint' => array( 'title' => __( 'Empty Trash', 'booking' ), 'position' => 'top' ), // Hint
|
2038 |
+
'link' => 'javascript:void(0)', // Direct link or skip it
|
2039 |
+
'action' => "if ( wpbc_are_you_sure('" . esc_attr( __( 'Do you really want to do this ?', 'booking' ) ) . "') ) {
|
2040 |
+
wpbc_ajx_booking_ajax_action_request( {
|
2041 |
+
'booking_action' : '{$booking_action}',
|
2042 |
+
'ui_clicked_element_id': '{$el_id}'
|
2043 |
+
} );
|
2044 |
+
wpbc_button_enable_loading_icon( this );
|
2045 |
+
}" ,
|
2046 |
+
'icon' => array(
|
2047 |
+
'icon_font' => 'wpbc_icn_delete_forever',
|
2048 |
+
'position' => 'right',
|
2049 |
+
'icon_img' => ''
|
2050 |
+
),
|
2051 |
+
'class' => '', // '' | 'wpbc_ui_button_primary'
|
2052 |
+
'style' => '', // Any CSS class here
|
2053 |
+
'mobile_show_text' => true, // Show or hide text, when viewing on Mobile devices (small window size).
|
2054 |
+
'attr' => array( 'id' => $el_id )
|
2055 |
+
);
|
2056 |
+
|
2057 |
+
wpbc_flex_button( $params );
|
2058 |
+
}
|
2059 |
+
// </editor-fold>
|
2060 |
+
|
2061 |
+
|
2062 |
+
// <editor-fold defaultstate="collapsed" desc=" T o o l b a r O p t i o n s B u t t o n s " >
|
2063 |
+
|
2064 |
+
|
2065 |
+
function wpbc_ajx__ui__options_checkbox__send_emails( $escaped_search_request_params, $defaults ){
|
2066 |
+
|
2067 |
+
$el_id = 'ui_usr__send_emails';
|
2068 |
+
|
2069 |
+
$el_value = isset( $escaped_search_request_params[ $el_id ] ) ? $escaped_search_request_params[ $el_id ] : $defaults[ $el_id ];
|
2070 |
+
|
2071 |
+
$params_checkbox = array(
|
2072 |
+
'id' => $el_id // HTML ID of element
|
2073 |
+
, 'name' => $el_id
|
2074 |
+
, 'label' => array( 'title' => __( 'Emails sending', 'booking' ) , 'position' => 'left' )
|
2075 |
+
, 'style' => '' // CSS of select element
|
2076 |
+
, 'class' => '' // CSS Class of select element
|
2077 |
+
, 'disabled' => false
|
2078 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
2079 |
+
, 'legend' => '' // aria-label parameter
|
2080 |
+
, 'value' => $el_value // Some Value from optins array that selected by default
|
2081 |
+
, 'selected' => ( ( 'send' == $el_value ) ? true : false ) // Selected or not
|
2082 |
+
//, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
2083 |
+
, 'onchange' => "wpbc_ajx_booking_send_search_request_with_params( {'ui_usr__send_emails': (jQuery( this ).is(':checked') ? 'send' : 'not_send') } );" // JavaScript code
|
2084 |
+
);
|
2085 |
+
|
2086 |
+
wpbc_flex_checkbox( $params_checkbox );
|
2087 |
+
}
|
2088 |
+
|
2089 |
+
|
2090 |
+
function wpbc_ajx__ui__options_checkbox__is_expand_remarks( $escaped_search_request_params, $defaults ){
|
2091 |
+
|
2092 |
+
$el_id = 'ui_usr__is_expand_remarks';
|
2093 |
+
|
2094 |
+
$el_value = isset( $escaped_search_request_params[ $el_id ] ) ? $escaped_search_request_params[ $el_id ] : $defaults[ $el_id ];
|
2095 |
+
|
2096 |
+
$params_checkbox = array(
|
2097 |
+
'id' => $el_id // HTML ID of element
|
2098 |
+
, 'name' => $el_id
|
2099 |
+
, 'label' => array( 'title' => __( 'Show / hide notes', 'booking' ) , 'position' => 'left' )
|
2100 |
+
, 'legend' => __('Check this box if you want to open notes section by default in Booking Listing page.' ,'booking')
|
2101 |
+
, 'style' => '' // CSS of select element
|
2102 |
+
, 'class' => '' // CSS Class of select element
|
2103 |
+
, 'disabled' => false
|
2104 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
2105 |
+
, 'legend' => '' // aria-label parameter
|
2106 |
+
, 'value' => $el_value // Some Value from optins array that selected by default
|
2107 |
+
, 'selected' => ( ( 'On' == $el_value ) ? true : false ) // Selected or not
|
2108 |
+
//, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
2109 |
+
, 'onchange' => "wpbc_ajx_booking_send_search_request_with_params( {'ui_usr__is_expand_remarks': (jQuery( this ).is(':checked') ? 'On' : 'Off') } );" // JavaScript code
|
2110 |
+
);
|
2111 |
+
|
2112 |
+
wpbc_flex_checkbox( $params_checkbox );
|
2113 |
+
}
|
2114 |
+
// </editor-fold>
|
2115 |
+
|
2116 |
+
////////////////////////////////////////////////////////////////////////////////
|
2117 |
+
// Complex elements
|
2118 |
+
////////////////////////////////////////////////////////////////////////////////
|
2119 |
+
|
2120 |
+
/**
|
2121 |
+
* Show FLEX Dropdown
|
2122 |
+
*
|
2123 |
+
* Dropdown always have value as array. For example: [ '0' ], [ '4', '10' ] or [ '6', '', '2022-05-24' ]
|
2124 |
+
*
|
2125 |
+
* @param array $args
|
2126 |
+
*
|
2127 |
+
* = Simple Example: ==================================================================================================
|
2128 |
+
|
2129 |
+
$params = array(
|
2130 |
+
'id' => 'wh_approved'
|
2131 |
+
, 'default' => isset( $escaped_search_request_params['wh_approved'] ) ? $escaped_search_request_params['wh_approved'] : $defaults['wh_approved']
|
2132 |
+
, 'label' => ''//__('Status', 'booking') . ':'
|
2133 |
+
, 'title' => __('Status', 'booking')
|
2134 |
+
, 'hint' => array( 'title' => __('Filter bookings by booking status' ,'booking') , 'position' => 'top' )
|
2135 |
+
, 'li_options' => array (
|
2136 |
+
'0' => __( 'Pending', 'booking' ),
|
2137 |
+
'1' => __( 'Approved', 'booking' ),
|
2138 |
+
'divider1' => array( 'type' => 'html', 'html' => '<hr/>' ),
|
2139 |
+
// 'header1' => array( 'type' => 'header', 'title' => __( 'Default', 'booking' ) ),
|
2140 |
+
'any' => array(
|
2141 |
+
'type' => 'simple',
|
2142 |
+
'value' => '',
|
2143 |
+
// 'disabled' => true,
|
2144 |
+
'title' => __( 'Any', 'booking' )
|
2145 |
+
),
|
2146 |
+
)
|
2147 |
+
);
|
2148 |
+
|
2149 |
+
?><div class="ui_element ui_nowrap"><?php
|
2150 |
+
|
2151 |
+
wpbc_flex_dropdown( $params );
|
2152 |
+
|
2153 |
+
?></div><?php
|
2154 |
+
*
|
2155 |
+
*
|
2156 |
+
* = Complex Example: =================================================================================================
|
2157 |
+
*
|
2158 |
+
|
2159 |
+
$params_addon = array(
|
2160 |
+
'type' => 'span'
|
2161 |
+
, 'html' => ''// '<i class="menu_icon icon-1x wpbc_icn_event"></i>' //'<strong>' . __( 'Dates', 'booking ' ) . '</strong>'
|
2162 |
+
, 'icon' => array( 'icon_font' => 'wpbc_icn_event', 'position' => 'right', 'icon_img' => '' )
|
2163 |
+
, 'class' => 'wpbc_ui_button inactive'
|
2164 |
+
, 'style' => ''
|
2165 |
+
, 'attr' => array()
|
2166 |
+
);
|
2167 |
+
|
2168 |
+
$dates_interval = array(
|
2169 |
+
1 => '1' . ' ' . __('day' ,'booking')
|
2170 |
+
, 2 => '2' . ' ' . __('days' ,'booking')
|
2171 |
+
, 3 => '3' . ' ' . __('days' ,'booking')
|
2172 |
+
, 4 => '4' . ' ' . __('days' ,'booking')
|
2173 |
+
, 5 => '5' . ' ' . __('days' ,'booking')
|
2174 |
+
, 6 => '6' . ' ' . __('days' ,'booking')
|
2175 |
+
, 7 => '1' . ' ' . __('week' ,'booking')
|
2176 |
+
, 14 => '2' . ' ' . __('weeks' ,'booking')
|
2177 |
+
, 30 => '1' . ' ' . __('month' ,'booking')
|
2178 |
+
, 60 => '2' . ' ' . __('months' ,'booking')
|
2179 |
+
, 90 => '3' . ' ' . __('months' ,'booking')
|
2180 |
+
, 183 => '6' . ' ' . __('months' ,'booking')
|
2181 |
+
, 365 => '1' . ' ' . __('Year' ,'booking')
|
2182 |
+
);
|
2183 |
+
|
2184 |
+
$request_input_el_default = array(
|
2185 |
+
'wh_booking_date' => isset( $escaped_search_request_params['wh_booking_date'] ) ? $escaped_search_request_params['wh_booking_date'] : $defaults['wh_booking_date'],
|
2186 |
+
'ui_wh_booking_date_radio' => isset( $escaped_search_request_params['ui_wh_booking_date_radio'] ) ? $escaped_search_request_params['ui_wh_booking_date_radio'] : $defaults['ui_wh_booking_date_radio'],
|
2187 |
+
'ui_wh_booking_date_next' => isset( $escaped_search_request_params['ui_wh_booking_date_next'] ) ? $escaped_search_request_params['ui_wh_booking_date_next'] : $defaults['ui_wh_booking_date_next'],
|
2188 |
+
'ui_wh_booking_date_prior' => isset( $escaped_search_request_params['ui_wh_booking_date_prior'] ) ? $escaped_search_request_params['ui_wh_booking_date_prior'] : $defaults['ui_wh_booking_date_prior'],
|
2189 |
+
'ui_wh_booking_date_checkin' => isset( $escaped_search_request_params['ui_wh_booking_date_checkin'] ) ? $escaped_search_request_params['ui_wh_booking_date_checkin'] : $defaults['ui_wh_booking_date_checkin'],
|
2190 |
+
'ui_wh_booking_date_checkout' => isset( $escaped_search_request_params['ui_wh_booking_date_checkout'] ) ? $escaped_search_request_params['ui_wh_booking_date_checkout'] : $defaults['ui_wh_booking_date_checkout']
|
2191 |
+
);
|
2192 |
+
|
2193 |
+
$options = array (
|
2194 |
+
// 'header2' => array( 'type' => 'header', 'title' => __( 'Complex Days', 'booking' ) ),
|
2195 |
+
// 'disabled1' => array( 'type' => 'simple', 'value' => '19', 'title' => __( 'This is option was disabled', 'booking' ), 'disabled' => true ),
|
2196 |
+
|
2197 |
+
'0' => __( 'Current dates', 'booking' ),
|
2198 |
+
'1' => __( 'Today', 'booking' ),
|
2199 |
+
'2' => __( 'Previous dates', 'booking' ),
|
2200 |
+
'3' => __( 'All dates', 'booking' ),
|
2201 |
+
|
2202 |
+
'divider1' => array( 'type' => 'html', 'html' => '<hr/>' ),
|
2203 |
+
|
2204 |
+
'9' => __( 'Today check in/out', 'booking' ),
|
2205 |
+
'7' => __( 'Check In - Tomorrow', 'booking' ),
|
2206 |
+
'8' => __( 'Check Out - Tomorrow', 'booking' ),
|
2207 |
+
|
2208 |
+
'divider2' => array( 'type' => 'html', 'html' => '<hr/>' ),
|
2209 |
+
|
2210 |
+
// Next [ '4', '10' ] - radio button (if selected) value '4' and select-box with selected value '10'
|
2211 |
+
'next' => array(
|
2212 |
+
'type' => 'complex',
|
2213 |
+
'class' => 'ui_complex_option_element',
|
2214 |
+
// recheck if LI selected: $options['next']['selected_options_value'] == $params['default], e.g. ~ [ '4', '10' ]
|
2215 |
+
'selected_options_value' => array(
|
2216 |
+
1 => array( 'value' ), // $options['next']['input_options'][ 1 ]['value'] '4'
|
2217 |
+
4 => array( 'value' ) // $options['next']['input_options'][ 4 ]['value'] '10'
|
2218 |
+
),
|
2219 |
+
// Get selected Title, for dropdown if $options['next'] selected
|
2220 |
+
'selected_options_title' => array(
|
2221 |
+
1 => array( 'label', 'title' ), // $options['next']['input_options'][ 1 ]['label'][ 'title' ] 'Next'
|
2222 |
+
'text1' => ': ', // if key 'text1' not exist in ['input_options'], then it text ': '
|
2223 |
+
4 => array( 'options', $request_input_el_default['ui_wh_booking_date_next'] ) // '10 days'
|
2224 |
+
),
|
2225 |
+
'input_options' => array(
|
2226 |
+
array( 'type' => 'html', 'html' => '<div class="ui_element">' )
|
2227 |
+
, array( // Default options from simple input element, like: wpbc_flex_radio()
|
2228 |
+
'type' => 'radio'
|
2229 |
+
, 'id' => 'ui_wh_booking_date_radio_1' // HTML ID of element
|
2230 |
+
, 'name' => 'ui_wh_booking_date_radio'
|
2231 |
+
, 'label' => array( 'title' => __('Next' ,'booking') , 'position' => 'right' )
|
2232 |
+
, 'style' => '' // CSS of select element
|
2233 |
+
, 'class' => '' // CSS Class of select element
|
2234 |
+
, 'disabled' => false
|
2235 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
2236 |
+
, 'legend' => '' // aria-label parameter
|
2237 |
+
, 'value' => '4'
|
2238 |
+
, 'selected' => ( $request_input_el_default[ 'ui_wh_booking_date_radio' ] == '4' ) ? true : false // Selected or not
|
2239 |
+
, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
2240 |
+
, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
2241 |
+
)
|
2242 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
2243 |
+
, array( 'type' => 'html', 'html' => '<div class="ui_element">' )
|
2244 |
+
, array(
|
2245 |
+
'type' => 'select'
|
2246 |
+
, 'attr' => array()
|
2247 |
+
, 'name' => 'ui_wh_booking_date_next'
|
2248 |
+
, 'id' => 'ui_wh_booking_date_next'
|
2249 |
+
, 'options' => $dates_interval
|
2250 |
+
, 'value' => $request_input_el_default[ 'ui_wh_booking_date_next']
|
2251 |
+
, 'onfocus' => "jQuery('#ui_wh_booking_date_radio_1').prop('checked', true);" // JavaScript code
|
2252 |
+
, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
2253 |
+
)
|
2254 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
2255 |
+
)
|
2256 |
+
),
|
2257 |
+
|
2258 |
+
// Prior [ '5', '10' ]
|
2259 |
+
'prior' => array(
|
2260 |
+
'type' => 'complex',
|
2261 |
+
'class' => 'ui_complex_option_element',
|
2262 |
+
'style' => 'min-width: 244px;',
|
2263 |
+
'selected_options_value' => array( 1 => array( 'value' ), 4 => array( 'value' ) ), // 4 => array( 'value' ) --> $complex_option['input_options'][4]['value']
|
2264 |
+
'selected_options_title' => array( 1 => array( 'label', 'title' )
|
2265 |
+
, 'text1' => ': '
|
2266 |
+
, 4 => array( 'options' , $request_input_el_default[ 'ui_wh_booking_date_prior'] )
|
2267 |
+
), // 1 => array( 'label', 'title' ) --> $complex_option['input_options'][1]['label'][ 'title' ]
|
2268 |
+
'input_options' => array(
|
2269 |
+
array( 'type' => 'html', 'html' => '<div class="ui_element">' )
|
2270 |
+
, array(
|
2271 |
+
'type' => 'radio'
|
2272 |
+
|
2273 |
+
, 'id' => 'ui_wh_booking_date_radio_2' // HTML ID of element
|
2274 |
+
, 'name' => 'ui_wh_booking_date_radio'
|
2275 |
+
, 'label' => array( 'title' => __('Prior' ,'booking') , 'position' => 'right' )
|
2276 |
+
, 'style' => '' // CSS of select element
|
2277 |
+
, 'class' => '' // CSS Class of select element
|
2278 |
+
, 'disabled' => false
|
2279 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
2280 |
+
, 'legend' => '' // aria-label parameter
|
2281 |
+
, 'value' => '5' // Some Value from optins array that selected by default
|
2282 |
+
, 'selected' => ( $request_input_el_default[ 'ui_wh_booking_date_radio' ] == '5' ) ? true : false // Selected or not
|
2283 |
+
, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
2284 |
+
, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
2285 |
+
)
|
2286 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
2287 |
+
, array( 'type' => 'html', 'html' => '<div class="ui_element">' )
|
2288 |
+
, array(
|
2289 |
+
'type' => 'select'
|
2290 |
+
, 'attr' => array()
|
2291 |
+
, 'name' => 'ui_wh_booking_date_prior'
|
2292 |
+
, 'id' => 'ui_wh_booking_date_prior'
|
2293 |
+
, 'options' => $dates_interval
|
2294 |
+
, 'value' => $request_input_el_default[ 'ui_wh_booking_date_prior']
|
2295 |
+
, 'onfocus' => "jQuery('#ui_wh_booking_date_radio_2').prop('checked', true);" // JavaScript code
|
2296 |
+
, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
2297 |
+
)
|
2298 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
2299 |
+
)
|
2300 |
+
),
|
2301 |
+
|
2302 |
+
// Fixed [ '6', '', '2022-05-21']
|
2303 |
+
'fixed' => array(
|
2304 |
+
'type' => 'complex',
|
2305 |
+
'class' => 'ui_complex_option_element',
|
2306 |
+
'selected_options_value' => array( 1 => array( 'value' ), 4 => array( 'value' ), 7 => array( 'value' ) ), // 4 => array( 'value' ) --> $complex_option['input_options'][4]['value']
|
2307 |
+
'selected_options_title' => array( 1 => array( 'label', 'title' ), 'text1' => ': ', 4 => array( 'value' ), 'text2' => ' - ' ,7 => array( 'value' ) ), // 1 => array( 'label', 'title' ) --> $complex_option['input_options'][1]['label'][ 'title' ]
|
2308 |
+
'input_options' => array(
|
2309 |
+
array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex:1 1 100%;margin-top:5px;">' )
|
2310 |
+
, array(
|
2311 |
+
'type' => 'radio'
|
2312 |
+
|
2313 |
+
, 'id' => 'ui_wh_booking_date_radio_3' // HTML ID of element
|
2314 |
+
, 'name' => 'ui_wh_booking_date_radio'
|
2315 |
+
, 'label' => array( 'title' => __('Dates' ,'booking') , 'position' => 'right' )
|
2316 |
+
, 'style' => '' // CSS of select element
|
2317 |
+
, 'class' => '' // CSS Class of select element
|
2318 |
+
, 'disabled' => false
|
2319 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
2320 |
+
, 'legend' => '' // aria-label parameter
|
2321 |
+
, 'value' => '6' // Some Value from optins array that selected by default
|
2322 |
+
, 'selected' => ( $request_input_el_default[ 'ui_wh_booking_date_radio' ] == '6' ) ? true : false // Selected or not
|
2323 |
+
, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
2324 |
+
, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
2325 |
+
)
|
2326 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
2327 |
+
, array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex-flow: row wrap;padding: 4px 4px 4px 0;">' )
|
2328 |
+
, array(
|
2329 |
+
'type' => 'text'
|
2330 |
+
, 'id' => 'ui_wh_booking_date_checkin' // HTML ID of element
|
2331 |
+
, 'name' => 'ui_wh_booking_date_checkin'
|
2332 |
+
, 'label' => ''//__('Check-in' ,'booking')
|
2333 |
+
, 'style' => 'width:100%;' // CSS of select element
|
2334 |
+
, 'class' => 'wpdevbk-filters-section-calendar' // CSS Class of select element
|
2335 |
+
, 'disabled' => false
|
2336 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
2337 |
+
, 'placeholder' => __('Check-in' ,'booking')
|
2338 |
+
, 'value' => $request_input_el_default[ 'ui_wh_booking_date_checkin'] // Some Value from optins array that selected by default
|
2339 |
+
, 'onfocus' => "jQuery('#ui_wh_booking_date_radio_3').prop('checked', true);" // JavaScript code
|
2340 |
+
, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
2341 |
+
)
|
2342 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
2343 |
+
, array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex-flow: row wrap;padding: 4px 0 4px 4px;">' )
|
2344 |
+
, array(
|
2345 |
+
'type' => 'text'
|
2346 |
+
, 'id' => 'ui_wh_booking_date_checkout' // HTML ID of element
|
2347 |
+
, 'name' => 'ui_wh_booking_date_checkout'
|
2348 |
+
, 'label' => ''//__('Check-out' ,'booking')
|
2349 |
+
, 'style' => 'width:100%;' // CSS of select element
|
2350 |
+
, 'class' => 'wpdevbk-filters-section-calendar' // CSS Class of select element
|
2351 |
+
, 'disabled' => false
|
2352 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
2353 |
+
, 'placeholder' => __('Check-out' ,'booking')
|
2354 |
+
, 'value' => $request_input_el_default[ 'ui_wh_booking_date_checkout'] // Some Value from optins array that selected by default
|
2355 |
+
, 'onfocus' => "jQuery('#ui_wh_booking_date_radio_3').prop('checked', true);" // JavaScript code
|
2356 |
+
, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
2357 |
+
)
|
2358 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
2359 |
+
)
|
2360 |
+
),
|
2361 |
+
|
2362 |
+
'divider3' => array( 'type' => 'html', 'html' => '<hr/>' ),
|
2363 |
+
|
2364 |
+
// Buttons
|
2365 |
+
'buttons1' => array(
|
2366 |
+
'type' => 'complex',
|
2367 |
+
'class' => 'ui_complex_option_element',
|
2368 |
+
'style' => 'justify-content: flex-end;',
|
2369 |
+
'input_options' => array(
|
2370 |
+
array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex: 0 1 auto;margin: 0;">' )
|
2371 |
+
, array(
|
2372 |
+
'type' => 'button'
|
2373 |
+
, 'title' => __( 'Apply', 'booking' ) // Title of the button
|
2374 |
+
, 'hint' => '' // , 'hint' => array( 'title' => __('Select status' ,'booking') , 'position' => 'bottom' )
|
2375 |
+
, 'link' => 'javascript:void(0)' // Direct link or skip it
|
2376 |
+
, 'action' => "wpbc_ui_dropdown_apply_click( {
|
2377 |
+
'dropdown_id' : 'wh_booking_date',
|
2378 |
+
'dropdown_radio_name': 'ui_wh_booking_date_radio'
|
2379 |
+
} );" // JavaScript code
|
2380 |
+
, 'class' => 'wpbc_ui_button_primary' // wpbc_ui_button | wpbc_ui_button_primary
|
2381 |
+
, 'icon' => ''
|
2382 |
+
, 'font_icon' => ''
|
2383 |
+
, 'icon_position' => 'left' // Position of icon relative to Text: left | right
|
2384 |
+
, 'style' => '' // Any CSS class here
|
2385 |
+
, 'mobile_show_text' => false // Show or hide text, when viewing on Mobile devices (small window size).
|
2386 |
+
, 'attr' => array()
|
2387 |
+
)
|
2388 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
2389 |
+
, array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex: 0 1 auto;margin: 0 0 0 1em;">' )
|
2390 |
+
, array(
|
2391 |
+
'type' => 'button'
|
2392 |
+
, 'title' => __( 'Close', 'booking' ) // Title of the button
|
2393 |
+
, 'hint' => '' // , 'hint' => array( 'title' => __('Select status' ,'booking') , 'position' => 'bottom' )
|
2394 |
+
, 'link' => 'javascript:void(0)' // Direct link or skip it
|
2395 |
+
, 'action' => "wpbc_ui_dropdown_close_click( 'wh_booking_date' );" // JavaScript code
|
2396 |
+
, 'class' => '' // wpbc_ui_button | wpbc_ui_button_primary
|
2397 |
+
, 'icon' => ''
|
2398 |
+
, 'font_icon' => ''
|
2399 |
+
, 'icon_position' => 'left' // Position of icon relative to Text: left | right
|
2400 |
+
, 'style' => '' // Any CSS class here
|
2401 |
+
, 'mobile_show_text' => false // Show or hide text, when viewing on Mobile devices (small window size).
|
2402 |
+
, 'attr' => array()
|
2403 |
+
)
|
2404 |
+
, array( 'type' => 'html', 'html' => '</div>' )
|
2405 |
+
)
|
2406 |
+
),
|
2407 |
+
);
|
2408 |
+
|
2409 |
+
$params = array(
|
2410 |
+
'id' => 'wh_booking_date'
|
2411 |
+
, 'default' => $request_input_el_default[ 'wh_booking_date' ]
|
2412 |
+
, 'label' => ''//__('Approve 1', 'booking') . ':'
|
2413 |
+
, 'title' => ''//__('Approve 2', 'booking')
|
2414 |
+
, 'hint' => array( 'title' => __('Filter bookings by booking dates' ,'booking') , 'position' => 'top' )
|
2415 |
+
, 'align' => 'left'
|
2416 |
+
, 'li_options' => $options
|
2417 |
+
);
|
2418 |
+
|
2419 |
+
?><div class="ui_element ui_nowrap"><?php
|
2420 |
+
|
2421 |
+
wpbc_flex_addon( $params_addon );
|
2422 |
+
|
2423 |
+
wpbc_flex_dropdown( $params );
|
2424 |
+
|
2425 |
+
?></div><?php
|
2426 |
+
|
2427 |
+
*
|
2428 |
+
* =====================================================================================================================
|
2429 |
+
*/
|
2430 |
+
function wpbc_flex_dropdown( $args = array() ) {
|
2431 |
+
|
2432 |
+
// $milliseconds = round( microtime( true ) * 1000 );
|
2433 |
+
|
2434 |
+
$defaults = array(
|
2435 |
+
'id' => '' // HTML ID of element Example: 'wh_booking_date'
|
2436 |
+
, 'default' => array() // Selected by default value(s) Example: 'default' => array( $defaults['wh_booking_date'] , $defaults['wh_booking_date2'] )
|
2437 |
+
, 'hint' => '' // Mouse over tooltip Example: 'hint' => array( 'title' => __('Select status' ,'booking') , 'position' => 'bottom' )
|
2438 |
+
, 'style' => '' // CSS style of dropdown element (optional)
|
2439 |
+
, 'class' => '' // CSS class of dropdown element (optional)
|
2440 |
+
, 'label' => '' // Label of element "at Top of element"
|
2441 |
+
, 'title' => '' // Title of element "Inside of element"
|
2442 |
+
, 'align' => 'left' // Align: left | right
|
2443 |
+
, 'li_options' => array() // Options
|
2444 |
+
, 'disabled' => array() // If some options disabled, then option values list here
|
2445 |
+
, 'onfocus' => '' // JavaScript code
|
2446 |
+
, 'onchange' => '' // JavaScript code
|
2447 |
+
|
2448 |
+
);
|
2449 |
+
$params = wp_parse_args( $args, $defaults );
|
2450 |
+
|
2451 |
+
// If default value not array, then define it as single value in arr.
|
2452 |
+
if ( ! is_array( $params['default'] ) ) {
|
2453 |
+
$params['default'] = array( $params['default'] );
|
2454 |
+
}
|
2455 |
+
|
2456 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
2457 |
+
/**
|
2458 |
+
* Recomposition of simple options configuration from
|
2459 |
+
* 'any' => __( 'Any', 'booking' )
|
2460 |
+
* to
|
2461 |
+
* 'any' => array( 'type' => 'simple', 'value' => 'any', 'title' => __( 'Any', 'booking' ) );
|
2462 |
+
*/
|
2463 |
+
$is_this_simple_list = true;
|
2464 |
+
foreach ( $params['li_options'] as $key_value => $option_data ) {
|
2465 |
+
|
2466 |
+
if ( ! is_array( $option_data ) ) {
|
2467 |
+
|
2468 |
+
$params['li_options'][ $key_value ] = array( 'type' => 'simple', 'value' => (string) $key_value, 'title' => $option_data );
|
2469 |
+
|
2470 |
+
} else {
|
2471 |
+
if ( ( isset( $option_data['type'] ) ) && ( 'complex' == $option_data['type'] ) ) {
|
2472 |
+
$is_this_simple_list = false;
|
2473 |
+
}
|
2474 |
+
}
|
2475 |
+
}
|
2476 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
2477 |
+
|
2478 |
+
|
2479 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
2480 |
+
// Rechecking about selected LI option, based on $params['default'] like ['4','10'] and getting title of such option
|
2481 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
2482 |
+
$default_selected_title = array();
|
2483 |
+
foreach ( $params['li_options'] as $li_option ) {
|
2484 |
+
|
2485 |
+
if ( 'simple' == $li_option['type'] ) {
|
2486 |
+
if ( $li_option['value'] === $params['default'][0] ) {
|
2487 |
+
$default_selected_title = $li_option['title'] ;
|
2488 |
+
}
|
2489 |
+
}
|
2490 |
+
|
2491 |
+
if ( 'complex' == $li_option['type'] ) {
|
2492 |
+
|
2493 |
+
// $option[ 'selected_options_value' ] => array( 1 => array( 'value' ), 4 => array( 'value' ) ),
|
2494 |
+
// $option[ 'selected_options_title' ] => array( 1 => array( 'label', 'title' ), 'text1' => ': ', 4 => array( 'value' ) ),
|
2495 |
+
|
2496 |
+
// Get value of this LI
|
2497 |
+
$li_this_value = array();
|
2498 |
+
if ( isset( $li_option['selected_options_value'] ) )
|
2499 |
+
foreach ( $li_option['selected_options_value'] as $li_key => $input_keys ) {
|
2500 |
+
|
2501 |
+
if ( isset( $li_option['input_options'][ $li_key ] ) ) { // ['input_options'][4]
|
2502 |
+
|
2503 |
+
$li_input_deep_value = $li_option['input_options'][ $li_key ];
|
2504 |
+
|
2505 |
+
foreach ( $input_keys as $input_key_value ) {
|
2506 |
+
|
2507 |
+
if ( isset( $li_input_deep_value[$input_key_value] ) ) { // ['input_options'][4]['value']
|
2508 |
+
$li_input_deep_value = $li_input_deep_value[ $input_key_value ];
|
2509 |
+
}
|
2510 |
+
}
|
2511 |
+
$li_this_value[] = $li_input_deep_value;
|
2512 |
+
}
|
2513 |
+
}
|
2514 |
+
|
2515 |
+
// Is this LI selected ?
|
2516 |
+
$is_same_value = array_diff( $params['default'], $li_this_value ) == array();
|
2517 |
+
|
2518 |
+
if ( $is_same_value ) {
|
2519 |
+
|
2520 |
+
// Get value of this LI
|
2521 |
+
$li_this_value = array();
|
2522 |
+
foreach ( $li_option['selected_options_title'] as $li_key => $input_keys ) {
|
2523 |
+
|
2524 |
+
if ( isset( $li_option['input_options'][ $li_key ] ) ) { // ['input_options'][4]
|
2525 |
+
|
2526 |
+
$li_input_deep_value = $li_option['input_options'][ $li_key ];
|
2527 |
+
|
2528 |
+
foreach ( $input_keys as $input_key_value ) {
|
2529 |
+
|
2530 |
+
if ( isset( $li_input_deep_value[$input_key_value] ) ) { // ['input_options'][4]['value']
|
2531 |
+
$li_input_deep_value = $li_input_deep_value[ $input_key_value ];
|
2532 |
+
}
|
2533 |
+
}
|
2534 |
+
$li_this_value[] = $li_input_deep_value;
|
2535 |
+
} else {
|
2536 |
+
$li_this_value[] = $input_keys; //some text
|
2537 |
+
}
|
2538 |
+
}
|
2539 |
+
|
2540 |
+
$default_selected_title = implode( '', $li_this_value );
|
2541 |
+
}
|
2542 |
+
}
|
2543 |
+
|
2544 |
+
if ( ! empty( $default_selected_title ) ) {
|
2545 |
+
break;
|
2546 |
+
}
|
2547 |
+
}
|
2548 |
+
|
2549 |
+
if ( is_array( $default_selected_title ) ) {
|
2550 |
+
$default_selected_title = implode( '', $default_selected_title ); // Error:: ? no values ?
|
2551 |
+
}
|
2552 |
+
|
2553 |
+
|
2554 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
2555 |
+
// Show only, if $item_params['label'] ! EMPTY
|
2556 |
+
wpbc_flex_label(
|
2557 |
+
array(
|
2558 |
+
'id' => $params['id']
|
2559 |
+
, 'label' => $params['label']
|
2560 |
+
, 'class' => 'wpbc_ui_dropdown__outside_label'
|
2561 |
+
)
|
2562 |
+
);
|
2563 |
+
|
2564 |
+
?><div class="wpbc_ui_dropdown <?php echo esc_attr( $params['class'] ); ?>"
|
2565 |
+
style="<?php echo esc_attr( $params['style'] ); ?>"
|
2566 |
+
><?php
|
2567 |
+
|
2568 |
+
?><a href="javascript:void(0)"
|
2569 |
+
id="<?php echo esc_attr( $params['id'] ); ?>_selector"
|
2570 |
+
data-toggle="wpbc_dropdown"
|
2571 |
+
class="wpbc_ui_control wpbc_ui_button dropdown-toggle <?php
|
2572 |
+
echo ( ! empty( $params['hint'] ) ) ? 'tooltip_' . $params['hint']['position'] . ' ' : '' ;
|
2573 |
+
?>"
|
2574 |
+
<?php if (! $is_this_simple_list ) { ?>
|
2575 |
+
onclick="javascript:jQuery('#<?php echo $params['id']; ?>_container').show();"
|
2576 |
+
<?php } ?>
|
2577 |
+
<?php if ( ! empty( $params['hint'] ) ) { ?>
|
2578 |
+
title="<?php echo esc_attr( $params['hint']['title'] ); ?>"
|
2579 |
+
<?php } ?>
|
2580 |
+
<?php echo wpbc_get_custom_attr( $params ); ?>
|
2581 |
+
><?php
|
2582 |
+
|
2583 |
+
?><label class="wpbc_ui_dropdown__inside_label" <?php if ( empty( $params['title'] ) ) { echo ' style="display:none;" '; } ?> ><?php
|
2584 |
+
|
2585 |
+
echo html_entity_decode(
|
2586 |
+
wp_kses_post( $params['title'] ) // Sanitizes content for allowed HTML tags for post content
|
2587 |
+
, ENT_QUOTES // Convert " to " and '
|
2588 |
+
, get_bloginfo( 'charset' ) // 'UTF-8' or other
|
2589 |
+
); // Convert &dash; to ‐ etc...
|
2590 |
+
?>: <?php
|
2591 |
+
?></label> <?php
|
2592 |
+
|
2593 |
+
?><span class="wpbc_selected_in_dropdown" ><?php
|
2594 |
+
echo html_entity_decode(
|
2595 |
+
wp_kses_post( $default_selected_title ) // Sanitizes content for allowed HTML tags for post content
|
2596 |
+
, ENT_QUOTES // Convert " to " and '
|
2597 |
+
, get_bloginfo( 'charset' ) // 'UTF-8' or other
|
2598 |
+
); // Convert &dash; to ‐ etc...
|
2599 |
+
?></span> <?php
|
2600 |
+
|
2601 |
+
?><span class="wpbc_ui_dropdown__inside_caret"></span><?php
|
2602 |
+
|
2603 |
+
?></a><?php
|
2604 |
+
|
2605 |
+
?><ul id="<?php echo $params['id']; ?>_container" class="ui_dropdown_menu ui_dropdown_menu-<?php echo esc_attr( $params['align'] ); ?>" ><?php
|
2606 |
+
|
2607 |
+
wpbc_flex_dropdown__options( $params, array( 'is_this_simple_list' => $is_this_simple_list ) );
|
2608 |
+
|
2609 |
+
?></ul><?php
|
2610 |
+
|
2611 |
+
?><input type="hidden"
|
2612 |
+
autocomplete="off"
|
2613 |
+
value=""
|
2614 |
+
id="<?php echo esc_attr( $params['id'] ); ?>"
|
2615 |
+
name="<?php echo esc_attr( $params['id'] ); ?>"
|
2616 |
+
/><?php
|
2617 |
+
?>
|
2618 |
+
<script type="text/javascript">
|
2619 |
+
<?php /* document.getElementById("<?php echo $params['id']; ?>").value = "<?php echo wp_slash( json_encode($params['default'] ) ); ?>"; */ ?>
|
2620 |
+
jQuery(document).ready(function(){
|
2621 |
+
|
2622 |
+
jQuery( '#<?php echo $params['id']; ?>').val( "<?php echo wp_slash( json_encode( $params['default'] ) ); ?>" );
|
2623 |
+
|
2624 |
+
<?php if (! empty( $params['onchange'] )) { ?>
|
2625 |
+
|
2626 |
+
jQuery( '#<?php echo $params['id']; ?>' ).on( 'change', function( event ){
|
2627 |
+
|
2628 |
+
<?php echo $params['onchange']; ?>
|
2629 |
+
});
|
2630 |
+
|
2631 |
+
<?php } ?>
|
2632 |
+
|
2633 |
+
<?php if (! empty( $params['onfocus'] )) { ?>
|
2634 |
+
|
2635 |
+
jQuery( '#<?php echo $params['id']; ?>_selector' ).on( 'focus', function( event ){
|
2636 |
+
|
2637 |
+
<?php echo $params['onfocus']; ?>
|
2638 |
+
});
|
2639 |
+
|
2640 |
+
<?php } ?>
|
2641 |
+
})
|
2642 |
+
</script>
|
2643 |
+
<?php
|
2644 |
+
|
2645 |
+
?></div><?php
|
2646 |
+
}
|
2647 |
+
|
2648 |
+
/**
|
2649 |
+
* Options list for Dropdown
|
2650 |
+
*
|
2651 |
+
* @param $params
|
2652 |
+
* @param array $args
|
2653 |
+
*/
|
2654 |
+
function wpbc_flex_dropdown__options( $params, $args = array() ) {
|
2655 |
+
|
2656 |
+
$defaults = array(
|
2657 |
+
// 'milliseconds' => round( microtime( true ) * 1000 ),
|
2658 |
+
'is_this_simple_list' => true
|
2659 |
+
);
|
2660 |
+
$args = wp_parse_args( $args, $defaults );
|
2661 |
+
|
2662 |
+
|
2663 |
+
foreach ( $params['li_options'] as $option_name => $li_option ) {
|
2664 |
+
|
2665 |
+
$default_option = array(
|
2666 |
+
'type' => ''
|
2667 |
+
, 'class' => ''
|
2668 |
+
, 'style' => ''
|
2669 |
+
, 'title' => ''
|
2670 |
+
, 'disabled' => false
|
2671 |
+
, 'attr' => array()
|
2672 |
+
, 'value' => ''
|
2673 |
+
, 'html' => ''
|
2674 |
+
);
|
2675 |
+
$li_option = wp_parse_args( $li_option, $default_option );
|
2676 |
+
|
2677 |
+
|
2678 |
+
// Is disabled ?
|
2679 |
+
if ( true === in_array( $li_option['value'], $params['disabled'] ) ) {
|
2680 |
+
$li_option['disabled'] = true;
|
2681 |
+
}
|
2682 |
+
if ( $li_option['disabled'] ) {
|
2683 |
+
$li_option['class'] .= ' disabled';
|
2684 |
+
}
|
2685 |
+
// Is header ?
|
2686 |
+
if ( 'header' == $li_option['type'] ) {
|
2687 |
+
$li_option['class'] .= ' dropdown-header';
|
2688 |
+
}
|
2689 |
+
|
2690 |
+
|
2691 |
+
?><li role="presentation"
|
2692 |
+
class="<?php echo esc_attr( $li_option['class'] ); ?>"
|
2693 |
+
style="<?php echo esc_attr( $li_option['style'] ); ?>"
|
2694 |
+
<?php echo wpbc_get_custom_attr( $li_option ); ?>
|
2695 |
+
><?php
|
2696 |
+
|
2697 |
+
switch ( $li_option['type'] ) {
|
2698 |
+
|
2699 |
+
case 'simple':
|
2700 |
+
|
2701 |
+
?><a role="menuitem"
|
2702 |
+
tabindex="-1"
|
2703 |
+
<?php if ( ! $li_option['disabled'] ) {
|
2704 |
+
|
2705 |
+
if( false !== filter_var( $li_option['value'], FILTER_VALIDATE_URL ) ){ ?>
|
2706 |
+
|
2707 |
+
href="<?php echo $li_option['value']; ?>"
|
2708 |
+
|
2709 |
+
<?php } else { ?>
|
2710 |
+
|
2711 |
+
href="javascript:void(0)"
|
2712 |
+
onclick="javascript: wpbc_ui_dropdown_simple_click( {
|
2713 |
+
'dropdown_id' : '<?php echo $params['id']; ?>'
|
2714 |
+
, 'is_this_simple_list': <?php echo ( $args['is_this_simple_list'] ) ? 'true' : 'false'; ?>
|
2715 |
+
, 'value' : '<?php echo $li_option['value']; ?>'
|
2716 |
+
, '_this' : this
|
2717 |
+
} );"
|
2718 |
+
<?php }
|
2719 |
+
|
2720 |
+
} ?>
|
2721 |
+
><?php
|
2722 |
+
echo $li_option['title'];
|
2723 |
+
?></a><?php
|
2724 |
+
|
2725 |
+
break;
|
2726 |
+
|
2727 |
+
case 'html':
|
2728 |
+
echo $li_option['html'];
|
2729 |
+
break;
|
2730 |
+
|
2731 |
+
case 'header':
|
2732 |
+
echo $li_option['title'];
|
2733 |
+
break;
|
2734 |
+
|
2735 |
+
case 'complex' :
|
2736 |
+
|
2737 |
+
foreach ( $li_option['input_options'] as $input_option ) {
|
2738 |
+
|
2739 |
+
switch ( $input_option['type'] ) {
|
2740 |
+
|
2741 |
+
case 'html':
|
2742 |
+
echo $input_option['html'];
|
2743 |
+
break;
|
2744 |
+
|
2745 |
+
case 'button':
|
2746 |
+
wpbc_flex_button( $input_option );
|
2747 |
+
break;
|
2748 |
+
|
2749 |
+
case 'label':
|
2750 |
+
wpbc_flex_label( $input_option );
|
2751 |
+
break;
|
2752 |
+
|
2753 |
+
case 'text':
|
2754 |
+
wpbc_flex_text( $input_option );
|
2755 |
+
break;
|
2756 |
+
|
2757 |
+
case 'select':
|
2758 |
+
wpbc_flex_select( $input_option );
|
2759 |
+
break;
|
2760 |
+
|
2761 |
+
case 'checkbox':
|
2762 |
+
wpbc_flex_checkbox( $input_option );
|
2763 |
+
break;
|
2764 |
+
|
2765 |
+
case 'radio':
|
2766 |
+
wpbc_flex_radio( $input_option );
|
2767 |
+
break;
|
2768 |
+
|
2769 |
+
case 'addon':
|
2770 |
+
wpbc_flex_addon( $input_option );
|
2771 |
+
break;
|
2772 |
+
|
2773 |
+
default: // Default
|
2774 |
+
}
|
2775 |
+
}
|
2776 |
+
break;
|
2777 |
+
|
2778 |
+
default: // Default
|
2779 |
+
}
|
2780 |
+
|
2781 |
+
?></li><?php
|
2782 |
+
}
|
2783 |
+
}
|
2784 |
+
|
2785 |
+
|
2786 |
+
////////////////////////////////////////////////////////////////////////////////
|
2787 |
+
// Simple elements
|
2788 |
+
////////////////////////////////////////////////////////////////////////////////
|
2789 |
+
|
2790 |
+
/**
|
2791 |
+
* Show FLEX Button
|
2792 |
+
*
|
2793 |
+
* @param array $item
|
2794 |
+
array(
|
2795 |
+
'type' => 'button'
|
2796 |
+
, 'title' => '' // Title of the button
|
2797 |
+
, 'hint' => '' // , 'hint' => array( 'title' => __('Select status' ,'booking') , 'position' => 'bottom' )
|
2798 |
+
, 'link' => 'javascript:void(0)' // Direct link or skip it
|
2799 |
+
, 'action' => '' // Some JavaScript to execure, for example run the function
|
2800 |
+
, 'class' => '' // wpbc_ui_button | wpbc_ui_button_primary
|
2801 |
+
, 'icon' => ''
|
2802 |
+
, 'font_icon' => ''
|
2803 |
+
, 'icon_position' => 'left' // Position of icon relative to Text: left | right
|
2804 |
+
, 'style' => '' // Any CSS class here
|
2805 |
+
, 'mobile_show_text' => false // Show or hide text, when viewing on Mobile devices (small window size).
|
2806 |
+
, 'attr' => array()
|
2807 |
+
);
|
2808 |
+
*/
|
2809 |
+
function wpbc_flex_button( $item ) {
|
2810 |
+
|
2811 |
+
$default_item_params = array(
|
2812 |
+
'type' => 'button'
|
2813 |
+
, 'title' => '' // Title of the button
|
2814 |
+
, 'hint' => '' // , 'hint' => array( 'title' => __('Select status' ,'booking') , 'position' => 'bottom' )
|
2815 |
+
, 'link' => 'javascript:void(0)' // Direct link or skip it
|
2816 |
+
, 'action' => '' // Some JavaScript to execure, for example run the function
|
2817 |
+
, 'id' => '' // '' | 'wpbc_ui_button_primary'
|
2818 |
+
, 'class' => '' // '' | 'wpbc_ui_button_primary'
|
2819 |
+
, 'icon' => false // array( 'icon_font' => 'wpbc_icn_check_circle_outline', 'position' => 'right', 'icon_img' => '' )
|
2820 |
+
, 'style' => '' // Any CSS class here
|
2821 |
+
, 'mobile_show_text' => false // Show or hide text, when viewing on Mobile devices (small window size).
|
2822 |
+
, 'attr' => array()
|
2823 |
+
, 'options' => array( 'link' => 'esc_attr' ) // array( 'link' => 'decode' )
|
2824 |
+
);
|
2825 |
+
$item_params = wp_parse_args( $item, $default_item_params );
|
2826 |
+
|
2827 |
+
?><a class="wpbc_ui_control wpbc_ui_button <?php echo esc_attr( $item_params['class'] );
|
2828 |
+
echo ( ! empty( $item_params['hint'] ) ) ? ' tooltip_' . esc_attr( $item_params['hint']['position'] ) . ' ' : '' ; ?>"
|
2829 |
+
style="<?php echo esc_attr( $item_params['style'] ); ?>"
|
2830 |
+
href="<?php
|
2831 |
+
if ( 'esc_attr' == $item_params['options']['link'] ) {
|
2832 |
+
echo esc_attr( $item_params['link'] );
|
2833 |
+
}
|
2834 |
+
if ( 'decode' == $item_params['options']['link'] ) {
|
2835 |
+
echo str_replace( '"', '', htmlspecialchars_decode( esc_attr( $item_params['link'] ), ENT_QUOTES ) );
|
2836 |
+
}
|
2837 |
+
if ( 'no_decode' == $item_params['options']['link'] ) {
|
2838 |
+
echo str_replace( '"', '', $item_params['link'] );
|
2839 |
+
}
|
2840 |
+
?>"
|
2841 |
+
<?php if ( ! empty( $item_params['id'] ) ) { ?>
|
2842 |
+
id="<?php echo $item_params['id']; ?>"
|
2843 |
+
<?php } ?>
|
2844 |
+
<?php if ( ! empty( $item_params['action'] ) ) { ?>
|
2845 |
+
onclick="javascript:<?php echo wpbc_esc_js( $item_params['action'] ); ?>"
|
2846 |
+
<?php } ?>
|
2847 |
+
<?php if ( ! empty( $item_params['hint'] ) ) { ?>
|
2848 |
+
title="<?php echo esc_attr( $item_params['hint']['title'] ); ?>"
|
2849 |
+
<?php } ?>
|
2850 |
+
<?php echo wpbc_get_custom_attr( $item_params ); ?>
|
2851 |
+
><?php
|
2852 |
+
$btn_icon = '';
|
2853 |
+
|
2854 |
+
// Icon
|
2855 |
+
if ( ( ! empty( $item_params['icon'] ) ) && ( is_array( $item_params['icon'] ) ) ) {
|
2856 |
+
|
2857 |
+
// Icon IMG
|
2858 |
+
if ( ! empty( $item_params['icon']['icon_img'] ) ) {
|
2859 |
+
|
2860 |
+
if ( substr( $item_params['icon']['icon_img'], 0, 4 ) != 'http' ) {
|
2861 |
+
$img_path = WPBC_PLUGIN_URL . '/assets/img/' . $item_params['icon']['icon_img'];
|
2862 |
+
} else {
|
2863 |
+
$img_path = $item_params['icon']['icon_img'];
|
2864 |
+
}
|
2865 |
+
$btn_icon = '<img class="menuicons" src="' . esc_url( $img_path ) . '" />'; // Img Icon
|
2866 |
+
}
|
2867 |
+
|
2868 |
+
// Icon Font
|
2869 |
+
if ( ! empty( $item_params['icon']['icon_font'] ) ) {
|
2870 |
+
$btn_icon = '<i class="menu_icon icon-1x ' . esc_attr( $item_params['icon']['icon_font'] ) . '"></i>'; // Font Icon
|
2871 |
+
}
|
2872 |
+
}
|
2873 |
+
|
2874 |
+
if ( ( ! empty( $btn_icon ) ) && ( $item_params['icon']['position'] == 'left' ) ) {
|
2875 |
+
|
2876 |
+
echo $btn_icon;
|
2877 |
+
|
2878 |
+
if ( ! empty( $item_params['title'] ) ) {
|
2879 |
+
echo ' ';
|
2880 |
+
}
|
2881 |
+
}
|
2882 |
+
|
2883 |
+
// Text
|
2884 |
+
echo '<span' . ( ( ( ! empty( $btn_icon ) ) && ( ! $item_params['mobile_show_text'] ) )? ' class="in-button-text"' : '' ) . '>';
|
2885 |
+
|
2886 |
+
echo html_entity_decode(
|
2887 |
+
wp_kses_post( $item_params['title'] ) // Sanitizes content for allowed HTML tags for post content
|
2888 |
+
, ENT_QUOTES // Convert " to " and '
|
2889 |
+
, get_bloginfo( 'charset' ) // 'UTF-8' or other
|
2890 |
+
); // Convert &dash; to ‐ etc...
|
2891 |
+
|
2892 |
+
if ( ( ! empty( $btn_icon ) ) && ( $item_params['icon']['position'] == 'right' ) ) {
|
2893 |
+
echo ' ';
|
2894 |
+
}
|
2895 |
+
|
2896 |
+
echo '</span>';
|
2897 |
+
|
2898 |
+
if ( ( ! empty( $btn_icon ) ) && ( $item_params['icon']['position'] == 'right' ) ) {
|
2899 |
+
echo $btn_icon;
|
2900 |
+
}
|
2901 |
+
?></a><?php
|
2902 |
+
}
|
2903 |
+
|
2904 |
+
/**
|
2905 |
+
* Show FLEX Label
|
2906 |
+
*
|
2907 |
+
* @param array $item
|
2908 |
+
array(
|
2909 |
+
'id' => '' // HTML ID of INPUT element
|
2910 |
+
, 'label' => __('Text..','booking') // Label text here
|
2911 |
+
, 'style' => '' // CSS of select element
|
2912 |
+
, 'class' => '' // CSS Class of select element
|
2913 |
+
, 'disabled' => false
|
2914 |
+
, 'attr' => array() // Any additional attributes
|
2915 |
+
)
|
2916 |
+
*/
|
2917 |
+
function wpbc_flex_label( $item ) {
|
2918 |
+
|
2919 |
+
$default_item_params = array(
|
2920 |
+
'id' => '' // HTML ID of element
|
2921 |
+
, 'label' => '' // Label
|
2922 |
+
, 'style' => '' // CSS of select element
|
2923 |
+
, 'class' => '' // CSS Class of select element
|
2924 |
+
, 'disabled' => false
|
2925 |
+
, 'hint' => '' // , 'hint' => array( 'title' => __('Select status' ,'booking') , 'position' => 'bottom' )
|
2926 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
2927 |
+
);
|
2928 |
+
$item_params = wp_parse_args( $item, $default_item_params );
|
2929 |
+
|
2930 |
+
if ( ( ! empty( $item_params['label'] ) ) || ( ! empty( $btn_icon ) ) ) {
|
2931 |
+
|
2932 |
+
?><label for="<?php echo esc_attr( $item_params['id'] ); ?>"
|
2933 |
+
class="wpbc_ui_control_label <?php echo esc_attr( $item_params['class'] );
|
2934 |
+
echo ( ! empty( $item_params['hint'] ) ) ? ' tooltip_' . esc_attr( $item_params['hint']['position'] ) . ' ' : '' ; ?>"
|
2935 |
+
style="<?php echo esc_attr( $item_params['style'] ); ?>"
|
2936 |
+
<?php if ( ! empty( $item_params['hint'] ) ) { ?>
|
2937 |
+
title="<?php echo esc_attr( $item_params['hint']['title'] ); ?>"
|
2938 |
+
<?php } ?>
|
2939 |
+
<?php disabled( $item_params['disabled'], true ); ?>
|
2940 |
+
<?php echo wpbc_get_custom_attr( $item_params ); ?>
|
2941 |
+
><?php
|
2942 |
+
|
2943 |
+
echo html_entity_decode(
|
2944 |
+
wp_kses_post( $item_params['label'] ) // Sanitizes content for allowed HTML tags for post content
|
2945 |
+
, ENT_QUOTES // Convert " to " and '
|
2946 |
+
, get_bloginfo( 'charset' ) // 'UTF-8' or other
|
2947 |
+
); // Convert &dash; to ‐ etc...
|
2948 |
+
?></label><?php
|
2949 |
+
}
|
2950 |
+
|
2951 |
+
}
|
2952 |
+
|
2953 |
+
/**
|
2954 |
+
* Show FLEX text
|
2955 |
+
*
|
2956 |
+
* @param array $item
|
2957 |
+
*
|
2958 |
+
* Example:
|
2959 |
+
$params_checkbox = array(
|
2960 |
+
'id' => 'my_check_id' // HTML ID of element
|
2961 |
+
, 'name' => 'my_check_id'
|
2962 |
+
, 'label' => __('Approve' ,'booking')
|
2963 |
+
, 'style' => '' // CSS of select element
|
2964 |
+
, 'class' => '' // CSS Class of select element
|
2965 |
+
, 'disabled' => false
|
2966 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
2967 |
+
, 'placeholder' => ''
|
2968 |
+
, 'value' => 'CHECK_VAL_1' // Some Value from optins array that selected by default
|
2969 |
+
, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
2970 |
+
, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
2971 |
+
);
|
2972 |
+
?><div class="ui_element"><?php
|
2973 |
+
|
2974 |
+
wpbc_flex_text( $params_select );
|
2975 |
+
|
2976 |
+
?></div><?php
|
2977 |
+
*
|
2978 |
+
*/
|
2979 |
+
function wpbc_flex_text( $item ) {
|
2980 |
+
|
2981 |
+
$default_item_params = array(
|
2982 |
+
'type' => 'text'
|
2983 |
+
, 'id' => ''
|
2984 |
+
, 'name' => ''
|
2985 |
+
, 'label' => ''
|
2986 |
+
, 'disabled' => false
|
2987 |
+
, 'class' => ''
|
2988 |
+
, 'style' => ''
|
2989 |
+
, 'placeholder' => ''
|
2990 |
+
, 'attr' => array()
|
2991 |
+
, 'value' => ''
|
2992 |
+
, 'is_escape_value' => true
|
2993 |
+
, 'onfocus' => '' // JavaScript code
|
2994 |
+
, 'onchange' => '' // JavaScript code
|
2995 |
+
, 'onkeydown' => '' // JavaScript code
|
2996 |
+
|
2997 |
+
);
|
2998 |
+
$item_params = wp_parse_args( $item, $default_item_params );
|
2999 |
+
|
3000 |
+
if ( ( empty( $item_params['name'] ) )
|
3001 |
+
&& ( ! empty( $item_params['id'] ) )
|
3002 |
+
) {
|
3003 |
+
$item_params['name'] = $item_params['id'];
|
3004 |
+
}
|
3005 |
+
|
3006 |
+
// Show only, if $item_params['label'] ! EMPTY
|
3007 |
+
wpbc_flex_label(
|
3008 |
+
array(
|
3009 |
+
'id' => $item_params['id']
|
3010 |
+
, 'label' => $item_params['label']
|
3011 |
+
)
|
3012 |
+
);
|
3013 |
+
|
3014 |
+
if ( $item_params['is_escape_value'] ) {
|
3015 |
+
$escaped_value = esc_attr( $item_params['value'] );
|
3016 |
+
} else {
|
3017 |
+
$escaped_value = $item_params['value'];
|
3018 |
+
}
|
3019 |
+
|
3020 |
+
?><input type="<?php echo esc_attr( $item_params['type'] ); ?>"
|
3021 |
+
id="<?php echo esc_attr( $item_params['id'] ); ?>"
|
3022 |
+
name="<?php echo esc_attr( $item_params['name'] ); ?>"
|
3023 |
+
style="<?php echo esc_attr( $item_params['style'] ); ?>"
|
3024 |
+
class="wpbc_ui_control wpbc_ui_text <?php echo esc_attr( $item_params['class'] ); ?>"
|
3025 |
+
placeholder="<?php echo esc_attr( $item_params['placeholder'] ); ?>"
|
3026 |
+
value="<?php echo $escaped_value; ?>"
|
3027 |
+
autocomplete="off"
|
3028 |
+
<?php disabled( $item_params['disabled'], true ); ?>
|
3029 |
+
<?php echo wpbc_get_custom_attr( $item_params ); ?>
|
3030 |
+
<?php
|
3031 |
+
if ( ! empty( $item_params['onfocus'] ) ) {
|
3032 |
+
?> onfocus="javascript:<?php echo wpbc_esc_js( $item_params['onfocus'] ); ?>" <?php
|
3033 |
+
}
|
3034 |
+
if ( ! empty( $item_params['onchange'] ) ) {
|
3035 |
+
?> onchange="javascript:<?php echo wpbc_esc_js( $item_params['onchange'] ); ?>" <?php
|
3036 |
+
}
|
3037 |
+
if ( ! empty( $item_params['onkeydown'] ) ) {
|
3038 |
+
?> onkeydown="javascript:<?php echo wpbc_esc_js( $item_params['onkeydown'] ); ?>" <?php
|
3039 |
+
}
|
3040 |
+
?>
|
3041 |
+
/><?php
|
3042 |
+
}
|
3043 |
+
|
3044 |
+
/**
|
3045 |
+
* Show FLEX textarea
|
3046 |
+
*
|
3047 |
+
* @param array $item
|
3048 |
+
*
|
3049 |
+
* Example:
|
3050 |
+
$params_textarea = array(
|
3051 |
+
'id' => 'my_check_id' // HTML ID of element
|
3052 |
+
, 'name' => 'my_check_id'
|
3053 |
+
, 'label' => __('Approve' ,'booking')
|
3054 |
+
, 'style' => '' // CSS of select element
|
3055 |
+
, 'class' => '' // CSS Class of select element
|
3056 |
+
, 'disabled' => false
|
3057 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
3058 |
+
, 'rows' => '3'
|
3059 |
+
, 'cols' => '50'
|
3060 |
+
, 'placeholder' => ''
|
3061 |
+
, 'value' => 'Test VAL 1' // Some Value from optins array that selected by default
|
3062 |
+
, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
|
3063 |
+
, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
|
3064 |
+
);
|
3065 |
+
?><div class="ui_element"><?php
|
3066 |
+
|
3067 |
+
wpbc_flex_textarea( $params_textarea );
|
3068 |
+
|
3069 |
+
?></div><?php
|
3070 |
+
*
|
3071 |
+
*/
|
3072 |
+
function wpbc_flex_textarea( $item ) {
|
3073 |
+
|
3074 |
+
$default_item_params = array(
|
3075 |
+
'id' => ''
|
3076 |
+
, 'name' => ''
|
3077 |
+
, 'label' => ''
|
3078 |
+
, 'disabled' => false
|
3079 |
+
, 'class' => ''
|
3080 |
+
, 'style' => ''
|
3081 |
+
, 'placeholder' => ''
|
3082 |
+
, 'attr' => array()
|
3083 |
+
, 'rows' => '3'
|
3084 |
+
, 'cols' => '50'
|
3085 |
+
, 'value' => ''
|
3086 |
+
, 'is_escape_value' => true
|
3087 |
+
, 'onfocus' => '' // JavaScript code
|
3088 |
+
, 'onchange' => '' // JavaScript code
|
3089 |
+
);
|
3090 |
+
$item_params = wp_parse_args( $item, $default_item_params );
|
3091 |
+
|
3092 |
+
if ( ( empty( $item_params['name'] ) )
|
3093 |
+
&& ( ! empty( $item_params['id'] ) )
|
3094 |
+
) {
|
3095 |
+
$item_params['name'] = $item_params['id'];
|
3096 |
+
}
|
3097 |
+
|
3098 |
+
// Show only, if $item_params['label'] ! EMPTY
|
3099 |
+
wpbc_flex_label(
|
3100 |
+
array(
|
3101 |
+
'id' => $item_params['id']
|
3102 |
+
, 'label' => $item_params['label']
|
3103 |
+
)
|
3104 |
+
);
|
3105 |
+
|
3106 |
+
if ( $item_params['is_escape_value'] ) {
|
3107 |
+
$escaped_value = esc_textarea( $item_params['value'] );
|
3108 |
+
} else {
|
3109 |
+
$escaped_value = $item_params['value'];
|
3110 |
+
}
|
3111 |
+
|
3112 |
+
?><textarea id="<?php echo esc_attr( $item_params['id'] ); ?>"
|
3113 |
+
name="<?php echo esc_attr( $item_params['name'] ); ?>"
|
3114 |
+
style="<?php echo esc_attr( $item_params['style'] ); ?>"
|
3115 |
+
class="wpbc_ui_control wpbc_ui_textarea <?php echo esc_attr( $item_params['class'] ); ?>"
|
3116 |
+
placeholder="<?php echo esc_attr( $item_params['placeholder'] ); ?>"
|
3117 |
+
autocomplete="off"
|
3118 |
+
rows="<?php echo esc_attr( $item_params['rows'] ); ?>"
|
3119 |
+
cols="<?php echo esc_attr( $item_params['cols'] ); ?>"
|
3120 |
+
<?php disabled( $item_params['disabled'], true ); ?>
|
3121 |
+
<?php echo wpbc_get_custom_attr( $item_params ); ?>
|
3122 |
+
<?php
|
3123 |
+
if ( ! empty( $item_params['onfocus'] ) ) {
|
3124 |
+
?> onfocus="javascript:<?php echo wpbc_esc_js( $item_params['onfocus'] ); ?>" <?php
|
3125 |
+
}
|
3126 |
+
if ( ! empty( $item_params['onchange'] ) ) {
|
3127 |
+
?> onchange="javascript:<?php echo wpbc_esc_js( $item_params['onchange'] ); ?>" <?php
|
3128 |
+
}
|
3129 |
+
?>
|
3130 |
+
><?php echo $escaped_value; ?></textarea><?php
|
3131 |
+
}
|
3132 |
+
|
3133 |
+
/**
|
3134 |
+
* Show FLEX selectbox
|
3135 |
+
*
|
3136 |
+
* @param array $item
|
3137 |
+
array(
|
3138 |
+
'id' => '' // HTML ID of element
|
3139 |
+
, 'name' => ''
|
3140 |
+
, 'style' => '' // CSS of select element
|
3141 |
+
, 'class' => '' // CSS Class of select element
|
3142 |
+
, 'multiple' => false
|
3143 |
+
, 'disabled' => false
|
3144 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
3145 |
+
, 'options' => array() // Associated array of titles and values
|
3146 |
+
, 'disabled_options' => array() // If some options disbaled, then its must list here
|
3147 |
+
, 'value' => '' // Some Value from optins array that selected by default
|
3148 |
+
, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).val(), 'in element:' , jQuery( this ) );" // JavaScript code
|
3149 |
+
, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).val(), 'in element:' , jQuery( this ) );" // JavaScript code
|
3150 |
+
)
|
3151 |
+
*
|
3152 |
+
*
|
3153 |
+
* Simple Example :
|
3154 |
+
*
|
3155 |
+
$params_select = array(
|
3156 |
+
'id' => 'next_days' // HTML ID of element
|
3157 |
+
, 'name' => 'next_days'
|
3158 |
+
, 'label' => '' // __( 'Next Days', 'booking' ) // Label (optional)
|
3159 |
+
, 'style' => '' // CSS of select element
|
3160 |
+
, 'class' => '' // CSS Class of select element
|
3161 |
+
, 'multiple' => false
|
3162 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
3163 |
+
, 'disabled' => false
|
3164 |
+
, 'disabled_options' => array( 2, 30 ) // If some options disabled, then it has to list here
|
3165 |
+
, 'options' => array( // Associated array of titles and values
|
3166 |
+
, 1 => '1' . ' ' . __('day' ,'booking')
|
3167 |
+
, 2 => '2' . ' ' . __('days' ,'booking')
|
3168 |
+
, 7 => '1' . ' ' . __('week' ,'booking')
|
3169 |
+
, 30 => '1' . ' ' . __('month' ,'booking')
|
3170 |
+
, 365 => '1' . ' ' . __('Year' ,'booking')
|
3171 |
+
)
|
3172 |
+
|
3173 |
+
, 'value' => ( isset( $escaped_search_request_params[ 'next_days' ] ) ) ? $escaped_search_request_params[ 'next_days' ] : '183' // Some Value from options array that selected by default
|
3174 |
+
, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).val(), 'in element:' , jQuery( this ) );" // JavaScript code
|
3175 |
+
, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).val(), 'in element:' , jQuery( this ) );" // JavaScript code
|
3176 |
+
|
3177 |
+
);
|
3178 |
+
|
3179 |
+
?><div class="ui_element"><?php
|
3180 |
+
|
3181 |
+
wpbc_flex_select( $params_select );
|
3182 |
+
|
3183 |
+
?></div><?php
|
3184 |
+
*
|
3185 |
+
*
|
3186 |
+
*
|
3187 |
+
* Example complex:
|
3188 |
+
*
|
3189 |
+
*
|
3190 |
+
*
|
3191 |
+
|
3192 |
+
$params_select = array(
|
3193 |
+
'id' => 'next_days' // HTML ID of element
|
3194 |
+
, 'name' => 'next_days'
|
3195 |
+
, 'label' => '<span class="" style="font-weight:600;">' . __( 'Cost', 'booking' ) . ' <em style="color:#888;">(' . __( 'min-max', 'booking' ) . '):</em></span>'
|
3196 |
+
, 'style' => '' // CSS of select element
|
3197 |
+
, 'class' => '' // CSS Class of select element
|
3198 |
+
, 'multiple' => false
|
3199 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
3200 |
+
, 'disabled' => false
|
3201 |
+
, 'disabled_options' => array( 2, 5 ) // If some options disabled, then it has to list here
|
3202 |
+
, 'options' => array( // Associated array of titles and values: array( $option_value => $option_data, ... )
|
3203 |
+
'group_days' => array( 'optgroup' => true, 'close' => false, 'title' => __( 'days', 'booking' ) )
|
3204 |
+
, 1 => '1' . ' ' . __('day' ,'booking')
|
3205 |
+
, 2 => '2' . ' ' . __('days' ,'booking')
|
3206 |
+
, 3 => '3' . ' ' . __('days' ,'booking')
|
3207 |
+
, 4 => '4' . ' ' . __('days' ,'booking')
|
3208 |
+
, 5 => '5' . ' ' . __('days' ,'booking')
|
3209 |
+
, 6 => '6' . ' ' . __('days' ,'booking')
|
3210 |
+
, 'group_days_end' => array( 'optgroup' => true, 'close' => true )
|
3211 |
+
|
3212 |
+
, 'group_weeks' => array( 'optgroup' => true, 'close' => false, 'title' => __( 'weeks', 'booking' ) )
|
3213 |
+
, 7 => '1' . ' ' . __('week' ,'booking')
|
3214 |
+
, 14 => '2' . ' ' . __('weeks' ,'booking')
|
3215 |
+
, 'group_weeks_end' => array( 'optgroup' => true, 'close' => true )
|
3216 |
+
|
3217 |
+
, 'group_months' => array( 'optgroup' => true, 'close' => false, 'title' => __( 'months', 'booking' ) )
|
3218 |
+
, 30 => '1' . ' ' . __('month' ,'booking')
|
3219 |
+
, 60 => '2' . ' ' . __('months' ,'booking')
|
3220 |
+
, 90 => '3' . ' ' . __('months' ,'booking')
|
3221 |
+
, 183 => '6' . ' ' . __('months' ,'booking')
|
3222 |
+
, 365 => '1' . ' ' . __('Year' ,'booking')
|
3223 |
+
, 'group_months_end' => array( 'optgroup' => true, 'close' => true )
|
3224 |
+
|
3225 |
+
, 'complex_value' => array(
|
3226 |
+
'title' => 'Complex Option Here' // Text in selectbox option
|
3227 |
+
, 'style' => '' // CSS of select element
|
3228 |
+
, 'class' => '' // CSS Class of select element
|
3229 |
+
, 'disabled' => false
|
3230 |
+
, 'selected' => true
|
3231 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
3232 |
+
, 'optgroup' => false // Use only if you need to show OPTGROUP - Also need to use 'title' of start, end 'close' for END
|
3233 |
+
, 'close' => false
|
3234 |
+
)
|
3235 |
+
)
|
3236 |
+
|
3237 |
+
, 'value' => ( isset( $escaped_search_request_params[ 'next_days' ] ) ) ? $escaped_search_request_params[ 'next_days' ] : '183' // Some Value from options array that selected by default
|
3238 |
+
, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).val(), 'in element:' , jQuery( this ) );" // JavaScript code
|
3239 |
+
, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).val(), 'in element:' , jQuery( this ) );" // JavaScript code
|
3240 |
+
|
3241 |
+
);
|
3242 |
+
|
3243 |
+
?><div class="ui_element"><?php
|
3244 |
+
|
3245 |
+
wpbc_flex_select( $params_select );
|
3246 |
+
|
3247 |
+
?></div><?php
|
3248 |
+
|
3249 |
+
*
|
3250 |
+
*/
|
3251 |
+
function wpbc_flex_select( $item ) {
|
3252 |
+
|
3253 |
+
$default_item_params = array(
|
3254 |
+
'id' => '' // HTML ID of element
|
3255 |
+
, 'name' => ''
|
3256 |
+
, 'label' => '' // Label
|
3257 |
+
, 'style' => '' // CSS of select element
|
3258 |
+
, 'class' => '' // CSS Class of select element
|
3259 |
+
, 'multiple' => false
|
3260 |
+
, 'disabled' => false
|
3261 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
3262 |
+
, 'options' => array() // Associated array of titles and values: array( $option_value => $option_data, ... )
|
3263 |
+
, 'disabled_options' => array() // If some options disabled, then it has to list here
|
3264 |
+
, 'value' => '' // Some Value from options array that selected by default
|
3265 |
+
, 'onfocus' => '' // JavaScript code
|
3266 |
+
, 'onchange' => '' // JavaScript code
|
3267 |
+
);
|
3268 |
+
$item_params = wp_parse_args( $item, $default_item_params );
|
3269 |
+
|
3270 |
+
// Show only, if $item_params['label'] ! EMPTY
|
3271 |
+
wpbc_flex_label(
|
3272 |
+
array(
|
3273 |
+
'id' => $item_params['id']
|
3274 |
+
, 'label' => $item_params['label']
|
3275 |
+
)
|
3276 |
+
);
|
3277 |
+
|
3278 |
+
?><select
|
3279 |
+
id="<?php echo esc_attr( $item_params['id'] ); ?>"
|
3280 |
+
name="<?php echo esc_attr( $item_params['name'] ); echo ( $item_params['multiple'] ? '[]' : '' ); ?>"
|
3281 |
+
class="wpbc_ui_control wpbc_ui_select <?php echo esc_attr( $item_params['class'] ); ?>"
|
3282 |
+
style="<?php echo esc_attr( $item_params['style'] ); ?>"
|
3283 |
+
<?php disabled( $item_params['disabled'], true ); ?>
|
3284 |
+
<?php echo wpbc_get_custom_attr( $item_params ); ?>
|
3285 |
+
<?php echo ( $item_params['multiple'] ? ' multiple="MULTIPLE"' : '' ); ?>
|
3286 |
+
<?php
|
3287 |
+
if ( ! empty( $item_params['onfocus'] ) ) {
|
3288 |
+
?> onfocus="javascript:<?php echo wpbc_esc_js( $item_params['onfocus'] ); ?>" <?php
|
3289 |
+
}
|
3290 |
+
if ( ! empty( $item_params['onchange'] ) ) {
|
3291 |
+
?> onchange="javascript:<?php echo wpbc_esc_js( $item_params['onchange'] ); ?>" <?php
|
3292 |
+
}
|
3293 |
+
?>
|
3294 |
+
autocomplete="off"
|
3295 |
+
><?php
|
3296 |
+
foreach ( $item_params['options'] as $option_value => $option_data ) {
|
3297 |
+
|
3298 |
+
if ( ! is_array( $option_data ) ) {
|
3299 |
+
$option_data = array( 'title' => $option_data );
|
3300 |
+
$is_was_simple = true;
|
3301 |
+
} else {
|
3302 |
+
$is_was_simple = false;
|
3303 |
+
}
|
3304 |
+
|
3305 |
+
$default_option_params = array(
|
3306 |
+
'title' => '' // Text in selectbox option
|
3307 |
+
, 'style' => '' // CSS of select element
|
3308 |
+
, 'class' => '' // CSS Class of select element
|
3309 |
+
, 'disabled' => false
|
3310 |
+
, 'selected' => false
|
3311 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
3312 |
+
|
3313 |
+
, 'optgroup' => false // Use only if you need to show OPTGROUP - Also need to use 'title' of start, end 'close' for END
|
3314 |
+
, 'close' => false
|
3315 |
+
|
3316 |
+
);
|
3317 |
+
$option_data = wp_parse_args( $option_data, $default_option_params );
|
3318 |
+
|
3319 |
+
if ( $option_data['optgroup'] ) { // OPTGROUP
|
3320 |
+
|
3321 |
+
if ( ! $option_data['close'] ) {
|
3322 |
+
?><optgroup label="<?php echo esc_attr( $option_data['title'] ); ?>"><?php
|
3323 |
+
} else {
|
3324 |
+
?></optgroup><?php
|
3325 |
+
}
|
3326 |
+
|
3327 |
+
} else { // OPTION
|
3328 |
+
|
3329 |
+
?><option
|
3330 |
+
value="<?php echo esc_attr( $option_value ); ?>"
|
3331 |
+
<?php
|
3332 |
+
if ( $is_was_simple ) {
|
3333 |
+
selected( $option_value, $item_params['value'] );
|
3334 |
+
disabled( in_array( $option_value, $item_params['disabled_options'] ), true );
|
3335 |
+
}
|
3336 |
+
?>
|
3337 |
+
class="<?php echo esc_attr( $option_data['class'] ); ?>"
|
3338 |
+
style="<?php echo esc_attr( $option_data['style'] ); ?>"
|
3339 |
+
<?php echo wpbc_get_custom_attr( $option_data ); ?>
|
3340 |
+
<?php selected( $option_data['selected'], true ); ?>
|
3341 |
+
<?php disabled( $option_data['disabled'], true ); ?>
|
3342 |
+
|
3343 |
+
<?php
|
3344 |
+
if ( ! empty( $item_params['value'] ) ) {
|
3345 |
+
|
3346 |
+
if ( is_array( $item_params['value'] ) ) {
|
3347 |
+
selected( in_array( esc_attr( $option_value ), $item_params['value'] ), true ); // SELECT multiple, have several items
|
3348 |
+
} else {
|
3349 |
+
selected( $item_params['value'], esc_attr( $option_value ) ); //Recheck global selected parameter
|
3350 |
+
}
|
3351 |
+
}
|
3352 |
+
?>
|
3353 |
+
|
3354 |
+
><?php
|
3355 |
+
echo html_entity_decode(
|
3356 |
+
wp_kses_post( $option_data['title'] ) // Sanitizes content for allowed HTML tags for post content
|
3357 |
+
, ENT_QUOTES // Convert " to " and '
|
3358 |
+
, get_bloginfo( 'charset' ) // 'UTF-8' or other
|
3359 |
+
); // Convert &dash; to ‐ etc...
|
3360 |
+
|
3361 |
+
|
3362 |
+
?></option><?php
|
3363 |
+
}
|
3364 |
+
}
|
3365 |
+
?></select><?php
|
3366 |
+
}
|
3367 |
+
|
3368 |
+
/**
|
3369 |
+
* Show FLEX checkbox
|
3370 |
+
*
|
3371 |
+
* @param array $item
|
3372 |
+
*
|
3373 |
+
* Example:
|
3374 |
+
$params_checkbox = array(
|
3375 |
+
'id' => 'my_check_id' // HTML ID of element
|
3376 |
+
, 'name' => 'my_check_id'
|
3377 |
+
, 'label' => array( 'title' => __('Approve' ,'booking') , 'position' => 'right' )
|
3378 |
+
, 'style' => '' // CSS of select element
|
3379 |
+
, 'class' => '' // CSS Class of select element
|
3380 |
+
, 'disabled' => false
|
3381 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
3382 |
+
, 'legend' => '' // aria-label parameter
|
3383 |
+
, 'value' => 'CHECK_VAL_1' // Some Value from optins array that selected by default
|
3384 |
+
, 'selected' => !false // Selected or not
|
3385 |
+
, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
3386 |
+
, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
3387 |
+
);
|
3388 |
+
?><div class="ui_element"><?php
|
3389 |
+
|
3390 |
+
wpbc_flex_checkbox( $params_select );
|
3391 |
+
|
3392 |
+
?></div><?php
|
3393 |
+
*/
|
3394 |
+
function wpbc_flex_checkbox( $item ) {
|
3395 |
+
|
3396 |
+
$default_item_params = array(
|
3397 |
+
'type' => 'checkbox'
|
3398 |
+
, 'id' => '' // HTML ID of element
|
3399 |
+
, 'name' => ''
|
3400 |
+
, 'label' => '' // Label Example: 'label' => array( 'title' => __('Select status' ,'booking') , 'position' => 'left' )
|
3401 |
+
, 'style' => '' // CSS of select element
|
3402 |
+
, 'class' => '' // CSS Class of select element
|
3403 |
+
, 'disabled' => false
|
3404 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
3405 |
+
, 'legend' => '' // aria-label parameter
|
3406 |
+
, 'value' => '' // Some Value from optins array that selected by default
|
3407 |
+
, 'selected' => false // Selected or not
|
3408 |
+
, 'onfocus' => '' // JavaScript code
|
3409 |
+
, 'onchange' => '' // JavaScript code
|
3410 |
+
|
3411 |
+
);
|
3412 |
+
$item_params = wp_parse_args( $item, $default_item_params );
|
3413 |
+
|
3414 |
+
if ( ( ! empty( $item_params['label'] ) ) && ( 'left' == $item_params['label']['position'] ) ) {
|
3415 |
+
wpbc_flex_label( array( 'id' => $item_params['id'], 'label' => $item_params['label']['title'] ) );
|
3416 |
+
}
|
3417 |
+
|
3418 |
+
?><input type="<?php echo esc_attr( $item_params['type'] ); ?>"
|
3419 |
+
id="<?php echo esc_attr( $item_params['id'] ); ?>"
|
3420 |
+
name="<?php echo esc_attr( $item_params['name'] ); ?>"
|
3421 |
+
value="<?php echo esc_attr( $item_params['value'] ); ?>"
|
3422 |
+
aria-label="<?php echo esc_attr( $item_params['legend'] ); ?>"
|
3423 |
+
class="wpbc_ui_<?php echo esc_attr( $item_params['type'] ); ?> <?php echo esc_attr( $item_params['class'] ); ?>"
|
3424 |
+
style="<?php echo esc_attr( $item_params['style'] ); ?>"
|
3425 |
+
<?php echo wpbc_get_custom_attr( $item_params ); ?>
|
3426 |
+
<?php checked( $item_params['selected'], true ); ?>
|
3427 |
+
<?php disabled( $item_params['disabled'], true ); ?>
|
3428 |
+
<?php
|
3429 |
+
if ( ! empty( $item_params['onfocus'] ) ) {
|
3430 |
+
?> onfocus="javascript:<?php echo wpbc_esc_js( $item_params['onfocus'] ); ?>" <?php
|
3431 |
+
}
|
3432 |
+
if ( ! empty( $item_params['onchange'] ) ) {
|
3433 |
+
?> onchange="javascript:<?php echo wpbc_esc_js( $item_params['onchange'] ); ?>" <?php
|
3434 |
+
}
|
3435 |
+
?>
|
3436 |
+
autocomplete="off"
|
3437 |
+
/><?php
|
3438 |
+
|
3439 |
+
if ( ( ! empty( $item_params['label'] ) ) && ( 'right' == $item_params['label']['position'] ) ) {
|
3440 |
+
wpbc_flex_label( array( 'id' => $item_params['id'], 'label' => $item_params['label']['title'] ) );
|
3441 |
+
}
|
3442 |
+
}
|
3443 |
+
|
3444 |
+
/**
|
3445 |
+
* Show FLEX radio button
|
3446 |
+
*
|
3447 |
+
* @param array $item
|
3448 |
+
*
|
3449 |
+
* Example:
|
3450 |
+
$params_checkbox = array(
|
3451 |
+
'id' => 'my_check_id' // HTML ID of element
|
3452 |
+
, 'name' => 'my_check_id'
|
3453 |
+
, 'label' => array( 'title' => __('Approve' ,'booking') , 'position' => 'right' )
|
3454 |
+
, 'style' => '' // CSS of select element
|
3455 |
+
, 'class' => '' // CSS Class of select element
|
3456 |
+
, 'disabled' => false
|
3457 |
+
, 'attr' => array() // Any additional attributes, if this radio | checkbox element
|
3458 |
+
, 'legend' => '' // aria-label parameter
|
3459 |
+
, 'value' => 'CHECK_VAL_1' // Some Value from optins array that selected by default
|
3460 |
+
, 'selected' => !false // Selected or not
|
3461 |
+
, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
|
3462 |
+
, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
|
3463 |
+
);
|
3464 |
+
?><div class="ui_element"><?php
|
3465 |
+
|
3466 |
+
wpbc_flex_radio( $params_select );
|
3467 |
+
|
3468 |
+
$params_checkbox['id'] = 'my_check_id2';
|
3469 |
+
$params_checkbox['value'] = 'CHECK_VAL_2';
|
3470 |
+
|
3471 |
+
wpbc_flex_radio( $params_select );
|
3472 |
+
|
3473 |
+
?></div><?php
|
3474 |
+
*/
|
3475 |
+
function wpbc_flex_radio( $item ) {
|
3476 |
+
$item['type'] = 'radio';
|
3477 |
+
wpbc_flex_checkbox( $item );
|
3478 |
+
}
|
3479 |
+
|
3480 |
+
/**
|
3481 |
+
* Show FLEX addon (image or text can be here)
|
3482 |
+
*
|
3483 |
+
* @param array $item
|
3484 |
+
array(
|
3485 |
+
'type' => 'span' // HTML tag that will bound content
|
3486 |
+
, 'html' => '' // Any other HTML content
|
3487 |
+
, 'icon' => false // array( 'icon_font' => 'wpbc_icn_check_circle_outline', 'position' => 'right', 'icon_img' => '' )
|
3488 |
+
, 'style' => '' // CSS of select element
|
3489 |
+
, 'class' => '' // CSS Class of select element // default included class is .wpbc_ui_addon
|
3490 |
+
, 'attr' => array() // Any additional attributes
|
3491 |
+
);
|
3492 |
+
* Example 1:
|
3493 |
+
` $params_span = array(
|
3494 |
+
'type' => 'span'
|
3495 |
+
, 'html' => '<i class="menu_icon icon-1x wpbc_icn_event"></i> Approve '
|
3496 |
+
, 'icon' => false // array( 'icon_font' => 'wpbc_icn_check_circle_outline', 'position' => 'right', 'icon_img' => '' )
|
3497 |
+
, 'class' => 'wpbc_ui_button inactive ui_nowrap'
|
3498 |
+
, 'style' => ''
|
3499 |
+
, 'attr' => array()
|
3500 |
+
);
|
3501 |
+
|
3502 |
+
?><div class="ui_element"><?php
|
3503 |
+
|
3504 |
+
wpbc_flex_addon( $params_span );
|
3505 |
+
|
3506 |
+
wpbc_flex_text( $params_text );
|
3507 |
+
|
3508 |
+
wpbc_flex_addon( $params_span );
|
3509 |
+
|
3510 |
+
?></div><?php
|
3511 |
+
* Example 2:
|
3512 |
+
$params_addon = array(
|
3513 |
+
'type' => 'span'
|
3514 |
+
, 'html' => ''// '<i class="menu_icon icon-1x wpbc_icn_event"></i>' //'<strong>' . __( 'Dates', 'booking ' ) . '</strong>'
|
3515 |
+
, 'icon' => array( 'icon_font' => 'wpbc_icn_event', 'position' => 'right', 'icon_img' => '' )
|
3516 |
+
, 'class' => 'wpbc_ui_button inactive'
|
3517 |
+
, 'style' => ''
|
3518 |
+
, 'attr' => array()
|
3519 |
+
);
|
3520 |
+
?><div class="ui_element ui_nowrap"><?php
|
3521 |
+
wpbc_flex_addon( $params_addon );
|
3522 |
+
?></div><?php
|
3523 |
+
|
3524 |
+
*/
|
3525 |
+
function wpbc_flex_addon( $item ) {
|
3526 |
+
|
3527 |
+
$default_item_params = array(
|
3528 |
+
'type' => 'span'
|
3529 |
+
, 'html' => ''
|
3530 |
+
, 'icon' => false
|
3531 |
+
, 'class' => ''
|
3532 |
+
, 'style' => ''
|
3533 |
+
, 'hint' => '' // , 'hint' => array( 'title' => __('Select status' ,'booking') , 'position' => 'bottom' )
|
3534 |
+
, 'attr' => array()
|
3535 |
+
);
|
3536 |
+
$item_params = wp_parse_args( $item, $default_item_params );
|
3537 |
+
|
3538 |
+
// Icon
|
3539 |
+
$btn_icon = '';
|
3540 |
+
if ( ( ! empty( $item_params['icon'] ) ) && ( is_array( $item_params['icon'] ) ) ) {
|
3541 |
+
|
3542 |
+
// Icon IMG
|
3543 |
+
if ( ! empty( $item_params['icon']['icon_img'] ) ) {
|
3544 |
+
|
3545 |
+
if ( substr( $item_params['icon']['icon_img'], 0, 4 ) != 'http' ) {
|
3546 |
+
$img_path = WPBC_PLUGIN_URL . '/assets/img/' . $item_params['icon']['icon_img'];
|
3547 |
+
} else {
|
3548 |
+
$img_path = $item_params['icon']['icon_img'];
|
3549 |
+
}
|
3550 |
+
$btn_icon = '<img class="menuicons" src="' . esc_url( $img_path ) . '" />'; // Img Icon
|
3551 |
+
}
|
3552 |
+
|
3553 |
+
// Icon Font
|
3554 |
+
if ( ! empty( $item_params['icon']['icon_font'] ) ) {
|
3555 |
+
$btn_icon = '<i class="menu_icon icon-1x ' . esc_attr( $item_params['icon']['icon_font'] ) . '"></i>'; // Font Icon
|
3556 |
+
}
|
3557 |
+
}
|
3558 |
+
|
3559 |
+
?><<?php echo esc_attr( $item_params['type'] ); ?>
|
3560 |
+
class="wpbc_ui_control wpbc_ui_addon <?php echo esc_attr( $item_params['class'] );
|
3561 |
+
echo ( ! empty( $item_params['hint'] ) ) ? ' tooltip_' . esc_attr( $item_params['hint']['position'] ) . ' ' : '' ; ?>"
|
3562 |
+
style="<?php echo esc_attr( $item_params['style'] ); ?>"
|
3563 |
+
<?php echo wpbc_get_custom_attr( $item_params ); ?>
|
3564 |
+
<?php if ( ! empty( $item_params['hint'] ) ) { ?>
|
3565 |
+
title="<?php echo esc_attr( $item_params['hint']['title'] ); ?>"
|
3566 |
+
<?php } ?>
|
3567 |
+
|
3568 |
+
><?php
|
3569 |
+
|
3570 |
+
if ( ( ! empty( $btn_icon ) ) && ( 'left' == $item_params['icon']['position'] ) ) {
|
3571 |
+
echo $btn_icon;
|
3572 |
+
}
|
3573 |
+
|
3574 |
+
echo html_entity_decode(
|
3575 |
+
wp_kses_post( $item_params['html'] ) // Sanitizes content for allowed HTML tags for post content
|
3576 |
+
, ENT_QUOTES // Convert " to " and '
|
3577 |
+
, get_bloginfo( 'charset' ) // 'UTF-8' or other
|
3578 |
+
); // Convert &dash; to ‐ etc...
|
3579 |
+
|
3580 |
+
|
3581 |
+
if ( ( ! empty( $btn_icon ) ) && ( 'right' == $item_params['icon']['position'] ) ) {
|
3582 |
+
echo $btn_icon;
|
3583 |
+
}
|
3584 |
+
|
3585 |
+
?></<?php echo esc_attr( $item_params['type'] ); ?>><?php
|
3586 |
+
}
|
3587 |
+
|
3588 |
+
function wpbc_flex_divider( $item = array() ){
|
3589 |
+
|
3590 |
+
$default_item_params = array(
|
3591 |
+
'type' => 'span'
|
3592 |
+
, 'html' => ''
|
3593 |
+
, 'icon' => false
|
3594 |
+
, 'class' => ''
|
3595 |
+
, 'style' => ''
|
3596 |
+
, 'hint' => '' // , 'hint' => array( 'title' => __('Select status' ,'booking') , 'position' => 'bottom' )
|
3597 |
+
, 'attr' => array()
|
3598 |
+
);
|
3599 |
+
$item_params = wp_parse_args( $item, $default_item_params );
|
3600 |
+
|
3601 |
+
?><div class="wpbc_ui_control ui_elements_divider <?php echo esc_attr( $item_params['class'] );
|
3602 |
+
echo ( ! empty( $item_params['hint'] ) ) ? ' tooltip_' . esc_attr( $item_params['hint']['position'] ) . ' ' : '' ; ?>"
|
3603 |
+
style="<?php echo esc_attr( $item_params['style'] ); ?>"
|
3604 |
+
<?php echo wpbc_get_custom_attr( $item_params ); ?>
|
3605 |
+
<?php if ( ! empty( $item_params['hint'] ) ) { ?>
|
3606 |
+
title="<?php echo esc_attr( $item_params['hint']['title'] ); ?>"
|
3607 |
+
<?php } ?>
|
3608 |
+
></div><?php
|
3609 |
+
}
|
3610 |
+
////////////////////////////////////////////////////////////////////////////////
|
3611 |
+
// JS & CSS Loading
|
3612 |
+
////////////////////////////////////////////////////////////////////////////////
|
3613 |
+
|
3614 |
+
/**
|
3615 |
+
* CSS files loading
|
3616 |
+
*
|
3617 |
+
* @param string $where_to_load
|
3618 |
+
*/
|
3619 |
+
function wpbc_ajx_toolbar_enqueue_css_files( $where_to_load ) {
|
3620 |
+
|
3621 |
+
if ( ( is_admin() ) && ( in_array( $where_to_load, array( 'admin', 'both' ) ) ) ) {
|
3622 |
+
|
3623 |
+
wp_enqueue_style( 'wpbc-flex-toolbar', wpbc_plugin_url( '/includes/_toolbar_ui/_src/toolbar_ui.css' ), array(), WP_BK_VERSION_NUM );
|
3624 |
+
}
|
3625 |
+
}
|
3626 |
+
add_action( 'wpbc_enqueue_css_files', 'wpbc_ajx_toolbar_enqueue_css_files', 50 );
|
3627 |
+
|
3628 |
+
|
3629 |
+
/**
|
3630 |
+
* JS files loading
|
3631 |
+
*
|
3632 |
+
* @param string $where_to_load
|
3633 |
+
*/
|
3634 |
+
function wpbc_ajx_toolbar_enqueue_js_files( $where_to_load ) {
|
3635 |
+
|
3636 |
+
$in_footer = true;
|
3637 |
+
|
3638 |
+
if ( ( is_admin() ) && ( in_array( $where_to_load, array( 'admin', 'both' ) ) ) ) {
|
3639 |
+
|
3640 |
+
wp_enqueue_script( 'wpbc-flex-toolbar-ui', wpbc_plugin_url( '/includes/_toolbar_ui/_out/toolbar_ui.js' ), array( 'wpbc-global-vars' ), '1.0', $in_footer );
|
3641 |
+
|
3642 |
+
/**
|
3643 |
+
* wp_localize_script( 'wpbc-global-vars', 'wpbc_live_request_obj'
|
3644 |
+
, array(
|
3645 |
+
'contacts' => '',
|
3646 |
+
'reminders' => ''
|
3647 |
+
)
|
3648 |
+
);
|
3649 |
+
*/
|
3650 |
+
}
|
3651 |
+
}
|
3652 |
+
add_action( 'wpbc_enqueue_js_files', 'wpbc_ajx_toolbar_enqueue_js_files', 50 );
|
includes/index.php
ADDED
@@ -0,0 +1,2 @@
|
|
Â
|
|
Â
|
1 |
+
<?php
|
2 |
+
// Silence is golden.
|
includes/page-bookings/_out/bookings__actions.js
ADDED
@@ -0,0 +1,512 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
"use strict";
|
2 |
+
/**
|
3 |
+
* Ajax ----------------------------------------------------------------------------------------------------- */
|
4 |
+
//var is_this_action = false;
|
5 |
+
|
6 |
+
/**
|
7 |
+
* Send Ajax action request, like approving or cancellation
|
8 |
+
*
|
9 |
+
* @param action_param
|
10 |
+
*/
|
11 |
+
|
12 |
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
13 |
+
|
14 |
+
function wpbc_ajx_booking_ajax_action_request() {
|
15 |
+
var action_param = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
16 |
+
console.groupCollapsed('WPBC_AJX_BOOKING_ACTIONS');
|
17 |
+
console.log(' == Ajax Actions :: Params == ', action_param); //is_this_action = true;
|
18 |
+
|
19 |
+
wpbc_booking_listing_reload_button__spin_start(); // Get redefined Locale, if action on single booking !
|
20 |
+
|
21 |
+
if (undefined != action_param['booking_id'] && !Array.isArray(action_param['booking_id'])) {
|
22 |
+
// Not array
|
23 |
+
action_param['locale'] = wpbc_get_selected_locale(action_param['booking_id'], wpbc_ajx_booking_listing.get_secure_param('locale'));
|
24 |
+
}
|
25 |
+
|
26 |
+
var action_post_params = {
|
27 |
+
action: 'WPBC_AJX_BOOKING_ACTIONS',
|
28 |
+
nonce: wpbc_ajx_booking_listing.get_secure_param('nonce'),
|
29 |
+
wpbc_ajx_user_id: undefined == action_param['user_id'] ? wpbc_ajx_booking_listing.get_secure_param('user_id') : action_param['user_id'],
|
30 |
+
wpbc_ajx_locale: undefined == action_param['locale'] ? wpbc_ajx_booking_listing.get_secure_param('locale') : action_param['locale'],
|
31 |
+
action_params: action_param
|
32 |
+
}; // It's required for CSV export - getting the same list of bookings
|
33 |
+
|
34 |
+
if (typeof action_param.search_params !== 'undefined') {
|
35 |
+
action_post_params['search_params'] = action_param.search_params;
|
36 |
+
delete action_post_params.action_params.search_params;
|
37 |
+
} // Start Ajax
|
38 |
+
|
39 |
+
|
40 |
+
jQuery.post(wpbc_global1.wpbc_ajaxurl, action_post_params,
|
41 |
+
/**
|
42 |
+
* S u c c e s s
|
43 |
+
*
|
44 |
+
* @param response_data - its object returned from Ajax - class-live-searcg.php
|
45 |
+
* @param textStatus - 'success'
|
46 |
+
* @param jqXHR - Object
|
47 |
+
*/
|
48 |
+
function (response_data, textStatus, jqXHR) {
|
49 |
+
console.log(' == Ajax Actions :: Response WPBC_AJX_BOOKING_ACTIONS == ', response_data);
|
50 |
+
console.groupEnd(); // Probably Error
|
51 |
+
|
52 |
+
if (_typeof(response_data) !== 'object' || response_data === null) {
|
53 |
+
jQuery('#wh_sort_selector').hide();
|
54 |
+
jQuery(wpbc_ajx_booking_listing.get_other_param('listing_container')).html('<div class="wpbc-settings-notice notice-warning" style="text-align:left">' + response_data + '</div>');
|
55 |
+
return;
|
56 |
+
}
|
57 |
+
|
58 |
+
wpbc_booking_listing_reload_button__spin_pause();
|
59 |
+
wpbc_admin_show_message(response_data['ajx_after_action_message'].replace(/\n/g, "<br />"), '1' == response_data['ajx_after_action_result'] ? 'success' : 'error', 10000); // Success response
|
60 |
+
|
61 |
+
if ('1' == response_data['ajx_after_action_result']) {
|
62 |
+
var is_reload_ajax_listing = true; // After Google Calendar import show imported bookings and reload the page for toolbar parameters update
|
63 |
+
|
64 |
+
if (false !== response_data['ajx_after_action_result_all_params_arr']['new_listing_params']) {
|
65 |
+
wpbc_ajx_booking_send_search_request_with_params(response_data['ajx_after_action_result_all_params_arr']['new_listing_params']);
|
66 |
+
var closed_timer = setTimeout(function () {
|
67 |
+
if (wpbc_booking_listing_reload_button__is_spin()) {
|
68 |
+
if (undefined != response_data['ajx_after_action_result_all_params_arr']['new_listing_params']['reload_url_params']) {
|
69 |
+
document.location.href = response_data['ajx_after_action_result_all_params_arr']['new_listing_params']['reload_url_params'];
|
70 |
+
} else {
|
71 |
+
document.location.reload();
|
72 |
+
}
|
73 |
+
}
|
74 |
+
}, 2000);
|
75 |
+
is_reload_ajax_listing = false;
|
76 |
+
} // Start download exported CSV file
|
77 |
+
|
78 |
+
|
79 |
+
if (undefined != response_data['ajx_after_action_result_all_params_arr']['export_csv_url']) {
|
80 |
+
wpbc_ajx_booking__export_csv_url__download(response_data['ajx_after_action_result_all_params_arr']['export_csv_url']);
|
81 |
+
is_reload_ajax_listing = false;
|
82 |
+
}
|
83 |
+
|
84 |
+
if (is_reload_ajax_listing) {
|
85 |
+
wpbc_ajx_booking__actual_listing__show(); // Sending Ajax Request - with parameters that we early defined in "wpbc_ajx_booking_listing" Obj.
|
86 |
+
}
|
87 |
+
} // Remove spin icon from button and Enable this button.
|
88 |
+
|
89 |
+
|
90 |
+
wpbc_button__remove_spin(response_data['ajx_cleaned_params']['ui_clicked_element_id']); // Hide modals
|
91 |
+
|
92 |
+
wpbc_popup_modals__hide();
|
93 |
+
jQuery('#ajax_respond').html(response_data); // For ability to show response, add such DIV element to page
|
94 |
+
}).fail(function (jqXHR, textStatus, errorThrown) {
|
95 |
+
if (window.console && window.console.log) {
|
96 |
+
console.log('Ajax_Error', jqXHR, textStatus, errorThrown);
|
97 |
+
}
|
98 |
+
|
99 |
+
jQuery('#wh_sort_selector').hide();
|
100 |
+
var error_message = '<strong>' + 'Error!' + '</strong> ' + errorThrown;
|
101 |
+
|
102 |
+
if (jqXHR.responseText) {
|
103 |
+
error_message += jqXHR.responseText;
|
104 |
+
}
|
105 |
+
|
106 |
+
error_message = error_message.replace(/\n/g, "<br />");
|
107 |
+
wpbc_ajx_booking_show_message(error_message);
|
108 |
+
}) // .done( function ( data, textStatus, jqXHR ) { if ( window.console && window.console.log ){ console.log( 'second success', data, textStatus, jqXHR ); } })
|
109 |
+
// .always( function ( data_jqXHR, textStatus, jqXHR_errorThrown ) { if ( window.console && window.console.log ){ console.log( 'always finished', data_jqXHR, textStatus, jqXHR_errorThrown ); } })
|
110 |
+
; // End Ajax
|
111 |
+
}
|
112 |
+
/**
|
113 |
+
* Support Functions - Spin Icon in Buttons ------------------------------------------------------------------ */
|
114 |
+
|
115 |
+
/**
|
116 |
+
* Remove spin icon from button and Enable this button.
|
117 |
+
*
|
118 |
+
* @param button_clicked_element_id - HTML ID attribute of this button
|
119 |
+
* @return string - CSS classes that was previously in button icon
|
120 |
+
*/
|
121 |
+
|
122 |
+
|
123 |
+
function wpbc_button__remove_spin(button_clicked_element_id) {
|
124 |
+
var previos_classes = '';
|
125 |
+
|
126 |
+
if (undefined != button_clicked_element_id) {
|
127 |
+
var jElement = jQuery('#' + button_clicked_element_id);
|
128 |
+
|
129 |
+
if (jElement.length) {
|
130 |
+
previos_classes = wpbc_button_disable_loading_icon(jElement.get(0));
|
131 |
+
}
|
132 |
+
}
|
133 |
+
|
134 |
+
return previos_classes;
|
135 |
+
}
|
136 |
+
/**
|
137 |
+
* Show Loading (rotating arrow) icon for button that has been clicked
|
138 |
+
*
|
139 |
+
* @param this_button - this object of specific button
|
140 |
+
* @return string - CSS classes that was previously in button icon
|
141 |
+
*/
|
142 |
+
|
143 |
+
|
144 |
+
function wpbc_button_enable_loading_icon(this_button) {
|
145 |
+
var jButton = jQuery(this_button);
|
146 |
+
var jIcon = jButton.find('i');
|
147 |
+
var previos_classes = jIcon.attr('class');
|
148 |
+
jIcon.removeClass().addClass('menu_icon icon-1x wpbc_icn_rotate_right wpbc_spin'); // Set Rotate icon
|
149 |
+
//jIcon.addClass( 'wpbc_animation_pause' ); // Pause animation
|
150 |
+
//jIcon.addClass( 'wpbc_ui_red' ); // Set icon color red
|
151 |
+
|
152 |
+
jIcon.attr('wpbc_previous_class', previos_classes);
|
153 |
+
jButton.addClass('disabled'); // Disable button
|
154 |
+
//jButton.prop( "disabled", true );
|
155 |
+
// We need to set here attr instead of prop, because for A elements, attribute 'disabled' do not added with jButton.prop( "disabled", true );
|
156 |
+
|
157 |
+
jButton.attr('wpbc_previous_onclick', jButton.attr('onclick')); //Save this value
|
158 |
+
|
159 |
+
jButton.attr('onclick', ''); // Disable actions "on click"
|
160 |
+
|
161 |
+
return previos_classes;
|
162 |
+
}
|
163 |
+
/**
|
164 |
+
* Hide Loading (rotating arrow) icon for button that was clicked and show previous icon and enable button
|
165 |
+
*
|
166 |
+
* @param this_button - this object of specific button
|
167 |
+
* @return string - CSS classes that was previously in button icon
|
168 |
+
*/
|
169 |
+
|
170 |
+
|
171 |
+
function wpbc_button_disable_loading_icon(this_button) {
|
172 |
+
var jButton = jQuery(this_button);
|
173 |
+
var jIcon = jButton.find('i');
|
174 |
+
var previos_classes = jIcon.attr('wpbc_previous_class');
|
175 |
+
|
176 |
+
if ('' != previos_classes) {
|
177 |
+
jIcon.removeClass().addClass(previos_classes);
|
178 |
+
}
|
179 |
+
|
180 |
+
jButton.removeClass('disabled'); // Remove Disable button
|
181 |
+
|
182 |
+
var previous_onclick = jButton.attr('wpbc_previous_onclick');
|
183 |
+
|
184 |
+
if ('' != previous_onclick) {
|
185 |
+
jButton.attr('onclick', previous_onclick);
|
186 |
+
}
|
187 |
+
|
188 |
+
return previos_classes;
|
189 |
+
}
|
190 |
+
/**
|
191 |
+
* Hide all open modal popups windows
|
192 |
+
*/
|
193 |
+
|
194 |
+
|
195 |
+
function wpbc_popup_modals__hide() {
|
196 |
+
// Hide modals
|
197 |
+
if ('function' === typeof jQuery('.wpbc_popup_modal').wpbc_my_modal) {
|
198 |
+
jQuery('.wpbc_popup_modal').wpbc_my_modal('hide');
|
199 |
+
}
|
200 |
+
}
|
201 |
+
/**
|
202 |
+
* Dates Short <-> Wide ----------------------------------------------------------------------------------- */
|
203 |
+
|
204 |
+
|
205 |
+
function wpbc_ajx_click_on_dates_short() {
|
206 |
+
jQuery('#booking_dates_small,.booking_dates_full').hide();
|
207 |
+
jQuery('#booking_dates_full,.booking_dates_small').show();
|
208 |
+
wpbc_ajx_booking_send_search_request_with_params({
|
209 |
+
'ui_usr__dates_short_wide': 'short'
|
210 |
+
});
|
211 |
+
}
|
212 |
+
|
213 |
+
function wpbc_ajx_click_on_dates_wide() {
|
214 |
+
jQuery('#booking_dates_full,.booking_dates_small').hide();
|
215 |
+
jQuery('#booking_dates_small,.booking_dates_full').show();
|
216 |
+
wpbc_ajx_booking_send_search_request_with_params({
|
217 |
+
'ui_usr__dates_short_wide': 'wide'
|
218 |
+
});
|
219 |
+
}
|
220 |
+
|
221 |
+
function wpbc_ajx_click_on_dates_toggle(this_date) {
|
222 |
+
jQuery(this_date).parents('.wpbc_col_dates').find('.booking_dates_small').toggle();
|
223 |
+
jQuery(this_date).parents('.wpbc_col_dates').find('.booking_dates_full').toggle();
|
224 |
+
/*
|
225 |
+
var visible_section = jQuery( this_date ).parents( '.booking_dates_expand_section' );
|
226 |
+
visible_section.hide();
|
227 |
+
if ( visible_section.hasClass( 'booking_dates_full' ) ){
|
228 |
+
visible_section.parents( '.wpbc_col_dates' ).find( '.booking_dates_small' ).show();
|
229 |
+
} else {
|
230 |
+
visible_section.parents( '.wpbc_col_dates' ).find( '.booking_dates_full' ).show();
|
231 |
+
}*/
|
232 |
+
|
233 |
+
console.log('wpbc_ajx_click_on_dates_toggle', this_date);
|
234 |
+
}
|
235 |
+
/**
|
236 |
+
* Locale --------------------------------------------------------------------------------------------------- */
|
237 |
+
|
238 |
+
/**
|
239 |
+
* Select options in select boxes based on attribute "value_of_selected_option" and RED color and hint for LOCALE button -- It's called from wpbc_ajx_booking_define_ui_hooks() each time after Listing loading.
|
240 |
+
*/
|
241 |
+
|
242 |
+
|
243 |
+
function wpbc_ajx_booking__ui_define__locale() {
|
244 |
+
jQuery('.wpbc_listing_container select').each(function (index) {
|
245 |
+
var selection = jQuery(this).attr("value_of_selected_option"); // Define selected select boxes
|
246 |
+
|
247 |
+
if (undefined !== selection) {
|
248 |
+
jQuery(this).find('option[value="' + selection + '"]').prop('selected', true);
|
249 |
+
|
250 |
+
if ('' != selection && jQuery(this).hasClass('set_booking_locale_selectbox')) {
|
251 |
+
// Locale
|
252 |
+
var booking_locale_button = jQuery(this).parents('.ui_element_locale').find('.set_booking_locale_button'); //booking_locale_button.css( 'color', '#db4800' ); // Set button red
|
253 |
+
|
254 |
+
booking_locale_button.addClass('wpbc_ui_red'); // Set button red
|
255 |
+
|
256 |
+
if ('function' === typeof wpbc_tippy) {
|
257 |
+
booking_locale_button.get(0)._tippy.setContent(selection);
|
258 |
+
}
|
259 |
+
}
|
260 |
+
}
|
261 |
+
});
|
262 |
+
}
|
263 |
+
/**
|
264 |
+
* Remark --------------------------------------------------------------------------------------------------- */
|
265 |
+
|
266 |
+
/**
|
267 |
+
* Define content of remark "booking note" button and textarea. -- It's called from wpbc_ajx_booking_define_ui_hooks() each time after Listing loading.
|
268 |
+
*/
|
269 |
+
|
270 |
+
|
271 |
+
function wpbc_ajx_booking__ui_define__remark() {
|
272 |
+
jQuery('.wpbc_listing_container .ui_remark_section textarea').each(function (index) {
|
273 |
+
var text_val = jQuery(this).val();
|
274 |
+
|
275 |
+
if (undefined !== text_val && '' != text_val) {
|
276 |
+
var remark_button = jQuery(this).parents('.ui_group').find('.set_booking_note_button');
|
277 |
+
|
278 |
+
if (remark_button.length > 0) {
|
279 |
+
remark_button.addClass('wpbc_ui_red'); // Set button red
|
280 |
+
|
281 |
+
if ('function' === typeof wpbc_tippy) {
|
282 |
+
//remark_button.get( 0 )._tippy.allowHTML = true;
|
283 |
+
//remark_button.get( 0 )._tippy.setContent( text_val.replace(/[\n\r]/g, '<br>') );
|
284 |
+
remark_button.get(0)._tippy.setProps({
|
285 |
+
allowHTML: true,
|
286 |
+
content: text_val.replace(/[\n\r]/g, '<br>')
|
287 |
+
});
|
288 |
+
}
|
289 |
+
}
|
290 |
+
}
|
291 |
+
});
|
292 |
+
}
|
293 |
+
/**
|
294 |
+
* Actions ,when we click on "Remark" button.
|
295 |
+
*
|
296 |
+
* @param jq_button - this jQuery button object
|
297 |
+
*/
|
298 |
+
|
299 |
+
|
300 |
+
function wpbc_ajx_booking__ui_click__remark(jq_button) {
|
301 |
+
jq_button.parents('.ui_group').find('.ui_remark_section').toggle();
|
302 |
+
}
|
303 |
+
/**
|
304 |
+
* Change booking resource ---------------------------------------------------------------------------------- */
|
305 |
+
|
306 |
+
|
307 |
+
function wpbc_ajx_booking__ui_click_show__change_resource(booking_id, resource_id) {
|
308 |
+
// Define ID of booking to hidden input
|
309 |
+
jQuery('#change_booking_resource__booking_id').val(booking_id); // Select booking resource that belong to booking
|
310 |
+
|
311 |
+
jQuery('#change_booking_resource__resource_select').val(resource_id).trigger('change');
|
312 |
+
var cbr; // Get Resource section
|
313 |
+
|
314 |
+
cbr = jQuery("#change_booking_resource__section").detach(); // Append it to booking ROW
|
315 |
+
|
316 |
+
cbr.appendTo(jQuery("#ui__change_booking_resource__section_in_booking_" + booking_id));
|
317 |
+
cbr = null; // Hide sections of "Change booking resource" in all other bookings ROWs
|
318 |
+
//jQuery( ".ui__change_booking_resource__section_in_booking" ).hide();
|
319 |
+
|
320 |
+
if (!jQuery("#ui__change_booking_resource__section_in_booking_" + booking_id).is(':visible')) {
|
321 |
+
jQuery(".ui__under_actions_row__section_in_booking").hide();
|
322 |
+
} // Show only "change booking resource" section for current booking
|
323 |
+
|
324 |
+
|
325 |
+
jQuery("#ui__change_booking_resource__section_in_booking_" + booking_id).toggle();
|
326 |
+
}
|
327 |
+
|
328 |
+
function wpbc_ajx_booking__ui_click_save__change_resource(this_el, booking_action, el_id) {
|
329 |
+
wpbc_ajx_booking_ajax_action_request({
|
330 |
+
'booking_action': booking_action,
|
331 |
+
'booking_id': jQuery('#change_booking_resource__booking_id').val(),
|
332 |
+
'selected_resource_id': jQuery('#change_booking_resource__resource_select').val(),
|
333 |
+
'ui_clicked_element_id': el_id
|
334 |
+
});
|
335 |
+
wpbc_button_enable_loading_icon(this_el); // wpbc_ajx_booking__ui_click_close__change_resource();
|
336 |
+
}
|
337 |
+
|
338 |
+
function wpbc_ajx_booking__ui_click_close__change_resource() {
|
339 |
+
var cbrce; // Get Resource section
|
340 |
+
|
341 |
+
cbrce = jQuery("#change_booking_resource__section").detach(); // Append it to hidden HTML template section at the bottom of the page
|
342 |
+
|
343 |
+
cbrce.appendTo(jQuery("#wpbc_hidden_template__change_booking_resource"));
|
344 |
+
cbrce = null; // Hide all change booking resources sections
|
345 |
+
|
346 |
+
jQuery(".ui__change_booking_resource__section_in_booking").hide();
|
347 |
+
}
|
348 |
+
/**
|
349 |
+
* Duplicate booking in other resource ---------------------------------------------------------------------- */
|
350 |
+
|
351 |
+
|
352 |
+
function wpbc_ajx_booking__ui_click_show__duplicate_booking(booking_id, resource_id) {
|
353 |
+
// Define ID of booking to hidden input
|
354 |
+
jQuery('#duplicate_booking_to_other_resource__booking_id').val(booking_id); // Select booking resource that belong to booking
|
355 |
+
|
356 |
+
jQuery('#duplicate_booking_to_other_resource__resource_select').val(resource_id).trigger('change');
|
357 |
+
var cbr; // Get Resource section
|
358 |
+
|
359 |
+
cbr = jQuery("#duplicate_booking_to_other_resource__section").detach(); // Append it to booking ROW
|
360 |
+
|
361 |
+
cbr.appendTo(jQuery("#ui__duplicate_booking_to_other_resource__section_in_booking_" + booking_id));
|
362 |
+
cbr = null; // Hide sections of "Duplicate booking" in all other bookings ROWs
|
363 |
+
|
364 |
+
if (!jQuery("#ui__duplicate_booking_to_other_resource__section_in_booking_" + booking_id).is(':visible')) {
|
365 |
+
jQuery(".ui__under_actions_row__section_in_booking").hide();
|
366 |
+
} // Show only "Duplicate booking" section for current booking ROW
|
367 |
+
|
368 |
+
|
369 |
+
jQuery("#ui__duplicate_booking_to_other_resource__section_in_booking_" + booking_id).toggle();
|
370 |
+
}
|
371 |
+
|
372 |
+
function wpbc_ajx_booking__ui_click_save__duplicate_booking(this_el, booking_action, el_id) {
|
373 |
+
wpbc_ajx_booking_ajax_action_request({
|
374 |
+
'booking_action': booking_action,
|
375 |
+
'booking_id': jQuery('#duplicate_booking_to_other_resource__booking_id').val(),
|
376 |
+
'selected_resource_id': jQuery('#duplicate_booking_to_other_resource__resource_select').val(),
|
377 |
+
'ui_clicked_element_id': el_id
|
378 |
+
});
|
379 |
+
wpbc_button_enable_loading_icon(this_el); // wpbc_ajx_booking__ui_click_close__change_resource();
|
380 |
+
}
|
381 |
+
|
382 |
+
function wpbc_ajx_booking__ui_click_close__duplicate_booking() {
|
383 |
+
var cbrce; // Get Resource section
|
384 |
+
|
385 |
+
cbrce = jQuery("#duplicate_booking_to_other_resource__section").detach(); // Append it to hidden HTML template section at the bottom of the page
|
386 |
+
|
387 |
+
cbrce.appendTo(jQuery("#wpbc_hidden_template__duplicate_booking_to_other_resource"));
|
388 |
+
cbrce = null; // Hide all change booking resources sections
|
389 |
+
|
390 |
+
jQuery(".ui__duplicate_booking_to_other_resource__section_in_booking").hide();
|
391 |
+
}
|
392 |
+
/**
|
393 |
+
* Change payment status ------------------------------------------------------------------------------------ */
|
394 |
+
|
395 |
+
|
396 |
+
function wpbc_ajx_booking__ui_click_show__set_payment_status(booking_id) {
|
397 |
+
var jSelect = jQuery('#ui__set_payment_status__section_in_booking_' + booking_id).find('select');
|
398 |
+
var selected_pay_status = jSelect.attr("ajx-selected-value"); // Is it float - then it's unknown
|
399 |
+
|
400 |
+
if (!isNaN(parseFloat(selected_pay_status))) {
|
401 |
+
jSelect.find('option[value="1"]').prop('selected', true); // Unknown value is '1' in select box
|
402 |
+
} else {
|
403 |
+
jSelect.find('option[value="' + selected_pay_status + '"]').prop('selected', true); // Otherwise known payment status
|
404 |
+
} // Hide sections of "Change booking resource" in all other bookings ROWs
|
405 |
+
|
406 |
+
|
407 |
+
if (!jQuery("#ui__set_payment_status__section_in_booking_" + booking_id).is(':visible')) {
|
408 |
+
jQuery(".ui__under_actions_row__section_in_booking").hide();
|
409 |
+
} // Show only "change booking resource" section for current booking
|
410 |
+
|
411 |
+
|
412 |
+
jQuery("#ui__set_payment_status__section_in_booking_" + booking_id).toggle();
|
413 |
+
}
|
414 |
+
|
415 |
+
function wpbc_ajx_booking__ui_click_save__set_payment_status(booking_id, this_el, booking_action, el_id) {
|
416 |
+
wpbc_ajx_booking_ajax_action_request({
|
417 |
+
'booking_action': booking_action,
|
418 |
+
'booking_id': booking_id,
|
419 |
+
'selected_payment_status': jQuery('#ui_btn_set_payment_status' + booking_id).val(),
|
420 |
+
'ui_clicked_element_id': el_id + '_save'
|
421 |
+
});
|
422 |
+
wpbc_button_enable_loading_icon(this_el);
|
423 |
+
jQuery('#' + el_id + '_cancel').hide(); //wpbc_button_enable_loading_icon( jQuery( '#' + el_id + '_cancel').get(0) );
|
424 |
+
}
|
425 |
+
|
426 |
+
function wpbc_ajx_booking__ui_click_close__set_payment_status() {
|
427 |
+
// Hide all change payment status for booking
|
428 |
+
jQuery(".ui__set_payment_status__section_in_booking").hide();
|
429 |
+
}
|
430 |
+
/**
|
431 |
+
* Change booking cost -------------------------------------------------------------------------------------- */
|
432 |
+
|
433 |
+
|
434 |
+
function wpbc_ajx_booking__ui_click_save__set_booking_cost(booking_id, this_el, booking_action, el_id) {
|
435 |
+
wpbc_ajx_booking_ajax_action_request({
|
436 |
+
'booking_action': booking_action,
|
437 |
+
'booking_id': booking_id,
|
438 |
+
'booking_cost': jQuery('#ui_btn_set_booking_cost' + booking_id + '_cost').val(),
|
439 |
+
'ui_clicked_element_id': el_id + '_save'
|
440 |
+
});
|
441 |
+
wpbc_button_enable_loading_icon(this_el);
|
442 |
+
jQuery('#' + el_id + '_cancel').hide(); //wpbc_button_enable_loading_icon( jQuery( '#' + el_id + '_cancel').get(0) );
|
443 |
+
}
|
444 |
+
|
445 |
+
function wpbc_ajx_booking__ui_click_close__set_booking_cost() {
|
446 |
+
// Hide all change payment status for booking
|
447 |
+
jQuery(".ui__set_booking_cost__section_in_booking").hide();
|
448 |
+
}
|
449 |
+
/**
|
450 |
+
* Send Payment request -------------------------------------------------------------------------------------- */
|
451 |
+
|
452 |
+
|
453 |
+
function wpbc_ajx_booking__ui_click__send_payment_request() {
|
454 |
+
wpbc_ajx_booking_ajax_action_request({
|
455 |
+
'booking_action': 'send_payment_request',
|
456 |
+
'booking_id': jQuery('#wpbc_modal__payment_request__booking_id').val(),
|
457 |
+
'reason_of_action': jQuery('#wpbc_modal__payment_request__reason_of_action').val(),
|
458 |
+
'ui_clicked_element_id': 'wpbc_modal__payment_request__button_send'
|
459 |
+
});
|
460 |
+
wpbc_button_enable_loading_icon(jQuery('#wpbc_modal__payment_request__button_send').get(0));
|
461 |
+
}
|
462 |
+
/**
|
463 |
+
* Import Google Calendar ------------------------------------------------------------------------------------ */
|
464 |
+
|
465 |
+
|
466 |
+
function wpbc_ajx_booking__ui_click__import_google_calendar() {
|
467 |
+
wpbc_ajx_booking_ajax_action_request({
|
468 |
+
'booking_action': 'import_google_calendar',
|
469 |
+
'ui_clicked_element_id': 'wpbc_modal__import_google_calendar__button_send',
|
470 |
+
'booking_gcal_events_from': jQuery('#wpbc_modal__import_google_calendar__section #booking_gcal_events_from option:selected').val(),
|
471 |
+
'booking_gcal_events_from_offset': jQuery('#wpbc_modal__import_google_calendar__section #booking_gcal_events_from_offset').val(),
|
472 |
+
'booking_gcal_events_from_offset_type': jQuery('#wpbc_modal__import_google_calendar__section #booking_gcal_events_from_offset_type option:selected').val(),
|
473 |
+
'booking_gcal_events_until': jQuery('#wpbc_modal__import_google_calendar__section #booking_gcal_events_until option:selected').val(),
|
474 |
+
'booking_gcal_events_until_offset': jQuery('#wpbc_modal__import_google_calendar__section #booking_gcal_events_until_offset').val(),
|
475 |
+
'booking_gcal_events_until_offset_type': jQuery('#wpbc_modal__import_google_calendar__section #booking_gcal_events_until_offset_type option:selected').val(),
|
476 |
+
'booking_gcal_events_max': jQuery('#wpbc_modal__import_google_calendar__section #booking_gcal_events_max').val(),
|
477 |
+
'booking_gcal_resource': jQuery('#wpbc_modal__import_google_calendar__section #wpbc_booking_resource option:selected').val()
|
478 |
+
});
|
479 |
+
wpbc_button_enable_loading_icon(jQuery('#wpbc_modal__import_google_calendar__section #wpbc_modal__import_google_calendar__button_send').get(0));
|
480 |
+
}
|
481 |
+
/**
|
482 |
+
* Export bookings to CSV ------------------------------------------------------------------------------------ */
|
483 |
+
|
484 |
+
|
485 |
+
function wpbc_ajx_booking__ui_click__export_csv(params) {
|
486 |
+
var selected_booking_id_arr = wpbc_get_selected_row_id();
|
487 |
+
wpbc_ajx_booking_ajax_action_request({
|
488 |
+
'booking_action': params['booking_action'],
|
489 |
+
'ui_clicked_element_id': params['ui_clicked_element_id'],
|
490 |
+
'export_type': params['export_type'],
|
491 |
+
'csv_export_separator': params['csv_export_separator'],
|
492 |
+
'csv_export_skip_fields': params['csv_export_skip_fields'],
|
493 |
+
'booking_id': selected_booking_id_arr.join(','),
|
494 |
+
'search_params': wpbc_ajx_booking_listing.search_get_all_params()
|
495 |
+
});
|
496 |
+
var this_el = jQuery('#' + params['ui_clicked_element_id']).get(0);
|
497 |
+
wpbc_button_enable_loading_icon(this_el);
|
498 |
+
}
|
499 |
+
/**
|
500 |
+
* Open URL in new tab - mainly it's used for open CSV link for downloaded exported bookings as CSV
|
501 |
+
*
|
502 |
+
* @param export_csv_url
|
503 |
+
*/
|
504 |
+
|
505 |
+
|
506 |
+
function wpbc_ajx_booking__export_csv_url__download(export_csv_url) {
|
507 |
+
//var selected_booking_id_arr = wpbc_get_selected_row_id();
|
508 |
+
document.location.href = export_csv_url; // + '&selected_id=' + selected_booking_id_arr.join(',');
|
509 |
+
// It's open additional dialog for asking opening ulr in new tab
|
510 |
+
// window.open( export_csv_url, '_blank').focus();
|
511 |
+
}
|
512 |
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluY2x1ZGVzL3BhZ2UtYm9va2luZ3MvX3NyYy9ib29raW5nc19fYWN0aW9ucy5qcyJdLCJuYW1lcyI6WyJ3cGJjX2FqeF9ib29raW5nX2FqYXhfYWN0aW9uX3JlcXVlc3QiLCJhY3Rpb25fcGFyYW0iLCJjb25zb2xlIiwiZ3JvdXBDb2xsYXBzZWQiLCJsb2ciLCJ3cGJjX2Jvb2tpbmdfbGlzdGluZ19yZWxvYWRfYnV0dG9uX19zcGluX3N0YXJ0IiwidW5kZWZpbmVkIiwiQXJyYXkiLCJpc0FycmF5Iiwid3BiY19nZXRfc2VsZWN0ZWRfbG9jYWxlIiwid3BiY19hanhfYm9va2luZ19saXN0aW5nIiwiZ2V0X3NlY3VyZV9wYXJhbSIsImFjdGlvbl9wb3N0X3BhcmFtcyIsImFjdGlvbiIsIm5vbmNlIiwid3BiY19hanhfdXNlcl9pZCIsIndwYmNfYWp4X2xvY2FsZSIsImFjdGlvbl9wYXJhbXMiLCJzZWFyY2hfcGFyYW1zIiwialF1ZXJ5IiwicG9zdCIsIndwYmNfZ2xvYmFsMSIsIndwYmNfYWpheHVybCIsInJlc3BvbnNlX2RhdGEiLCJ0ZXh0U3RhdHVzIiwianFYSFIiLCJncm91cEVuZCIsImhpZGUiLCJnZXRfb3RoZXJfcGFyYW0iLCJodG1sIiwid3BiY19ib29raW5nX2xpc3RpbmdfcmVsb2FkX2J1dHRvbl9fc3Bpbl9wYXVzZSIsIndwYmNfYWRtaW5fc2hvd19tZXNzYWdlIiwicmVwbGFjZSIsImlzX3JlbG9hZF9hamF4X2xpc3RpbmciLCJ3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMiLCJjbG9zZWRfdGltZXIiLCJzZXRUaW1lb3V0Iiwid3BiY19ib29raW5nX2xpc3RpbmdfcmVsb2FkX2J1dHRvbl9faXNfc3BpbiIsImRvY3VtZW50IiwibG9jYXRpb24iLCJocmVmIiwicmVsb2FkIiwid3BiY19hanhfYm9va2luZ19fZXhwb3J0X2Nzdl91cmxfX2Rvd25sb2FkIiwid3BiY19hanhfYm9va2luZ19fYWN0dWFsX2xpc3RpbmdfX3Nob3ciLCJ3cGJjX2J1dHRvbl9fcmVtb3ZlX3NwaW4iLCJ3cGJjX3BvcHVwX21vZGFsc19faGlkZSIsImZhaWwiLCJlcnJvclRocm93biIsIndpbmRvdyIsImVycm9yX21lc3NhZ2UiLCJyZXNwb25zZVRleHQiLCJ3cGJjX2FqeF9ib29raW5nX3Nob3dfbWVzc2FnZSIsImJ1dHRvbl9jbGlja2VkX2VsZW1lbnRfaWQiLCJwcmV2aW9zX2NsYXNzZXMiLCJqRWxlbWVudCIsImxlbmd0aCIsIndwYmNfYnV0dG9uX2Rpc2FibGVfbG9hZGluZ19pY29uIiwiZ2V0Iiwid3BiY19idXR0b25fZW5hYmxlX2xvYWRpbmdfaWNvbiIsInRoaXNfYnV0dG9uIiwiakJ1dHRvbiIsImpJY29uIiwiZmluZCIsImF0dHIiLCJyZW1vdmVDbGFzcyIsImFkZENsYXNzIiwicHJldmlvdXNfb25jbGljayIsIndwYmNfbXlfbW9kYWwiLCJ3cGJjX2FqeF9jbGlja19vbl9kYXRlc19zaG9ydCIsInNob3ciLCJ3cGJjX2FqeF9jbGlja19vbl9kYXRlc193aWRlIiwid3BiY19hanhfY2xpY2tfb25fZGF0ZXNfdG9nZ2xlIiwidGhpc19kYXRlIiwicGFyZW50cyIsInRvZ2dsZSIsIndwYmNfYWp4X2Jvb2tpbmdfX3VpX2RlZmluZV9fbG9jYWxlIiwiZWFjaCIsImluZGV4Iiwic2VsZWN0aW9uIiwicHJvcCIsImhhc0NsYXNzIiwiYm9va2luZ19sb2NhbGVfYnV0dG9uIiwid3BiY190aXBweSIsIl90aXBweSIsInNldENvbnRlbnQiLCJ3cGJjX2FqeF9ib29raW5nX191aV9kZWZpbmVfX3JlbWFyayIsInRleHRfdmFsIiwidmFsIiwicmVtYXJrX2J1dHRvbiIsInNldFByb3BzIiwiYWxsb3dIVE1MIiwiY29udGVudCIsIndwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX19yZW1hcmsiLCJqcV9idXR0b24iLCJ3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19zaG93X19jaGFuZ2VfcmVzb3VyY2UiLCJib29raW5nX2lkIiwicmVzb3VyY2VfaWQiLCJ0cmlnZ2VyIiwiY2JyIiwiZGV0YWNoIiwiYXBwZW5kVG8iLCJpcyIsIndwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX3NhdmVfX2NoYW5nZV9yZXNvdXJjZSIsInRoaXNfZWwiLCJib29raW5nX2FjdGlvbiIsImVsX2lkIiwid3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfY2xvc2VfX2NoYW5nZV9yZXNvdXJjZSIsImNicmNlIiwid3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfc2hvd19fZHVwbGljYXRlX2Jvb2tpbmciLCJ3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19zYXZlX19kdXBsaWNhdGVfYm9va2luZyIsIndwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX2Nsb3NlX19kdXBsaWNhdGVfYm9va2luZyIsIndwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX3Nob3dfX3NldF9wYXltZW50X3N0YXR1cyIsImpTZWxlY3QiLCJzZWxlY3RlZF9wYXlfc3RhdHVzIiwiaXNOYU4iLCJwYXJzZUZsb2F0Iiwid3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfc2F2ZV9fc2V0X3BheW1lbnRfc3RhdHVzIiwid3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfY2xvc2VfX3NldF9wYXltZW50X3N0YXR1cyIsIndwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX3NhdmVfX3NldF9ib29raW5nX2Nvc3QiLCJ3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19jbG9zZV9fc2V0X2Jvb2tpbmdfY29zdCIsIndwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX19zZW5kX3BheW1lbnRfcmVxdWVzdCIsIndwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX19pbXBvcnRfZ29vZ2xlX2NhbGVuZGFyIiwid3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfX2V4cG9ydF9jc3YiLCJwYXJhbXMiLCJzZWxlY3RlZF9ib29raW5nX2lkX2FyciIsIndwYmNfZ2V0X3NlbGVjdGVkX3Jvd19pZCIsImpvaW4iLCJz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LEVBQUFBLG9DQUFvQyxDQUFFO0FBQzVCLHNCQUEwQjJILE1BQU0sQ0FBRSxnQkFBRixDQURKO0FBRTVCLDZCQUEwQkEsTUFBTSxDQUFFLHVCQUFGLENBRko7QUFJNUIsbUJBQTBCQSxNQUFNLENBQUUsYUFBRixDQUpKO0FBSzVCLDRCQUEwQkEsTUFBTSxDQUFFLHNCQUFGLENBTEo7QUFNNUIsOEJBQTBCQSxNQUFNLENBQUUsd0JBQUYsQ0FOSjtBQVE1QixrQkFBZUMsdUJBQXVCLENBQUNFLElBQXhCLENBQTZCLEdBQTdCLENBUmE7QUFTNUIscUJBQWtCcEgsd0JBQXdCLENBQUNxSCxxQkFBekI7QUFUVSxHQUFGLENBQXBDO0FBWUEsTUFBSXhCLE9BQU8sR0FBR3BGLE1BQU0sQ0FBRSxNQUFNd0csTUFBTSxDQUFFLHVCQUFGLENBQWQsQ0FBTixDQUFrRGxFLEdBQWxELENBQXVELENBQXZELENBQWQ7QUFFQUMsRUFBQUEsK0JBQStCLENBQUU2QyxPQUFGLENBQS9CO0FBQ0E7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxTQUFTN0QsMENBQVQsQ0FBcURzRixjQUFyRCxFQUFxRTtBQUVwRTtBQUVBMUYsRUFBQUEsUUFBUSxDQUFDQyxRQUFULENBQWtCQyxJQUFsQixHQUF5QndGLGNBQXpCLENBSm9FLENBSTVCO0FBRXhDO0FBQ0E7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5cclxuLyoqXHJcbiAqICAgQWpheCAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcbi8vdmFyIGlzX3RoaXNfYWN0aW9uID0gZmFsc2U7XHJcbi8qKlxyXG4gKiBTZW5kIEFqYXggYWN0aW9uIHJlcXVlc3QsICBsaWtlIGFwcHJvdmluZyBvciBjYW5jZWxsYXRpb25cclxuICpcclxuICogQHBhcmFtIGFjdGlvbl9wYXJhbVxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19hamF4X2FjdGlvbl9yZXF1ZXN0KCBhY3Rpb25fcGFyYW0gPSB7fSApe1xyXG5cclxuY29uc29sZS5ncm91cENvbGxhcHNlZCggJ1dQQkNfQUpYX0JPT0tJTkdfQUNUSU9OUycgKTsgY29uc29sZS5sb2coICcgPT0gQWpheCBBY3Rpb25zIDo6IFBhcmFtcyA9PSAnLCBhY3Rpb25fcGFyYW0gKTtcclxuLy9pc190aGlzX2FjdGlvbiA9IHRydWU7XHJcblxyXG5cdHdwYmNfYm9va2luZ19saXN0aW5nX3JlbG9hZF9idXR0b25fX3NwaW5fc3RhcnQoKTtcclxuXHJcblx0Ly8gR2V0IHJlZGVmaW5lZCBMb2NhbGUsICBpZiBhY3Rpb24gb24gc2luZ2xlIGJvb2tpbmcgIVxyXG5cdGlmICggICggdW5kZWZpbmVkICE9IGFjdGlvbl9wYXJhbVsgJ2Jvb2tpbmdfaWQnIF0gKSAmJiAoICEgQXJyYXkuaXNBcnJheSggYWN0aW9uX3BhcmFtWyAnYm9va2luZ19pZCcgXSApICkgKXtcdFx0XHRcdC8vIE5vdCBhcnJheVxyXG5cclxuXHRcdGFjdGlvbl9wYXJhbVsgJ2xvY2FsZScgXSA9IHdwYmNfZ2V0X3NlbGVjdGVkX2xvY2FsZSggYWN0aW9uX3BhcmFtWyAnYm9va2luZ19pZCcgXSwgd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9zZWN1cmVfcGFyYW0oICdsb2NhbGUnICkgKTtcclxuXHR9XHJcblxyXG5cdHZhciBhY3Rpb25fcG9zdF9wYXJhbXMgPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRhY3Rpb24gICAgICAgICAgOiAnV1BCQ19BSlhfQk9PS0lOR19BQ1RJT05TJyxcclxuXHRcdFx0XHRcdFx0XHRcdG5vbmNlICAgICAgICAgICA6IHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5nZXRfc2VjdXJlX3BhcmFtKCAnbm9uY2UnICksXHJcblx0XHRcdFx0XHRcdFx0XHR3cGJjX2FqeF91c2VyX2lkOiAoICggdW5kZWZpbmVkID09IGFjdGlvbl9wYXJhbVsgJ3VzZXJfaWQnIF0gKSA/IHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5nZXRfc2VjdXJlX3BhcmFtKCAndXNlcl9pZCcgKSA6IGFjdGlvbl9wYXJhbVsgJ3VzZXJfaWQnIF0gKSxcclxuXHRcdFx0XHRcdFx0XHRcdHdwYmNfYWp4X2xvY2FsZTogICggKCB1bmRlZmluZWQgPT0gYWN0aW9uX3BhcmFtWyAnbG9jYWxlJyBdICkgID8gd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9zZWN1cmVfcGFyYW0oICdsb2NhbGUnICkgIDogYWN0aW9uX3BhcmFtWyAnbG9jYWxlJyBdICksXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0YWN0aW9uX3BhcmFtc1x0OiBhY3Rpb25fcGFyYW1cclxuXHRcdFx0XHRcdFx0XHR9O1xyXG5cclxuXHQvLyBJdCdzIHJlcXVpcmVkIGZvciBDU1YgZXhwb3J0IC0gZ2V0dGluZyB0aGUgc2FtZSBsaXN0ICBvZiBib29raW5nc1xyXG5cdGlmICggdHlwZW9mIGFjdGlvbl9wYXJhbS5zZWFyY2hfcGFyYW1zICE9PSAndW5kZWZpbmVkJyApe1xyXG5cdFx0YWN0aW9uX3Bvc3RfcGFyYW1zWyAnc2VhcmNoX3BhcmFtcycgXSA9IGFjdGlvbl9wYXJhbS5zZWFyY2hfcGFyYW1zO1xyXG5cdFx0ZGVsZXRlIGFjdGlvbl9wb3N0X3BhcmFtcy5hY3Rpb25fcGFyYW1zLnNlYXJjaF9wYXJhbXM7XHJcblx0fVxyXG5cclxuXHQvLyBTdGFydCBBamF4XHJcblx0alF1ZXJ5LnBvc3QoIHdwYmNfZ2xvYmFsMS53cGJjX2FqYXh1cmwgLFxyXG5cclxuXHRcdFx0XHRhY3Rpb25fcG9zdF9wYXJhbXMgLFxyXG5cclxuXHRcdFx0XHQvKipcclxuXHRcdFx0XHQgKiBTIHUgYyBjIGUgcyBzXHJcblx0XHRcdFx0ICpcclxuXHRcdFx0XHQgKiBAcGFyYW0gcmVzcG9uc2VfZGF0YVx0XHQtXHRpdHMgb2JqZWN0IHJldHVybmVkIGZyb20gIEFqYXggLSBjbGFzcy1saXZlLXNlYXJjZy5waHBcclxuXHRcdFx0XHQgKiBAcGFyYW0gdGV4dFN0YXR1c1x0XHQtXHQnc3VjY2VzcydcclxuXHRcdFx0XHQgKiBAcGFyYW0ganFYSFJcdFx0XHRcdC1cdE9iamVjdFxyXG5cdFx0XHRcdCAqL1xyXG5cdFx0XHRcdGZ1bmN0aW9uICggcmVzcG9uc2VfZGF0YSwgdGV4dFN0YXR1cywganFYSFIgKSB7XHJcblxyXG5jb25zb2xlLmxvZyggJyA9PSBBamF4IEFjdGlvbnMgOjogUmVzcG9uc2UgV1BCQ19BSlhfQk9PS0lOR19BQ1RJT05TID09ICcsIHJlc3BvbnNlX2RhdGEgKTsgY29uc29sZS5ncm91cEVuZCgpO1xyXG5cclxuXHRcdFx0XHRcdC8vIFByb2JhYmx5IEVycm9yXHJcblx0XHRcdFx0XHRpZiAoICh0eXBlb2YgcmVzcG9uc2VfZGF0YSAhPT0gJ29iamVjdCcpIHx8IChyZXNwb25zZV9kYXRhID09PSBudWxsKSApe1xyXG5cdFx0XHRcdFx0XHRqUXVlcnkoICcjd2hfc29ydF9zZWxlY3RvcicgKS5oaWRlKCk7XHJcblx0XHRcdFx0XHRcdGpRdWVyeSggd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSggJ2xpc3RpbmdfY29udGFpbmVyJyApICkuaHRtbChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwid3BiYy1zZXR0aW5ncy1ub3RpY2Ugbm90aWNlLXdhcm5pbmdcIiBzdHlsZT1cInRleHQtYWxpZ246bGVmdFwiPicgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZV9kYXRhICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCc8L2Rpdj4nXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHR3cGJjX2Jvb2tpbmdfbGlzdGluZ19yZWxvYWRfYnV0dG9uX19zcGluX3BhdXNlKCk7XHJcblxyXG5cdFx0XHRcdFx0d3BiY19hZG1pbl9zaG93X21lc3NhZ2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgcmVzcG9uc2VfZGF0YVsgJ2FqeF9hZnRlcl9hY3Rpb25fbWVzc2FnZScgXS5yZXBsYWNlKCAvXFxuL2csIFwiPGJyIC8+XCIgKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQsICggJzEnID09IHJlc3BvbnNlX2RhdGFbICdhanhfYWZ0ZXJfYWN0aW9uX3Jlc3VsdCcgXSApID8gJ3N1Y2Nlc3MnIDogJ2Vycm9yJ1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQsIDEwMDAwXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdC8vIFN1Y2Nlc3MgcmVzcG9uc2VcclxuXHRcdFx0XHRcdGlmICggJzEnID09IHJlc3BvbnNlX2RhdGFbICdhanhfYWZ0ZXJfYWN0aW9uX3Jlc3VsdCcgXSApe1xyXG5cclxuXHRcdFx0XHRcdFx0dmFyIGlzX3JlbG9hZF9hamF4X2xpc3RpbmcgPSB0cnVlO1xyXG5cclxuXHRcdFx0XHRcdFx0Ly8gQWZ0ZXIgR29vZ2xlIENhbGVuZGFyIGltcG9ydCBzaG93IGltcG9ydGVkIGJvb2tpbmdzIGFuZCByZWxvYWQgdGhlIHBhZ2UgZm9yIHRvb2xiYXIgcGFyYW1ldGVycyB1cGRhdGVcclxuXHRcdFx0XHRcdFx0aWYgKCBmYWxzZSAhPT0gcmVzcG9uc2VfZGF0YVsgJ2FqeF9hZnRlcl9hY3Rpb25fcmVzdWx0X2FsbF9wYXJhbXNfYXJyJyBdWyAnbmV3X2xpc3RpbmdfcGFyYW1zJyBdICl7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHdwYmNfYWp4X2Jvb2tpbmdfc2VuZF9zZWFyY2hfcmVxdWVzdF93aXRoX3BhcmFtcyggcmVzcG9uc2VfZGF0YVsgJ2FqeF9hZnRlcl9hY3Rpb25fcmVzdWx0X2FsbF9wYXJhbXNfYXJyJyBdWyAnbmV3X2xpc3RpbmdfcGFyYW1zJyBdICk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHZhciBjbG9zZWRfdGltZXIgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbiAoKXtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggd3BiY19ib29raW5nX2xpc3RpbmdfcmVsb2FkX2J1dHRvbl9faXNfc3BpbigpICl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCB1bmRlZmluZWQgIT0gcmVzcG9uc2VfZGF0YVsgJ2FqeF9hZnRlcl9hY3Rpb25fcmVzdWx0X2FsbF9wYXJhbXNfYXJyJyBdWyAnbmV3X2xpc3RpbmdfcGFyYW1zJyBdWyAncmVsb2FkX3VybF9wYXJhbXMnIF0gKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRvY3VtZW50LmxvY2F0aW9uLmhyZWYgPSByZXNwb25zZV9kYXRhWyAnYWp4X2FmdGVyX2FjdGlvbl9yZXN1bHRfYWxsX3BhcmFtc19hcnInIF1bICduZXdfbGlzdGluZ19wYXJhbXMnIF1bICdyZWxvYWRfdXJsX3BhcmFtcycgXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZG9jdW1lbnQubG9jYXRpb24ucmVsb2FkKCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCwgMjAwMCApO1xyXG5cdFx0XHRcdFx0XHRcdGlzX3JlbG9hZF9hamF4X2xpc3RpbmcgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0Ly8gU3RhcnQgZG93bmxvYWQgZXhwb3J0ZWQgQ1NWIGZpbGVcclxuXHRcdFx0XHRcdFx0aWYgKCB1bmRlZmluZWQgIT0gcmVzcG9uc2VfZGF0YVsgJ2FqeF9hZnRlcl9hY3Rpb25fcmVzdWx0X2FsbF9wYXJhbXNfYXJyJyBdWyAnZXhwb3J0X2Nzdl91cmwnIF0gKXtcclxuXHRcdFx0XHRcdFx0XHR3cGJjX2FqeF9ib29raW5nX19leHBvcnRfY3N2X3VybF9fZG93bmxvYWQoIHJlc3BvbnNlX2RhdGFbICdhanhfYWZ0ZXJfYWN0aW9uX3Jlc3VsdF9hbGxfcGFyYW1zX2FycicgXVsgJ2V4cG9ydF9jc3ZfdXJsJyBdICk7XHJcblx0XHRcdFx0XHRcdFx0aXNfcmVsb2FkX2FqYXhfbGlzdGluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoIGlzX3JlbG9hZF9hamF4X2xpc3RpbmcgKXtcclxuXHRcdFx0XHRcdFx0XHR3cGJjX2FqeF9ib29raW5nX19hY3R1YWxfbGlzdGluZ19fc2hvdygpO1x0Ly9cdFNlbmRpbmcgQWpheCBSZXF1ZXN0XHQtXHR3aXRoIHBhcmFtZXRlcnMgdGhhdCAgd2UgZWFybHkgIGRlZmluZWQgaW4gXCJ3cGJjX2FqeF9ib29raW5nX2xpc3RpbmdcIiBPYmouXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gUmVtb3ZlIHNwaW4gaWNvbiBmcm9tICBidXR0b24gYW5kIEVuYWJsZSB0aGlzIGJ1dHRvbi5cclxuXHRcdFx0XHRcdHdwYmNfYnV0dG9uX19yZW1vdmVfc3BpbiggcmVzcG9uc2VfZGF0YVsgJ2FqeF9jbGVhbmVkX3BhcmFtcycgXVsgJ3VpX2NsaWNrZWRfZWxlbWVudF9pZCcgXSApXHJcblxyXG5cdFx0XHRcdFx0Ly8gSGlkZSBtb2RhbHNcclxuXHRcdFx0XHRcdHdwYmNfcG9wdXBfbW9kYWxzX19oaWRlKCk7XHJcblxyXG5cdFx0XHRcdFx0alF1ZXJ5KCAnI2FqYXhfcmVzcG9uZCcgKS5odG1sKCByZXNwb25zZV9kYXRhICk7XHRcdC8vIEZvciBhYmlsaXR5IHRvIHNob3cgcmVzcG9uc2UsIGFkZCBzdWNoIERJViBlbGVtZW50IHRvIHBhZ2VcclxuXHRcdFx0XHR9XHJcblx0XHRcdCAgKS5mYWlsKCBmdW5jdGlvbiAoIGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93biApIHsgICAgaWYgKCB3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS5sb2cgKXsgY29uc29sZS5sb2coICdBamF4X0Vycm9yJywganFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duICk7IH1cclxuXHRcdFx0XHRcdGpRdWVyeSggJyN3aF9zb3J0X3NlbGVjdG9yJyApLmhpZGUoKTtcclxuXHRcdFx0XHRcdHZhciBlcnJvcl9tZXNzYWdlID0gJzxzdHJvbmc+JyArICdFcnJvciEnICsgJzwvc3Ryb25nPiAnICsgZXJyb3JUaHJvd24gO1xyXG5cdFx0XHRcdFx0aWYgKCBqcVhIUi5yZXNwb25zZVRleHQgKXtcclxuXHRcdFx0XHRcdFx0ZXJyb3JfbWVzc2FnZSArPSBqcVhIUi5yZXNwb25zZVRleHQ7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRlcnJvcl9tZXNzYWdlID0gZXJyb3JfbWVzc2FnZS5yZXBsYWNlKCAvXFxuL2csIFwiPGJyIC8+XCIgKTtcclxuXHJcblx0XHRcdFx0XHR3cGJjX2FqeF9ib29raW5nX3Nob3dfbWVzc2FnZSggZXJyb3JfbWVzc2FnZSApO1xyXG5cdFx0XHQgIH0pXHJcblx0ICAgICAgICAgIC8vIC5kb25lKCAgIGZ1bmN0aW9uICggZGF0YSwgdGV4dFN0YXR1cywganFYSFIgKSB7ICAgaWYgKCB3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS5sb2cgKXsgY29uc29sZS5sb2coICdzZWNvbmQgc3VjY2VzcycsIGRhdGEsIHRleHRTdGF0dXMsIGpxWEhSICk7IH0gICAgfSlcclxuXHRcdFx0ICAvLyAuYWx3YXlzKCBmdW5jdGlvbiAoIGRhdGFfanFYSFIsIHRleHRTdGF0dXMsIGpxWEhSX2Vycm9yVGhyb3duICkgeyAgIGlmICggd2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUubG9nICl7IGNvbnNvbGUubG9nKCAnYWx3YXlzIGZpbmlzaGVkJywgZGF0YV9qcVhIUiwgdGV4dFN0YXR1cywganFYSFJfZXJyb3JUaHJvd24gKTsgfSAgICAgfSlcclxuXHRcdFx0ICA7ICAvLyBFbmQgQWpheFxyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqICAgU3VwcG9ydCBGdW5jdGlvbnMgLSBTcGluIEljb24gaW4gQnV0dG9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4vKipcclxuICogUmVtb3ZlIHNwaW4gaWNvbiBmcm9tICBidXR0b24gYW5kIEVuYWJsZSB0aGlzIGJ1dHRvbi5cclxuICpcclxuICogQHBhcmFtIGJ1dHRvbl9jbGlja2VkX2VsZW1lbnRfaWRcdFx0LSBIVE1MIElEIGF0dHJpYnV0ZSBvZiB0aGlzIGJ1dHRvblxyXG4gKiBAcmV0dXJuIHN0cmluZ1x0XHRcdFx0XHRcdC0gQ1NTIGNsYXNzZXMgdGhhdCB3YXMgcHJldmlvdXNseSBpbiBidXR0b24gaWNvblxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19idXR0b25fX3JlbW92ZV9zcGluKCBidXR0b25fY2xpY2tlZF9lbGVtZW50X2lkICl7XHJcblxyXG5cdHZhciBwcmV2aW9zX2NsYXNzZXMgPSAnJztcclxuXHRpZiAoIHVuZGVmaW5lZCAhPSBidXR0b25fY2xpY2tlZF9lbGVtZW50X2lkICl7XHJcblx0XHR2YXIgakVsZW1lbnQgPSBqUXVlcnkoICcjJyArIGJ1dHRvbl9jbGlja2VkX2VsZW1lbnRfaWQgKTtcclxuXHRcdGlmICggakVsZW1lbnQubGVuZ3RoICl7XHJcblx0XHRcdHByZXZpb3NfY2xhc3NlcyA9IHdwYmNfYnV0dG9uX2Rpc2FibGVfbG9hZGluZ19pY29uKCBqRWxlbWVudC5nZXQoIDAgKSApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHByZXZpb3NfY2xhc3NlcztcclxufVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogU2hvdyBMb2FkaW5nIChyb3RhdGluZyBhcnJvdykgaWNvbiBmb3IgYnV0dG9uIHRoYXQgaGFzIGJlZW4gY2xpY2tlZFxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHRoaXNfYnV0dG9uXHRcdC0gdGhpcyBvYmplY3Qgb2Ygc3BlY2lmaWMgYnV0dG9uXHJcblx0ICogQHJldHVybiBzdHJpbmdcdFx0XHQtIENTUyBjbGFzc2VzIHRoYXQgd2FzIHByZXZpb3VzbHkgaW4gYnV0dG9uIGljb25cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2J1dHRvbl9lbmFibGVfbG9hZGluZ19pY29uKCB0aGlzX2J1dHRvbiApe1xyXG5cclxuXHRcdHZhciBqQnV0dG9uID0galF1ZXJ5KCB0aGlzX2J1dHRvbiApO1xyXG5cdFx0dmFyIGpJY29uID0gakJ1dHRvbi5maW5kKCAnaScgKTtcclxuXHRcdHZhciBwcmV2aW9zX2NsYXNzZXMgPSBqSWNvbi5hdHRyKCAnY2xhc3MnICk7XHJcblxyXG5cdFx0akljb24ucmVtb3ZlQ2xhc3MoKS5hZGRDbGFzcyggJ21lbnVfaWNvbiBpY29uLTF4IHdwYmNfaWNuX3JvdGF0ZV9yaWdodCB3cGJjX3NwaW4nICk7XHQvLyBTZXQgUm90YXRlIGljb25cclxuXHRcdC8vakljb24uYWRkQ2xhc3MoICd3cGJjX2FuaW1hdGlvbl9wYXVzZScgKTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBQYXVzZSBhbmltYXRpb25cclxuXHRcdC8vakljb24uYWRkQ2xhc3MoICd3cGJjX3VpX3JlZCcgKTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU2V0IGljb24gY29sb3IgcmVkXHJcblxyXG5cdFx0akljb24uYXR0ciggJ3dwYmNfcHJldmlvdXNfY2xhc3MnLCBwcmV2aW9zX2NsYXNzZXMgKVxyXG5cclxuXHRcdGpCdXR0b24uYWRkQ2xhc3MoICdkaXNhYmxlZCcgKTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBEaXNhYmxlIGJ1dHRvblxyXG5cdFx0Ly9qQnV0dG9uLnByb3AoIFwiZGlzYWJsZWRcIiwgdHJ1ZSApO1xyXG5cdFx0Ly8gV2UgbmVlZCB0byAgc2V0ICBoZXJlIGF0dHIgaW5zdGVhZCBvZiBwcm9wLCBiZWNhdXNlIGZvciBBIGVsZW1lbnRzLCAgYXR0cmlidXRlICdkaXNhYmxlZCcgZG8gIG5vdCBhZGRlZCB3aXRoIGpCdXR0b24ucHJvcCggXCJkaXNhYmxlZFwiLCB0cnVlICk7XHJcblxyXG5cdFx0akJ1dHRvbi5hdHRyKCAnd3BiY19wcmV2aW91c19vbmNsaWNrJywgakJ1dHRvbi5hdHRyKCAnb25jbGljaycgKSApO1x0XHQvL1NhdmUgdGhpcyB2YWx1ZVxyXG5cdFx0akJ1dHRvbi5hdHRyKCAnb25jbGljaycsICcnICk7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIERpc2FibGUgYWN0aW9ucyBcIm9uIGNsaWNrXCJcclxuXHJcblx0XHRyZXR1cm4gcHJldmlvc19jbGFzc2VzO1xyXG5cdH1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIEhpZGUgTG9hZGluZyAocm90YXRpbmcgYXJyb3cpIGljb24gZm9yIGJ1dHRvbiB0aGF0IHdhcyBjbGlja2VkIGFuZCBzaG93IHByZXZpb3VzIGljb24gYW5kIGVuYWJsZSBidXR0b25cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB0aGlzX2J1dHRvblx0XHQtIHRoaXMgb2JqZWN0IG9mIHNwZWNpZmljIGJ1dHRvblxyXG5cdCAqIEByZXR1cm4gc3RyaW5nXHRcdFx0LSBDU1MgY2xhc3NlcyB0aGF0IHdhcyBwcmV2aW91c2x5IGluIGJ1dHRvbiBpY29uXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19idXR0b25fZGlzYWJsZV9sb2FkaW5nX2ljb24oIHRoaXNfYnV0dG9uICl7XHJcblxyXG5cdFx0dmFyIGpCdXR0b24gPSBqUXVlcnkoIHRoaXNfYnV0dG9uICk7XHJcblx0XHR2YXIgakljb24gPSBqQnV0dG9uLmZpbmQoICdpJyApO1xyXG5cclxuXHRcdHZhciBwcmV2aW9zX2NsYXNzZXMgPSBqSWNvbi5hdHRyKCAnd3BiY19wcmV2aW91c19jbGFzcycgKTtcclxuXHRcdGlmICggJycgIT0gcHJldmlvc19jbGFzc2VzICl7XHJcblx0XHRcdGpJY29uLnJlbW92ZUNsYXNzKCkuYWRkQ2xhc3MoIHByZXZpb3NfY2xhc3NlcyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdGpCdXR0b24ucmVtb3ZlQ2xhc3MoICdkaXNhYmxlZCcgKTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBSZW1vdmUgRGlzYWJsZSBidXR0b25cclxuXHJcblx0XHR2YXIgcHJldmlvdXNfb25jbGljayA9IGpCdXR0b24uYXR0ciggJ3dwYmNfcHJldmlvdXNfb25jbGljaycgKVxyXG5cdFx0aWYgKCAnJyAhPSBwcmV2aW91c19vbmNsaWNrICl7XHJcblx0XHRcdGpCdXR0b24uYXR0ciggJ29uY2xpY2snLCBwcmV2aW91c19vbmNsaWNrICk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHByZXZpb3NfY2xhc3NlcztcclxuXHR9XHJcblxyXG5cclxuLyoqXHJcbiAqIEhpZGUgYWxsIG9wZW4gbW9kYWwgcG9wdXBzIHdpbmRvd3NcclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfcG9wdXBfbW9kYWxzX19oaWRlKCl7XHJcblxyXG5cdC8vIEhpZGUgbW9kYWxzXHJcblx0aWYgKCAnZnVuY3Rpb24nID09PSB0eXBlb2YgKGpRdWVyeSggJy53cGJjX3BvcHVwX21vZGFsJyApLndwYmNfbXlfbW9kYWwpICl7XHJcblx0XHRqUXVlcnkoICcud3BiY19wb3B1cF9tb2RhbCcgKS53cGJjX215X21vZGFsKCAnaGlkZScgKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogICBEYXRlcyAgU2hvcnQgPC0+IFdpZGUgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbmZ1bmN0aW9uIHdwYmNfYWp4X2NsaWNrX29uX2RhdGVzX3Nob3J0KCl7XHJcblx0alF1ZXJ5KCAnI2Jvb2tpbmdfZGF0ZXNfc21hbGwsLmJvb2tpbmdfZGF0ZXNfZnVsbCcgKS5oaWRlKCk7XHJcblx0alF1ZXJ5KCAnI2Jvb2tpbmdfZGF0ZXNfZnVsbCwuYm9va2luZ19kYXRlc19zbWFsbCcgKS5zaG93KCk7XHJcblx0d3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X3dpdGhfcGFyYW1zKCB7J3VpX3Vzcl9fZGF0ZXNfc2hvcnRfd2lkZSc6ICdzaG9ydCd9ICk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHdwYmNfYWp4X2NsaWNrX29uX2RhdGVzX3dpZGUoKXtcclxuXHRqUXVlcnkoICcjYm9va2luZ19kYXRlc19mdWxsLC5ib29raW5nX2RhdGVzX3NtYWxsJyApLmhpZGUoKTtcclxuXHRqUXVlcnkoICcjYm9va2luZ19kYXRlc19zbWFsbCwuYm9va2luZ19kYXRlc19mdWxsJyApLnNob3coKTtcclxuXHR3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMoIHsndWlfdXNyX19kYXRlc19zaG9ydF93aWRlJzogJ3dpZGUnfSApO1xyXG59XHJcblxyXG5mdW5jdGlvbiB3cGJjX2FqeF9jbGlja19vbl9kYXRlc190b2dnbGUodGhpc19kYXRlKXtcclxuXHJcblx0alF1ZXJ5KCB0aGlzX2RhdGUgKS5wYXJlbnRzKCAnLndwYmNfY29sX2RhdGVzJyApLmZpbmQoICcuYm9va2luZ19kYXRlc19zbWFsbCcgKS50b2dnbGUoKTtcclxuXHRqUXVlcnkoIHRoaXNfZGF0ZSApLnBhcmVudHMoICcud3BiY19jb2xfZGF0ZXMnICkuZmluZCggJy5ib29raW5nX2RhdGVzX2Z1bGwnICkudG9nZ2xlKCk7XHJcblxyXG5cdC8qXHJcblx0dmFyIHZpc2libGVfc2VjdGlvbiA9IGpRdWVyeSggdGhpc19kYXRlICkucGFyZW50cyggJy5ib29raW5nX2RhdGVzX2V4cGFuZF9zZWN0aW9uJyApO1xyXG5cdHZpc2libGVfc2VjdGlvbi5oaWRlKCk7XHJcblx0aWYgKCB2aXNpYmxlX3NlY3Rpb24uaGFzQ2xhc3MoICdib29raW5nX2RhdGVzX2Z1bGwnICkgKXtcclxuXHRcdHZpc2libGVfc2VjdGlvbi5wYXJlbnRzKCAnLndwYmNfY29sX2RhdGVzJyApLmZpbmQoICcuYm9va2luZ19kYXRlc19zbWFsbCcgKS5zaG93KCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdHZpc2libGVfc2VjdGlvbi5wYXJlbnRzKCAnLndwYmNfY29sX2RhdGVzJyApLmZpbmQoICcuYm9va2luZ19kYXRlc19mdWxsJyApLnNob3coKTtcclxuXHR9Ki9cclxuXHRjb25zb2xlLmxvZyggJ3dwYmNfYWp4X2NsaWNrX29uX2RhdGVzX3RvZ2dsZScsIHRoaXNfZGF0ZSApO1xyXG59XHJcblxyXG4vKipcclxuICogICBMb2NhbGUgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbi8qKlxyXG4gKiBcdFNlbGVjdCBvcHRpb25zIGluIHNlbGVjdCBib3hlcyBiYXNlZCBvbiBhdHRyaWJ1dGUgXCJ2YWx1ZV9vZl9zZWxlY3RlZF9vcHRpb25cIiBhbmQgUkVEIGNvbG9yIGFuZCBoaW50IGZvciBMT0NBTEUgYnV0dG9uICAgLS0gIEl0J3MgY2FsbGVkIGZyb20gXHR3cGJjX2FqeF9ib29raW5nX2RlZmluZV91aV9ob29rcygpICBcdGVhY2ggIHRpbWUgYWZ0ZXIgTGlzdGluZyBsb2FkaW5nLlxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19fdWlfZGVmaW5lX19sb2NhbGUoKXtcclxuXHJcblx0alF1ZXJ5KCAnLndwYmNfbGlzdGluZ19jb250YWluZXIgc2VsZWN0JyApLmVhY2goIGZ1bmN0aW9uICggaW5kZXggKXtcclxuXHJcblx0XHR2YXIgc2VsZWN0aW9uID0galF1ZXJ5KCB0aGlzICkuYXR0ciggXCJ2YWx1ZV9vZl9zZWxlY3RlZF9vcHRpb25cIiApO1x0XHRcdC8vIERlZmluZSBzZWxlY3RlZCBzZWxlY3QgYm94ZXNcclxuXHJcblx0XHRpZiAoIHVuZGVmaW5lZCAhPT0gc2VsZWN0aW9uICl7XHJcblx0XHRcdGpRdWVyeSggdGhpcyApLmZpbmQoICdvcHRpb25bdmFsdWU9XCInICsgc2VsZWN0aW9uICsgJ1wiXScgKS5wcm9wKCAnc2VsZWN0ZWQnLCB0cnVlICk7XHJcblxyXG5cdFx0XHRpZiAoICgnJyAhPSBzZWxlY3Rpb24pICYmIChqUXVlcnkoIHRoaXMgKS5oYXNDbGFzcyggJ3NldF9ib29raW5nX2xvY2FsZV9zZWxlY3Rib3gnICkpICl7XHRcdFx0XHRcdFx0XHRcdC8vIExvY2FsZVxyXG5cclxuXHRcdFx0XHR2YXIgYm9va2luZ19sb2NhbGVfYnV0dG9uID0galF1ZXJ5KCB0aGlzICkucGFyZW50cyggJy51aV9lbGVtZW50X2xvY2FsZScgKS5maW5kKCAnLnNldF9ib29raW5nX2xvY2FsZV9idXR0b24nIClcclxuXHJcblx0XHRcdFx0Ly9ib29raW5nX2xvY2FsZV9idXR0b24uY3NzKCAnY29sb3InLCAnI2RiNDgwMCcgKTtcdFx0Ly8gU2V0IGJ1dHRvbiAgcmVkXHJcblx0XHRcdFx0Ym9va2luZ19sb2NhbGVfYnV0dG9uLmFkZENsYXNzKCAnd3BiY191aV9yZWQnICk7XHRcdC8vIFNldCBidXR0b24gIHJlZFxyXG5cdFx0XHRcdCBpZiAoICdmdW5jdGlvbicgPT09IHR5cGVvZiggd3BiY190aXBweSApICl7XHJcblx0XHRcdFx0XHRib29raW5nX2xvY2FsZV9idXR0b24uZ2V0KDApLl90aXBweS5zZXRDb250ZW50KCBzZWxlY3Rpb24gKTtcclxuXHRcdFx0XHQgfVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fSApO1xyXG59XHJcblxyXG4vKipcclxuICogICBSZW1hcmsgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbi8qKlxyXG4gKiBEZWZpbmUgY29udGVudCBvZiByZW1hcmsgXCJib29raW5nIG5vdGVcIiBidXR0b24gYW5kIHRleHRhcmVhLiAgLS0gSXQncyBjYWxsZWQgZnJvbSBcdHdwYmNfYWp4X2Jvb2tpbmdfZGVmaW5lX3VpX2hvb2tzKCkgIFx0ZWFjaCAgdGltZSBhZnRlciBMaXN0aW5nIGxvYWRpbmcuXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX191aV9kZWZpbmVfX3JlbWFyaygpe1xyXG5cclxuXHRqUXVlcnkoICcud3BiY19saXN0aW5nX2NvbnRhaW5lciAudWlfcmVtYXJrX3NlY3Rpb24gdGV4dGFyZWEnICkuZWFjaCggZnVuY3Rpb24gKCBpbmRleCApe1xyXG5cdFx0dmFyIHRleHRfdmFsID0galF1ZXJ5KCB0aGlzICkudmFsKCk7XHJcblx0XHRpZiAoICh1bmRlZmluZWQgIT09IHRleHRfdmFsKSAmJiAoJycgIT0gdGV4dF92YWwpICl7XHJcblxyXG5cdFx0XHR2YXIgcmVtYXJrX2J1dHRvbiA9IGpRdWVyeSggdGhpcyApLnBhcmVudHMoICcudWlfZ3JvdXAnICkuZmluZCggJy5zZXRfYm9va2luZ19ub3RlX2J1dHRvbicgKTtcclxuXHJcblx0XHRcdGlmICggcmVtYXJrX2J1dHRvbi5sZW5ndGggPiAwICl7XHJcblxyXG5cdFx0XHRcdHJlbWFya19idXR0b24uYWRkQ2xhc3MoICd3cGJjX3VpX3JlZCcgKTtcdFx0Ly8gU2V0IGJ1dHRvbiAgcmVkXHJcblx0XHRcdFx0aWYgKCAnZnVuY3Rpb24nID09PSB0eXBlb2YgKHdwYmNfdGlwcHkpICl7XHJcblx0XHRcdFx0XHQvL3JlbWFya19idXR0b24uZ2V0KCAwICkuX3RpcHB5LmFsbG93SFRNTCA9IHRydWU7XHJcblx0XHRcdFx0XHQvL3JlbWFya19idXR0b24uZ2V0KCAwICkuX3RpcHB5LnNldENvbnRlbnQoIHRleHRfdmFsLnJlcGxhY2UoL1tcXG5cXHJdL2csICc8YnI+JykgKTtcclxuXHJcblx0XHRcdFx0XHRyZW1hcmtfYnV0dG9uLmdldCggMCApLl90aXBweS5zZXRQcm9wcygge1xyXG5cdFx0XHRcdFx0XHRhbGxvd0hUTUw6IHRydWUsXHJcblx0XHRcdFx0XHRcdGNvbnRlbnQgIDogdGV4dF92YWwucmVwbGFjZSggL1tcXG5cXHJdL2csICc8YnI+JyApXHJcblx0XHRcdFx0XHR9ICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fSApO1xyXG59XHJcblxyXG4vKipcclxuICogQWN0aW9ucyAsd2hlbiB3ZSBjbGljayBvbiBcIlJlbWFya1wiIGJ1dHRvbi5cclxuICpcclxuICogQHBhcmFtIGpxX2J1dHRvbiAgLVx0dGhpcyBqUXVlcnkgYnV0dG9uICBvYmplY3RcclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX19yZW1hcmsoIGpxX2J1dHRvbiApe1xyXG5cclxuXHRqcV9idXR0b24ucGFyZW50cygnLnVpX2dyb3VwJykuZmluZCgnLnVpX3JlbWFya19zZWN0aW9uJykudG9nZ2xlKCk7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogICBDaGFuZ2UgYm9va2luZyByZXNvdXJjZSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX3Nob3dfX2NoYW5nZV9yZXNvdXJjZSggYm9va2luZ19pZCwgcmVzb3VyY2VfaWQgKXtcclxuXHJcblx0Ly8gRGVmaW5lIElEIG9mIGJvb2tpbmcgdG8gaGlkZGVuIGlucHV0XHJcblx0alF1ZXJ5KCAnI2NoYW5nZV9ib29raW5nX3Jlc291cmNlX19ib29raW5nX2lkJyApLnZhbCggYm9va2luZ19pZCApO1xyXG5cclxuXHQvLyBTZWxlY3QgYm9va2luZyByZXNvdXJjZSAgdGhhdCBiZWxvbmcgdG8gIGJvb2tpbmdcclxuXHRqUXVlcnkoICcjY2hhbmdlX2Jvb2tpbmdfcmVzb3VyY2VfX3Jlc291cmNlX3NlbGVjdCcgKS52YWwoIHJlc291cmNlX2lkICkudHJpZ2dlciggJ2NoYW5nZScgKTtcclxuXHR2YXIgY2JyO1xyXG5cclxuXHQvLyBHZXQgUmVzb3VyY2Ugc2VjdGlvblxyXG5cdGNiciA9IGpRdWVyeSggXCIjY2hhbmdlX2Jvb2tpbmdfcmVzb3VyY2VfX3NlY3Rpb25cIiApLmRldGFjaCgpO1xyXG5cclxuXHQvLyBBcHBlbmQgaXQgdG8gYm9va2luZyBST1dcclxuXHRjYnIuYXBwZW5kVG8oIGpRdWVyeSggXCIjdWlfX2NoYW5nZV9ib29raW5nX3Jlc291cmNlX19zZWN0aW9uX2luX2Jvb2tpbmdfXCIgKyBib29raW5nX2lkICkgKTtcclxuXHRjYnIgPSBudWxsO1xyXG5cclxuXHQvLyBIaWRlIHNlY3Rpb25zIG9mIFwiQ2hhbmdlIGJvb2tpbmcgcmVzb3VyY2VcIiBpbiBhbGwgb3RoZXIgYm9va2luZ3MgUk9Xc1xyXG5cdC8valF1ZXJ5KCBcIi51aV9fY2hhbmdlX2Jvb2tpbmdfcmVzb3VyY2VfX3NlY3Rpb25faW5fYm9va2luZ1wiICkuaGlkZSgpO1xyXG5cdGlmICggISBqUXVlcnkoIFwiI3VpX19jaGFuZ2VfYm9va2luZ19yZXNvdXJjZV9fc2VjdGlvbl9pbl9ib29raW5nX1wiICsgYm9va2luZ19pZCApLmlzKCc6dmlzaWJsZScpICl7XHJcblx0XHRqUXVlcnkoIFwiLnVpX191bmRlcl9hY3Rpb25zX3Jvd19fc2VjdGlvbl9pbl9ib29raW5nXCIgKS5oaWRlKCk7XHJcblx0fVxyXG5cclxuXHQvLyBTaG93IG9ubHkgXCJjaGFuZ2UgYm9va2luZyByZXNvdXJjZVwiIHNlY3Rpb24gIGZvciBjdXJyZW50IGJvb2tpbmdcclxuXHRqUXVlcnkoIFwiI3VpX19jaGFuZ2VfYm9va2luZ19yZXNvdXJjZV9fc2VjdGlvbl9pbl9ib29raW5nX1wiICsgYm9va2luZ19pZCApLnRvZ2dsZSgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19zYXZlX19jaGFuZ2VfcmVzb3VyY2UoIHRoaXNfZWwsIGJvb2tpbmdfYWN0aW9uLCBlbF9pZCApe1xyXG5cclxuXHR3cGJjX2FqeF9ib29raW5nX2FqYXhfYWN0aW9uX3JlcXVlc3QoIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdib29raW5nX2FjdGlvbicgICAgICAgOiBib29raW5nX2FjdGlvbixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdib29raW5nX2lkJyAgICAgICAgICAgOiBqUXVlcnkoICcjY2hhbmdlX2Jvb2tpbmdfcmVzb3VyY2VfX2Jvb2tpbmdfaWQnICkudmFsKCksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnc2VsZWN0ZWRfcmVzb3VyY2VfaWQnIDogalF1ZXJ5KCAnI2NoYW5nZV9ib29raW5nX3Jlc291cmNlX19yZXNvdXJjZV9zZWxlY3QnICkudmFsKCksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndWlfY2xpY2tlZF9lbGVtZW50X2lkJzogZWxfaWRcclxuXHR9ICk7XHJcblxyXG5cdHdwYmNfYnV0dG9uX2VuYWJsZV9sb2FkaW5nX2ljb24oIHRoaXNfZWwgKTtcclxuXHJcblx0Ly8gd3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfY2xvc2VfX2NoYW5nZV9yZXNvdXJjZSgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19jbG9zZV9fY2hhbmdlX3Jlc291cmNlKCl7XHJcblxyXG5cdHZhciBjYnJjZTtcclxuXHJcblx0Ly8gR2V0IFJlc291cmNlIHNlY3Rpb25cclxuXHRjYnJjZSA9IGpRdWVyeShcIiNjaGFuZ2VfYm9va2luZ19yZXNvdXJjZV9fc2VjdGlvblwiKS5kZXRhY2goKTtcclxuXHJcblx0Ly8gQXBwZW5kIGl0IHRvIGhpZGRlbiBIVE1MIHRlbXBsYXRlIHNlY3Rpb24gIGF0ICB0aGUgYm90dG9tICBvZiB0aGUgcGFnZVxyXG5cdGNicmNlLmFwcGVuZFRvKGpRdWVyeShcIiN3cGJjX2hpZGRlbl90ZW1wbGF0ZV9fY2hhbmdlX2Jvb2tpbmdfcmVzb3VyY2VcIikpO1xyXG5cdGNicmNlID0gbnVsbDtcclxuXHJcblx0Ly8gSGlkZSBhbGwgY2hhbmdlIGJvb2tpbmcgcmVzb3VyY2VzIHNlY3Rpb25zXHJcblx0alF1ZXJ5KFwiLnVpX19jaGFuZ2VfYm9va2luZ19yZXNvdXJjZV9fc2VjdGlvbl9pbl9ib29raW5nXCIpLmhpZGUoKTtcclxufVxyXG5cclxuLyoqXHJcbiAqICAgRHVwbGljYXRlIGJvb2tpbmcgaW4gb3RoZXIgcmVzb3VyY2UgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19zaG93X19kdXBsaWNhdGVfYm9va2luZyggYm9va2luZ19pZCwgcmVzb3VyY2VfaWQgKXtcclxuXHJcblx0Ly8gRGVmaW5lIElEIG9mIGJvb2tpbmcgdG8gaGlkZGVuIGlucHV0XHJcblx0alF1ZXJ5KCAnI2R1cGxpY2F0ZV9ib29raW5nX3RvX290aGVyX3Jlc291cmNlX19ib29raW5nX2lkJyApLnZhbCggYm9va2luZ19pZCApO1xyXG5cclxuXHQvLyBTZWxlY3QgYm9va2luZyByZXNvdXJjZSAgdGhhdCBiZWxvbmcgdG8gIGJvb2tpbmdcclxuXHRqUXVlcnkoICcjZHVwbGljYXRlX2Jvb2tpbmdfdG9fb3RoZXJfcmVzb3VyY2VfX3Jlc291cmNlX3NlbGVjdCcgKS52YWwoIHJlc291cmNlX2lkICkudHJpZ2dlciggJ2NoYW5nZScgKTtcclxuXHR2YXIgY2JyO1xyXG5cclxuXHQvLyBHZXQgUmVzb3VyY2Ugc2VjdGlvblxyXG5cdGNiciA9IGpRdWVyeSggXCIjZHVwbGljYXRlX2Jvb2tpbmdfdG9fb3RoZXJfcmVzb3VyY2VfX3NlY3Rpb25cIiApLmRldGFjaCgpO1xyXG5cclxuXHQvLyBBcHBlbmQgaXQgdG8gYm9va2luZyBST1dcclxuXHRjYnIuYXBwZW5kVG8oIGpRdWVyeSggXCIjdWlfX2R1cGxpY2F0ZV9ib29raW5nX3RvX290aGVyX3Jlc291cmNlX19zZWN0aW9uX2luX2Jvb2tpbmdfXCIgKyBib29raW5nX2lkICkgKTtcclxuXHRjYnIgPSBudWxsO1xyXG5cclxuXHQvLyBIaWRlIHNlY3Rpb25zIG9mIFwiRHVwbGljYXRlIGJvb2tpbmdcIiBpbiBhbGwgb3RoZXIgYm9va2luZ3MgUk9Xc1xyXG5cdGlmICggISBqUXVlcnkoIFwiI3VpX19kdXBsaWNhdGVfYm9va2luZ190b19vdGhlcl9yZXNvdXJjZV9fc2VjdGlvbl9pbl9ib29raW5nX1wiICsgYm9va2luZ19pZCApLmlzKCc6dmlzaWJsZScpICl7XHJcblx0XHRqUXVlcnkoIFwiLnVpX191bmRlcl9hY3Rpb25zX3Jvd19fc2VjdGlvbl9pbl9ib29raW5nXCIgKS5oaWRlKCk7XHJcblx0fVxyXG5cclxuXHQvLyBTaG93IG9ubHkgXCJEdXBsaWNhdGUgYm9va2luZ1wiIHNlY3Rpb24gIGZvciBjdXJyZW50IGJvb2tpbmcgUk9XXHJcblx0alF1ZXJ5KCBcIiN1aV9fZHVwbGljYXRlX2Jvb2tpbmdfdG9fb3RoZXJfcmVzb3VyY2VfX3NlY3Rpb25faW5fYm9va2luZ19cIiArIGJvb2tpbmdfaWQgKS50b2dnbGUoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfc2F2ZV9fZHVwbGljYXRlX2Jvb2tpbmcoIHRoaXNfZWwsIGJvb2tpbmdfYWN0aW9uLCBlbF9pZCApe1xyXG5cclxuXHR3cGJjX2FqeF9ib29raW5nX2FqYXhfYWN0aW9uX3JlcXVlc3QoIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdib29raW5nX2FjdGlvbicgICAgICAgOiBib29raW5nX2FjdGlvbixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdib29raW5nX2lkJyAgICAgICAgICAgOiBqUXVlcnkoICcjZHVwbGljYXRlX2Jvb2tpbmdfdG9fb3RoZXJfcmVzb3VyY2VfX2Jvb2tpbmdfaWQnICkudmFsKCksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnc2VsZWN0ZWRfcmVzb3VyY2VfaWQnIDogalF1ZXJ5KCAnI2R1cGxpY2F0ZV9ib29raW5nX3RvX290aGVyX3Jlc291cmNlX19yZXNvdXJjZV9zZWxlY3QnICkudmFsKCksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndWlfY2xpY2tlZF9lbGVtZW50X2lkJzogZWxfaWRcclxuXHR9ICk7XHJcblxyXG5cdHdwYmNfYnV0dG9uX2VuYWJsZV9sb2FkaW5nX2ljb24oIHRoaXNfZWwgKTtcclxuXHJcblx0Ly8gd3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfY2xvc2VfX2NoYW5nZV9yZXNvdXJjZSgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19jbG9zZV9fZHVwbGljYXRlX2Jvb2tpbmcoKXtcclxuXHJcblx0dmFyIGNicmNlO1xyXG5cclxuXHQvLyBHZXQgUmVzb3VyY2Ugc2VjdGlvblxyXG5cdGNicmNlID0galF1ZXJ5KFwiI2R1cGxpY2F0ZV9ib29raW5nX3RvX290aGVyX3Jlc291cmNlX19zZWN0aW9uXCIpLmRldGFjaCgpO1xyXG5cclxuXHQvLyBBcHBlbmQgaXQgdG8gaGlkZGVuIEhUTUwgdGVtcGxhdGUgc2VjdGlvbiAgYXQgIHRoZSBib3R0b20gIG9mIHRoZSBwYWdlXHJcblx0Y2JyY2UuYXBwZW5kVG8oalF1ZXJ5KFwiI3dwYmNfaGlkZGVuX3RlbXBsYXRlX19kdXBsaWNhdGVfYm9va2luZ190b19vdGhlcl9yZXNvdXJjZVwiKSk7XHJcblx0Y2JyY2UgPSBudWxsO1xyXG5cclxuXHQvLyBIaWRlIGFsbCBjaGFuZ2UgYm9va2luZyByZXNvdXJjZXMgc2VjdGlvbnNcclxuXHRqUXVlcnkoXCIudWlfX2R1cGxpY2F0ZV9ib29raW5nX3RvX290aGVyX3Jlc291cmNlX19zZWN0aW9uX2luX2Jvb2tpbmdcIikuaGlkZSgpO1xyXG59XHJcblxyXG4vKipcclxuICogICBDaGFuZ2UgcGF5bWVudCBzdGF0dXMgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX3Nob3dfX3NldF9wYXltZW50X3N0YXR1cyggYm9va2luZ19pZCApe1xyXG5cclxuXHR2YXIgalNlbGVjdCA9IGpRdWVyeSggJyN1aV9fc2V0X3BheW1lbnRfc3RhdHVzX19zZWN0aW9uX2luX2Jvb2tpbmdfJyArIGJvb2tpbmdfaWQgKS5maW5kKCAnc2VsZWN0JyApXHJcblxyXG5cdHZhciBzZWxlY3RlZF9wYXlfc3RhdHVzID0galNlbGVjdC5hdHRyKCBcImFqeC1zZWxlY3RlZC12YWx1ZVwiICk7XHJcblxyXG5cdC8vIElzIGl0IGZsb2F0IC0gdGhlbiAgaXQncyB1bmtub3duXHJcblx0aWYgKCAhaXNOYU4oIHBhcnNlRmxvYXQoIHNlbGVjdGVkX3BheV9zdGF0dXMgKSApICl7XHJcblx0XHRqU2VsZWN0LmZpbmQoICdvcHRpb25bdmFsdWU9XCIxXCJdJyApLnByb3AoICdzZWxlY3RlZCcsIHRydWUgKTtcdFx0XHRcdFx0XHRcdFx0Ly8gVW5rbm93biAgdmFsdWUgaXMgJzEnIGluIHNlbGVjdCBib3hcclxuXHR9IGVsc2Uge1xyXG5cdFx0alNlbGVjdC5maW5kKCAnb3B0aW9uW3ZhbHVlPVwiJyArIHNlbGVjdGVkX3BheV9zdGF0dXMgKyAnXCJdJyApLnByb3AoICdzZWxlY3RlZCcsIHRydWUgKTtcdFx0Ly8gT3RoZXJ3aXNlIGtub3duIHBheW1lbnQgc3RhdHVzXHJcblx0fVxyXG5cclxuXHQvLyBIaWRlIHNlY3Rpb25zIG9mIFwiQ2hhbmdlIGJvb2tpbmcgcmVzb3VyY2VcIiBpbiBhbGwgb3RoZXIgYm9va2luZ3MgUk9Xc1xyXG5cdGlmICggISBqUXVlcnkoIFwiI3VpX19zZXRfcGF5bWVudF9zdGF0dXNfX3NlY3Rpb25faW5fYm9va2luZ19cIiArIGJvb2tpbmdfaWQgKS5pcygnOnZpc2libGUnKSApe1xyXG5cdFx0alF1ZXJ5KCBcIi51aV9fdW5kZXJfYWN0aW9uc19yb3dfX3NlY3Rpb25faW5fYm9va2luZ1wiICkuaGlkZSgpO1xyXG5cdH1cclxuXHJcblx0Ly8gU2hvdyBvbmx5IFwiY2hhbmdlIGJvb2tpbmcgcmVzb3VyY2VcIiBzZWN0aW9uICBmb3IgY3VycmVudCBib29raW5nXHJcblx0alF1ZXJ5KCBcIiN1aV9fc2V0X3BheW1lbnRfc3RhdHVzX19zZWN0aW9uX2luX2Jvb2tpbmdfXCIgKyBib29raW5nX2lkICkudG9nZ2xlKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX3NhdmVfX3NldF9wYXltZW50X3N0YXR1cyggYm9va2luZ19pZCwgdGhpc19lbCwgYm9va2luZ19hY3Rpb24sIGVsX2lkICl7XHJcblxyXG5cdHdwYmNfYWp4X2Jvb2tpbmdfYWpheF9hY3Rpb25fcmVxdWVzdCgge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2Jvb2tpbmdfYWN0aW9uJyAgICAgICA6IGJvb2tpbmdfYWN0aW9uLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2Jvb2tpbmdfaWQnICAgICAgICAgICA6IGJvb2tpbmdfaWQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnc2VsZWN0ZWRfcGF5bWVudF9zdGF0dXMnIDogalF1ZXJ5KCAnI3VpX2J0bl9zZXRfcGF5bWVudF9zdGF0dXMnICsgYm9va2luZ19pZCApLnZhbCgpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3VpX2NsaWNrZWRfZWxlbWVudF9pZCc6IGVsX2lkICsgJ19zYXZlJ1xyXG5cdH0gKTtcclxuXHJcblx0d3BiY19idXR0b25fZW5hYmxlX2xvYWRpbmdfaWNvbiggdGhpc19lbCApO1xyXG5cclxuXHRqUXVlcnkoICcjJyArIGVsX2lkICsgJ19jYW5jZWwnKS5oaWRlKCk7XHJcblx0Ly93cGJjX2J1dHRvbl9lbmFibGVfbG9hZGluZ19pY29uKCBqUXVlcnkoICcjJyArIGVsX2lkICsgJ19jYW5jZWwnKS5nZXQoMCkgKTtcclxuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX2Nsb3NlX19zZXRfcGF5bWVudF9zdGF0dXMoKXtcclxuXHQvLyBIaWRlIGFsbCBjaGFuZ2UgIHBheW1lbnQgc3RhdHVzIGZvciBib29raW5nXHJcblx0alF1ZXJ5KFwiLnVpX19zZXRfcGF5bWVudF9zdGF0dXNfX3NlY3Rpb25faW5fYm9va2luZ1wiKS5oaWRlKCk7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogICBDaGFuZ2UgYm9va2luZyBjb3N0ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX3NhdmVfX3NldF9ib29raW5nX2Nvc3QoIGJvb2tpbmdfaWQsIHRoaXNfZWwsIGJvb2tpbmdfYWN0aW9uLCBlbF9pZCApe1xyXG5cclxuXHR3cGJjX2FqeF9ib29raW5nX2FqYXhfYWN0aW9uX3JlcXVlc3QoIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdib29raW5nX2FjdGlvbicgICAgICAgOiBib29raW5nX2FjdGlvbixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdib29raW5nX2lkJyAgICAgICAgICAgOiBib29raW5nX2lkLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2Jvb2tpbmdfY29zdCcgXHRcdCAgIDogalF1ZXJ5KCAnI3VpX2J0bl9zZXRfYm9va2luZ19jb3N0JyArIGJvb2tpbmdfaWQgKyAnX2Nvc3QnKS52YWwoKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd1aV9jbGlja2VkX2VsZW1lbnRfaWQnOiBlbF9pZCArICdfc2F2ZSdcclxuXHR9ICk7XHJcblxyXG5cdHdwYmNfYnV0dG9uX2VuYWJsZV9sb2FkaW5nX2ljb24oIHRoaXNfZWwgKTtcclxuXHJcblx0alF1ZXJ5KCAnIycgKyBlbF9pZCArICdfY2FuY2VsJykuaGlkZSgpO1xyXG5cdC8vd3BiY19idXR0b25fZW5hYmxlX2xvYWRpbmdfaWNvbiggalF1ZXJ5KCAnIycgKyBlbF9pZCArICdfY2FuY2VsJykuZ2V0KDApICk7XHJcblxyXG59XHJcblxyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19jbG9zZV9fc2V0X2Jvb2tpbmdfY29zdCgpe1xyXG5cdC8vIEhpZGUgYWxsIGNoYW5nZSAgcGF5bWVudCBzdGF0dXMgZm9yIGJvb2tpbmdcclxuXHRqUXVlcnkoXCIudWlfX3NldF9ib29raW5nX2Nvc3RfX3NlY3Rpb25faW5fYm9va2luZ1wiKS5oaWRlKCk7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogICBTZW5kIFBheW1lbnQgcmVxdWVzdCAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19fc2VuZF9wYXltZW50X3JlcXVlc3QoKXtcclxuXHJcblx0d3BiY19hanhfYm9va2luZ19hamF4X2FjdGlvbl9yZXF1ZXN0KCB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnYm9va2luZ19hY3Rpb24nICAgICAgIDogJ3NlbmRfcGF5bWVudF9yZXF1ZXN0JyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdib29raW5nX2lkJyAgICAgICAgICAgOiBqUXVlcnkoICcjd3BiY19tb2RhbF9fcGF5bWVudF9yZXF1ZXN0X19ib29raW5nX2lkJykudmFsKCksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQncmVhc29uX29mX2FjdGlvbicgXHQgICA6IGpRdWVyeSggJyN3cGJjX21vZGFsX19wYXltZW50X3JlcXVlc3RfX3JlYXNvbl9vZl9hY3Rpb24nKS52YWwoKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd1aV9jbGlja2VkX2VsZW1lbnRfaWQnOiAnd3BiY19tb2RhbF9fcGF5bWVudF9yZXF1ZXN0X19idXR0b25fc2VuZCdcclxuXHR9ICk7XHJcblx0d3BiY19idXR0b25fZW5hYmxlX2xvYWRpbmdfaWNvbiggalF1ZXJ5KCAnI3dwYmNfbW9kYWxfX3BheW1lbnRfcmVxdWVzdF9fYnV0dG9uX3NlbmQnICkuZ2V0KCAwICkgKTtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiAgIEltcG9ydCBHb29nbGUgQ2FsZW5kYXIgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfX2ltcG9ydF9nb29nbGVfY2FsZW5kYXIoKXtcclxuXHJcblx0d3BiY19hanhfYm9va2luZ19hamF4X2FjdGlvbl9yZXF1ZXN0KCB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnYm9va2luZ19hY3Rpb24nICAgICAgIDogJ2ltcG9ydF9nb29nbGVfY2FsZW5kYXInLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3VpX2NsaWNrZWRfZWxlbWVudF9pZCc6ICd3cGJjX21vZGFsX19pbXBvcnRfZ29vZ2xlX2NhbGVuZGFyX19idXR0b25fc2VuZCdcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQsICdib29raW5nX2djYWxfZXZlbnRzX2Zyb20nIDogXHRcdFx0XHRqUXVlcnkoICcjd3BiY19tb2RhbF9faW1wb3J0X2dvb2dsZV9jYWxlbmRhcl9fc2VjdGlvbiAjYm9va2luZ19nY2FsX2V2ZW50c19mcm9tIG9wdGlvbjpzZWxlY3RlZCcpLnZhbCgpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQsICdib29raW5nX2djYWxfZXZlbnRzX2Zyb21fb2Zmc2V0JyA6IFx0XHRqUXVlcnkoICcjd3BiY19tb2RhbF9faW1wb3J0X2dvb2dsZV9jYWxlbmRhcl9fc2VjdGlvbiAjYm9va2luZ19nY2FsX2V2ZW50c19mcm9tX29mZnNldCcgKS52YWwoKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LCAnYm9va2luZ19nY2FsX2V2ZW50c19mcm9tX29mZnNldF90eXBlJyA6IFx0alF1ZXJ5KCAnI3dwYmNfbW9kYWxfX2ltcG9ydF9nb29nbGVfY2FsZW5kYXJfX3NlY3Rpb24gI2Jvb2tpbmdfZ2NhbF9ldmVudHNfZnJvbV9vZmZzZXRfdHlwZSBvcHRpb246c2VsZWN0ZWQnKS52YWwoKVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCwgJ2Jvb2tpbmdfZ2NhbF9ldmVudHNfdW50aWwnIDogXHRcdFx0alF1ZXJ5KCAnI3dwYmNfbW9kYWxfX2ltcG9ydF9nb29nbGVfY2FsZW5kYXJfX3NlY3Rpb24gI2Jvb2tpbmdfZ2NhbF9ldmVudHNfdW50aWwgb3B0aW9uOnNlbGVjdGVkJykudmFsKClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCwgJ2Jvb2tpbmdfZ2NhbF9ldmVudHNfdW50aWxfb2Zmc2V0JyA6IFx0XHRqUXVlcnkoICcjd3BiY19tb2RhbF9faW1wb3J0X2dvb2dsZV9jYWxlbmRhcl9fc2VjdGlvbiAjYm9va2luZ19nY2FsX2V2ZW50c191bnRpbF9vZmZzZXQnICkudmFsKClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCwgJ2Jvb2tpbmdfZ2NhbF9ldmVudHNfdW50aWxfb2Zmc2V0X3R5cGUnIDogalF1ZXJ5KCAnI3dwYmNfbW9kYWxfX2ltcG9ydF9nb29nbGVfY2FsZW5kYXJfX3NlY3Rpb24gI2Jvb2tpbmdfZ2NhbF9ldmVudHNfdW50aWxfb2Zmc2V0X3R5cGUgb3B0aW9uOnNlbGVjdGVkJykudmFsKClcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQsICdib29raW5nX2djYWxfZXZlbnRzX21heCcgOiBcdGpRdWVyeSggJyN3cGJjX21vZGFsX19pbXBvcnRfZ29vZ2xlX2NhbGVuZGFyX19zZWN0aW9uICNib29raW5nX2djYWxfZXZlbnRzX21heCcgKS52YWwoKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LCAnYm9va2luZ19nY2FsX3Jlc291cmNlJyA6IFx0alF1ZXJ5KCAnI3dwYmNfbW9kYWxfX2ltcG9ydF9nb29nbGVfY2FsZW5kYXJfX3NlY3Rpb24gI3dwYmNfYm9va2luZ19yZXNvdXJjZSBvcHRpb246c2VsZWN0ZWQnKS52YWwoKVxyXG5cdH0gKTtcclxuXHR3cGJjX2J1dHRvbl9lbmFibGVfbG9hZGluZ19pY29uKCBqUXVlcnkoICcjd3BiY19tb2RhbF9faW1wb3J0X2dvb2dsZV9jYWxlbmRhcl9fc2VjdGlvbiAjd3BiY19tb2RhbF9faW1wb3J0X2dvb2dsZV9jYWxlbmRhcl9fYnV0dG9uX3NlbmQnICkuZ2V0KCAwICkgKTtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiAgIEV4cG9ydCBib29raW5ncyB0byBDU1YgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19fZXhwb3J0X2NzdiggcGFyYW1zICl7XHJcblxyXG5cdHZhciBzZWxlY3RlZF9ib29raW5nX2lkX2FyciA9IHdwYmNfZ2V0X3NlbGVjdGVkX3Jvd19pZCgpO1xyXG5cclxuXHR3cGJjX2FqeF9ib29raW5nX2FqYXhfYWN0aW9uX3JlcXVlc3QoIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdib29raW5nX2FjdGlvbicgICAgICAgIDogcGFyYW1zWyAnYm9va2luZ19hY3Rpb24nIF0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndWlfY2xpY2tlZF9lbGVtZW50X2lkJyA6IHBhcmFtc1sgJ3VpX2NsaWNrZWRfZWxlbWVudF9pZCcgXSxcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnZXhwb3J0X3R5cGUnICAgICAgICAgICA6IHBhcmFtc1sgJ2V4cG9ydF90eXBlJyBdLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2Nzdl9leHBvcnRfc2VwYXJhdG9yJyAgOiBwYXJhbXNbICdjc3ZfZXhwb3J0X3NlcGFyYXRvcicgXSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdjc3ZfZXhwb3J0X3NraXBfZmllbGRzJzogcGFyYW1zWyAnY3N2X2V4cG9ydF9za2lwX2ZpZWxkcycgXSxcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnYm9va2luZ19pZCdcdDogc2VsZWN0ZWRfYm9va2luZ19pZF9hcnIuam9pbignLCcpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3NlYXJjaF9wYXJhbXMnIDogd3BiY19hanhfYm9va2luZ19saXN0aW5nLnNlYXJjaF9nZXRfYWxsX3BhcmFtcygpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSApO1xyXG5cclxuXHR2YXIgdGhpc19lbCA9IGpRdWVyeSggJyMnICsgcGFyYW1zWyAndWlfY2xpY2tlZF9lbGVtZW50X2lkJyBdICkuZ2V0KCAwIClcclxuXHJcblx0d3BiY19idXR0b25fZW5hYmxlX2xvYWRpbmdfaWNvbiggdGhpc19lbCApO1xyXG59XHJcblxyXG4vKipcclxuICogT3BlbiBVUkwgaW4gbmV3IHRhYiAtIG1haW5seSAgaXQncyB1c2VkIGZvciBvcGVuIENTViBsaW5rICBmb3IgZG93bmxvYWRlZCBleHBvcnRlZCBib29raW5ncyBhcyBDU1ZcclxuICpcclxuICogQHBhcmFtIGV4cG9ydF9jc3ZfdXJsXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX19leHBvcnRfY3N2X3VybF9fZG93bmxvYWQoIGV4cG9ydF9jc3ZfdXJsICl7XHJcblxyXG5cdC8vdmFyIHNlbGVjdGVkX2Jvb2tpbmdfaWRfYXJyID0gd3BiY19nZXRfc2VsZWN0ZWRfcm93X2lkKCk7XHJcblxyXG5cdGRvY3VtZW50LmxvY2F0aW9uLmhyZWYgPSBleHBvcnRfY3N2X3VybDsvLyArICcmc2VsZWN0ZWRfaWQ9JyArIHNlbGVjdGVkX2Jvb2tpbmdfaWRfYXJyLmpvaW4oJywnKTtcclxuXHJcblx0Ly8gSXQncyBvcGVuIGFkZGl0aW9uYWwgZGlhbG9nIGZvciBhc2tpbmcgb3BlbmluZyB1bHIgaW4gbmV3IHRhYlxyXG5cdC8vIHdpbmRvdy5vcGVuKCBleHBvcnRfY3N2X3VybCwgJ19ibGFuaycpLmZvY3VzKCk7XHJcbn0iXSwiZmlsZSI6ImluY2x1ZGVzL3BhZ2UtYm9va2luZ3MvX291dC9ib29raW5nc19fYWN0aW9ucy5qcyJ9
|
includes/page-bookings/_out/bookings__actions.min.js
ADDED
@@ -0,0 +1,2 @@
|
|
Â
|
|
Â
|
1 |
+
"use strict";function _typeof(_){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(_){return typeof _}:function(_){return _&&"function"==typeof Symbol&&_.constructor===Symbol&&_!==Symbol.prototype?"symbol":typeof _})(_)}function wpbc_ajx_booking_ajax_action_request(){var _=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};console.groupCollapsed("WPBC_AJX_BOOKING_ACTIONS"),console.log(" == Ajax Actions :: Params == ",_),wpbc_booking_listing_reload_button__spin_start(),null==_.booking_id||Array.isArray(_.booking_id)||(_.locale=wpbc_get_selected_locale(_.booking_id,wpbc_ajx_booking_listing.get_secure_param("locale")));var o={action:"WPBC_AJX_BOOKING_ACTIONS",nonce:wpbc_ajx_booking_listing.get_secure_param("nonce"),wpbc_ajx_user_id:null==_.user_id?wpbc_ajx_booking_listing.get_secure_param("user_id"):_.user_id,wpbc_ajx_locale:null==_.locale?wpbc_ajx_booking_listing.get_secure_param("locale"):_.locale,action_params:_};void 0!==_.search_params&&(o.search_params=_.search_params,delete o.action_params.search_params),jQuery.post(wpbc_global1.wpbc_ajaxurl,o,function(_,o,e){return console.log(" == Ajax Actions :: Response WPBC_AJX_BOOKING_ACTIONS == ",_),console.groupEnd(),"object"!==_typeof(_)||null===_?(jQuery("#wh_sort_selector").hide(),void jQuery(wpbc_ajx_booking_listing.get_other_param("listing_container")).html('<div class="wpbc-settings-notice notice-warning" style="text-align:left">'+_+"</div>")):(wpbc_booking_listing_reload_button__spin_pause(),wpbc_admin_show_message(_.ajx_after_action_message.replace(/\n/g,"<br />"),"1"==_.ajx_after_action_result?"success":"error",1e4),"1"==_.ajx_after_action_result&&(!(i=!0)!==_.ajx_after_action_result_all_params_arr.new_listing_params&&(wpbc_ajx_booking_send_search_request_with_params(_.ajx_after_action_result_all_params_arr.new_listing_params),setTimeout(function(){wpbc_booking_listing_reload_button__is_spin()&&(null!=_.ajx_after_action_result_all_params_arr.new_listing_params.reload_url_params?document.location.href=_.ajx_after_action_result_all_params_arr.new_listing_params.reload_url_params:document.location.reload())},2e3),i=!1),null!=_.ajx_after_action_result_all_params_arr.export_csv_url&&(wpbc_ajx_booking__export_csv_url__download(_.ajx_after_action_result_all_params_arr.export_csv_url),i=!1),i&&wpbc_ajx_booking__actual_listing__show()),wpbc_button__remove_spin(_.ajx_cleaned_params.ui_clicked_element_id),wpbc_popup_modals__hide(),void jQuery("#ajax_respond").html(_));var i}).fail(function(_,o,e){window.console&&window.console.log&&console.log("Ajax_Error",_,o,e),jQuery("#wh_sort_selector").hide();e="<strong>Error!</strong> "+e;_.responseText&&(e+=_.responseText),e=e.replace(/\n/g,"<br />"),wpbc_ajx_booking_show_message(e)})}function wpbc_button__remove_spin(_){var o="";return null==_||(_=jQuery("#"+_)).length&&(o=wpbc_button_disable_loading_icon(_.get(0))),o}function wpbc_button_enable_loading_icon(_){var o=jQuery(_),e=o.find("i"),_=e.attr("class");return e.removeClass().addClass("menu_icon icon-1x wpbc_icn_rotate_right wpbc_spin"),e.attr("wpbc_previous_class",_),o.addClass("disabled"),o.attr("wpbc_previous_onclick",o.attr("onclick")),o.attr("onclick",""),_}function wpbc_button_disable_loading_icon(_){var o=jQuery(_),e=o.find("i"),_=e.attr("wpbc_previous_class");""!=_&&e.removeClass().addClass(_),o.removeClass("disabled");e=o.attr("wpbc_previous_onclick");return""!=e&&o.attr("onclick",e),_}function wpbc_popup_modals__hide(){"function"==typeof jQuery(".wpbc_popup_modal").wpbc_my_modal&&jQuery(".wpbc_popup_modal").wpbc_my_modal("hide")}function wpbc_ajx_click_on_dates_short(){jQuery("#booking_dates_small,.booking_dates_full").hide(),jQuery("#booking_dates_full,.booking_dates_small").show(),wpbc_ajx_booking_send_search_request_with_params({ui_usr__dates_short_wide:"short"})}function wpbc_ajx_click_on_dates_wide(){jQuery("#booking_dates_full,.booking_dates_small").hide(),jQuery("#booking_dates_small,.booking_dates_full").show(),wpbc_ajx_booking_send_search_request_with_params({ui_usr__dates_short_wide:"wide"})}function wpbc_ajx_click_on_dates_toggle(_){jQuery(_).parents(".wpbc_col_dates").find(".booking_dates_small").toggle(),jQuery(_).parents(".wpbc_col_dates").find(".booking_dates_full").toggle(),console.log("wpbc_ajx_click_on_dates_toggle",_)}function wpbc_ajx_booking__ui_define__locale(){jQuery(".wpbc_listing_container select").each(function(_){var o,e=jQuery(this).attr("value_of_selected_option");void 0!==e&&(jQuery(this).find('option[value="'+e+'"]').prop("selected",!0),""!=e&&jQuery(this).hasClass("set_booking_locale_selectbox")&&((o=jQuery(this).parents(".ui_element_locale").find(".set_booking_locale_button")).addClass("wpbc_ui_red"),"function"==typeof wpbc_tippy&&o.get(0)._tippy.setContent(e)))})}function wpbc_ajx_booking__ui_define__remark(){jQuery(".wpbc_listing_container .ui_remark_section textarea").each(function(_){var o,e=jQuery(this).val();void 0===e||""==e||0<(o=jQuery(this).parents(".ui_group").find(".set_booking_note_button")).length&&(o.addClass("wpbc_ui_red"),"function"==typeof wpbc_tippy&&o.get(0)._tippy.setProps({allowHTML:!0,content:e.replace(/[\n\r]/g,"<br>")}))})}function wpbc_ajx_booking__ui_click__remark(_){_.parents(".ui_group").find(".ui_remark_section").toggle()}function wpbc_ajx_booking__ui_click_show__change_resource(_,o){jQuery("#change_booking_resource__booking_id").val(_),jQuery("#change_booking_resource__resource_select").val(o).trigger("change"),jQuery("#change_booking_resource__section").detach().appendTo(jQuery("#ui__change_booking_resource__section_in_booking_"+_)),jQuery("#ui__change_booking_resource__section_in_booking_"+_).is(":visible")||jQuery(".ui__under_actions_row__section_in_booking").hide(),jQuery("#ui__change_booking_resource__section_in_booking_"+_).toggle()}function wpbc_ajx_booking__ui_click_save__change_resource(_,o,e){wpbc_ajx_booking_ajax_action_request({booking_action:o,booking_id:jQuery("#change_booking_resource__booking_id").val(),selected_resource_id:jQuery("#change_booking_resource__resource_select").val(),ui_clicked_element_id:e}),wpbc_button_enable_loading_icon(_)}function wpbc_ajx_booking__ui_click_close__change_resource(){jQuery("#change_booking_resource__section").detach().appendTo(jQuery("#wpbc_hidden_template__change_booking_resource")),jQuery(".ui__change_booking_resource__section_in_booking").hide()}function wpbc_ajx_booking__ui_click_show__duplicate_booking(_,o){jQuery("#duplicate_booking_to_other_resource__booking_id").val(_),jQuery("#duplicate_booking_to_other_resource__resource_select").val(o).trigger("change"),jQuery("#duplicate_booking_to_other_resource__section").detach().appendTo(jQuery("#ui__duplicate_booking_to_other_resource__section_in_booking_"+_)),jQuery("#ui__duplicate_booking_to_other_resource__section_in_booking_"+_).is(":visible")||jQuery(".ui__under_actions_row__section_in_booking").hide(),jQuery("#ui__duplicate_booking_to_other_resource__section_in_booking_"+_).toggle()}function wpbc_ajx_booking__ui_click_save__duplicate_booking(_,o,e){wpbc_ajx_booking_ajax_action_request({booking_action:o,booking_id:jQuery("#duplicate_booking_to_other_resource__booking_id").val(),selected_resource_id:jQuery("#duplicate_booking_to_other_resource__resource_select").val(),ui_clicked_element_id:e}),wpbc_button_enable_loading_icon(_)}function wpbc_ajx_booking__ui_click_close__duplicate_booking(){jQuery("#duplicate_booking_to_other_resource__section").detach().appendTo(jQuery("#wpbc_hidden_template__duplicate_booking_to_other_resource")),jQuery(".ui__duplicate_booking_to_other_resource__section_in_booking").hide()}function wpbc_ajx_booking__ui_click_show__set_payment_status(_){var o=jQuery("#ui__set_payment_status__section_in_booking_"+_).find("select"),e=o.attr("ajx-selected-value");(isNaN(parseFloat(e))?o.find('option[value="'+e+'"]'):o.find('option[value="1"]')).prop("selected",!0),jQuery("#ui__set_payment_status__section_in_booking_"+_).is(":visible")||jQuery(".ui__under_actions_row__section_in_booking").hide(),jQuery("#ui__set_payment_status__section_in_booking_"+_).toggle()}function wpbc_ajx_booking__ui_click_save__set_payment_status(_,o,e,i){wpbc_ajx_booking_ajax_action_request({booking_action:e,booking_id:_,selected_payment_status:jQuery("#ui_btn_set_payment_status"+_).val(),ui_clicked_element_id:i+"_save"}),wpbc_button_enable_loading_icon(o),jQuery("#"+i+"_cancel").hide()}function wpbc_ajx_booking__ui_click_close__set_payment_status(){jQuery(".ui__set_payment_status__section_in_booking").hide()}function wpbc_ajx_booking__ui_click_save__set_booking_cost(_,o,e,i){wpbc_ajx_booking_ajax_action_request({booking_action:e,booking_id:_,booking_cost:jQuery("#ui_btn_set_booking_cost"+_+"_cost").val(),ui_clicked_element_id:i+"_save"}),wpbc_button_enable_loading_icon(o),jQuery("#"+i+"_cancel").hide()}function wpbc_ajx_booking__ui_click_close__set_booking_cost(){jQuery(".ui__set_booking_cost__section_in_booking").hide()}function wpbc_ajx_booking__ui_click__send_payment_request(){wpbc_ajx_booking_ajax_action_request({booking_action:"send_payment_request",booking_id:jQuery("#wpbc_modal__payment_request__booking_id").val(),reason_of_action:jQuery("#wpbc_modal__payment_request__reason_of_action").val(),ui_clicked_element_id:"wpbc_modal__payment_request__button_send"}),wpbc_button_enable_loading_icon(jQuery("#wpbc_modal__payment_request__button_send").get(0))}function wpbc_ajx_booking__ui_click__import_google_calendar(){wpbc_ajx_booking_ajax_action_request({booking_action:"import_google_calendar",ui_clicked_element_id:"wpbc_modal__import_google_calendar__button_send",booking_gcal_events_from:jQuery("#wpbc_modal__import_google_calendar__section #booking_gcal_events_from option:selected").val(),booking_gcal_events_from_offset:jQuery("#wpbc_modal__import_google_calendar__section #booking_gcal_events_from_offset").val(),booking_gcal_events_from_offset_type:jQuery("#wpbc_modal__import_google_calendar__section #booking_gcal_events_from_offset_type option:selected").val(),booking_gcal_events_until:jQuery("#wpbc_modal__import_google_calendar__section #booking_gcal_events_until option:selected").val(),booking_gcal_events_until_offset:jQuery("#wpbc_modal__import_google_calendar__section #booking_gcal_events_until_offset").val(),booking_gcal_events_until_offset_type:jQuery("#wpbc_modal__import_google_calendar__section #booking_gcal_events_until_offset_type option:selected").val(),booking_gcal_events_max:jQuery("#wpbc_modal__import_google_calendar__section #booking_gcal_events_max").val(),booking_gcal_resource:jQuery("#wpbc_modal__import_google_calendar__section #wpbc_booking_resource option:selected").val()}),wpbc_button_enable_loading_icon(jQuery("#wpbc_modal__import_google_calendar__section #wpbc_modal__import_google_calendar__button_send").get(0))}function wpbc_ajx_booking__ui_click__export_csv(_){var o=wpbc_get_selected_row_id();wpbc_ajx_booking_ajax_action_request({booking_action:_.booking_action,ui_clicked_element_id:_.ui_clicked_element_id,export_type:_.export_type,csv_export_separator:_.csv_export_separator,csv_export_skip_fields:_.csv_export_skip_fields,booking_id:o.join(","),search_params:wpbc_ajx_booking_listing.search_get_all_params()}),wpbc_button_enable_loading_icon(jQuery("#"+_.ui_clicked_element_id).get(0))}function wpbc_ajx_booking__export_csv_url__download(_){document.location.href=_}
|
2 |
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1ib29raW5ncy9fb3V0L2Jvb2tpbmdzX19hY3Rpb25zLm1pbi5qcyIsInNvdXJjZXMiOlsiaW5jbHVkZXMvcGFnZS1ib29raW5ncy9fb3V0L2Jvb2tpbmdzX19hY3Rpb25zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXHJcbiAqICAgQWpheCAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4vL3ZhciBpc190aGlzX2FjdGlvbiA9IGZhbHNlO1xuXG4vKipcclxuICogU2VuZCBBamF4IGFjdGlvbiByZXF1ZXN0LCAgbGlrZSBhcHByb3Zpbmcgb3IgY2FuY2VsbGF0aW9uXHJcbiAqXHJcbiAqIEBwYXJhbSBhY3Rpb25fcGFyYW1cclxuICovXG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9LCBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19hamF4X2FjdGlvbl9yZXF1ZXN0KCkge1xuICB2YXIgYWN0aW9uX3BhcmFtID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgY29uc29sZS5ncm91cENvbGxhcHNlZCgnV1BCQ19BSlhfQk9PS0lOR19BQ1RJT05TJyk7XG4gIGNvbnNvbGUubG9nKCcgPT0gQWpheCBBY3Rpb25zIDo6IFBhcmFtcyA9PSAnLCBhY3Rpb25fcGFyYW0pOyAvL2lzX3RoaXNfYWN0aW9uID0gdHJ1ZTtcblxuICB3cGJjX2Jvb2tpbmdfbGlzdGluZ19yZWxvYWRfYnV0dG9uX19zcGluX3N0YXJ0KCk7IC8vIEdldCByZWRlZmluZWQgTG9jYWxlLCAgaWYgYWN0aW9uIG9uIHNpbmdsZSBib29raW5nICFcblxuICBpZiAodW5kZWZpbmVkICE9IGFjdGlvbl9wYXJhbVsnYm9va2luZ19pZCddICYmICFBcnJheS5pc0FycmF5KGFjdGlvbl9wYXJhbVsnYm9va2luZ19pZCddKSkge1xuICAgIC8vIE5vdCBhcnJheVxuICAgIGFjdGlvbl9wYXJhbVsnbG9jYWxlJ10gPSB3cGJjX2dldF9zZWxlY3RlZF9sb2NhbGUoYWN0aW9uX3BhcmFtWydib29raW5nX2lkJ10sIHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5nZXRfc2VjdXJlX3BhcmFtKCdsb2NhbGUnKSk7XG4gIH1cblxuICB2YXIgYWN0aW9uX3Bvc3RfcGFyYW1zID0ge1xuICAgIGFjdGlvbjogJ1dQQkNfQUpYX0JPT0tJTkdfQUNUSU9OUycsXG4gICAgbm9uY2U6IHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5nZXRfc2VjdXJlX3BhcmFtKCdub25jZScpLFxuICAgIHdwYmNfYWp4X3VzZXJfaWQ6IHVuZGVmaW5lZCA9PSBhY3Rpb25fcGFyYW1bJ3VzZXJfaWQnXSA/IHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5nZXRfc2VjdXJlX3BhcmFtKCd1c2VyX2lkJykgOiBhY3Rpb25fcGFyYW1bJ3VzZXJfaWQnXSxcbiAgICB3cGJjX2FqeF9sb2NhbGU6IHVuZGVmaW5lZCA9PSBhY3Rpb25fcGFyYW1bJ2xvY2FsZSddID8gd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9zZWN1cmVfcGFyYW0oJ2xvY2FsZScpIDogYWN0aW9uX3BhcmFtWydsb2NhbGUnXSxcbiAgICBhY3Rpb25fcGFyYW1zOiBhY3Rpb25fcGFyYW1cbiAgfTsgLy8gSXQncyByZXF1aXJlZCBmb3IgQ1NWIGV4cG9ydCAtIGdldHRpbmcgdGhlIHNhbWUgbGlzdCAgb2YgYm9va2luZ3NcblxuICBpZiAodHlwZW9mIGFjdGlvbl9wYXJhbS5zZWFyY2hfcGFyYW1zICE9PSAndW5kZWZpbmVkJykge1xuICAgIGFjdGlvbl9wb3N0X3BhcmFtc1snc2VhcmNoX3BhcmFtcyddID0gYWN0aW9uX3BhcmFtLnNlYXJjaF9wYXJhbXM7XG4gICAgZGVsZXRlIGFjdGlvbl9wb3N0X3BhcmFtcy5hY3Rpb25fcGFyYW1zLnNlYXJjaF9wYXJhbXM7XG4gIH0gLy8gU3RhcnQgQWpheFxuXG5cbiAgalF1ZXJ5LnBvc3Qod3BiY19nbG9iYWwxLndwYmNfYWpheHVybCwgYWN0aW9uX3Bvc3RfcGFyYW1zLFxuICAvKipcclxuICAgKiBTIHUgYyBjIGUgcyBzXHJcbiAgICpcclxuICAgKiBAcGFyYW0gcmVzcG9uc2VfZGF0YVx0XHQtXHRpdHMgb2JqZWN0IHJldHVybmVkIGZyb20gIEFqYXggLSBjbGFzcy1saXZlLXNlYXJjZy5waHBcclxuICAgKiBAcGFyYW0gdGV4dFN0YXR1c1x0XHQtXHQnc3VjY2VzcydcclxuICAgKiBAcGFyYW0ganFYSFJcdFx0XHRcdC1cdE9iamVjdFxyXG4gICAqL1xuICBmdW5jdGlvbiAocmVzcG9uc2VfZGF0YSwgdGV4dFN0YXR1cywganFYSFIpIHtcbiAgICBjb25zb2xlLmxvZygnID09IEFqYXggQWN0aW9ucyA6OiBSZXNwb25zZSBXUEJDX0FKWF9CT09LSU5HX0FDVElPTlMgPT0gJywgcmVzcG9uc2VfZGF0YSk7XG4gICAgY29uc29sZS5ncm91cEVuZCgpOyAvLyBQcm9iYWJseSBFcnJvclxuXG4gICAgaWYgKF90eXBlb2YocmVzcG9uc2VfZGF0YSkgIT09ICdvYmplY3QnIHx8IHJlc3BvbnNlX2RhdGEgPT09IG51bGwpIHtcbiAgICAgIGpRdWVyeSgnI3doX3NvcnRfc2VsZWN0b3InKS5oaWRlKCk7XG4gICAgICBqUXVlcnkod3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSgnbGlzdGluZ19jb250YWluZXInKSkuaHRtbCgnPGRpdiBjbGFzcz1cIndwYmMtc2V0dGluZ3Mtbm90aWNlIG5vdGljZS13YXJuaW5nXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOmxlZnRcIj4nICsgcmVzcG9uc2VfZGF0YSArICc8L2Rpdj4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3cGJjX2Jvb2tpbmdfbGlzdGluZ19yZWxvYWRfYnV0dG9uX19zcGluX3BhdXNlKCk7XG4gICAgd3BiY19hZG1pbl9zaG93X21lc3NhZ2UocmVzcG9uc2VfZGF0YVsnYWp4X2FmdGVyX2FjdGlvbl9tZXNzYWdlJ10ucmVwbGFjZSgvXFxuL2csIFwiPGJyIC8+XCIpLCAnMScgPT0gcmVzcG9uc2VfZGF0YVsnYWp4X2FmdGVyX2FjdGlvbl9yZXN1bHQnXSA/ICdzdWNjZXNzJyA6ICdlcnJvcicsIDEwMDAwKTsgLy8gU3VjY2VzcyByZXNwb25zZVxuXG4gICAgaWYgKCcxJyA9PSByZXNwb25zZV9kYXRhWydhanhfYWZ0ZXJfYWN0aW9uX3Jlc3VsdCddKSB7XG4gICAgICB2YXIgaXNfcmVsb2FkX2FqYXhfbGlzdGluZyA9IHRydWU7IC8vIEFmdGVyIEdvb2dsZSBDYWxlbmRhciBpbXBvcnQgc2hvdyBpbXBvcnRlZCBib29raW5ncyBhbmQgcmVsb2FkIHRoZSBwYWdlIGZvciB0b29sYmFyIHBhcmFtZXRlcnMgdXBkYXRlXG5cbiAgICAgIGlmIChmYWxzZSAhPT0gcmVzcG9uc2VfZGF0YVsnYWp4X2FmdGVyX2FjdGlvbl9yZXN1bHRfYWxsX3BhcmFtc19hcnInXVsnbmV3X2xpc3RpbmdfcGFyYW1zJ10pIHtcbiAgICAgICAgd3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X3dpdGhfcGFyYW1zKHJlc3BvbnNlX2RhdGFbJ2FqeF9hZnRlcl9hY3Rpb25fcmVzdWx0X2FsbF9wYXJhbXNfYXJyJ11bJ25ld19saXN0aW5nX3BhcmFtcyddKTtcbiAgICAgICAgdmFyIGNsb3NlZF90aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICh3cGJjX2Jvb2tpbmdfbGlzdGluZ19yZWxvYWRfYnV0dG9uX19pc19zcGluKCkpIHtcbiAgICAgICAgICAgIGlmICh1bmRlZmluZWQgIT0gcmVzcG9uc2VfZGF0YVsnYWp4X2FmdGVyX2FjdGlvbl9yZXN1bHRfYWxsX3BhcmFtc19hcnInXVsnbmV3X2xpc3RpbmdfcGFyYW1zJ11bJ3JlbG9hZF91cmxfcGFyYW1zJ10pIHtcbiAgICAgICAgICAgICAgZG9jdW1lbnQubG9jYXRpb24uaHJlZiA9IHJlc3BvbnNlX2RhdGFbJ2FqeF9hZnRlcl9hY3Rpb25fcmVzdWx0X2FsbF9wYXJhbXNfYXJyJ11bJ25ld19saXN0aW5nX3BhcmFtcyddWydyZWxvYWRfdXJsX3BhcmFtcyddO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZG9jdW1lbnQubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LCAyMDAwKTtcbiAgICAgICAgaXNfcmVsb2FkX2FqYXhfbGlzdGluZyA9IGZhbHNlO1xuICAgICAgfSAvLyBTdGFydCBkb3dubG9hZCBleHBvcnRlZCBDU1YgZmlsZVxuXG5cbiAgICAgIGlmICh1bmRlZmluZWQgIT0gcmVzcG9uc2VfZGF0YVsnYWp4X2FmdGVyX2FjdGlvbl9yZXN1bHRfYWxsX3BhcmFtc19hcnInXVsnZXhwb3J0X2Nzdl91cmwnXSkge1xuICAgICAgICB3cGJjX2FqeF9ib29raW5nX19leHBvcnRfY3N2X3VybF9fZG93bmxvYWQocmVzcG9uc2VfZGF0YVsnYWp4X2FmdGVyX2FjdGlvbl9yZXN1bHRfYWxsX3BhcmFtc19hcnInXVsnZXhwb3J0X2Nzdl91cmwnXSk7XG4gICAgICAgIGlzX3JlbG9hZF9hamF4X2xpc3RpbmcgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzX3JlbG9hZF9hamF4X2xpc3RpbmcpIHtcbiAgICAgICAgd3BiY19hanhfYm9va2luZ19fYWN0dWFsX2xpc3RpbmdfX3Nob3coKTsgLy9cdFNlbmRpbmcgQWpheCBSZXF1ZXN0XHQtXHR3aXRoIHBhcmFtZXRlcnMgdGhhdCAgd2UgZWFybHkgIGRlZmluZWQgaW4gXCJ3cGJjX2FqeF9ib29raW5nX2xpc3RpbmdcIiBPYmouXG4gICAgICB9XG4gICAgfSAvLyBSZW1vdmUgc3BpbiBpY29uIGZyb20gIGJ1dHRvbiBhbmQgRW5hYmxlIHRoaXMgYnV0dG9uLlxuXG5cbiAgICB3cGJjX2J1dHRvbl9fcmVtb3ZlX3NwaW4ocmVzcG9uc2VfZGF0YVsnYWp4X2NsZWFuZWRfcGFyYW1zJ11bJ3VpX2NsaWNrZWRfZWxlbWVudF9pZCddKTsgLy8gSGlkZSBtb2RhbHNcblxuICAgIHdwYmNfcG9wdXBfbW9kYWxzX19oaWRlKCk7XG4gICAgalF1ZXJ5KCcjYWpheF9yZXNwb25kJykuaHRtbChyZXNwb25zZV9kYXRhKTsgLy8gRm9yIGFiaWxpdHkgdG8gc2hvdyByZXNwb25zZSwgYWRkIHN1Y2ggRElWIGVsZW1lbnQgdG8gcGFnZVxuICB9KS5mYWlsKGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHtcbiAgICBpZiAod2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUubG9nKSB7XG4gICAgICBjb25zb2xlLmxvZygnQWpheF9FcnJvcicsIGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bik7XG4gICAgfVxuXG4gICAgalF1ZXJ5KCcjd2hfc29ydF9zZWxlY3RvcicpLmhpZGUoKTtcbiAgICB2YXIgZXJyb3JfbWVzc2FnZSA9ICc8c3Ryb25nPicgKyAnRXJyb3IhJyArICc8L3N0cm9uZz4gJyArIGVycm9yVGhyb3duO1xuXG4gICAgaWYgKGpxWEhSLnJlc3BvbnNlVGV4dCkge1xuICAgICAgZXJyb3JfbWVzc2FnZSArPSBqcVhIUi5yZXNwb25zZVRleHQ7XG4gICAgfVxuXG4gICAgZXJyb3JfbWVzc2FnZSA9IGVycm9yX21lc3NhZ2UucmVwbGFjZSgvXFxuL2csIFwiPGJyIC8+XCIpO1xuICAgIHdwYmNfYWp4X2Jvb2tpbmdfc2hvd19tZXNzYWdlKGVycm9yX21lc3NhZ2UpO1xuICB9KSAvLyAuZG9uZSggICBmdW5jdGlvbiAoIGRhdGEsIHRleHRTdGF0dXMsIGpxWEhSICkgeyAgIGlmICggd2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUubG9nICl7IGNvbnNvbGUubG9nKCAnc2Vjb25kIHN1Y2Nlc3MnLCBkYXRhLCB0ZXh0U3RhdHVzLCBqcVhIUiApOyB9ICAgIH0pXG4gIC8vIC5hbHdheXMoIGZ1bmN0aW9uICggZGF0YV9qcVhIUiwgdGV4dFN0YXR1cywganFYSFJfZXJyb3JUaHJvd24gKSB7ICAgaWYgKCB3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS5sb2cgKXsgY29uc29sZS5sb2coICdhbHdheXMgZmluaXNoZWQnLCBkYXRhX2pxWEhSLCB0ZXh0U3RhdHVzLCBqcVhIUl9lcnJvclRocm93biApOyB9ICAgICB9KVxuICA7IC8vIEVuZCBBamF4XG59XG4vKipcclxuICogICBTdXBwb3J0IEZ1bmN0aW9ucyAtIFNwaW4gSWNvbiBpbiBCdXR0b25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXHJcbiAqIFJlbW92ZSBzcGluIGljb24gZnJvbSAgYnV0dG9uIGFuZCBFbmFibGUgdGhpcyBidXR0b24uXHJcbiAqXHJcbiAqIEBwYXJhbSBidXR0b25fY2xpY2tlZF9lbGVtZW50X2lkXHRcdC0gSFRNTCBJRCBhdHRyaWJ1dGUgb2YgdGhpcyBidXR0b25cclxuICogQHJldHVybiBzdHJpbmdcdFx0XHRcdFx0XHQtIENTUyBjbGFzc2VzIHRoYXQgd2FzIHByZXZpb3VzbHkgaW4gYnV0dG9uIGljb25cclxuICovXG5cblxuZnVuY3Rpb24gd3BiY19idXR0b25fX3JlbW92ZV9zcGluKGJ1dHRvbl9jbGlja2VkX2VsZW1lbnRfaWQpIHtcbiAgdmFyIHByZXZpb3NfY2xhc3NlcyA9ICcnO1xuXG4gIGlmICh1bmRlZmluZWQgIT0gYnV0dG9uX2NsaWNrZWRfZWxlbWVudF9pZCkge1xuICAgIHZhciBqRWxlbWVudCA9IGpRdWVyeSgnIycgKyBidXR0b25fY2xpY2tlZF9lbGVtZW50X2lkKTtcblxuICAgIGlmIChqRWxlbWVudC5sZW5ndGgpIHtcbiAgICAgIHByZXZpb3NfY2xhc3NlcyA9IHdwYmNfYnV0dG9uX2Rpc2FibGVfbG9hZGluZ19pY29uKGpFbGVtZW50LmdldCgwKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHByZXZpb3NfY2xhc3Nlcztcbn1cbi8qKlxyXG4gKiBTaG93IExvYWRpbmcgKHJvdGF0aW5nIGFycm93KSBpY29uIGZvciBidXR0b24gdGhhdCBoYXMgYmVlbiBjbGlja2VkXHJcbiAqXHJcbiAqIEBwYXJhbSB0aGlzX2J1dHRvblx0XHQtIHRoaXMgb2JqZWN0IG9mIHNwZWNpZmljIGJ1dHRvblxyXG4gKiBAcmV0dXJuIHN0cmluZ1x0XHRcdC0gQ1NTIGNsYXNzZXMgdGhhdCB3YXMgcHJldmlvdXNseSBpbiBidXR0b24gaWNvblxyXG4gKi9cblxuXG5mdW5jdGlvbiB3cGJjX2J1dHRvbl9lbmFibGVfbG9hZGluZ19pY29uKHRoaXNfYnV0dG9uKSB7XG4gIHZhciBqQnV0dG9uID0galF1ZXJ5KHRoaXNfYnV0dG9uKTtcbiAgdmFyIGpJY29uID0gakJ1dHRvbi5maW5kKCdpJyk7XG4gIHZhciBwcmV2aW9zX2NsYXNzZXMgPSBqSWNvbi5hdHRyKCdjbGFzcycpO1xuICBqSWNvbi5yZW1vdmVDbGFzcygpLmFkZENsYXNzKCdtZW51X2ljb24gaWNvbi0xeCB3cGJjX2ljbl9yb3RhdGVfcmlnaHQgd3BiY19zcGluJyk7IC8vIFNldCBSb3RhdGUgaWNvblxuICAvL2pJY29uLmFkZENsYXNzKCAnd3BiY19hbmltYXRpb25fcGF1c2UnICk7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gUGF1c2UgYW5pbWF0aW9uXG4gIC8vakljb24uYWRkQ2xhc3MoICd3cGJjX3VpX3JlZCcgKTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU2V0IGljb24gY29sb3IgcmVkXG5cbiAgakljb24uYXR0cignd3BiY19wcmV2aW91c19jbGFzcycsIHByZXZpb3NfY2xhc3Nlcyk7XG4gIGpCdXR0b24uYWRkQ2xhc3MoJ2Rpc2FibGVkJyk7IC8vIERpc2FibGUgYnV0dG9uXG4gIC8vakJ1dHRvbi5wcm9wKCBcImRpc2FibGVkXCIsIHRydWUgKTtcbiAgLy8gV2UgbmVlZCB0byAgc2V0ICBoZXJlIGF0dHIgaW5zdGVhZCBvZiBwcm9wLCBiZWNhdXNlIGZvciBBIGVsZW1lbnRzLCAgYXR0cmlidXRlICdkaXNhYmxlZCcgZG8gIG5vdCBhZGRlZCB3aXRoIGpCdXR0b24ucHJvcCggXCJkaXNhYmxlZFwiLCB0cnVlICk7XG5cbiAgakJ1dHRvbi5hdHRyKCd3cGJjX3ByZXZpb3VzX29uY2xpY2snLCBqQnV0dG9uLmF0dHIoJ29uY2xpY2snKSk7IC8vU2F2ZSB0aGlzIHZhbHVlXG5cbiAgakJ1dHRvbi5hdHRyKCdvbmNsaWNrJywgJycpOyAvLyBEaXNhYmxlIGFjdGlvbnMgXCJvbiBjbGlja1wiXG5cbiAgcmV0dXJuIHByZXZpb3NfY2xhc3Nlcztcbn1cbi8qKlxyXG4gKiBIaWRlIExvYWRpbmcgKHJvdGF0aW5nIGFycm93KSBpY29uIGZvciBidXR0b24gdGhhdCB3YXMgY2xpY2tlZCBhbmQgc2hvdyBwcmV2aW91cyBpY29uIGFuZCBlbmFibGUgYnV0dG9uXHJcbiAqXHJcbiAqIEBwYXJhbSB0aGlzX2J1dHRvblx0XHQtIHRoaXMgb2JqZWN0IG9mIHNwZWNpZmljIGJ1dHRvblxyXG4gKiBAcmV0dXJuIHN0cmluZ1x0XHRcdC0gQ1NTIGNsYXNzZXMgdGhhdCB3YXMgcHJldmlvdXNseSBpbiBidXR0b24gaWNvblxyXG4gKi9cblxuXG5mdW5jdGlvbiB3cGJjX2J1dHRvbl9kaXNhYmxlX2xvYWRpbmdfaWNvbih0aGlzX2J1dHRvbikge1xuICB2YXIgakJ1dHRvbiA9IGpRdWVyeSh0aGlzX2J1dHRvbik7XG4gIHZhciBqSWNvbiA9IGpCdXR0b24uZmluZCgnaScpO1xuICB2YXIgcHJldmlvc19jbGFzc2VzID0gakljb24uYXR0cignd3BiY19wcmV2aW91c19jbGFzcycpO1xuXG4gIGlmICgnJyAhPSBwcmV2aW9zX2NsYXNzZXMpIHtcbiAgICBqSWNvbi5yZW1vdmVDbGFzcygpLmFkZENsYXNzKHByZXZpb3NfY2xhc3Nlcyk7XG4gIH1cblxuICBqQnV0dG9uLnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcpOyAvLyBSZW1vdmUgRGlzYWJsZSBidXR0b25cblxuICB2YXIgcHJldmlvdXNfb25jbGljayA9IGpCdXR0b24uYXR0cignd3BiY19wcmV2aW91c19vbmNsaWNrJyk7XG5cbiAgaWYgKCcnICE9IHByZXZpb3VzX29uY2xpY2spIHtcbiAgICBqQnV0dG9uLmF0dHIoJ29uY2xpY2snLCBwcmV2aW91c19vbmNsaWNrKTtcbiAgfVxuXG4gIHJldHVybiBwcmV2aW9zX2NsYXNzZXM7XG59XG4vKipcclxuICogSGlkZSBhbGwgb3BlbiBtb2RhbCBwb3B1cHMgd2luZG93c1xyXG4gKi9cblxuXG5mdW5jdGlvbiB3cGJjX3BvcHVwX21vZGFsc19faGlkZSgpIHtcbiAgLy8gSGlkZSBtb2RhbHNcbiAgaWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBqUXVlcnkoJy53cGJjX3BvcHVwX21vZGFsJykud3BiY19teV9tb2RhbCkge1xuICAgIGpRdWVyeSgnLndwYmNfcG9wdXBfbW9kYWwnKS53cGJjX215X21vZGFsKCdoaWRlJyk7XG4gIH1cbn1cbi8qKlxyXG4gKiAgIERhdGVzICBTaG9ydCA8LT4gV2lkZSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cbmZ1bmN0aW9uIHdwYmNfYWp4X2NsaWNrX29uX2RhdGVzX3Nob3J0KCkge1xuICBqUXVlcnkoJyNib29raW5nX2RhdGVzX3NtYWxsLC5ib29raW5nX2RhdGVzX2Z1bGwnKS5oaWRlKCk7XG4gIGpRdWVyeSgnI2Jvb2tpbmdfZGF0ZXNfZnVsbCwuYm9va2luZ19kYXRlc19zbWFsbCcpLnNob3coKTtcbiAgd3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X3dpdGhfcGFyYW1zKHtcbiAgICAndWlfdXNyX19kYXRlc19zaG9ydF93aWRlJzogJ3Nob3J0J1xuICB9KTtcbn1cblxuZnVuY3Rpb24gd3BiY19hanhfY2xpY2tfb25fZGF0ZXNfd2lkZSgpIHtcbiAgalF1ZXJ5KCcjYm9va2luZ19kYXRlc19mdWxsLC5ib29raW5nX2RhdGVzX3NtYWxsJykuaGlkZSgpO1xuICBqUXVlcnkoJyNib29raW5nX2RhdGVzX3NtYWxsLC5ib29raW5nX2RhdGVzX2Z1bGwnKS5zaG93KCk7XG4gIHdwYmNfYWp4X2Jvb2tpbmdfc2VuZF9zZWFyY2hfcmVxdWVzdF93aXRoX3BhcmFtcyh7XG4gICAgJ3VpX3Vzcl9fZGF0ZXNfc2hvcnRfd2lkZSc6ICd3aWRlJ1xuICB9KTtcbn1cblxuZnVuY3Rpb24gd3BiY19hanhfY2xpY2tfb25fZGF0ZXNfdG9nZ2xlKHRoaXNfZGF0ZSkge1xuICBqUXVlcnkodGhpc19kYXRlKS5wYXJlbnRzKCcud3BiY19jb2xfZGF0ZXMnKS5maW5kKCcuYm9va2luZ19kYXRlc19zbWFsbCcpLnRvZ2dsZSgpO1xuICBqUXVlcnkodGhpc19kYXRlKS5wYXJlbnRzKCcud3BiY19jb2xfZGF0ZXMnKS5maW5kKCcuYm9va2luZ19kYXRlc19mdWxsJykudG9nZ2xlKCk7XG4gIC8qXHJcbiAgdmFyIHZpc2libGVfc2VjdGlvbiA9IGpRdWVyeSggdGhpc19kYXRlICkucGFyZW50cyggJy5ib29raW5nX2RhdGVzX2V4cGFuZF9zZWN0aW9uJyApO1xyXG4gIHZpc2libGVfc2VjdGlvbi5oaWRlKCk7XHJcbiAgaWYgKCB2aXNpYmxlX3NlY3Rpb24uaGFzQ2xhc3MoICdib29raW5nX2RhdGVzX2Z1bGwnICkgKXtcclxuICBcdHZpc2libGVfc2VjdGlvbi5wYXJlbnRzKCAnLndwYmNfY29sX2RhdGVzJyApLmZpbmQoICcuYm9va2luZ19kYXRlc19zbWFsbCcgKS5zaG93KCk7XHJcbiAgfSBlbHNlIHtcclxuICBcdHZpc2libGVfc2VjdGlvbi5wYXJlbnRzKCAnLndwYmNfY29sX2RhdGVzJyApLmZpbmQoICcuYm9va2luZ19kYXRlc19mdWxsJyApLnNob3coKTtcclxuICB9Ki9cblxuICBjb25zb2xlLmxvZygnd3BiY19hanhfY2xpY2tfb25fZGF0ZXNfdG9nZ2xlJywgdGhpc19kYXRlKTtcbn1cbi8qKlxyXG4gKiAgIExvY2FsZSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcclxuICogXHRTZWxlY3Qgb3B0aW9ucyBpbiBzZWxlY3QgYm94ZXMgYmFzZWQgb24gYXR0cmlidXRlIFwidmFsdWVfb2Zfc2VsZWN0ZWRfb3B0aW9uXCIgYW5kIFJFRCBjb2xvciBhbmQgaGludCBmb3IgTE9DQUxFIGJ1dHRvbiAgIC0tICBJdCdzIGNhbGxlZCBmcm9tIFx0d3BiY19hanhfYm9va2luZ19kZWZpbmVfdWlfaG9va3MoKSAgXHRlYWNoICB0aW1lIGFmdGVyIExpc3RpbmcgbG9hZGluZy5cclxuICovXG5cblxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19fdWlfZGVmaW5lX19sb2NhbGUoKSB7XG4gIGpRdWVyeSgnLndwYmNfbGlzdGluZ19jb250YWluZXIgc2VsZWN0JykuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICB2YXIgc2VsZWN0aW9uID0galF1ZXJ5KHRoaXMpLmF0dHIoXCJ2YWx1ZV9vZl9zZWxlY3RlZF9vcHRpb25cIik7IC8vIERlZmluZSBzZWxlY3RlZCBzZWxlY3QgYm94ZXNcblxuICAgIGlmICh1bmRlZmluZWQgIT09IHNlbGVjdGlvbikge1xuICAgICAgalF1ZXJ5KHRoaXMpLmZpbmQoJ29wdGlvblt2YWx1ZT1cIicgKyBzZWxlY3Rpb24gKyAnXCJdJykucHJvcCgnc2VsZWN0ZWQnLCB0cnVlKTtcblxuICAgICAgaWYgKCcnICE9IHNlbGVjdGlvbiAmJiBqUXVlcnkodGhpcykuaGFzQ2xhc3MoJ3NldF9ib29raW5nX2xvY2FsZV9zZWxlY3Rib3gnKSkge1xuICAgICAgICAvLyBMb2NhbGVcbiAgICAgICAgdmFyIGJvb2tpbmdfbG9jYWxlX2J1dHRvbiA9IGpRdWVyeSh0aGlzKS5wYXJlbnRzKCcudWlfZWxlbWVudF9sb2NhbGUnKS5maW5kKCcuc2V0X2Jvb2tpbmdfbG9jYWxlX2J1dHRvbicpOyAvL2Jvb2tpbmdfbG9jYWxlX2J1dHRvbi5jc3MoICdjb2xvcicsICcjZGI0ODAwJyApO1x0XHQvLyBTZXQgYnV0dG9uICByZWRcblxuICAgICAgICBib29raW5nX2xvY2FsZV9idXR0b24uYWRkQ2xhc3MoJ3dwYmNfdWlfcmVkJyk7IC8vIFNldCBidXR0b24gIHJlZFxuXG4gICAgICAgIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2Ygd3BiY190aXBweSkge1xuICAgICAgICAgIGJvb2tpbmdfbG9jYWxlX2J1dHRvbi5nZXQoMCkuX3RpcHB5LnNldENvbnRlbnQoc2VsZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG4vKipcclxuICogICBSZW1hcmsgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXHJcbiAqIERlZmluZSBjb250ZW50IG9mIHJlbWFyayBcImJvb2tpbmcgbm90ZVwiIGJ1dHRvbiBhbmQgdGV4dGFyZWEuICAtLSBJdCdzIGNhbGxlZCBmcm9tIFx0d3BiY19hanhfYm9va2luZ19kZWZpbmVfdWlfaG9va3MoKSAgXHRlYWNoICB0aW1lIGFmdGVyIExpc3RpbmcgbG9hZGluZy5cclxuICovXG5cblxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19fdWlfZGVmaW5lX19yZW1hcmsoKSB7XG4gIGpRdWVyeSgnLndwYmNfbGlzdGluZ19jb250YWluZXIgLnVpX3JlbWFya19zZWN0aW9uIHRleHRhcmVhJykuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICB2YXIgdGV4dF92YWwgPSBqUXVlcnkodGhpcykudmFsKCk7XG5cbiAgICBpZiAodW5kZWZpbmVkICE9PSB0ZXh0X3ZhbCAmJiAnJyAhPSB0ZXh0X3ZhbCkge1xuICAgICAgdmFyIHJlbWFya19idXR0b24gPSBqUXVlcnkodGhpcykucGFyZW50cygnLnVpX2dyb3VwJykuZmluZCgnLnNldF9ib29raW5nX25vdGVfYnV0dG9uJyk7XG5cbiAgICAgIGlmIChyZW1hcmtfYnV0dG9uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVtYXJrX2J1dHRvbi5hZGRDbGFzcygnd3BiY191aV9yZWQnKTsgLy8gU2V0IGJ1dHRvbiAgcmVkXG5cbiAgICAgICAgaWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiB3cGJjX3RpcHB5KSB7XG4gICAgICAgICAgLy9yZW1hcmtfYnV0dG9uLmdldCggMCApLl90aXBweS5hbGxvd0hUTUwgPSB0cnVlO1xuICAgICAgICAgIC8vcmVtYXJrX2J1dHRvbi5nZXQoIDAgKS5fdGlwcHkuc2V0Q29udGVudCggdGV4dF92YWwucmVwbGFjZSgvW1xcblxccl0vZywgJzxicj4nKSApO1xuICAgICAgICAgIHJlbWFya19idXR0b24uZ2V0KDApLl90aXBweS5zZXRQcm9wcyh7XG4gICAgICAgICAgICBhbGxvd0hUTUw6IHRydWUsXG4gICAgICAgICAgICBjb250ZW50OiB0ZXh0X3ZhbC5yZXBsYWNlKC9bXFxuXFxyXS9nLCAnPGJyPicpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuLyoqXHJcbiAqIEFjdGlvbnMgLHdoZW4gd2UgY2xpY2sgb24gXCJSZW1hcmtcIiBidXR0b24uXHJcbiAqXHJcbiAqIEBwYXJhbSBqcV9idXR0b24gIC1cdHRoaXMgalF1ZXJ5IGJ1dHRvbiAgb2JqZWN0XHJcbiAqL1xuXG5cbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX19yZW1hcmsoanFfYnV0dG9uKSB7XG4gIGpxX2J1dHRvbi5wYXJlbnRzKCcudWlfZ3JvdXAnKS5maW5kKCcudWlfcmVtYXJrX3NlY3Rpb24nKS50b2dnbGUoKTtcbn1cbi8qKlxyXG4gKiAgIENoYW5nZSBib29raW5nIHJlc291cmNlICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX3Nob3dfX2NoYW5nZV9yZXNvdXJjZShib29raW5nX2lkLCByZXNvdXJjZV9pZCkge1xuICAvLyBEZWZpbmUgSUQgb2YgYm9va2luZyB0byBoaWRkZW4gaW5wdXRcbiAgalF1ZXJ5KCcjY2hhbmdlX2Jvb2tpbmdfcmVzb3VyY2VfX2Jvb2tpbmdfaWQnKS52YWwoYm9va2luZ19pZCk7IC8vIFNlbGVjdCBib29raW5nIHJlc291cmNlICB0aGF0IGJlbG9uZyB0byAgYm9va2luZ1xuXG4gIGpRdWVyeSgnI2NoYW5nZV9ib29raW5nX3Jlc291cmNlX19yZXNvdXJjZV9zZWxlY3QnKS52YWwocmVzb3VyY2VfaWQpLnRyaWdnZXIoJ2NoYW5nZScpO1xuICB2YXIgY2JyOyAvLyBHZXQgUmVzb3VyY2Ugc2VjdGlvblxuXG4gIGNiciA9IGpRdWVyeShcIiNjaGFuZ2VfYm9va2luZ19yZXNvdXJjZV9fc2VjdGlvblwiKS5kZXRhY2goKTsgLy8gQXBwZW5kIGl0IHRvIGJvb2tpbmcgUk9XXG5cbiAgY2JyLmFwcGVuZFRvKGpRdWVyeShcIiN1aV9fY2hhbmdlX2Jvb2tpbmdfcmVzb3VyY2VfX3NlY3Rpb25faW5fYm9va2luZ19cIiArIGJvb2tpbmdfaWQpKTtcbiAgY2JyID0gbnVsbDsgLy8gSGlkZSBzZWN0aW9ucyBvZiBcIkNoYW5nZSBib29raW5nIHJlc291cmNlXCIgaW4gYWxsIG90aGVyIGJvb2tpbmdzIFJPV3NcbiAgLy9qUXVlcnkoIFwiLnVpX19jaGFuZ2VfYm9va2luZ19yZXNvdXJjZV9fc2VjdGlvbl9pbl9ib29raW5nXCIgKS5oaWRlKCk7XG5cbiAgaWYgKCFqUXVlcnkoXCIjdWlfX2NoYW5nZV9ib29raW5nX3Jlc291cmNlX19zZWN0aW9uX2luX2Jvb2tpbmdfXCIgKyBib29raW5nX2lkKS5pcygnOnZpc2libGUnKSkge1xuICAgIGpRdWVyeShcIi51aV9fdW5kZXJfYWN0aW9uc19yb3dfX3NlY3Rpb25faW5fYm9va2luZ1wiKS5oaWRlKCk7XG4gIH0gLy8gU2hvdyBvbmx5IFwiY2hhbmdlIGJvb2tpbmcgcmVzb3VyY2VcIiBzZWN0aW9uICBmb3IgY3VycmVudCBib29raW5nXG5cblxuICBqUXVlcnkoXCIjdWlfX2NoYW5nZV9ib29raW5nX3Jlc291cmNlX19zZWN0aW9uX2luX2Jvb2tpbmdfXCIgKyBib29raW5nX2lkKS50b2dnbGUoKTtcbn1cblxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfc2F2ZV9fY2hhbmdlX3Jlc291cmNlKHRoaXNfZWwsIGJvb2tpbmdfYWN0aW9uLCBlbF9pZCkge1xuICB3cGJjX2FqeF9ib29raW5nX2FqYXhfYWN0aW9uX3JlcXVlc3Qoe1xuICAgICdib29raW5nX2FjdGlvbic6IGJvb2tpbmdfYWN0aW9uLFxuICAgICdib29raW5nX2lkJzogalF1ZXJ5KCcjY2hhbmdlX2Jvb2tpbmdfcmVzb3VyY2VfX2Jvb2tpbmdfaWQnKS52YWwoKSxcbiAgICAnc2VsZWN0ZWRfcmVzb3VyY2VfaWQnOiBqUXVlcnkoJyNjaGFuZ2VfYm9va2luZ19yZXNvdXJjZV9fcmVzb3VyY2Vfc2VsZWN0JykudmFsKCksXG4gICAgJ3VpX2NsaWNrZWRfZWxlbWVudF9pZCc6IGVsX2lkXG4gIH0pO1xuICB3cGJjX2J1dHRvbl9lbmFibGVfbG9hZGluZ19pY29uKHRoaXNfZWwpOyAvLyB3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19jbG9zZV9fY2hhbmdlX3Jlc291cmNlKCk7XG59XG5cbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX2Nsb3NlX19jaGFuZ2VfcmVzb3VyY2UoKSB7XG4gIHZhciBjYnJjZTsgLy8gR2V0IFJlc291cmNlIHNlY3Rpb25cblxuICBjYnJjZSA9IGpRdWVyeShcIiNjaGFuZ2VfYm9va2luZ19yZXNvdXJjZV9fc2VjdGlvblwiKS5kZXRhY2goKTsgLy8gQXBwZW5kIGl0IHRvIGhpZGRlbiBIVE1MIHRlbXBsYXRlIHNlY3Rpb24gIGF0ICB0aGUgYm90dG9tICBvZiB0aGUgcGFnZVxuXG4gIGNicmNlLmFwcGVuZFRvKGpRdWVyeShcIiN3cGJjX2hpZGRlbl90ZW1wbGF0ZV9fY2hhbmdlX2Jvb2tpbmdfcmVzb3VyY2VcIikpO1xuICBjYnJjZSA9IG51bGw7IC8vIEhpZGUgYWxsIGNoYW5nZSBib29raW5nIHJlc291cmNlcyBzZWN0aW9uc1xuXG4gIGpRdWVyeShcIi51aV9fY2hhbmdlX2Jvb2tpbmdfcmVzb3VyY2VfX3NlY3Rpb25faW5fYm9va2luZ1wiKS5oaWRlKCk7XG59XG4vKipcclxuICogICBEdXBsaWNhdGUgYm9va2luZyBpbiBvdGhlciByZXNvdXJjZSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19zaG93X19kdXBsaWNhdGVfYm9va2luZyhib29raW5nX2lkLCByZXNvdXJjZV9pZCkge1xuICAvLyBEZWZpbmUgSUQgb2YgYm9va2luZyB0byBoaWRkZW4gaW5wdXRcbiAgalF1ZXJ5KCcjZHVwbGljYXRlX2Jvb2tpbmdfdG9fb3RoZXJfcmVzb3VyY2VfX2Jvb2tpbmdfaWQnKS52YWwoYm9va2luZ19pZCk7IC8vIFNlbGVjdCBib29raW5nIHJlc291cmNlICB0aGF0IGJlbG9uZyB0byAgYm9va2luZ1xuXG4gIGpRdWVyeSgnI2R1cGxpY2F0ZV9ib29raW5nX3RvX290aGVyX3Jlc291cmNlX19yZXNvdXJjZV9zZWxlY3QnKS52YWwocmVzb3VyY2VfaWQpLnRyaWdnZXIoJ2NoYW5nZScpO1xuICB2YXIgY2JyOyAvLyBHZXQgUmVzb3VyY2Ugc2VjdGlvblxuXG4gIGNiciA9IGpRdWVyeShcIiNkdXBsaWNhdGVfYm9va2luZ190b19vdGhlcl9yZXNvdXJjZV9fc2VjdGlvblwiKS5kZXRhY2goKTsgLy8gQXBwZW5kIGl0IHRvIGJvb2tpbmcgUk9XXG5cbiAgY2JyLmFwcGVuZFRvKGpRdWVyeShcIiN1aV9fZHVwbGljYXRlX2Jvb2tpbmdfdG9fb3RoZXJfcmVzb3VyY2VfX3NlY3Rpb25faW5fYm9va2luZ19cIiArIGJvb2tpbmdfaWQpKTtcbiAgY2JyID0gbnVsbDsgLy8gSGlkZSBzZWN0aW9ucyBvZiBcIkR1cGxpY2F0ZSBib29raW5nXCIgaW4gYWxsIG90aGVyIGJvb2tpbmdzIFJPV3NcblxuICBpZiAoIWpRdWVyeShcIiN1aV9fZHVwbGljYXRlX2Jvb2tpbmdfdG9fb3RoZXJfcmVzb3VyY2VfX3NlY3Rpb25faW5fYm9va2luZ19cIiArIGJvb2tpbmdfaWQpLmlzKCc6dmlzaWJsZScpKSB7XG4gICAgalF1ZXJ5KFwiLnVpX191bmRlcl9hY3Rpb25zX3Jvd19fc2VjdGlvbl9pbl9ib29raW5nXCIpLmhpZGUoKTtcbiAgfSAvLyBTaG93IG9ubHkgXCJEdXBsaWNhdGUgYm9va2luZ1wiIHNlY3Rpb24gIGZvciBjdXJyZW50IGJvb2tpbmcgUk9XXG5cblxuICBqUXVlcnkoXCIjdWlfX2R1cGxpY2F0ZV9ib29raW5nX3RvX290aGVyX3Jlc291cmNlX19zZWN0aW9uX2luX2Jvb2tpbmdfXCIgKyBib29raW5nX2lkKS50b2dnbGUoKTtcbn1cblxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfc2F2ZV9fZHVwbGljYXRlX2Jvb2tpbmcodGhpc19lbCwgYm9va2luZ19hY3Rpb24sIGVsX2lkKSB7XG4gIHdwYmNfYWp4X2Jvb2tpbmdfYWpheF9hY3Rpb25fcmVxdWVzdCh7XG4gICAgJ2Jvb2tpbmdfYWN0aW9uJzogYm9va2luZ19hY3Rpb24sXG4gICAgJ2Jvb2tpbmdfaWQnOiBqUXVlcnkoJyNkdXBsaWNhdGVfYm9va2luZ190b19vdGhlcl9yZXNvdXJjZV9fYm9va2luZ19pZCcpLnZhbCgpLFxuICAgICdzZWxlY3RlZF9yZXNvdXJjZV9pZCc6IGpRdWVyeSgnI2R1cGxpY2F0ZV9ib29raW5nX3RvX290aGVyX3Jlc291cmNlX19yZXNvdXJjZV9zZWxlY3QnKS52YWwoKSxcbiAgICAndWlfY2xpY2tlZF9lbGVtZW50X2lkJzogZWxfaWRcbiAgfSk7XG4gIHdwYmNfYnV0dG9uX2VuYWJsZV9sb2FkaW5nX2ljb24odGhpc19lbCk7IC8vIHdwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX2Nsb3NlX19jaGFuZ2VfcmVzb3VyY2UoKTtcbn1cblxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfY2xvc2VfX2R1cGxpY2F0ZV9ib29raW5nKCkge1xuICB2YXIgY2JyY2U7IC8vIEdldCBSZXNvdXJjZSBzZWN0aW9uXG5cbiAgY2JyY2UgPSBqUXVlcnkoXCIjZHVwbGljYXRlX2Jvb2tpbmdfdG9fb3RoZXJfcmVzb3VyY2VfX3NlY3Rpb25cIikuZGV0YWNoKCk7IC8vIEFwcGVuZCBpdCB0byBoaWRkZW4gSFRNTCB0ZW1wbGF0ZSBzZWN0aW9uICBhdCAgdGhlIGJvdHRvbSAgb2YgdGhlIHBhZ2VcblxuICBjYnJjZS5hcHBlbmRUbyhqUXVlcnkoXCIjd3BiY19oaWRkZW5fdGVtcGxhdGVfX2R1cGxpY2F0ZV9ib29raW5nX3RvX290aGVyX3Jlc291cmNlXCIpKTtcbiAgY2JyY2UgPSBudWxsOyAvLyBIaWRlIGFsbCBjaGFuZ2UgYm9va2luZyByZXNvdXJjZXMgc2VjdGlvbnNcblxuICBqUXVlcnkoXCIudWlfX2R1cGxpY2F0ZV9ib29raW5nX3RvX290aGVyX3Jlc291cmNlX19zZWN0aW9uX2luX2Jvb2tpbmdcIikuaGlkZSgpO1xufVxuLyoqXHJcbiAqICAgQ2hhbmdlIHBheW1lbnQgc3RhdHVzICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfc2hvd19fc2V0X3BheW1lbnRfc3RhdHVzKGJvb2tpbmdfaWQpIHtcbiAgdmFyIGpTZWxlY3QgPSBqUXVlcnkoJyN1aV9fc2V0X3BheW1lbnRfc3RhdHVzX19zZWN0aW9uX2luX2Jvb2tpbmdfJyArIGJvb2tpbmdfaWQpLmZpbmQoJ3NlbGVjdCcpO1xuICB2YXIgc2VsZWN0ZWRfcGF5X3N0YXR1cyA9IGpTZWxlY3QuYXR0cihcImFqeC1zZWxlY3RlZC12YWx1ZVwiKTsgLy8gSXMgaXQgZmxvYXQgLSB0aGVuICBpdCdzIHVua25vd25cblxuICBpZiAoIWlzTmFOKHBhcnNlRmxvYXQoc2VsZWN0ZWRfcGF5X3N0YXR1cykpKSB7XG4gICAgalNlbGVjdC5maW5kKCdvcHRpb25bdmFsdWU9XCIxXCJdJykucHJvcCgnc2VsZWN0ZWQnLCB0cnVlKTsgLy8gVW5rbm93biAgdmFsdWUgaXMgJzEnIGluIHNlbGVjdCBib3hcbiAgfSBlbHNlIHtcbiAgICBqU2VsZWN0LmZpbmQoJ29wdGlvblt2YWx1ZT1cIicgKyBzZWxlY3RlZF9wYXlfc3RhdHVzICsgJ1wiXScpLnByb3AoJ3NlbGVjdGVkJywgdHJ1ZSk7IC8vIE90aGVyd2lzZSBrbm93biBwYXltZW50IHN0YXR1c1xuICB9IC8vIEhpZGUgc2VjdGlvbnMgb2YgXCJDaGFuZ2UgYm9va2luZyByZXNvdXJjZVwiIGluIGFsbCBvdGhlciBib29raW5ncyBST1dzXG5cblxuICBpZiAoIWpRdWVyeShcIiN1aV9fc2V0X3BheW1lbnRfc3RhdHVzX19zZWN0aW9uX2luX2Jvb2tpbmdfXCIgKyBib29raW5nX2lkKS5pcygnOnZpc2libGUnKSkge1xuICAgIGpRdWVyeShcIi51aV9fdW5kZXJfYWN0aW9uc19yb3dfX3NlY3Rpb25faW5fYm9va2luZ1wiKS5oaWRlKCk7XG4gIH0gLy8gU2hvdyBvbmx5IFwiY2hhbmdlIGJvb2tpbmcgcmVzb3VyY2VcIiBzZWN0aW9uICBmb3IgY3VycmVudCBib29raW5nXG5cblxuICBqUXVlcnkoXCIjdWlfX3NldF9wYXltZW50X3N0YXR1c19fc2VjdGlvbl9pbl9ib29raW5nX1wiICsgYm9va2luZ19pZCkudG9nZ2xlKCk7XG59XG5cbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX3NhdmVfX3NldF9wYXltZW50X3N0YXR1cyhib29raW5nX2lkLCB0aGlzX2VsLCBib29raW5nX2FjdGlvbiwgZWxfaWQpIHtcbiAgd3BiY19hanhfYm9va2luZ19hamF4X2FjdGlvbl9yZXF1ZXN0KHtcbiAgICAnYm9va2luZ19hY3Rpb24nOiBib29raW5nX2FjdGlvbixcbiAgICAnYm9va2luZ19pZCc6IGJvb2tpbmdfaWQsXG4gICAgJ3NlbGVjdGVkX3BheW1lbnRfc3RhdHVzJzogalF1ZXJ5KCcjdWlfYnRuX3NldF9wYXltZW50X3N0YXR1cycgKyBib29raW5nX2lkKS52YWwoKSxcbiAgICAndWlfY2xpY2tlZF9lbGVtZW50X2lkJzogZWxfaWQgKyAnX3NhdmUnXG4gIH0pO1xuICB3cGJjX2J1dHRvbl9lbmFibGVfbG9hZGluZ19pY29uKHRoaXNfZWwpO1xuICBqUXVlcnkoJyMnICsgZWxfaWQgKyAnX2NhbmNlbCcpLmhpZGUoKTsgLy93cGJjX2J1dHRvbl9lbmFibGVfbG9hZGluZ19pY29uKCBqUXVlcnkoICcjJyArIGVsX2lkICsgJ19jYW5jZWwnKS5nZXQoMCkgKTtcbn1cblxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfY2xvc2VfX3NldF9wYXltZW50X3N0YXR1cygpIHtcbiAgLy8gSGlkZSBhbGwgY2hhbmdlICBwYXltZW50IHN0YXR1cyBmb3IgYm9va2luZ1xuICBqUXVlcnkoXCIudWlfX3NldF9wYXltZW50X3N0YXR1c19fc2VjdGlvbl9pbl9ib29raW5nXCIpLmhpZGUoKTtcbn1cbi8qKlxyXG4gKiAgIENoYW5nZSBib29raW5nIGNvc3QgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX3NhdmVfX3NldF9ib29raW5nX2Nvc3QoYm9va2luZ19pZCwgdGhpc19lbCwgYm9va2luZ19hY3Rpb24sIGVsX2lkKSB7XG4gIHdwYmNfYWp4X2Jvb2tpbmdfYWpheF9hY3Rpb25fcmVxdWVzdCh7XG4gICAgJ2Jvb2tpbmdfYWN0aW9uJzogYm9va2luZ19hY3Rpb24sXG4gICAgJ2Jvb2tpbmdfaWQnOiBib29raW5nX2lkLFxuICAgICdib29raW5nX2Nvc3QnOiBqUXVlcnkoJyN1aV9idG5fc2V0X2Jvb2tpbmdfY29zdCcgKyBib29raW5nX2lkICsgJ19jb3N0JykudmFsKCksXG4gICAgJ3VpX2NsaWNrZWRfZWxlbWVudF9pZCc6IGVsX2lkICsgJ19zYXZlJ1xuICB9KTtcbiAgd3BiY19idXR0b25fZW5hYmxlX2xvYWRpbmdfaWNvbih0aGlzX2VsKTtcbiAgalF1ZXJ5KCcjJyArIGVsX2lkICsgJ19jYW5jZWwnKS5oaWRlKCk7IC8vd3BiY19idXR0b25fZW5hYmxlX2xvYWRpbmdfaWNvbiggalF1ZXJ5KCAnIycgKyBlbF9pZCArICdfY2FuY2VsJykuZ2V0KDApICk7XG59XG5cbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX2Nsb3NlX19zZXRfYm9va2luZ19jb3N0KCkge1xuICAvLyBIaWRlIGFsbCBjaGFuZ2UgIHBheW1lbnQgc3RhdHVzIGZvciBib29raW5nXG4gIGpRdWVyeShcIi51aV9fc2V0X2Jvb2tpbmdfY29zdF9fc2VjdGlvbl9pbl9ib29raW5nXCIpLmhpZGUoKTtcbn1cbi8qKlxyXG4gKiAgIFNlbmQgUGF5bWVudCByZXF1ZXN0ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19fc2VuZF9wYXltZW50X3JlcXVlc3QoKSB7XG4gIHdwYmNfYWp4X2Jvb2tpbmdfYWpheF9hY3Rpb25fcmVxdWVzdCh7XG4gICAgJ2Jvb2tpbmdfYWN0aW9uJzogJ3NlbmRfcGF5bWVudF9yZXF1ZXN0JyxcbiAgICAnYm9va2luZ19pZCc6IGpRdWVyeSgnI3dwYmNfbW9kYWxfX3BheW1lbnRfcmVxdWVzdF9fYm9va2luZ19pZCcpLnZhbCgpLFxuICAgICdyZWFzb25fb2ZfYWN0aW9uJzogalF1ZXJ5KCcjd3BiY19tb2RhbF9fcGF5bWVudF9yZXF1ZXN0X19yZWFzb25fb2ZfYWN0aW9uJykudmFsKCksXG4gICAgJ3VpX2NsaWNrZWRfZWxlbWVudF9pZCc6ICd3cGJjX21vZGFsX19wYXltZW50X3JlcXVlc3RfX2J1dHRvbl9zZW5kJ1xuICB9KTtcbiAgd3BiY19idXR0b25fZW5hYmxlX2xvYWRpbmdfaWNvbihqUXVlcnkoJyN3cGJjX21vZGFsX19wYXltZW50X3JlcXVlc3RfX2J1dHRvbl9zZW5kJykuZ2V0KDApKTtcbn1cbi8qKlxyXG4gKiAgIEltcG9ydCBHb29nbGUgQ2FsZW5kYXIgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX19pbXBvcnRfZ29vZ2xlX2NhbGVuZGFyKCkge1xuICB3cGJjX2FqeF9ib29raW5nX2FqYXhfYWN0aW9uX3JlcXVlc3Qoe1xuICAgICdib29raW5nX2FjdGlvbic6ICdpbXBvcnRfZ29vZ2xlX2NhbGVuZGFyJyxcbiAgICAndWlfY2xpY2tlZF9lbGVtZW50X2lkJzogJ3dwYmNfbW9kYWxfX2ltcG9ydF9nb29nbGVfY2FsZW5kYXJfX2J1dHRvbl9zZW5kJyxcbiAgICAnYm9va2luZ19nY2FsX2V2ZW50c19mcm9tJzogalF1ZXJ5KCcjd3BiY19tb2RhbF9faW1wb3J0X2dvb2dsZV9jYWxlbmRhcl9fc2VjdGlvbiAjYm9va2luZ19nY2FsX2V2ZW50c19mcm9tIG9wdGlvbjpzZWxlY3RlZCcpLnZhbCgpLFxuICAgICdib29raW5nX2djYWxfZXZlbnRzX2Zyb21fb2Zmc2V0JzogalF1ZXJ5KCcjd3BiY19tb2RhbF9faW1wb3J0X2dvb2dsZV9jYWxlbmRhcl9fc2VjdGlvbiAjYm9va2luZ19nY2FsX2V2ZW50c19mcm9tX29mZnNldCcpLnZhbCgpLFxuICAgICdib29raW5nX2djYWxfZXZlbnRzX2Zyb21fb2Zmc2V0X3R5cGUnOiBqUXVlcnkoJyN3cGJjX21vZGFsX19pbXBvcnRfZ29vZ2xlX2NhbGVuZGFyX19zZWN0aW9uICNib29raW5nX2djYWxfZXZlbnRzX2Zyb21fb2Zmc2V0X3R5cGUgb3B0aW9uOnNlbGVjdGVkJykudmFsKCksXG4gICAgJ2Jvb2tpbmdfZ2NhbF9ldmVudHNfdW50aWwnOiBqUXVlcnkoJyN3cGJjX21vZGFsX19pbXBvcnRfZ29vZ2xlX2NhbGVuZGFyX19zZWN0aW9uICNib29raW5nX2djYWxfZXZlbnRzX3VudGlsIG9wdGlvbjpzZWxlY3RlZCcpLnZhbCgpLFxuICAgICdib29raW5nX2djYWxfZXZlbnRzX3VudGlsX29mZnNldCc6IGpRdWVyeSgnI3dwYmNfbW9kYWxfX2ltcG9ydF9nb29nbGVfY2FsZW5kYXJfX3NlY3Rpb24gI2Jvb2tpbmdfZ2NhbF9ldmVudHNfdW50aWxfb2Zmc2V0JykudmFsKCksXG4gICAgJ2Jvb2tpbmdfZ2NhbF9ldmVudHNfdW50aWxfb2Zmc2V0X3R5cGUnOiBqUXVlcnkoJyN3cGJjX21vZGFsX19pbXBvcnRfZ29vZ2xlX2NhbGVuZGFyX19zZWN0aW9uICNib29raW5nX2djYWxfZXZlbnRzX3VudGlsX29mZnNldF90eXBlIG9wdGlvbjpzZWxlY3RlZCcpLnZhbCgpLFxuICAgICdib29raW5nX2djYWxfZXZlbnRzX21heCc6IGpRdWVyeSgnI3dwYmNfbW9kYWxfX2ltcG9ydF9nb29nbGVfY2FsZW5kYXJfX3NlY3Rpb24gI2Jvb2tpbmdfZ2NhbF9ldmVudHNfbWF4JykudmFsKCksXG4gICAgJ2Jvb2tpbmdfZ2NhbF9yZXNvdXJjZSc6IGpRdWVyeSgnI3dwYmNfbW9kYWxfX2ltcG9ydF9nb29nbGVfY2FsZW5kYXJfX3NlY3Rpb24gI3dwYmNfYm9va2luZ19yZXNvdXJjZSBvcHRpb246c2VsZWN0ZWQnKS52YWwoKVxuICB9KTtcbiAgd3BiY19idXR0b25fZW5hYmxlX2xvYWRpbmdfaWNvbihqUXVlcnkoJyN3cGJjX21vZGFsX19pbXBvcnRfZ29vZ2xlX2NhbGVuZGFyX19zZWN0aW9uICN3cGJjX21vZGFsX19pbXBvcnRfZ29vZ2xlX2NhbGVuZGFyX19idXR0b25fc2VuZCcpLmdldCgwKSk7XG59XG4vKipcclxuICogICBFeHBvcnQgYm9va2luZ3MgdG8gQ1NWICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19fZXhwb3J0X2NzdihwYXJhbXMpIHtcbiAgdmFyIHNlbGVjdGVkX2Jvb2tpbmdfaWRfYXJyID0gd3BiY19nZXRfc2VsZWN0ZWRfcm93X2lkKCk7XG4gIHdwYmNfYWp4X2Jvb2tpbmdfYWpheF9hY3Rpb25fcmVxdWVzdCh7XG4gICAgJ2Jvb2tpbmdfYWN0aW9uJzogcGFyYW1zWydib29raW5nX2FjdGlvbiddLFxuICAgICd1aV9jbGlja2VkX2VsZW1lbnRfaWQnOiBwYXJhbXNbJ3VpX2NsaWNrZWRfZWxlbWVudF9pZCddLFxuICAgICdleHBvcnRfdHlwZSc6IHBhcmFtc1snZXhwb3J0X3R5cGUnXSxcbiAgICAnY3N2X2V4cG9ydF9zZXBhcmF0b3InOiBwYXJhbXNbJ2Nzdl9leHBvcnRfc2VwYXJhdG9yJ10sXG4gICAgJ2Nzdl9leHBvcnRfc2tpcF9maWVsZHMnOiBwYXJhbXNbJ2Nzdl9leHBvcnRfc2tpcF9maWVsZHMnXSxcbiAgICAnYm9va2luZ19pZCc6IHNlbGVjdGVkX2Jvb2tpbmdfaWRfYXJyLmpvaW4oJywnKSxcbiAgICAnc2VhcmNoX3BhcmFtcyc6IHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5zZWFyY2hfZ2V0X2FsbF9wYXJhbXMoKVxuICB9KTtcbiAgdmFyIHRoaXNfZWwgPSBqUXVlcnkoJyMnICsgcGFyYW1zWyd1aV9jbGlja2VkX2VsZW1lbnRfaWQnXSkuZ2V0KDApO1xuICB3cGJjX2J1dHRvbl9lbmFibGVfbG9hZGluZ19pY29uKHRoaXNfZWwpO1xufVxuLyoqXHJcbiAqIE9wZW4gVVJMIGluIG5ldyB0YWIgLSBtYWlubHkgIGl0J3MgdXNlZCBmb3Igb3BlbiBDU1YgbGluayAgZm9yIGRvd25sb2FkZWQgZXhwb3J0ZWQgYm9va2luZ3MgYXMgQ1NWXHJcbiAqXHJcbiAqIEBwYXJhbSBleHBvcnRfY3N2X3VybFxyXG4gKi9cblxuXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX19leHBvcnRfY3N2X3VybF9fZG93bmxvYWQoZXhwb3J0X2Nzdl91cmwpIHtcbiAgLy92YXIgc2VsZWN0ZWRfYm9va2luZ19pZF9hcnIgPSB3cGJjX2dldF9zZWxlY3RlZF9yb3dfaWQoKTtcbiAgZG9jdW1lbnQubG9jYXRpb24uaHJlZiA9IGV4cG9ydF9jc3ZfdXJsOyAvLyArICcmc2VsZWN0ZWRfaWQ9JyArIHNlbGVjdGVkX2Jvb2tpbmdfaWRfYXJyLmpvaW4oJywnKTtcbiAgLy8gSXQncyBvcGVuIGFkZGl0aW9uYWwgZGlhbG9nIGZvciBhc2tpbmcgb3BlbmluZyB1bHIgaW4gbmV3IHRhYlxuICAvLyB3aW5kb3cub3BlbiggZXhwb3J0X2Nzdl91cmwsICdfYmxhbmsnKS5mb2N1cygpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbWx1WTJ4MVpHVnpMM0JoWjJVdFltOXZhMmx1WjNNdlgzTnlZeTlpYjI5cmFXNW5jMTlmWVdOMGFXOXVjeTVxY3lKZExDSnVZVzFsY3lJNld5SjNjR0pqWDJGcWVGOWliMjlyYVc1blgyRnFZWGhmWVdOMGFXOXVYM0psY1hWbGMzUWlMQ0poWTNScGIyNWZjR0Z5WVcwaUxDSmpiMjV6YjJ4bElpd2laM0p2ZFhCRGIyeHNZWEJ6WldRaUxDSnNiMmNpTENKM2NHSmpYMkp2YjJ0cGJtZGZiR2x6ZEdsdVoxOXlaV3h2WVdSZlluVjBkRzl1WDE5emNHbHVYM04wWVhKMElpd2lkVzVrWldacGJtVmtJaXdpUVhKeVlYa2lMQ0pwYzBGeWNtRjVJaXdpZDNCaVkxOW5aWFJmYzJWc1pXTjBaV1JmYkc5allXeGxJaXdpZDNCaVkxOWhhbmhmWW05dmEybHVaMTlzYVhOMGFXNW5JaXdpWjJWMFgzTmxZM1Z5WlY5d1lYSmhiU0lzSW1GamRHbHZibDl3YjNOMFgzQmhjbUZ0Y3lJc0ltRmpkR2x2YmlJc0ltNXZibU5sSWl3aWQzQmlZMTloYW5oZmRYTmxjbDlwWkNJc0luZHdZbU5mWVdwNFgyeHZZMkZzWlNJc0ltRmpkR2x2Ymw5d1lYSmhiWE1pTENKelpXRnlZMmhmY0dGeVlXMXpJaXdpYWxGMVpYSjVJaXdpY0c5emRDSXNJbmR3WW1OZloyeHZZbUZzTVNJc0luZHdZbU5mWVdwaGVIVnliQ0lzSW5KbGMzQnZibk5sWDJSaGRHRWlMQ0owWlhoMFUzUmhkSFZ6SWl3aWFuRllTRklpTENKbmNtOTFjRVZ1WkNJc0ltaHBaR1VpTENKblpYUmZiM1JvWlhKZmNHRnlZVzBpTENKb2RHMXNJaXdpZDNCaVkxOWliMjlyYVc1blgyeHBjM1JwYm1kZmNtVnNiMkZrWDJKMWRIUnZibDlmYzNCcGJsOXdZWFZ6WlNJc0luZHdZbU5mWVdSdGFXNWZjMmh2ZDE5dFpYTnpZV2RsSWl3aWNtVndiR0ZqWlNJc0ltbHpYM0psYkc5aFpGOWhhbUY0WDJ4cGMzUnBibWNpTENKM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDNObGJtUmZjMlZoY21Ob1gzSmxjWFZsYzNSZmQybDBhRjl3WVhKaGJYTWlMQ0pqYkc5elpXUmZkR2x0WlhJaUxDSnpaWFJVYVcxbGIzVjBJaXdpZDNCaVkxOWliMjlyYVc1blgyeHBjM1JwYm1kZmNtVnNiMkZrWDJKMWRIUnZibDlmYVhOZmMzQnBiaUlzSW1SdlkzVnRaVzUwSWl3aWJHOWpZWFJwYjI0aUxDSm9jbVZtSWl3aWNtVnNiMkZrSWl3aWQzQmlZMTloYW5oZlltOXZhMmx1WjE5ZlpYaHdiM0owWDJOemRsOTFjbXhmWDJSdmQyNXNiMkZrSWl3aWQzQmlZMTloYW5oZlltOXZhMmx1WjE5ZllXTjBkV0ZzWDJ4cGMzUnBibWRmWDNOb2IzY2lMQ0ozY0dKalgySjFkSFJ2Ymw5ZmNtVnRiM1psWDNOd2FXNGlMQ0ozY0dKalgzQnZjSFZ3WDIxdlpHRnNjMTlmYUdsa1pTSXNJbVpoYVd3aUxDSmxjbkp2Y2xSb2NtOTNiaUlzSW5kcGJtUnZkeUlzSW1WeWNtOXlYMjFsYzNOaFoyVWlMQ0p5WlhOd2IyNXpaVlJsZUhRaUxDSjNjR0pqWDJGcWVGOWliMjlyYVc1blgzTm9iM2RmYldWemMyRm5aU0lzSW1KMWRIUnZibDlqYkdsamEyVmtYMlZzWlcxbGJuUmZhV1FpTENKd2NtVjJhVzl6WDJOc1lYTnpaWE1pTENKcVJXeGxiV1Z1ZENJc0lteGxibWQwYUNJc0luZHdZbU5mWW5WMGRHOXVYMlJwYzJGaWJHVmZiRzloWkdsdVoxOXBZMjl1SWl3aVoyVjBJaXdpZDNCaVkxOWlkWFIwYjI1ZlpXNWhZbXhsWDJ4dllXUnBibWRmYVdOdmJpSXNJblJvYVhOZlluVjBkRzl1SWl3aWFrSjFkSFJ2YmlJc0ltcEpZMjl1SWl3aVptbHVaQ0lzSW1GMGRISWlMQ0p5WlcxdmRtVkRiR0Z6Y3lJc0ltRmtaRU5zWVhOeklpd2ljSEpsZG1sdmRYTmZiMjVqYkdsamF5SXNJbmR3WW1OZmJYbGZiVzlrWVd3aUxDSjNjR0pqWDJGcWVGOWpiR2xqYTE5dmJsOWtZWFJsYzE5emFHOXlkQ0lzSW5Ob2IzY2lMQ0ozY0dKalgyRnFlRjlqYkdsamExOXZibDlrWVhSbGMxOTNhV1JsSWl3aWQzQmlZMTloYW5oZlkyeHBZMnRmYjI1ZlpHRjBaWE5mZEc5bloyeGxJaXdpZEdocGMxOWtZWFJsSWl3aWNHRnlaVzUwY3lJc0luUnZaMmRzWlNJc0luZHdZbU5mWVdwNFgySnZiMnRwYm1kZlgzVnBYMlJsWm1sdVpWOWZiRzlqWVd4bElpd2laV0ZqYUNJc0ltbHVaR1Y0SWl3aWMyVnNaV04wYVc5dUlpd2ljSEp2Y0NJc0ltaGhjME5zWVhOeklpd2lZbTl2YTJsdVoxOXNiMk5oYkdWZlluVjBkRzl1SWl3aWQzQmlZMTkwYVhCd2VTSXNJbDkwYVhCd2VTSXNJbk5sZEVOdmJuUmxiblFpTENKM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDE5MWFWOWtaV1pwYm1WZlgzSmxiV0Z5YXlJc0luUmxlSFJmZG1Gc0lpd2lkbUZzSWl3aWNtVnRZWEpyWDJKMWRIUnZiaUlzSW5ObGRGQnliM0J6SWl3aVlXeHNiM2RJVkUxTUlpd2lZMjl1ZEdWdWRDSXNJbmR3WW1OZllXcDRYMkp2YjJ0cGJtZGZYM1ZwWDJOc2FXTnJYMTl5WlcxaGNtc2lMQ0pxY1Y5aWRYUjBiMjRpTENKM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDE5MWFWOWpiR2xqYTE5emFHOTNYMTlqYUdGdVoyVmZjbVZ6YjNWeVkyVWlMQ0ppYjI5cmFXNW5YMmxrSWl3aWNtVnpiM1Z5WTJWZmFXUWlMQ0owY21sbloyVnlJaXdpWTJKeUlpd2laR1YwWVdOb0lpd2lZWEJ3Wlc1a1ZHOGlMQ0pwY3lJc0luZHdZbU5mWVdwNFgySnZiMnRwYm1kZlgzVnBYMk5zYVdOclgzTmhkbVZmWDJOb1lXNW5aVjl5WlhOdmRYSmpaU0lzSW5Sb2FYTmZaV3dpTENKaWIyOXJhVzVuWDJGamRHbHZiaUlzSW1Wc1gybGtJaXdpZDNCaVkxOWhhbmhmWW05dmEybHVaMTlmZFdsZlkyeHBZMnRmWTJ4dmMyVmZYMk5vWVc1blpWOXlaWE52ZFhKalpTSXNJbU5pY21ObElpd2lkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOWZkV2xmWTJ4cFkydGZjMmh2ZDE5ZlpIVndiR2xqWVhSbFgySnZiMnRwYm1jaUxDSjNjR0pqWDJGcWVGOWliMjlyYVc1blgxOTFhVjlqYkdsamExOXpZWFpsWDE5a2RYQnNhV05oZEdWZlltOXZhMmx1WnlJc0luZHdZbU5mWVdwNFgySnZiMnRwYm1kZlgzVnBYMk5zYVdOclgyTnNiM05sWDE5a2RYQnNhV05oZEdWZlltOXZhMmx1WnlJc0luZHdZbU5mWVdwNFgySnZiMnRwYm1kZlgzVnBYMk5zYVdOclgzTm9iM2RmWDNObGRGOXdZWGx0Wlc1MFgzTjBZWFIxY3lJc0ltcFRaV3hsWTNRaUxDSnpaV3hsWTNSbFpGOXdZWGxmYzNSaGRIVnpJaXdpYVhOT1lVNGlMQ0p3WVhKelpVWnNiMkYwSWl3aWQzQmlZMTloYW5oZlltOXZhMmx1WjE5ZmRXbGZZMnhwWTJ0ZmMyRjJaVjlmYzJWMFgzQmhlVzFsYm5SZmMzUmhkSFZ6SWl3aWQzQmlZMTloYW5oZlltOXZhMmx1WjE5ZmRXbGZZMnhwWTJ0ZlkyeHZjMlZmWDNObGRGOXdZWGx0Wlc1MFgzTjBZWFIxY3lJc0luZHdZbU5mWVdwNFgySnZiMnRwYm1kZlgzVnBYMk5zYVdOclgzTmhkbVZmWDNObGRGOWliMjlyYVc1blgyTnZjM1FpTENKM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDE5MWFWOWpiR2xqYTE5amJHOXpaVjlmYzJWMFgySnZiMnRwYm1kZlkyOXpkQ0lzSW5kd1ltTmZZV3A0WDJKdmIydHBibWRmWDNWcFgyTnNhV05yWDE5elpXNWtYM0JoZVcxbGJuUmZjbVZ4ZFdWemRDSXNJbmR3WW1OZllXcDRYMkp2YjJ0cGJtZGZYM1ZwWDJOc2FXTnJYMTlwYlhCdmNuUmZaMjl2WjJ4bFgyTmhiR1Z1WkdGeUlpd2lkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOWZkV2xmWTJ4cFkydGZYMlY0Y0c5eWRGOWpjM1lpTENKd1lYSmhiWE1pTENKelpXeGxZM1JsWkY5aWIyOXJhVzVuWDJsa1gyRnljaUlzSW5kd1ltTmZaMlYwWDNObGJHVmpkR1ZrWDNKdmQxOXBaQ0lzSW1wdmFXNGlMQ0p6WldGeVkyaGZaMlYwWDJGc2JGOXdZWEpoYlhNaUxDSmxlSEJ2Y25SZlkzTjJYM1Z5YkNKZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFN1FVRkZRVHRCUVVOQk8wRkJRMEU3TzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHM3T3p0QlFVTkJMRk5CUVZOQkxHOURRVUZVTEVkQlFXdEZPMEZCUVVFc1RVRkJia0pETEZsQlFXMUNMSFZGUVVGS0xFVkJRVWs3UVVGRmJFVkRMRVZCUVVGQkxFOUJRVThzUTBGQlEwTXNZMEZCVWl4RFFVRjNRaXd3UWtGQmVFSTdRVUZCYzBSRUxFVkJRVUZCTEU5QlFVOHNRMEZCUTBVc1IwRkJVaXhEUVVGaExHZERRVUZpTEVWQlFTdERTQ3haUVVFdlF5eEZRVVpaTEVOQlIyeEZPenRCUVVWRFNTeEZRVUZCUVN3NFEwRkJPRU1zUjBGTWJVSXNRMEZQYWtVN08wRkJRMEVzVFVGQlVVTXNVMEZCVXl4SlFVRkpUQ3haUVVGWkxFTkJRVVVzV1VGQlJpeERRVUV6UWl4SlFVRnRSQ3hEUVVGRlRTeExRVUZMTEVOQlFVTkRMRTlCUVU0c1EwRkJaVkFzV1VGQldTeERRVUZGTEZsQlFVWXNRMEZCTTBJc1EwRkJNMFFzUlVGQk5FYzdRVUZCU3p0QlFVVm9TRUVzU1VGQlFVRXNXVUZCV1N4RFFVRkZMRkZCUVVZc1EwRkJXaXhIUVVFeVFsRXNkMEpCUVhkQ0xFTkJRVVZTTEZsQlFWa3NRMEZCUlN4WlFVRkdMRU5CUVdRc1JVRkJaME5UTEhkQ1FVRjNRaXhEUVVGRFF5eG5Ra0ZCZWtJc1EwRkJNa01zVVVGQk0wTXNRMEZCYUVNc1EwRkJia1E3UVVGRFFUczdRVUZGUkN4TlFVRkpReXhyUWtGQmEwSXNSMEZCUnp0QlFVTnNRa01zU1VGQlFVRXNUVUZCVFN4RlFVRlpMREJDUVVSQk8wRkJSV3hDUXl4SlFVRkJRU3hMUVVGTExFVkJRV0ZLTEhkQ1FVRjNRaXhEUVVGRFF5eG5Ra0ZCZWtJc1EwRkJNa01zVDBGQk0wTXNRMEZHUVR0QlFVZHNRa2tzU1VGQlFVRXNaMEpCUVdkQ0xFVkJRVTFVTEZOQlFWTXNTVUZCU1V3c1dVRkJXU3hEUVVGRkxGTkJRVVlzUTBGQk0wSXNSMEZCTmtOVExIZENRVUYzUWl4RFFVRkRReXhuUWtGQmVrSXNRMEZCTWtNc1UwRkJNME1zUTBGQk4wTXNSMEZCYzBkV0xGbEJRVmtzUTBGQlJTeFRRVUZHTEVOQlNIQklPMEZCU1d4Q1pTeEpRVUZCUVN4bFFVRmxMRVZCUVU5V0xGTkJRVk1zU1VGQlNVd3NXVUZCV1N4RFFVRkZMRkZCUVVZc1EwRkJNMElzUjBGQk5rTlRMSGRDUVVGM1FpeERRVUZEUXl4blFrRkJla0lzUTBGQk1rTXNVVUZCTTBNc1EwRkJOME1zUjBGQmMwZFdMRmxCUVZrc1EwRkJSU3hSUVVGR0xFTkJTbkJJTzBGQlRXeENaMElzU1VGQlFVRXNZVUZCWVN4RlFVRkhhRUk3UVVGT1JTeEhRVUY2UWl4RFFXSnBSU3hEUVhOQ2FrVTdPMEZCUTBFc1RVRkJTeXhQUVVGUFFTeFpRVUZaTEVOQlFVTnBRaXhoUVVGd1FpeExRVUZ6UXl4WFFVRXpReXhGUVVGM1JEdEJRVU4yUkU0c1NVRkJRVUVzYTBKQlFXdENMRU5CUVVVc1pVRkJSaXhEUVVGc1FpeEhRVUYzUTFnc1dVRkJXU3hEUVVGRGFVSXNZVUZCY2tRN1FVRkRRU3hYUVVGUFRpeHJRa0ZCYTBJc1EwRkJRMHNzWVVGQmJrSXNRMEZCYVVORExHRkJRWGhETzBGQlEwRXNSMEV4UW1kRkxFTkJORUpxUlRzN08wRkJRMEZETEVWQlFVRkJMRTFCUVUwc1EwRkJRME1zU1VGQlVDeERRVUZoUXl4WlFVRlpMRU5CUVVORExGbEJRVEZDTEVWQlJVZFdMR3RDUVVaSU8wRkJTVWM3UVVGRFNqdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRTU3haUVVGWFZ5eGhRVUZZTEVWQlFUQkNReXhWUVVFeFFpeEZRVUZ6UTBNc1MwRkJkRU1zUlVGQk9FTTdRVUZGYkVSMlFpeEpRVUZCUVN4UFFVRlBMRU5CUVVORkxFZEJRVklzUTBGQllTd3lSRUZCWWl4RlFVRXdSVzFDTEdGQlFURkZPMEZCUVRKR2NrSXNTVUZCUVVFc1QwRkJUeXhEUVVGRGQwSXNVVUZCVWl4SFFVWjZReXhEUVVrM1F6czdRVUZEUVN4UlFVRk5MRkZCUVU5SUxHRkJRVkFzVFVGQmVVSXNVVUZCTVVJc1NVRkJkME5CTEdGQlFXRXNTMEZCU3l4SlFVRXZSQ3hGUVVGelJUdEJRVU55UlVvc1RVRkJRVUVzVFVGQlRTeERRVUZGTEcxQ1FVRkdMRU5CUVU0c1EwRkJPRUpSTEVsQlFUbENPMEZCUTBGU0xFMUJRVUZCTEUxQlFVMHNRMEZCUlZRc2QwSkJRWGRDTEVOQlFVTnJRaXhsUVVGNlFpeERRVUV3UXl4dFFrRkJNVU1zUTBGQlJpeERRVUZPTEVOQlFUQkZReXhKUVVFeFJTeERRVU5YTERoRlFVTkRUaXhoUVVSRUxFZEJSVUVzVVVGSVdEdEJRVXRCTzBGQlEwRTdPMEZCUlVSUExFbEJRVUZCTERoRFFVRTRRenRCUVVVNVEwTXNTVUZCUVVFc2RVSkJRWFZDTEVOQlEyUlNMR0ZCUVdFc1EwRkJSU3d3UWtGQlJpeERRVUZpTEVOQlFUUkRVeXhQUVVFMVF5eERRVUZ4UkN4TFFVRnlSQ3hGUVVFMFJDeFJRVUUxUkN4RFFVUmpMRVZCUlZvc1QwRkJUMVFzWVVGQllTeERRVUZGTEhsQ1FVRkdMRU5CUVhSQ0xFZEJRWGRFTEZOQlFYaEVMRWRCUVc5RkxFOUJSblJFTEVWQlIyUXNTMEZJWXl4RFFVRjJRaXhEUVdwQ05rTXNRMEYxUWpkRE96dEJRVU5CTEZGQlFVc3NUMEZCVDBFc1lVRkJZU3hEUVVGRkxIbENRVUZHTEVOQlFYcENMRVZCUVhkRU8wRkJSWFpFTEZWQlFVbFZMSE5DUVVGelFpeEhRVUZITEVsQlFUZENMRU5CUm5WRUxFTkJTWFpFT3p0QlFVTkJMRlZCUVVzc1ZVRkJWVllzWVVGQllTeERRVUZGTEhkRFFVRkdMRU5CUVdJc1EwRkJNa1FzYjBKQlFUTkVMRU5CUVdZc1JVRkJhMGM3UVVGRmFrZFhMRkZCUVVGQkxHZEVRVUZuUkN4RFFVRkZXQ3hoUVVGaExFTkJRVVVzZDBOQlFVWXNRMEZCWWl4RFFVRXlSQ3h2UWtGQk0wUXNRMEZCUml4RFFVRm9SRHRCUVVWQkxGbEJRVWxaTEZsQlFWa3NSMEZCUjBNc1ZVRkJWU3hEUVVGRkxGbEJRVmM3UVVGRmVFTXNZMEZCUzBNc01rTkJRVEpETEVWQlFXaEVMRVZCUVc5RU8wRkJRMjVFTEdkQ1FVRkxMMElzVTBGQlV5eEpRVUZKYVVJc1lVRkJZU3hEUVVGRkxIZERRVUZHTEVOQlFXSXNRMEZCTWtRc2IwSkJRVE5FTEVWQlFXMUdMRzFDUVVGdVJpeERRVUZzUWl4RlFVRTBTRHRCUVVNelNHVXNZMEZCUVVFc1VVRkJVU3hEUVVGRFF5eFJRVUZVTEVOQlFXdENReXhKUVVGc1FpeEhRVUY1UW1wQ0xHRkJRV0VzUTBGQlJTeDNRMEZCUml4RFFVRmlMRU5CUVRKRUxHOUNRVUV6UkN4RlFVRnRSaXh0UWtGQmJrWXNRMEZCZWtJN1FVRkRRU3hoUVVaRUxFMUJSVTg3UVVGRFRtVXNZMEZCUVVFc1VVRkJVU3hEUVVGRFF5eFJRVUZVTEVOQlFXdENSU3hOUVVGc1FqdEJRVU5CTzBGQlEwUTdRVUZEVHl4VFFWUnRRaXhGUVZWeVFpeEpRVlp4UWl4RFFVRTNRanRCUVZkQlVpeFJRVUZCUVN4elFrRkJjMElzUjBGQlJ5eExRVUY2UWp0QlFVTkJMRTlCY2tKelJDeERRWFZDZGtRN096dEJRVU5CTEZWQlFVc3pRaXhUUVVGVExFbEJRVWxwUWl4aFFVRmhMRU5CUVVVc2QwTkJRVVlzUTBGQllpeERRVUV5UkN4blFrRkJNMFFzUTBGQmJFSXNSVUZCYVVjN1FVRkRhRWR0UWl4UlFVRkJRU3d3UTBGQk1FTXNRMEZCUlc1Q0xHRkJRV0VzUTBGQlJTeDNRMEZCUml4RFFVRmlMRU5CUVRKRUxHZENRVUV6UkN4RFFVRkdMRU5CUVRGRE8wRkJRMEZWTEZGQlFVRkJMSE5DUVVGelFpeEhRVUZITEV0QlFYcENPMEZCUTBFN08wRkJSVVFzVlVGQlMwRXNjMEpCUVV3c1JVRkJOa0k3UVVGRE5VSlZMRkZCUVVGQkxITkRRVUZ6UXl4SFFVUldMRU5CUTJNN1FVRkRNVU03UVVGRlJDeExRWHBFTkVNc1EwRXlSRGRET3pzN1FVRkRRVU1zU1VGQlFVRXNkMEpCUVhkQ0xFTkJRVVZ5UWl4aFFVRmhMRU5CUVVVc2IwSkJRVVlzUTBGQllpeERRVUYxUXl4MVFrRkJka01zUTBGQlJpeERRVUY0UWl4RFFUVkVOa01zUTBFNFJEZERPenRCUVVOQmMwSXNTVUZCUVVFc2RVSkJRWFZDTzBGQlJYWkNNVUlzU1VGQlFVRXNUVUZCVFN4RFFVRkZMR1ZCUVVZc1EwRkJUaXhEUVVFd1FsVXNTVUZCTVVJc1EwRkJaME5PTEdGQlFXaERMRVZCYWtVMlF5eERRV2xGU3p0QlFVTnNSQ3hIUVRkRlNpeEZRVGhGVFhWQ0xFbEJPVVZPTEVOQk9FVlpMRlZCUVZkeVFpeExRVUZZTEVWQlFXdENSQ3hWUVVGc1FpeEZRVUU0UW5WQ0xGZEJRVGxDTEVWQlFUUkRPMEZCUVVzc1VVRkJTME1zVFVGQlRTeERRVUZET1VNc1QwRkJVQ3hKUVVGclFqaERMRTFCUVUwc1EwRkJRemxETEU5QlFWQXNRMEZCWlVVc1IwRkJkRU1zUlVGQk1rTTdRVUZCUlVZc1RVRkJRVUVzVDBGQlR5eERRVUZEUlN4SFFVRlNMRU5CUVdFc1dVRkJZaXhGUVVFeVFuRkNMRXRCUVROQ0xFVkJRV3REUkN4VlFVRnNReXhGUVVFNFEzVkNMRmRCUVRsRE8wRkJRVGhFT3p0QlFVTndTelZDTEVsQlFVRkJMRTFCUVUwc1EwRkJSU3h0UWtGQlJpeERRVUZPTEVOQlFUaENVU3hKUVVFNVFqdEJRVU5CTEZGQlFVbHpRaXhoUVVGaExFZEJRVWNzWVVGQllTeFJRVUZpTEVkQlFYZENMRmxCUVhoQ0xFZEJRWFZEUml4WFFVRXpSRHM3UVVGRFFTeFJRVUZMZEVJc1MwRkJTeXhEUVVGRGVVSXNXVUZCV0N4RlFVRjVRanRCUVVONFFrUXNUVUZCUVVFc1lVRkJZU3hKUVVGSmVFSXNTMEZCU3l4RFFVRkRlVUlzV1VGQmRrSTdRVUZEUVRzN1FVRkRSRVFzU1VGQlFVRXNZVUZCWVN4SFFVRkhRU3hoUVVGaExFTkJRVU5xUWl4UFFVRmtMRU5CUVhWQ0xFdEJRWFpDTEVWQlFUaENMRkZCUVRsQ0xFTkJRV2hDTzBGQlJVRnRRaXhKUVVGQlFTdzJRa0ZCTmtJc1EwRkJSVVlzWVVGQlJpeERRVUUzUWp0QlFVTkRMRWRCZGtaTUxFVkJkMFpWTzBGQlEwNDdRVUY2Umtvc1IwRTNRbWxGTEVOQmRVZ3hSRHRCUVVOUU8wRkJSMFE3UVVGRFFUczdRVUZGUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3T3p0QlFVTkJMRk5CUVZOTUxIZENRVUZVTEVOQlFXMURVU3g1UWtGQmJrTXNSVUZCT0VRN1FVRkZOMFFzVFVGQlNVTXNaVUZCWlN4SFFVRkhMRVZCUVhSQ096dEJRVU5CTEUxQlFVc3ZReXhUUVVGVExFbEJRVWs0UXl4NVFrRkJiRUlzUlVGQk5rTTdRVUZETlVNc1VVRkJTVVVzVVVGQlVTeEhRVUZIYmtNc1RVRkJUU3hEUVVGRkxFMUJRVTFwUXl4NVFrRkJVaXhEUVVGeVFqczdRVUZEUVN4UlFVRkxSU3hSUVVGUkxFTkJRVU5ETEUxQlFXUXNSVUZCYzBJN1FVRkRja0pHTEUxQlFVRkJMR1ZCUVdVc1IwRkJSMGNzWjBOQlFXZERMRU5CUVVWR0xGRkJRVkVzUTBGQlEwY3NSMEZCVkN4RFFVRmpMRU5CUVdRc1EwRkJSaXhEUVVGc1JEdEJRVU5CTzBGQlEwUTdPMEZCUlVRc1UwRkJUMG9zWlVGQlVEdEJRVU5CTzBGQlIwRTdRVUZEUkR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk96czdRVUZEUXl4VFFVRlRTeXdyUWtGQlZDeERRVUV3UTBNc1YwRkJNVU1zUlVGQmRVUTdRVUZGZEVRc1RVRkJTVU1zVDBGQlR5eEhRVUZIZWtNc1RVRkJUU3hEUVVGRmQwTXNWMEZCUml4RFFVRndRanRCUVVOQkxFMUJRVWxGTEV0QlFVc3NSMEZCUjBRc1QwRkJUeXhEUVVGRFJTeEpRVUZTTEVOQlFXTXNSMEZCWkN4RFFVRmFPMEZCUTBFc1RVRkJTVlFzWlVGQlpTeEhRVUZIVVN4TFFVRkxMRU5CUVVORkxFbEJRVTRzUTBGQldTeFBRVUZhTEVOQlFYUkNPMEZCUlVGR0xFVkJRVUZCTEV0QlFVc3NRMEZCUTBjc1YwRkJUaXhIUVVGdlFrTXNVVUZCY0VJc1EwRkJPRUlzYlVSQlFUbENMRVZCVG5ORUxFTkJUU3RDTzBGQlEzSkdPMEZCUTBFN08wRkJSVUZLTEVWQlFVRkJMRXRCUVVzc1EwRkJRMFVzU1VGQlRpeERRVUZaTEhGQ1FVRmFMRVZCUVcxRFZpeGxRVUZ1UXp0QlFVVkJUeXhGUVVGQlFTeFBRVUZQTEVOQlFVTkxMRkZCUVZJc1EwRkJhMElzVlVGQmJFSXNSVUZhYzBRc1EwRlpVanRCUVVNNVF6dEJRVU5CT3p0QlFVVkJUQ3hGUVVGQlFTeFBRVUZQTEVOQlFVTkhMRWxCUVZJc1EwRkJZeXgxUWtGQlpDeEZRVUYxUTBnc1QwRkJUeXhEUVVGRFJ5eEpRVUZTTEVOQlFXTXNVMEZCWkN4RFFVRjJReXhGUVdoQ2MwUXNRMEZuUW1VN08wRkJRM0pGU0N4RlFVRkJRU3hQUVVGUExFTkJRVU5ITEVsQlFWSXNRMEZCWXl4VFFVRmtMRVZCUVhsQ0xFVkJRWHBDTEVWQmFrSnpSQ3hEUVdsQ1lqczdRVUZGZWtNc1UwRkJUMVlzWlVGQlVEdEJRVU5CTzBGQlIwUTdRVUZEUkR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk96czdRVUZEUXl4VFFVRlRSeXhuUTBGQlZDeERRVUV5UTBjc1YwRkJNME1zUlVGQmQwUTdRVUZGZGtRc1RVRkJTVU1zVDBGQlR5eEhRVUZIZWtNc1RVRkJUU3hEUVVGRmQwTXNWMEZCUml4RFFVRndRanRCUVVOQkxFMUJRVWxGTEV0QlFVc3NSMEZCUjBRc1QwRkJUeXhEUVVGRFJTeEpRVUZTTEVOQlFXTXNSMEZCWkN4RFFVRmFPMEZCUlVFc1RVRkJTVlFzWlVGQlpTeEhRVUZIVVN4TFFVRkxMRU5CUVVORkxFbEJRVTRzUTBGQldTeHhRa0ZCV2l4RFFVRjBRanM3UVVGRFFTeE5RVUZMTEUxQlFVMVdMR1ZCUVZnc1JVRkJORUk3UVVGRE0wSlJMRWxCUVVGQkxFdEJRVXNzUTBGQlEwY3NWMEZCVGl4SFFVRnZRa01zVVVGQmNFSXNRMEZCT0VKYUxHVkJRVGxDTzBGQlEwRTdPMEZCUlVSUExFVkJRVUZCTEU5QlFVOHNRMEZCUTBrc1YwRkJVaXhEUVVGeFFpeFZRVUZ5UWl4RlFWWjFSQ3hEUVZWT096dEJRVVZxUkN4TlFVRkpSU3huUWtGQlowSXNSMEZCUjA0c1QwRkJUeXhEUVVGRFJ5eEpRVUZTTEVOQlFXTXNkVUpCUVdRc1EwRkJka0k3TzBGQlEwRXNUVUZCU3l4TlFVRk5SeXhuUWtGQldDeEZRVUUyUWp0QlFVTTFRazRzU1VGQlFVRXNUMEZCVHl4RFFVRkRSeXhKUVVGU0xFTkJRV01zVTBGQlpDeEZRVUY1UWtjc1owSkJRWHBDTzBGQlEwRTdPMEZCUlVRc1UwRkJUMklzWlVGQlVEdEJRVU5CTzBGQlIwWTdRVUZEUVR0QlFVTkJPenM3UVVGRFFTeFRRVUZUVWl4MVFrRkJWQ3hIUVVGclF6dEJRVVZxUXp0QlFVTkJMRTFCUVVzc1pVRkJaU3hQUVVGUk1VSXNUVUZCVFN4RFFVRkZMRzFDUVVGR0xFTkJRVTRzUTBGQk9FSm5SQ3hoUVVFeFJDeEZRVUV3UlR0QlFVTjZSV2hFTEVsQlFVRkJMRTFCUVUwc1EwRkJSU3h0UWtGQlJpeERRVUZPTEVOQlFUaENaMFFzWVVGQk9VSXNRMEZCTmtNc1RVRkJOME03UVVGRFFUdEJRVU5FTzBGQlIwUTdRVUZEUVRzN08wRkJSVUVzVTBGQlUwTXNOa0pCUVZRc1IwRkJkME03UVVGRGRrTnFSQ3hGUVVGQlFTeE5RVUZOTEVOQlFVVXNNRU5CUVVZc1EwRkJUaXhEUVVGeFJGRXNTVUZCY2tRN1FVRkRRVklzUlVGQlFVRXNUVUZCVFN4RFFVRkZMREJEUVVGR0xFTkJRVTRzUTBGQmNVUnJSQ3hKUVVGeVJEdEJRVU5CYmtNc1JVRkJRVUVzWjBSQlFXZEVMRU5CUVVVN1FVRkJReXhuUTBGQk5FSTdRVUZCTjBJc1IwRkJSaXhEUVVGb1JEdEJRVU5CT3p0QlFVVkVMRk5CUVZOdlF5dzBRa0ZCVkN4SFFVRjFRenRCUVVOMFEyNUVMRVZCUVVGQkxFMUJRVTBzUTBGQlJTd3dRMEZCUml4RFFVRk9MRU5CUVhGRVVTeEpRVUZ5UkR0QlFVTkJVaXhGUVVGQlFTeE5RVUZOTEVOQlFVVXNNRU5CUVVZc1EwRkJUaXhEUVVGeFJHdEVMRWxCUVhKRU8wRkJRMEZ1UXl4RlFVRkJRU3huUkVGQlowUXNRMEZCUlR0QlFVRkRMR2REUVVFMFFqdEJRVUUzUWl4SFFVRkdMRU5CUVdoRU8wRkJRMEU3TzBGQlJVUXNVMEZCVTNGRExEaENRVUZVTEVOQlFYZERReXhUUVVGNFF5eEZRVUZyUkR0QlFVVnFSSEpFTEVWQlFVRkJMRTFCUVUwc1EwRkJSWEZFTEZOQlFVWXNRMEZCVGl4RFFVRnZRa01zVDBGQmNFSXNRMEZCTmtJc2FVSkJRVGRDTEVWQlFXbEVXQ3hKUVVGcVJDeERRVUYxUkN4elFrRkJka1FzUlVGQlowWlpMRTFCUVdoR08wRkJRMEYyUkN4RlFVRkJRU3hOUVVGTkxFTkJRVVZ4UkN4VFFVRkdMRU5CUVU0c1EwRkJiMEpETEU5QlFYQkNMRU5CUVRaQ0xHbENRVUUzUWl4RlFVRnBSRmdzU1VGQmFrUXNRMEZCZFVRc2NVSkJRWFpFTEVWQlFTdEZXU3hOUVVFdlJUdEJRVVZCTzBGQlEwUTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3TzBGQlEwTjRSU3hGUVVGQlFTeFBRVUZQTEVOQlFVTkZMRWRCUVZJc1EwRkJZU3huUTBGQllpeEZRVUVyUTI5RkxGTkJRUzlETzBGQlEwRTdRVUZGUkR0QlFVTkJPenRCUVVWQk8wRkJRMEU3UVVGRFFUczdPMEZCUTBFc1UwRkJVMGNzYlVOQlFWUXNSMEZCT0VNN1FVRkZOME40UkN4RlFVRkJRU3hOUVVGTkxFTkJRVVVzWjBOQlFVWXNRMEZCVGl4RFFVRXlRM2xFTEVsQlFUTkRMRU5CUVdsRUxGVkJRVmRETEV0QlFWZ3NSVUZCYTBJN1FVRkZiRVVzVVVGQlNVTXNVMEZCVXl4SFFVRkhNMFFzVFVGQlRTeERRVUZGTEVsQlFVWXNRMEZCVGl4RFFVRmxORU1zU1VGQlppeERRVUZ4UWl3d1FrRkJja0lzUTBGQmFFSXNRMEZHYTBVc1EwRkZSenM3UVVGRmNrVXNVVUZCUzNwRUxGTkJRVk1zUzBGQlMzZEZMRk5CUVc1Q0xFVkJRVGhDTzBGQlF6ZENNMFFzVFVGQlFVRXNUVUZCVFN4RFFVRkZMRWxCUVVZc1EwRkJUaXhEUVVGbE1rTXNTVUZCWml4RFFVRnhRaXh0UWtGQmJVSm5RaXhUUVVGdVFpeEhRVUVyUWl4SlFVRndSQ3hGUVVFeVJFTXNTVUZCTTBRc1EwRkJhVVVzVlVGQmFrVXNSVUZCTmtVc1NVRkJOMFU3TzBGQlJVRXNWVUZCVFN4TlFVRk5SQ3hUUVVGUUxFbEJRWE5DTTBRc1RVRkJUU3hEUVVGRkxFbEJRVVlzUTBGQlRpeERRVUZsTmtRc1VVRkJaaXhEUVVGNVFpdzRRa0ZCZWtJc1EwRkJNMElzUlVGQmRVWTdRVUZCVXp0QlFVVXZSaXhaUVVGSlF5eHhRa0ZCY1VJc1IwRkJSemxFTEUxQlFVMHNRMEZCUlN4SlFVRkdMRU5CUVU0c1EwRkJaWE5FTEU5QlFXWXNRMEZCZDBJc2IwSkJRWGhDTEVWQlFTdERXQ3hKUVVFdlF5eERRVUZ4UkN3MFFrRkJja1FzUTBGQk5VSXNRMEZHYzBZc1EwRkpkRVk3TzBGQlEwRnRRaXhSUVVGQlFTeHhRa0ZCY1VJc1EwRkJRMmhDTEZGQlFYUkNMRU5CUVdkRExHRkJRV2hETEVWQlRITkdMRU5CUzNCRE96dEJRVU5xUkN4WlFVRkxMR1ZCUVdVc1QwRkJVV2xDTEZWQlFUVkNMRVZCUVRCRE8wRkJRekZEUkN4VlFVRkJRU3h4UWtGQmNVSXNRMEZCUTNoQ0xFZEJRWFJDTEVOQlFUQkNMRU5CUVRGQ0xFVkJRVFpDTUVJc1RVRkJOMElzUTBGQmIwTkRMRlZCUVhCRExFTkJRV2RFVGl4VFFVRm9SRHRCUVVORE8wRkJRMFk3UVVGRFJEdEJRVU5FTEVkQmJFSkVPMEZCYlVKQk8wRkJSVVE3UVVGRFFUczdRVUZGUVR0QlFVTkJPMEZCUTBFN096dEJRVU5CTEZOQlFWTlBMRzFEUVVGVUxFZEJRVGhETzBGQlJUZERiRVVzUlVGQlFVRXNUVUZCVFN4RFFVRkZMSEZFUVVGR0xFTkJRVTRzUTBGQlowVjVSQ3hKUVVGb1JTeERRVUZ6UlN4VlFVRlhReXhMUVVGWUxFVkJRV3RDTzBGQlEzWkdMRkZCUVVsVExGRkJRVkVzUjBGQlIyNUZMRTFCUVUwc1EwRkJSU3hKUVVGR0xFTkJRVTRzUTBGQlpXOUZMRWRCUVdZc1JVRkJaanM3UVVGRFFTeFJRVUZOYWtZc1UwRkJVeXhMUVVGTFowWXNVVUZCWml4SlFVRTJRaXhOUVVGTlFTeFJRVUY0UXl4RlFVRnRSRHRCUVVWc1JDeFZRVUZKUlN4aFFVRmhMRWRCUVVkeVJTeE5RVUZOTEVOQlFVVXNTVUZCUml4RFFVRk9MRU5CUVdWelJDeFBRVUZtTEVOQlFYZENMRmRCUVhoQ0xFVkJRWE5EV0N4SlFVRjBReXhEUVVFMFF5d3dRa0ZCTlVNc1EwRkJjRUk3TzBGQlJVRXNWVUZCU3pCQ0xHRkJRV0VzUTBGQlEycERMRTFCUVdRc1IwRkJkVUlzUTBGQk5VSXNSVUZCSzBJN1FVRkZPVUpwUXl4UlFVRkJRU3hoUVVGaExFTkJRVU4yUWl4UlFVRmtMRU5CUVhkQ0xHRkJRWGhDTEVWQlJqaENMRU5CUlZrN08wRkJRekZETEZsQlFVc3NaVUZCWlN4UFFVRlJhVUlzVlVGQk5VSXNSVUZCZVVNN1FVRkRlRU03UVVGRFFUdEJRVVZCVFN4VlFVRkJRU3hoUVVGaExFTkJRVU12UWl4SFFVRmtMRU5CUVcxQ0xFTkJRVzVDTEVWQlFYVkNNRUlzVFVGQmRrSXNRMEZCT0VKTkxGRkJRVGxDTEVOQlFYZERPMEZCUTNaRFF5eFpRVUZCUVN4VFFVRlRMRVZCUVVVc1NVRkVORUk3UVVGRmRrTkRMRmxCUVVGQkxFOUJRVThzUlVGQlNVd3NVVUZCVVN4RFFVRkRkRVFzVDBGQlZDeERRVUZyUWl4VFFVRnNRaXhGUVVFMlFpeE5RVUUzUWp0QlFVWTBRaXhYUVVGNFF6dEJRVWxCTzBGQlEwUTdRVUZEUkR0QlFVTkVMRWRCY0VKRU8wRkJjVUpCTzBGQlJVUTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHM3TzBGQlEwRXNVMEZCVXpSRUxHdERRVUZVTEVOQlFUWkRReXhUUVVFM1F5eEZRVUYzUkR0QlFVVjJSRUVzUlVGQlFVRXNVMEZCVXl4RFFVRkRjRUlzVDBGQlZpeERRVUZyUWl4WFFVRnNRaXhGUVVFclFsZ3NTVUZCTDBJc1EwRkJiME1zYjBKQlFYQkRMRVZCUVRCRVdTeE5RVUV4UkR0QlFVTkJPMEZCUjBRN1FVRkRRVHM3TzBGQlJVRXNVMEZCVTI5Q0xHZEVRVUZVTEVOQlFUSkVReXhWUVVFelJDeEZRVUYxUlVNc1YwRkJka1VzUlVGQmIwWTdRVUZGYmtZN1FVRkRRVGRGTEVWQlFVRkJMRTFCUVUwc1EwRkJSU3h6UTBGQlJpeERRVUZPTEVOQlFXbEViMFVzUjBGQmFrUXNRMEZCYzBSUkxGVkJRWFJFTEVWQlNHMUdMRU5CUzI1R096dEJRVU5CTlVVc1JVRkJRVUVzVFVGQlRTeERRVUZGTERKRFFVRkdMRU5CUVU0c1EwRkJjMFJ2UlN4SFFVRjBSQ3hEUVVFeVJGTXNWMEZCTTBRc1JVRkJlVVZETEU5QlFYcEZMRU5CUVd0R0xGRkJRV3hHTzBGQlEwRXNUVUZCU1VNc1IwRkJTaXhEUVZCdFJpeERRVk51UmpzN1FVRkRRVUVzUlVGQlFVRXNSMEZCUnl4SFFVRkhMMFVzVFVGQlRTeERRVUZGTEcxRFFVRkdMRU5CUVU0c1EwRkJPRU5uUml4TlFVRTVReXhGUVVGT0xFTkJWbTFHTEVOQldXNUdPenRCUVVOQlJDeEZRVUZCUVN4SFFVRkhMRU5CUVVORkxGRkJRVW9zUTBGQlkycEdMRTFCUVUwc1EwRkJSU3h6UkVGQmMwUTBSU3hWUVVGNFJDeERRVUZ3UWp0QlFVTkJSeXhGUVVGQlFTeEhRVUZITEVkQlFVY3NTVUZCVGl4RFFXUnRSaXhEUVdkQ2JrWTdRVUZEUVRzN1FVRkRRU3hOUVVGTExFTkJRVVV2UlN4TlFVRk5MRU5CUVVVc2MwUkJRWE5FTkVVc1ZVRkJlRVFzUTBGQlRpeERRVUV5UlUwc1JVRkJNMFVzUTBGQk9FVXNWVUZCT1VVc1EwRkJVQ3hGUVVGclJ6dEJRVU5xUjJ4R0xFbEJRVUZCTEUxQlFVMHNRMEZCUlN3MFEwRkJSaXhEUVVGT0xFTkJRWFZFVVN4SlFVRjJSRHRCUVVOQkxFZEJjRUpyUml4RFFYTkNia1k3T3p0QlFVTkJVaXhGUVVGQlFTeE5RVUZOTEVOQlFVVXNjMFJCUVhORU5FVXNWVUZCZUVRc1EwRkJUaXhEUVVFeVJYSkNMRTFCUVRORk8wRkJRMEU3TzBGQlJVUXNVMEZCVXpSQ0xHZEVRVUZVTEVOQlFUSkVReXhQUVVFelJDeEZRVUZ2UlVNc1kwRkJjRVVzUlVGQmIwWkRMRXRCUVhCR0xFVkJRVEpHTzBGQlJURkdla2NzUlVGQlFVRXNiME5CUVc5RExFTkJRVVU3UVVGRE5VSXNjMEpCUVhsQ2QwY3NZMEZFUnp0QlFVVTFRaXhyUWtGQmVVSnlSaXhOUVVGTkxFTkJRVVVzYzBOQlFVWXNRMEZCVGl4RFFVRnBSRzlGTEVkQlFXcEVMRVZCUmtjN1FVRkhOVUlzTkVKQlFYbENjRVVzVFVGQlRTeERRVUZGTERKRFFVRkdMRU5CUVU0c1EwRkJjMFJ2UlN4SFFVRjBSQ3hGUVVoSE8wRkJTVFZDTERaQ1FVRjVRbXRDTzBGQlNrY3NSMEZCUml4RFFVRndRenRCUVU5QkwwTXNSVUZCUVVFc0swSkJRU3RDTEVOQlFVVTJReXhQUVVGR0xFTkJRUzlDTEVOQlZEQkdMRU5CVnpGR08wRkJRMEU3TzBGQlJVUXNVMEZCVTBjc2FVUkJRVlFzUjBGQk5FUTdRVUZGTTBRc1RVRkJTVU1zUzBGQlNpeERRVVl5UkN4RFFVa3pSRHM3UVVGRFFVRXNSVUZCUVVFc1MwRkJTeXhIUVVGSGVFWXNUVUZCVFN4RFFVRkRMRzFEUVVGRUxFTkJRVTRzUTBGQk5FTm5SaXhOUVVFMVF5eEZRVUZTTEVOQlRESkVMRU5CVHpORU96dEJRVU5CVVN4RlFVRkJRU3hMUVVGTExFTkJRVU5RTEZGQlFVNHNRMEZCWldwR0xFMUJRVTBzUTBGQlF5eG5SRUZCUkN4RFFVRnlRanRCUVVOQmQwWXNSVUZCUVVFc1MwRkJTeXhIUVVGSExFbEJRVklzUTBGVU1rUXNRMEZYTTBRN08wRkJRMEY0Uml4RlFVRkJRU3hOUVVGTkxFTkJRVU1zYTBSQlFVUXNRMEZCVGl4RFFVRXlSRkVzU1VGQk0wUTdRVUZEUVR0QlFVVkVPMEZCUTBFN096dEJRVVZCTEZOQlFWTnBSaXhyUkVGQlZDeERRVUUyUkdJc1ZVRkJOMFFzUlVGQmVVVkRMRmRCUVhwRkxFVkJRWE5HTzBGQlJYSkdPMEZCUTBFM1JTeEZRVUZCUVN4TlFVRk5MRU5CUVVVc2EwUkJRVVlzUTBGQlRpeERRVUUyUkc5RkxFZEJRVGRFTEVOQlFXdEZVU3hWUVVGc1JTeEZRVWh4Uml4RFFVdHlSanM3UVVGRFFUVkZMRVZCUVVGQkxFMUJRVTBzUTBGQlJTeDFSRUZCUml4RFFVRk9MRU5CUVd0RmIwVXNSMEZCYkVVc1EwRkJkVVZUTEZkQlFYWkZMRVZCUVhGR1F5eFBRVUZ5Uml4RFFVRTRSaXhSUVVFNVJqdEJRVU5CTEUxQlFVbERMRWRCUVVvc1EwRlFjVVlzUTBGVGNrWTdPMEZCUTBGQkxFVkJRVUZCTEVkQlFVY3NSMEZCUnk5RkxFMUJRVTBzUTBGQlJTd3JRMEZCUml4RFFVRk9MRU5CUVRCRVowWXNUVUZCTVVRc1JVRkJUaXhEUVZaeFJpeERRVmx5UmpzN1FVRkRRVVFzUlVGQlFVRXNSMEZCUnl4RFFVRkRSU3hSUVVGS0xFTkJRV05xUml4TlFVRk5MRU5CUVVVc2EwVkJRV3RGTkVVc1ZVRkJjRVVzUTBGQmNFSTdRVUZEUVVjc1JVRkJRVUVzUjBGQlJ5eEhRVUZITEVsQlFVNHNRMEZrY1VZc1EwRm5RbkpHT3p0QlFVTkJMRTFCUVVzc1EwRkJSUzlGTEUxQlFVMHNRMEZCUlN4clJVRkJhMFUwUlN4VlFVRndSU3hEUVVGT0xFTkJRWFZHVFN4RlFVRjJSaXhEUVVFd1JpeFZRVUV4Uml4RFFVRlFMRVZCUVRoSE8wRkJRemRIYkVZc1NVRkJRVUVzVFVGQlRTeERRVUZGTERSRFFVRkdMRU5CUVU0c1EwRkJkVVJSTEVsQlFYWkVPMEZCUTBFc1IwRnVRbTlHTEVOQmNVSnlSanM3TzBGQlEwRlNMRVZCUVVGQkxFMUJRVTBzUTBGQlJTeHJSVUZCYTBVMFJTeFZRVUZ3UlN4RFFVRk9MRU5CUVhWR2NrSXNUVUZCZGtZN1FVRkRRVHM3UVVGRlJDeFRRVUZUYlVNc2EwUkJRVlFzUTBGQk5rUk9MRTlCUVRkRUxFVkJRWE5GUXl4alFVRjBSU3hGUVVGelJrTXNTMEZCZEVZc1JVRkJOa1k3UVVGRk5VWjZSeXhGUVVGQlFTeHZRMEZCYjBNc1EwRkJSVHRCUVVNMVFpeHpRa0ZCZVVKM1J5eGpRVVJITzBGQlJUVkNMR3RDUVVGNVFuSkdMRTFCUVUwc1EwRkJSU3hyUkVGQlJpeERRVUZPTEVOQlFUWkViMFVzUjBGQk4wUXNSVUZHUnp0QlFVYzFRaXcwUWtGQmVVSndSU3hOUVVGTkxFTkJRVVVzZFVSQlFVWXNRMEZCVGl4RFFVRnJSVzlGTEVkQlFXeEZMRVZCU0VjN1FVRkpOVUlzTmtKQlFYbENhMEk3UVVGS1J5eEhRVUZHTEVOQlFYQkRPMEZCVDBFdlF5eEZRVUZCUVN3clFrRkJLMElzUTBGQlJUWkRMRTlCUVVZc1EwRkJMMElzUTBGVU5FWXNRMEZYTlVZN1FVRkRRVHM3UVVGRlJDeFRRVUZUVHl4dFJFRkJWQ3hIUVVFNFJEdEJRVVUzUkN4TlFVRkpTQ3hMUVVGS0xFTkJSalpFTEVOQlNUZEVPenRCUVVOQlFTeEZRVUZCUVN4TFFVRkxMRWRCUVVkNFJpeE5RVUZOTEVOQlFVTXNLME5CUVVRc1EwRkJUaXhEUVVGM1JHZEdMRTFCUVhoRUxFVkJRVklzUTBGTU5rUXNRMEZQTjBRN08wRkJRMEZSTEVWQlFVRkJMRXRCUVVzc1EwRkJRMUFzVVVGQlRpeERRVUZsYWtZc1RVRkJUU3hEUVVGRExEUkVRVUZFTEVOQlFYSkNPMEZCUTBGM1JpeEZRVUZCUVN4TFFVRkxMRWRCUVVjc1NVRkJVaXhEUVZRMlJDeERRVmMzUkRzN1FVRkRRWGhHTEVWQlFVRkJMRTFCUVUwc1EwRkJReXc0UkVGQlJDeERRVUZPTEVOQlFYVkZVU3hKUVVGMlJUdEJRVU5CTzBGQlJVUTdRVUZEUVRzN08wRkJSVUVzVTBGQlUyOUdMRzFFUVVGVUxFTkJRVGhFYUVJc1ZVRkJPVVFzUlVGQk1FVTdRVUZGZWtVc1RVRkJTV2xDTEU5QlFVOHNSMEZCUnpkR0xFMUJRVTBzUTBGQlJTeHBSRUZCYVVRMFJTeFZRVUZ1UkN4RFFVRk9MRU5CUVhORmFrTXNTVUZCZEVVc1EwRkJORVVzVVVGQk5VVXNRMEZCWkR0QlFVVkJMRTFCUVVsdFJDeHRRa0ZCYlVJc1IwRkJSMFFzVDBGQlR5eERRVUZEYWtRc1NVRkJVaXhEUVVGakxHOUNRVUZrTEVOQlFURkNMRU5CU25sRkxFTkJUWHBGT3p0QlFVTkJMRTFCUVVzc1EwRkJRMjFFTEV0QlFVc3NRMEZCUlVNc1ZVRkJWU3hEUVVGRlJpeHRRa0ZCUml4RFFVRmFMRU5CUVZnc1JVRkJhMFE3UVVGRGFrUkVMRWxCUVVGQkxFOUJRVThzUTBGQlEyeEVMRWxCUVZJc1EwRkJZeXh0UWtGQlpDeEZRVUZ2UTJsQ0xFbEJRWEJETEVOQlFUQkRMRlZCUVRGRExFVkJRWE5FTEVsQlFYUkVMRVZCUkdsRUxFTkJRMjlDTzBGQlEzSkZMRWRCUmtRc1RVRkZUenRCUVVOT2FVTXNTVUZCUVVFc1QwRkJUeXhEUVVGRGJFUXNTVUZCVWl4RFFVRmpMRzFDUVVGdFFtMUVMRzFDUVVGdVFpeEhRVUY1UXl4SlFVRjJSQ3hGUVVFNFJHeERMRWxCUVRsRUxFTkJRVzlGTEZWQlFYQkZMRVZCUVdkR0xFbEJRV2hHTEVWQlJFMHNRMEZEYlVZN1FVRkRla1lzUjBGWWQwVXNRMEZoZWtVN096dEJRVU5CTEUxQlFVc3NRMEZCUlRWRUxFMUJRVTBzUTBGQlJTeHBSRUZCYVVRMFJTeFZRVUZ1UkN4RFFVRk9MRU5CUVhORlRTeEZRVUYwUlN4RFFVRjVSU3hWUVVGNlJTeERRVUZRTEVWQlFUWkdPMEZCUXpWR2JFWXNTVUZCUVVFc1RVRkJUU3hEUVVGRkxEUkRRVUZHTEVOQlFVNHNRMEZCZFVSUkxFbEJRWFpFTzBGQlEwRXNSMEZvUW5kRkxFTkJhMEo2UlRzN08wRkJRMEZTTEVWQlFVRkJMRTFCUVUwc1EwRkJSU3hwUkVGQmFVUTBSU3hWUVVGdVJDeERRVUZPTEVOQlFYTkZja0lzVFVGQmRFVTdRVUZEUVRzN1FVRkZSQ3hUUVVGVE1FTXNiVVJCUVZRc1EwRkJPRVJ5UWl4VlFVRTVSQ3hGUVVFd1JWRXNUMEZCTVVVc1JVRkJiVVpETEdOQlFXNUdMRVZCUVcxSFF5eExRVUZ1Unl4RlFVRXdSenRCUVVWNlIzcEhMRVZCUVVGQkxHOURRVUZ2UXl4RFFVRkZPMEZCUXpWQ0xITkNRVUY1UW5kSExHTkJSRWM3UVVGRk5VSXNhMEpCUVhsQ1ZDeFZRVVpITzBGQlJ6VkNMQ3RDUVVFMFFqVkZMRTFCUVUwc1EwRkJSU3dyUWtGQkswSTBSU3hWUVVGcVF5eERRVUZPTEVOQlFXOUVVaXhIUVVGd1JDeEZRVWhCTzBGQlNUVkNMRFpDUVVGNVFtdENMRXRCUVVzc1IwRkJSenRCUVVwTUxFZEJRVVlzUTBGQmNFTTdRVUZQUVM5RExFVkJRVUZCTEN0Q1FVRXJRaXhEUVVGRk5rTXNUMEZCUml4RFFVRXZRanRCUVVWQmNFWXNSVUZCUVVFc1RVRkJUU3hEUVVGRkxFMUJRVTF6Uml4TFFVRk9MRWRCUVdNc1UwRkJhRUlzUTBGQlRpeERRVUZwUXpsRkxFbEJRV3BETEVkQldIbEhMRU5CV1hwSE8wRkJSVUU3TzBGQlJVUXNVMEZCVXpCR0xHOUVRVUZVTEVkQlFTdEVPMEZCUXpsRU8wRkJRMEZzUnl4RlFVRkJRU3hOUVVGTkxFTkJRVU1zTmtOQlFVUXNRMEZCVGl4RFFVRnpSRkVzU1VGQmRFUTdRVUZEUVR0QlFVZEVPMEZCUTBFN096dEJRVVZCTEZOQlFWTXlSaXhwUkVGQlZDeERRVUUwUkhaQ0xGVkJRVFZFTEVWQlFYZEZVU3hQUVVGNFJTeEZRVUZwUmtNc1kwRkJha1lzUlVGQmFVZERMRXRCUVdwSExFVkJRWGRITzBGQlJYWkhla2NzUlVGQlFVRXNiME5CUVc5RExFTkJRVVU3UVVGRE5VSXNjMEpCUVhsQ2QwY3NZMEZFUnp0QlFVVTFRaXhyUWtGQmVVSlVMRlZCUmtjN1FVRkhOVUlzYjBKQlFYTkNOVVVzVFVGQlRTeERRVUZGTERaQ1FVRTJRalJGTEZWQlFUZENMRWRCUVRCRExFOUJRVFZETEVOQlFVNHNRMEZCTWtSU0xFZEJRVE5FTEVWQlNFMDdRVUZKTlVJc05rSkJRWGxDYTBJc1MwRkJTeXhIUVVGSE8wRkJTa3dzUjBGQlJpeERRVUZ3UXp0QlFVOUJMME1zUlVGQlFVRXNLMEpCUVN0Q0xFTkJRVVUyUXl4UFFVRkdMRU5CUVM5Q08wRkJSVUZ3Uml4RlFVRkJRU3hOUVVGTkxFTkJRVVVzVFVGQlRYTkdMRXRCUVU0c1IwRkJZeXhUUVVGb1FpeERRVUZPTEVOQlFXbERPVVVzU1VGQmFrTXNSMEZZZFVjc1EwRlpka2M3UVVGRlFUczdRVUZGUkN4VFFVRlRORVlzYTBSQlFWUXNSMEZCTmtRN1FVRkROVVE3UVVGRFFYQkhMRVZCUVVGQkxFMUJRVTBzUTBGQlF5d3lRMEZCUkN4RFFVRk9MRU5CUVc5RVVTeEpRVUZ3UkR0QlFVTkJPMEZCUjBRN1FVRkRRVHM3TzBGQlJVRXNVMEZCVXpaR0xHZEVRVUZVTEVkQlFUSkVPMEZCUlRGRWVFZ3NSVUZCUVVFc2IwTkJRVzlETEVOQlFVVTdRVUZETlVJc2MwSkJRWGxDTEhOQ1FVUkhPMEZCUlRWQ0xHdENRVUY1UW0xQ0xFMUJRVTBzUTBGQlJTd3dRMEZCUml4RFFVRk9MRU5CUVc5RWIwVXNSMEZCY0VRc1JVRkdSenRCUVVjMVFpeDNRa0ZCZVVKd1JTeE5RVUZOTEVOQlFVVXNaMFJCUVVZc1EwRkJUaXhEUVVFd1JHOUZMRWRCUVRGRUxFVkJTRWM3UVVGSk5VSXNOa0pCUVhsQ08wRkJTa2NzUjBGQlJpeERRVUZ3UXp0QlFVMUJOMElzUlVGQlFVRXNLMEpCUVN0Q0xFTkJRVVYyUXl4TlFVRk5MRU5CUVVVc01rTkJRVVlzUTBGQlRpeERRVUZ6UkhORExFZEJRWFJFTEVOQlFUSkVMRU5CUVRORUxFTkJRVVlzUTBGQkwwSTdRVUZEUVR0QlFVZEVPMEZCUTBFN096dEJRVVZCTEZOQlFWTm5SU3hyUkVGQlZDeEhRVUUyUkR0QlFVVTFSSHBJTEVWQlFVRkJMRzlEUVVGdlF5eERRVUZGTzBGQlF6VkNMSE5DUVVGNVFpeDNRa0ZFUnp0QlFVVTFRaXcyUWtGQmVVSXNhVVJCUmtjN1FVRkpNVUlzWjBOQlFXbERiVUlzVFVGQlRTeERRVUZGTEhkR1FVRkdMRU5CUVU0c1EwRkJhMGR2UlN4SFFVRnNSeXhGUVVwUU8wRkJTekZDTEhWRFFVRnpRM0JGTEUxQlFVMHNRMEZCUlN3clJVRkJSaXhEUVVGT0xFTkJRVEJHYjBVc1IwRkJNVVlzUlVGTVdqdEJRVTB4UWl3MFEwRkJNRU53UlN4TlFVRk5MRU5CUVVVc2IwZEJRVVlzUTBGQlRpeERRVUU0UjI5RkxFZEJRVGxITEVWQlRtaENPMEZCVVRGQ0xHbERRVUZwUTNCRkxFMUJRVTBzUTBGQlJTeDVSa0ZCUml4RFFVRk9MRU5CUVcxSGIwVXNSMEZCYmtjc1JVRlNVRHRCUVZNeFFpeDNRMEZCZFVOd1JTeE5RVUZOTEVOQlFVVXNaMFpCUVVZc1EwRkJUaXhEUVVFeVJtOUZMRWRCUVROR0xFVkJWR0k3UVVGVk1VSXNOa05CUVRCRGNFVXNUVUZCVFN4RFFVRkZMSEZIUVVGR0xFTkJRVTRzUTBGQkswZHZSU3hIUVVFdlJ5eEZRVlpvUWp0QlFWa3hRaXdyUWtGQk5rSndSU3hOUVVGTkxFTkJRVVVzZFVWQlFVWXNRMEZCVGl4RFFVRnJSbTlGTEVkQlFXeEdMRVZCV2tnN1FVRmhNVUlzTmtKQlFUSkNjRVVzVFVGQlRTeERRVUZGTEhGR1FVRkdMRU5CUVU0c1EwRkJLMFp2UlN4SFFVRXZSanRCUVdKRUxFZEJRVVlzUTBGQmNFTTdRVUZsUVRkQ0xFVkJRVUZCTEN0Q1FVRXJRaXhEUVVGRmRrTXNUVUZCVFN4RFFVRkZMQ3RHUVVGR0xFTkJRVTRzUTBGQk1FZHpReXhIUVVFeFJ5eERRVUVyUnl4RFFVRXZSeXhEUVVGR0xFTkJRUzlDTzBGQlEwRTdRVUZIUkR0QlFVTkJPenM3UVVGRFFTeFRRVUZUYVVVc2MwTkJRVlFzUTBGQmFVUkRMRTFCUVdwRUxFVkJRWGxFTzBGQlJYaEVMRTFCUVVsRExIVkNRVUYxUWl4SFFVRkhReXgzUWtGQmQwSXNSVUZCZEVRN1FVRkZRVGRJTEVWQlFVRkJMRzlEUVVGdlF5eERRVUZGTzBGQlF6VkNMSE5DUVVFd1FqSklMRTFCUVUwc1EwRkJSU3huUWtGQlJpeERRVVJLTzBGQlJUVkNMRFpDUVVFd1FrRXNUVUZCVFN4RFFVRkZMSFZDUVVGR0xFTkJSa283UVVGSk5VSXNiVUpCUVRCQ1FTeE5RVUZOTEVOQlFVVXNZVUZCUml4RFFVcEtPMEZCU3pWQ0xEUkNRVUV3UWtFc1RVRkJUU3hEUVVGRkxITkNRVUZHTEVOQlRFbzdRVUZOTlVJc09FSkJRVEJDUVN4TlFVRk5MRU5CUVVVc2QwSkJRVVlzUTBGT1NqdEJRVkUxUWl4clFrRkJaVU1zZFVKQlFYVkNMRU5CUVVORkxFbEJRWGhDTEVOQlFUWkNMRWRCUVRkQ0xFTkJVbUU3UVVGVE5VSXNjVUpCUVd0Q2NFZ3NkMEpCUVhkQ0xFTkJRVU54U0N4eFFrRkJla0k3UVVGVVZTeEhRVUZHTEVOQlFYQkRPMEZCV1VFc1RVRkJTWGhDTEU5QlFVOHNSMEZCUjNCR0xFMUJRVTBzUTBGQlJTeE5RVUZOZDBjc1RVRkJUU3hEUVVGRkxIVkNRVUZHTEVOQlFXUXNRMEZCVGl4RFFVRnJSR3hGTEVkQlFXeEVMRU5CUVhWRUxFTkJRWFpFTEVOQlFXUTdRVUZGUVVNc1JVRkJRVUVzSzBKQlFTdENMRU5CUVVVMlF5eFBRVUZHTEVOQlFTOUNPMEZCUTBFN1FVRkZSRHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CT3pzN1FVRkRRU3hUUVVGVE4wUXNNRU5CUVZRc1EwRkJjVVJ6Uml4alFVRnlSQ3hGUVVGeFJUdEJRVVZ3UlR0QlFVVkJNVVlzUlVGQlFVRXNVVUZCVVN4RFFVRkRReXhSUVVGVUxFTkJRV3RDUXl4SlFVRnNRaXhIUVVGNVFuZEdMR05CUVhwQ0xFTkJTbTlGTEVOQlNUVkNPMEZCUlhoRE8wRkJRMEU3UVVGRFFTSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbHdpZFhObElITjBjbWxqZEZ3aU8xeHlYRzVjY2x4dUx5b3FYSEpjYmlBcUlDQWdRV3BoZUNBZ0lDMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRJQ292WEhKY2JpOHZkbUZ5SUdselgzUm9hWE5mWVdOMGFXOXVJRDBnWm1Gc2MyVTdYSEpjYmk4cUtseHlYRzRnS2lCVFpXNWtJRUZxWVhnZ1lXTjBhVzl1SUhKbGNYVmxjM1FzSUNCc2FXdGxJR0Z3Y0hKdmRtbHVaeUJ2Y2lCallXNWpaV3hzWVhScGIyNWNjbHh1SUNwY2NseHVJQ29nUUhCaGNtRnRJR0ZqZEdsdmJsOXdZWEpoYlZ4eVhHNGdLaTljY2x4dVpuVnVZM1JwYjI0Z2QzQmlZMTloYW5oZlltOXZhMmx1WjE5aGFtRjRYMkZqZEdsdmJsOXlaWEYxWlhOMEtDQmhZM1JwYjI1ZmNHRnlZVzBnUFNCN2ZTQXBlMXh5WEc1Y2NseHVZMjl1YzI5c1pTNW5jbTkxY0VOdmJHeGhjSE5sWkNnZ0oxZFFRa05mUVVwWVgwSlBUMHRKVGtkZlFVTlVTVTlPVXljZ0tUc2dZMjl1YzI5c1pTNXNiMmNvSUNjZ1BUMGdRV3BoZUNCQlkzUnBiMjV6SURvNklGQmhjbUZ0Y3lBOVBTQW5MQ0JoWTNScGIyNWZjR0Z5WVcwZ0tUdGNjbHh1THk5cGMxOTBhR2x6WDJGamRHbHZiaUE5SUhSeWRXVTdYSEpjYmx4eVhHNWNkSGR3WW1OZlltOXZhMmx1WjE5c2FYTjBhVzVuWDNKbGJHOWhaRjlpZFhSMGIyNWZYM053YVc1ZmMzUmhjblFvS1R0Y2NseHVYSEpjYmx4MEx5OGdSMlYwSUhKbFpHVm1hVzVsWkNCTWIyTmhiR1VzSUNCcFppQmhZM1JwYjI0Z2IyNGdjMmx1WjJ4bElHSnZiMnRwYm1jZ0lWeHlYRzVjZEdsbUlDZ2dJQ2dnZFc1a1pXWnBibVZrSUNFOUlHRmpkR2x2Ymw5d1lYSmhiVnNnSjJKdmIydHBibWRmYVdRbklGMGdLU0FtSmlBb0lDRWdRWEp5WVhrdWFYTkJjbkpoZVNnZ1lXTjBhVzl1WDNCaGNtRnRXeUFuWW05dmEybHVaMTlwWkNjZ1hTQXBJQ2tnS1h0Y2RGeDBYSFJjZEM4dklFNXZkQ0JoY25KaGVWeHlYRzVjY2x4dVhIUmNkR0ZqZEdsdmJsOXdZWEpoYlZzZ0oyeHZZMkZzWlNjZ1hTQTlJSGR3WW1OZloyVjBYM05sYkdWamRHVmtYMnh2WTJGc1pTZ2dZV04wYVc5dVgzQmhjbUZ0V3lBblltOXZhMmx1WjE5cFpDY2dYU3dnZDNCaVkxOWhhbmhmWW05dmEybHVaMTlzYVhOMGFXNW5MbWRsZEY5elpXTjFjbVZmY0dGeVlXMG9JQ2RzYjJOaGJHVW5JQ2tnS1R0Y2NseHVYSFI5WEhKY2JseHlYRzVjZEhaaGNpQmhZM1JwYjI1ZmNHOXpkRjl3WVhKaGJYTWdQU0I3WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSaFkzUnBiMjRnSUNBZ0lDQWdJQ0FnT2lBblYxQkNRMTlCU2xoZlFrOVBTMGxPUjE5QlExUkpUMDVUSnl4Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RHNXZibU5sSUNBZ0lDQWdJQ0FnSUNBNklIZHdZbU5mWVdwNFgySnZiMnRwYm1kZmJHbHpkR2x1Wnk1blpYUmZjMlZqZFhKbFgzQmhjbUZ0S0NBbmJtOXVZMlVuSUNrc1hISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUjNjR0pqWDJGcWVGOTFjMlZ5WDJsa09pQW9JQ2dnZFc1a1pXWnBibVZrSUQwOUlHRmpkR2x2Ymw5d1lYSmhiVnNnSjNWelpYSmZhV1FuSUYwZ0tTQS9JSGR3WW1OZllXcDRYMkp2YjJ0cGJtZGZiR2x6ZEdsdVp5NW5aWFJmYzJWamRYSmxYM0JoY21GdEtDQW5kWE5sY2w5cFpDY2dLU0E2SUdGamRHbHZibDl3WVhKaGJWc2dKM1Z6WlhKZmFXUW5JRjBnS1N4Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RIZHdZbU5mWVdwNFgyeHZZMkZzWlRvZ0lDZ2dLQ0IxYm1SbFptbHVaV1FnUFQwZ1lXTjBhVzl1WDNCaGNtRnRXeUFuYkc5allXeGxKeUJkSUNrZ0lEOGdkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOXNhWE4wYVc1bkxtZGxkRjl6WldOMWNtVmZjR0Z5WVcwb0lDZHNiMk5oYkdVbklDa2dJRG9nWVdOMGFXOXVYM0JoY21GdFd5QW5iRzlqWVd4bEp5QmRJQ2tzWEhKY2JseHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBZV04wYVc5dVgzQmhjbUZ0YzF4ME9pQmhZM1JwYjI1ZmNHRnlZVzFjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFI5TzF4eVhHNWNjbHh1WEhRdkx5QkpkQ2R6SUhKbGNYVnBjbVZrSUdadmNpQkRVMVlnWlhod2IzSjBJQzBnWjJWMGRHbHVaeUIwYUdVZ2MyRnRaU0JzYVhOMElDQnZaaUJpYjI5cmFXNW5jMXh5WEc1Y2RHbG1JQ2dnZEhsd1pXOW1JR0ZqZEdsdmJsOXdZWEpoYlM1elpXRnlZMmhmY0dGeVlXMXpJQ0U5UFNBbmRXNWtaV1pwYm1Wa0p5QXBlMXh5WEc1Y2RGeDBZV04wYVc5dVgzQnZjM1JmY0dGeVlXMXpXeUFuYzJWaGNtTm9YM0JoY21GdGN5Y2dYU0E5SUdGamRHbHZibDl3WVhKaGJTNXpaV0Z5WTJoZmNHRnlZVzF6TzF4eVhHNWNkRngwWkdWc1pYUmxJR0ZqZEdsdmJsOXdiM04wWDNCaGNtRnRjeTVoWTNScGIyNWZjR0Z5WVcxekxuTmxZWEpqYUY5d1lYSmhiWE03WEhKY2JseDBmVnh5WEc1Y2NseHVYSFF2THlCVGRHRnlkQ0JCYW1GNFhISmNibHgwYWxGMVpYSjVMbkJ2YzNRb0lIZHdZbU5mWjJ4dlltRnNNUzUzY0dKalgyRnFZWGgxY213Z0xGeHlYRzVjY2x4dVhIUmNkRngwWEhSaFkzUnBiMjVmY0c5emRGOXdZWEpoYlhNZ0xGeHlYRzVjY2x4dVhIUmNkRngwWEhRdktpcGNjbHh1WEhSY2RGeDBYSFFnS2lCVElIVWdZeUJqSUdVZ2N5QnpYSEpjYmx4MFhIUmNkRngwSUNwY2NseHVYSFJjZEZ4MFhIUWdLaUJBY0dGeVlXMGdjbVZ6Y0c5dWMyVmZaR0YwWVZ4MFhIUXRYSFJwZEhNZ2IySnFaV04wSUhKbGRIVnlibVZrSUdaeWIyMGdJRUZxWVhnZ0xTQmpiR0Z6Y3kxc2FYWmxMWE5sWVhKalp5NXdhSEJjY2x4dVhIUmNkRngwWEhRZ0tpQkFjR0Z5WVcwZ2RHVjRkRk4wWVhSMWMxeDBYSFF0WEhRbmMzVmpZMlZ6Y3lkY2NseHVYSFJjZEZ4MFhIUWdLaUJBY0dGeVlXMGdhbkZZU0ZKY2RGeDBYSFJjZEMxY2RFOWlhbVZqZEZ4eVhHNWNkRngwWEhSY2RDQXFMMXh5WEc1Y2RGeDBYSFJjZEdaMWJtTjBhVzl1SUNnZ2NtVnpjRzl1YzJWZlpHRjBZU3dnZEdWNGRGTjBZWFIxY3l3Z2FuRllTRklnS1NCN1hISmNibHh5WEc1amIyNXpiMnhsTG14dlp5Z2dKeUE5UFNCQmFtRjRJRUZqZEdsdmJuTWdPam9nVW1WemNHOXVjMlVnVjFCQ1ExOUJTbGhmUWs5UFMwbE9SMTlCUTFSSlQwNVRJRDA5SUNjc0lISmxjM0J2Ym5ObFgyUmhkR0VnS1RzZ1kyOXVjMjlzWlM1bmNtOTFjRVZ1WkNncE8xeHlYRzVjY2x4dVhIUmNkRngwWEhSY2RDOHZJRkJ5YjJKaFlteDVJRVZ5Y205eVhISmNibHgwWEhSY2RGeDBYSFJwWmlBb0lDaDBlWEJsYjJZZ2NtVnpjRzl1YzJWZlpHRjBZU0FoUFQwZ0oyOWlhbVZqZENjcElIeDhJQ2h5WlhOd2IyNXpaVjlrWVhSaElEMDlQU0J1ZFd4c0tTQXBlMXh5WEc1Y2RGeDBYSFJjZEZ4MFhIUnFVWFZsY25rb0lDY2pkMmhmYzI5eWRGOXpaV3hsWTNSdmNpY2dLUzVvYVdSbEtDazdYSEpjYmx4MFhIUmNkRngwWEhSY2RHcFJkV1Z5ZVNnZ2QzQmlZMTloYW5oZlltOXZhMmx1WjE5c2FYTjBhVzVuTG1kbGRGOXZkR2hsY2w5d1lYSmhiU2dnSjJ4cGMzUnBibWRmWTI5dWRHRnBibVZ5SnlBcElDa3VhSFJ0YkNoY2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDYzhaR2wySUdOc1lYTnpQVndpZDNCaVl5MXpaWFIwYVc1bmN5MXViM1JwWTJVZ2JtOTBhV05sTFhkaGNtNXBibWRjSWlCemRIbHNaVDFjSW5SbGVIUXRZV3hwWjI0NmJHVm1kRndpUGljZ0sxeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJ5WlhOd2IyNXpaVjlrWVhSaElDdGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkQ2M4TDJScGRqNG5YSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDazdYSEpjYmx4MFhIUmNkRngwWEhSY2RISmxkSFZ5Ymp0Y2NseHVYSFJjZEZ4MFhIUmNkSDFjY2x4dVhISmNibHgwWEhSY2RGeDBYSFIzY0dKalgySnZiMnRwYm1kZmJHbHpkR2x1WjE5eVpXeHZZV1JmWW5WMGRHOXVYMTl6Y0dsdVgzQmhkWE5sS0NrN1hISmNibHh5WEc1Y2RGeDBYSFJjZEZ4MGQzQmlZMTloWkcxcGJsOXphRzkzWDIxbGMzTmhaMlVvWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENBZ2NtVnpjRzl1YzJWZlpHRjBZVnNnSjJGcWVGOWhablJsY2w5aFkzUnBiMjVmYldWemMyRm5aU2NnWFM1eVpYQnNZV05sS0NBdlhGeHVMMmNzSUZ3aVBHSnlJQzgrWENJZ0tWeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUXNJQ2dnSnpFbklEMDlJSEpsYzNCdmJuTmxYMlJoZEdGYklDZGhhbmhmWVdaMFpYSmZZV04wYVc5dVgzSmxjM1ZzZENjZ1hTQXBJRDhnSjNOMVkyTmxjM01uSURvZ0oyVnljbTl5SjF4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhRc0lERXdNREF3WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFFwTzF4eVhHNWNjbHh1WEhSY2RGeDBYSFJjZEM4dklGTjFZMk5sYzNNZ2NtVnpjRzl1YzJWY2NseHVYSFJjZEZ4MFhIUmNkR2xtSUNnZ0p6RW5JRDA5SUhKbGMzQnZibk5sWDJSaGRHRmJJQ2RoYW5oZllXWjBaWEpmWVdOMGFXOXVYM0psYzNWc2RDY2dYU0FwZTF4eVhHNWNjbHh1WEhSY2RGeDBYSFJjZEZ4MGRtRnlJR2x6WDNKbGJHOWhaRjloYW1GNFgyeHBjM1JwYm1jZ1BTQjBjblZsTzF4eVhHNWNjbHh1WEhSY2RGeDBYSFJjZEZ4MEx5OGdRV1owWlhJZ1IyOXZaMnhsSUVOaGJHVnVaR0Z5SUdsdGNHOXlkQ0J6YUc5M0lHbHRjRzl5ZEdWa0lHSnZiMnRwYm1keklHRnVaQ0J5Wld4dllXUWdkR2hsSUhCaFoyVWdabTl5SUhSdmIyeGlZWElnY0dGeVlXMWxkR1Z5Y3lCMWNHUmhkR1ZjY2x4dVhIUmNkRngwWEhSY2RGeDBhV1lnS0NCbVlXeHpaU0FoUFQwZ2NtVnpjRzl1YzJWZlpHRjBZVnNnSjJGcWVGOWhablJsY2w5aFkzUnBiMjVmY21WemRXeDBYMkZzYkY5d1lYSmhiWE5mWVhKeUp5QmRXeUFuYm1WM1gyeHBjM1JwYm1kZmNHRnlZVzF6SnlCZElDbDdYSEpjYmx4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEhkd1ltTmZZV3A0WDJKdmIydHBibWRmYzJWdVpGOXpaV0Z5WTJoZmNtVnhkV1Z6ZEY5M2FYUm9YM0JoY21GdGN5Z2djbVZ6Y0c5dWMyVmZaR0YwWVZzZ0oyRnFlRjloWm5SbGNsOWhZM1JwYjI1ZmNtVnpkV3gwWDJGc2JGOXdZWEpoYlhOZllYSnlKeUJkV3lBbmJtVjNYMnhwYzNScGJtZGZjR0Z5WVcxekp5QmRJQ2s3WEhKY2JseHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RIWmhjaUJqYkc5elpXUmZkR2x0WlhJZ1BTQnpaWFJVYVcxbGIzVjBLQ0JtZFc1amRHbHZiaUFvS1h0Y2NseHVYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEdsbUlDZ2dkM0JpWTE5aWIyOXJhVzVuWDJ4cGMzUnBibWRmY21Wc2IyRmtYMkoxZEhSdmJsOWZhWE5mYzNCcGJpZ3BJQ2w3WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBhV1lnS0NCMWJtUmxabWx1WldRZ0lUMGdjbVZ6Y0c5dWMyVmZaR0YwWVZzZ0oyRnFlRjloWm5SbGNsOWhZM1JwYjI1ZmNtVnpkV3gwWDJGc2JGOXdZWEpoYlhOZllYSnlKeUJkV3lBbmJtVjNYMnhwYzNScGJtZGZjR0Z5WVcxekp5QmRXeUFuY21Wc2IyRmtYM1Z5YkY5d1lYSmhiWE1uSUYwZ0tYdGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RHUnZZM1Z0Wlc1MExteHZZMkYwYVc5dUxtaHlaV1lnUFNCeVpYTndiMjV6WlY5a1lYUmhXeUFuWVdwNFgyRm1kR1Z5WDJGamRHbHZibDl5WlhOMWJIUmZZV3hzWDNCaGNtRnRjMTloY25JbklGMWJJQ2R1WlhkZmJHbHpkR2x1WjE5d1lYSmhiWE1uSUYxYklDZHlaV3h2WVdSZmRYSnNYM0JoY21GdGN5Y2dYVHRjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUjlJR1ZzYzJVZ2UxeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFpHOWpkVzFsYm5RdWJHOWpZWFJwYjI0dWNtVnNiMkZrS0NrN1hISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwZlZ4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUjlYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBmVnh5WEc1Y2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEN3Z01qQXdNQ0FwTzF4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEdselgzSmxiRzloWkY5aGFtRjRYMnhwYzNScGJtY2dQU0JtWVd4elpUdGNjbHh1WEhSY2RGeDBYSFJjZEZ4MGZWeHlYRzVjY2x4dVhIUmNkRngwWEhSY2RGeDBMeThnVTNSaGNuUWdaRzkzYm14dllXUWdaWGh3YjNKMFpXUWdRMU5XSUdacGJHVmNjbHh1WEhSY2RGeDBYSFJjZEZ4MGFXWWdLQ0IxYm1SbFptbHVaV1FnSVQwZ2NtVnpjRzl1YzJWZlpHRjBZVnNnSjJGcWVGOWhablJsY2w5aFkzUnBiMjVmY21WemRXeDBYMkZzYkY5d1lYSmhiWE5mWVhKeUp5QmRXeUFuWlhod2IzSjBYMk56ZGw5MWNtd25JRjBnS1h0Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDE5bGVIQnZjblJmWTNOMlgzVnliRjlmWkc5M2JteHZZV1FvSUhKbGMzQnZibk5sWDJSaGRHRmJJQ2RoYW5oZllXWjBaWEpmWVdOMGFXOXVYM0psYzNWc2RGOWhiR3hmY0dGeVlXMXpYMkZ5Y2ljZ1hWc2dKMlY0Y0c5eWRGOWpjM1pmZFhKc0p5QmRJQ2s3WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwYVhOZmNtVnNiMkZrWDJGcVlYaGZiR2x6ZEdsdVp5QTlJR1poYkhObE8xeHlYRzVjZEZ4MFhIUmNkRngwWEhSOVhISmNibHh5WEc1Y2RGeDBYSFJjZEZ4MFhIUnBaaUFvSUdselgzSmxiRzloWkY5aGFtRjRYMnhwYzNScGJtY2dLWHRjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFIzY0dKalgyRnFlRjlpYjI5cmFXNW5YMTloWTNSMVlXeGZiR2x6ZEdsdVoxOWZjMmh2ZHlncE8xeDBMeTljZEZObGJtUnBibWNnUVdwaGVDQlNaWEYxWlhOMFhIUXRYSFIzYVhSb0lIQmhjbUZ0WlhSbGNuTWdkR2hoZENBZ2QyVWdaV0Z5YkhrZ0lHUmxabWx1WldRZ2FXNGdYQ0ozY0dKalgyRnFlRjlpYjI5cmFXNW5YMnhwYzNScGJtZGNJaUJQWW1vdVhISmNibHgwWEhSY2RGeDBYSFJjZEgxY2NseHVYSEpjYmx4MFhIUmNkRngwWEhSOVhISmNibHh5WEc1Y2RGeDBYSFJjZEZ4MEx5OGdVbVZ0YjNabElITndhVzRnYVdOdmJpQm1jbTl0SUNCaWRYUjBiMjRnWVc1a0lFVnVZV0pzWlNCMGFHbHpJR0oxZEhSdmJpNWNjbHh1WEhSY2RGeDBYSFJjZEhkd1ltTmZZblYwZEc5dVgxOXlaVzF2ZG1WZmMzQnBiaWdnY21WemNHOXVjMlZmWkdGMFlWc2dKMkZxZUY5amJHVmhibVZrWDNCaGNtRnRjeWNnWFZzZ0ozVnBYMk5zYVdOclpXUmZaV3hsYldWdWRGOXBaQ2NnWFNBcFhISmNibHh5WEc1Y2RGeDBYSFJjZEZ4MEx5OGdTR2xrWlNCdGIyUmhiSE5jY2x4dVhIUmNkRngwWEhSY2RIZHdZbU5mY0c5d2RYQmZiVzlrWVd4elgxOW9hV1JsS0NrN1hISmNibHh5WEc1Y2RGeDBYSFJjZEZ4MGFsRjFaWEo1S0NBbkkyRnFZWGhmY21WemNHOXVaQ2NnS1M1b2RHMXNLQ0J5WlhOd2IyNXpaVjlrWVhSaElDazdYSFJjZEM4dklFWnZjaUJoWW1sc2FYUjVJSFJ2SUhOb2IzY2djbVZ6Y0c5dWMyVXNJR0ZrWkNCemRXTm9JRVJKVmlCbGJHVnRaVzUwSUhSdklIQmhaMlZjY2x4dVhIUmNkRngwWEhSOVhISmNibHgwWEhSY2RDQWdLUzVtWVdsc0tDQm1kVzVqZEdsdmJpQW9JR3B4V0VoU0xDQjBaWGgwVTNSaGRIVnpMQ0JsY25KdmNsUm9jbTkzYmlBcElIc2dJQ0FnYVdZZ0tDQjNhVzVrYjNjdVkyOXVjMjlzWlNBbUppQjNhVzVrYjNjdVkyOXVjMjlzWlM1c2IyY2dLWHNnWTI5dWMyOXNaUzVzYjJjb0lDZEJhbUY0WDBWeWNtOXlKeXdnYW5GWVNGSXNJSFJsZUhSVGRHRjBkWE1zSUdWeWNtOXlWR2h5YjNkdUlDazdJSDFjY2x4dVhIUmNkRngwWEhSY2RHcFJkV1Z5ZVNnZ0p5TjNhRjl6YjNKMFgzTmxiR1ZqZEc5eUp5QXBMbWhwWkdVb0tUdGNjbHh1WEhSY2RGeDBYSFJjZEhaaGNpQmxjbkp2Y2w5dFpYTnpZV2RsSUQwZ0p6eHpkSEp2Ym1jK0p5QXJJQ2RGY25KdmNpRW5JQ3NnSnp3dmMzUnliMjVuUGlBbklDc2daWEp5YjNKVWFISnZkMjRnTzF4eVhHNWNkRngwWEhSY2RGeDBhV1lnS0NCcWNWaElVaTV5WlhOd2IyNXpaVlJsZUhRZ0tYdGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFpYSnliM0pmYldWemMyRm5aU0FyUFNCcWNWaElVaTV5WlhOd2IyNXpaVlJsZUhRN1hISmNibHgwWEhSY2RGeDBYSFI5WEhKY2JseDBYSFJjZEZ4MFhIUmxjbkp2Y2w5dFpYTnpZV2RsSUQwZ1pYSnliM0pmYldWemMyRm5aUzV5WlhCc1lXTmxLQ0F2WEZ4dUwyY3NJRndpUEdKeUlDOCtYQ0lnS1R0Y2NseHVYSEpjYmx4MFhIUmNkRngwWEhSM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDNOb2IzZGZiV1Z6YzJGblpTZ2daWEp5YjNKZmJXVnpjMkZuWlNBcE8xeHlYRzVjZEZ4MFhIUWdJSDBwWEhKY2JseDBJQ0FnSUNBZ0lDQWdJQzh2SUM1a2IyNWxLQ0FnSUdaMWJtTjBhVzl1SUNnZ1pHRjBZU3dnZEdWNGRGTjBZWFIxY3l3Z2FuRllTRklnS1NCN0lDQWdhV1lnS0NCM2FXNWtiM2N1WTI5dWMyOXNaU0FtSmlCM2FXNWtiM2N1WTI5dWMyOXNaUzVzYjJjZ0tYc2dZMjl1YzI5c1pTNXNiMmNvSUNkelpXTnZibVFnYzNWalkyVnpjeWNzSUdSaGRHRXNJSFJsZUhSVGRHRjBkWE1zSUdweFdFaFNJQ2s3SUgwZ0lDQWdmU2xjY2x4dVhIUmNkRngwSUNBdkx5QXVZV3gzWVhsektDQm1kVzVqZEdsdmJpQW9JR1JoZEdGZmFuRllTRklzSUhSbGVIUlRkR0YwZFhNc0lHcHhXRWhTWDJWeWNtOXlWR2h5YjNkdUlDa2dleUFnSUdsbUlDZ2dkMmx1Wkc5M0xtTnZibk52YkdVZ0ppWWdkMmx1Wkc5M0xtTnZibk52YkdVdWJHOW5JQ2w3SUdOdmJuTnZiR1V1Ykc5bktDQW5ZV3gzWVhseklHWnBibWx6YUdWa0p5d2daR0YwWVY5cWNWaElVaXdnZEdWNGRGTjBZWFIxY3l3Z2FuRllTRkpmWlhKeWIzSlVhSEp2ZDI0Z0tUc2dmU0FnSUNBZ2ZTbGNjbHh1WEhSY2RGeDBJQ0E3SUNBdkx5QkZibVFnUVdwaGVGeHlYRzU5WEhKY2JseHlYRzVjY2x4dUx5b3FYSEpjYmlBcUlDQWdVM1Z3Y0c5eWRDQkdkVzVqZEdsdmJuTWdMU0JUY0dsdUlFbGpiMjRnYVc0Z1FuVjBkRzl1Y3lBZ0xTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRJQ292WEhKY2JseHlYRzR2S2lwY2NseHVJQ29nVW1WdGIzWmxJSE53YVc0Z2FXTnZiaUJtY205dElDQmlkWFIwYjI0Z1lXNWtJRVZ1WVdKc1pTQjBhR2x6SUdKMWRIUnZiaTVjY2x4dUlDcGNjbHh1SUNvZ1FIQmhjbUZ0SUdKMWRIUnZibDlqYkdsamEyVmtYMlZzWlcxbGJuUmZhV1JjZEZ4MExTQklWRTFNSUVsRUlHRjBkSEpwWW5WMFpTQnZaaUIwYUdseklHSjFkSFJ2Ymx4eVhHNGdLaUJBY21WMGRYSnVJSE4wY21sdVoxeDBYSFJjZEZ4MFhIUmNkQzBnUTFOVElHTnNZWE56WlhNZ2RHaGhkQ0IzWVhNZ2NISmxkbWx2ZFhOc2VTQnBiaUJpZFhSMGIyNGdhV052Ymx4eVhHNGdLaTljY2x4dVpuVnVZM1JwYjI0Z2QzQmlZMTlpZFhSMGIyNWZYM0psYlc5MlpWOXpjR2x1S0NCaWRYUjBiMjVmWTJ4cFkydGxaRjlsYkdWdFpXNTBYMmxrSUNsN1hISmNibHh5WEc1Y2RIWmhjaUJ3Y21WMmFXOXpYMk5zWVhOelpYTWdQU0FuSnp0Y2NseHVYSFJwWmlBb0lIVnVaR1ZtYVc1bFpDQWhQU0JpZFhSMGIyNWZZMnhwWTJ0bFpGOWxiR1Z0Wlc1MFgybGtJQ2w3WEhKY2JseDBYSFIyWVhJZ2FrVnNaVzFsYm5RZ1BTQnFVWFZsY25rb0lDY2pKeUFySUdKMWRIUnZibDlqYkdsamEyVmtYMlZzWlcxbGJuUmZhV1FnS1R0Y2NseHVYSFJjZEdsbUlDZ2dha1ZzWlcxbGJuUXViR1Z1WjNSb0lDbDdYSEpjYmx4MFhIUmNkSEJ5WlhacGIzTmZZMnhoYzNObGN5QTlJSGR3WW1OZlluVjBkRzl1WDJScGMyRmliR1ZmYkc5aFpHbHVaMTlwWTI5dUtDQnFSV3hsYldWdWRDNW5aWFFvSURBZ0tTQXBPMXh5WEc1Y2RGeDBmVnh5WEc1Y2RIMWNjbHh1WEhKY2JseDBjbVYwZFhKdUlIQnlaWFpwYjNOZlkyeGhjM05sY3p0Y2NseHVmVnh5WEc1Y2NseHVYSEpjYmx4MEx5b3FYSEpjYmx4MElDb2dVMmh2ZHlCTWIyRmthVzVuSUNoeWIzUmhkR2x1WnlCaGNuSnZkeWtnYVdOdmJpQm1iM0lnWW5WMGRHOXVJSFJvWVhRZ2FHRnpJR0psWlc0Z1kyeHBZMnRsWkZ4eVhHNWNkQ0FxWEhKY2JseDBJQ29nUUhCaGNtRnRJSFJvYVhOZlluVjBkRzl1WEhSY2RDMGdkR2hwY3lCdlltcGxZM1FnYjJZZ2MzQmxZMmxtYVdNZ1luVjBkRzl1WEhKY2JseDBJQ29nUUhKbGRIVnliaUJ6ZEhKcGJtZGNkRngwWEhRdElFTlRVeUJqYkdGemMyVnpJSFJvWVhRZ2QyRnpJSEJ5WlhacGIzVnpiSGtnYVc0Z1luVjBkRzl1SUdsamIyNWNjbHh1WEhRZ0tpOWNjbHh1WEhSbWRXNWpkR2x2YmlCM2NHSmpYMkoxZEhSdmJsOWxibUZpYkdWZmJHOWhaR2x1WjE5cFkyOXVLQ0IwYUdselgySjFkSFJ2YmlBcGUxeHlYRzVjY2x4dVhIUmNkSFpoY2lCcVFuVjBkRzl1SUQwZ2FsRjFaWEo1S0NCMGFHbHpYMkoxZEhSdmJpQXBPMXh5WEc1Y2RGeDBkbUZ5SUdwSlkyOXVJRDBnYWtKMWRIUnZiaTVtYVc1a0tDQW5hU2NnS1R0Y2NseHVYSFJjZEhaaGNpQndjbVYyYVc5elgyTnNZWE56WlhNZ1BTQnFTV052Ymk1aGRIUnlLQ0FuWTJ4aGMzTW5JQ2s3WEhKY2JseHlYRzVjZEZ4MGFrbGpiMjR1Y21WdGIzWmxRMnhoYzNNb0tTNWhaR1JEYkdGemN5Z2dKMjFsYm5WZmFXTnZiaUJwWTI5dUxURjRJSGR3WW1OZmFXTnVYM0p2ZEdGMFpWOXlhV2RvZENCM2NHSmpYM053YVc0bklDazdYSFF2THlCVFpYUWdVbTkwWVhSbElHbGpiMjVjY2x4dVhIUmNkQzh2YWtsamIyNHVZV1JrUTJ4aGMzTW9JQ2QzY0dKalgyRnVhVzFoZEdsdmJsOXdZWFZ6WlNjZ0tUdGNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhRdkx5QlFZWFZ6WlNCaGJtbHRZWFJwYjI1Y2NseHVYSFJjZEM4dmFrbGpiMjR1WVdSa1EyeGhjM01vSUNkM2NHSmpYM1ZwWDNKbFpDY2dLVHRjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwTHk4Z1UyVjBJR2xqYjI0Z1kyOXNiM0lnY21Wa1hISmNibHh5WEc1Y2RGeDBha2xqYjI0dVlYUjBjaWdnSjNkd1ltTmZjSEpsZG1sdmRYTmZZMnhoYzNNbkxDQndjbVYyYVc5elgyTnNZWE56WlhNZ0tWeHlYRzVjY2x4dVhIUmNkR3BDZFhSMGIyNHVZV1JrUTJ4aGMzTW9JQ2RrYVhOaFlteGxaQ2NnS1R0Y2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUXZMeUJFYVhOaFlteGxJR0oxZEhSdmJseHlYRzVjZEZ4MEx5OXFRblYwZEc5dUxuQnliM0FvSUZ3aVpHbHpZV0pzWldSY0lpd2dkSEoxWlNBcE8xeHlYRzVjZEZ4MEx5OGdWMlVnYm1WbFpDQjBieUFnYzJWMElDQm9aWEpsSUdGMGRISWdhVzV6ZEdWaFpDQnZaaUJ3Y205d0xDQmlaV05oZFhObElHWnZjaUJCSUdWc1pXMWxiblJ6TENBZ1lYUjBjbWxpZFhSbElDZGthWE5oWW14bFpDY2daRzhnSUc1dmRDQmhaR1JsWkNCM2FYUm9JR3BDZFhSMGIyNHVjSEp2Y0NnZ1hDSmthWE5oWW14bFpGd2lMQ0IwY25WbElDazdYSEpjYmx4eVhHNWNkRngwYWtKMWRIUnZiaTVoZEhSeUtDQW5kM0JpWTE5d2NtVjJhVzkxYzE5dmJtTnNhV05ySnl3Z2FrSjFkSFJ2Ymk1aGRIUnlLQ0FuYjI1amJHbGpheWNnS1NBcE8xeDBYSFF2TDFOaGRtVWdkR2hwY3lCMllXeDFaVnh5WEc1Y2RGeDBha0oxZEhSdmJpNWhkSFJ5S0NBbmIyNWpiR2xqYXljc0lDY25JQ2s3WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDOHZJRVJwYzJGaWJHVWdZV04wYVc5dWN5QmNJbTl1SUdOc2FXTnJYQ0pjY2x4dVhISmNibHgwWEhSeVpYUjFjbTRnY0hKbGRtbHZjMTlqYkdGemMyVnpPMXh5WEc1Y2RIMWNjbHh1WEhKY2JseHlYRzVjZEM4cUtseHlYRzVjZENBcUlFaHBaR1VnVEc5aFpHbHVaeUFvY205MFlYUnBibWNnWVhKeWIzY3BJR2xqYjI0Z1ptOXlJR0oxZEhSdmJpQjBhR0YwSUhkaGN5QmpiR2xqYTJWa0lHRnVaQ0J6YUc5M0lIQnlaWFpwYjNWeklHbGpiMjRnWVc1a0lHVnVZV0pzWlNCaWRYUjBiMjVjY2x4dVhIUWdLbHh5WEc1Y2RDQXFJRUJ3WVhKaGJTQjBhR2x6WDJKMWRIUnZibHgwWEhRdElIUm9hWE1nYjJKcVpXTjBJRzltSUhOd1pXTnBabWxqSUdKMWRIUnZibHh5WEc1Y2RDQXFJRUJ5WlhSMWNtNGdjM1J5YVc1blhIUmNkRngwTFNCRFUxTWdZMnhoYzNObGN5QjBhR0YwSUhkaGN5QndjbVYyYVc5MWMyeDVJR2x1SUdKMWRIUnZiaUJwWTI5dVhISmNibHgwSUNvdlhISmNibHgwWm5WdVkzUnBiMjRnZDNCaVkxOWlkWFIwYjI1ZlpHbHpZV0pzWlY5c2IyRmthVzVuWDJsamIyNG9JSFJvYVhOZlluVjBkRzl1SUNsN1hISmNibHh5WEc1Y2RGeDBkbUZ5SUdwQ2RYUjBiMjRnUFNCcVVYVmxjbmtvSUhSb2FYTmZZblYwZEc5dUlDazdYSEpjYmx4MFhIUjJZWElnYWtsamIyNGdQU0JxUW5WMGRHOXVMbVpwYm1Rb0lDZHBKeUFwTzF4eVhHNWNjbHh1WEhSY2RIWmhjaUJ3Y21WMmFXOXpYMk5zWVhOelpYTWdQU0JxU1dOdmJpNWhkSFJ5S0NBbmQzQmlZMTl3Y21WMmFXOTFjMTlqYkdGemN5Y2dLVHRjY2x4dVhIUmNkR2xtSUNnZ0p5Y2dJVDBnY0hKbGRtbHZjMTlqYkdGemMyVnpJQ2w3WEhKY2JseDBYSFJjZEdwSlkyOXVMbkpsYlc5MlpVTnNZWE56S0NrdVlXUmtRMnhoYzNNb0lIQnlaWFpwYjNOZlkyeGhjM05sY3lBcE8xeHlYRzVjZEZ4MGZWeHlYRzVjY2x4dVhIUmNkR3BDZFhSMGIyNHVjbVZ0YjNabFEyeGhjM01vSUNka2FYTmhZbXhsWkNjZ0tUdGNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFF2THlCU1pXMXZkbVVnUkdsellXSnNaU0JpZFhSMGIyNWNjbHh1WEhKY2JseDBYSFIyWVhJZ2NISmxkbWx2ZFhOZmIyNWpiR2xqYXlBOUlHcENkWFIwYjI0dVlYUjBjaWdnSjNkd1ltTmZjSEpsZG1sdmRYTmZiMjVqYkdsamF5Y2dLVnh5WEc1Y2RGeDBhV1lnS0NBbkp5QWhQU0J3Y21WMmFXOTFjMTl2Ym1Oc2FXTnJJQ2w3WEhKY2JseDBYSFJjZEdwQ2RYUjBiMjR1WVhSMGNpZ2dKMjl1WTJ4cFkyc25MQ0J3Y21WMmFXOTFjMTl2Ym1Oc2FXTnJJQ2s3WEhKY2JseDBYSFI5WEhKY2JseHlYRzVjZEZ4MGNtVjBkWEp1SUhCeVpYWnBiM05mWTJ4aGMzTmxjenRjY2x4dVhIUjlYSEpjYmx4eVhHNWNjbHh1THlvcVhISmNiaUFxSUVocFpHVWdZV3hzSUc5d1pXNGdiVzlrWVd3Z2NHOXdkWEJ6SUhkcGJtUnZkM05jY2x4dUlDb3ZYSEpjYm1aMWJtTjBhVzl1SUhkd1ltTmZjRzl3ZFhCZmJXOWtZV3h6WDE5b2FXUmxLQ2w3WEhKY2JseHlYRzVjZEM4dklFaHBaR1VnYlc5a1lXeHpYSEpjYmx4MGFXWWdLQ0FuWm5WdVkzUnBiMjRuSUQwOVBTQjBlWEJsYjJZZ0tHcFJkV1Z5ZVNnZ0p5NTNjR0pqWDNCdmNIVndYMjF2WkdGc0p5QXBMbmR3WW1OZmJYbGZiVzlrWVd3cElDbDdYSEpjYmx4MFhIUnFVWFZsY25rb0lDY3VkM0JpWTE5d2IzQjFjRjl0YjJSaGJDY2dLUzUzY0dKalgyMTVYMjF2WkdGc0tDQW5hR2xrWlNjZ0tUdGNjbHh1WEhSOVhISmNibjFjY2x4dVhISmNibHh5WEc0dktpcGNjbHh1SUNvZ0lDQkVZWFJsY3lBZ1UyaHZjblFnUEMwK0lGZHBaR1VnSUNBZ0xTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMGdLaTljY2x4dVhISmNibVoxYm1OMGFXOXVJSGR3WW1OZllXcDRYMk5zYVdOclgyOXVYMlJoZEdWelgzTm9iM0owS0NsN1hISmNibHgwYWxGMVpYSjVLQ0FuSTJKdmIydHBibWRmWkdGMFpYTmZjMjFoYkd3c0xtSnZiMnRwYm1kZlpHRjBaWE5mWm5Wc2JDY2dLUzVvYVdSbEtDazdYSEpjYmx4MGFsRjFaWEo1S0NBbkkySnZiMnRwYm1kZlpHRjBaWE5mWm5Wc2JDd3VZbTl2YTJsdVoxOWtZWFJsYzE5emJXRnNiQ2NnS1M1emFHOTNLQ2s3WEhKY2JseDBkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOXpaVzVrWDNObFlYSmphRjl5WlhGMVpYTjBYM2RwZEdoZmNHRnlZVzF6S0NCN0ozVnBYM1Z6Y2w5ZlpHRjBaWE5mYzJodmNuUmZkMmxrWlNjNklDZHphRzl5ZENkOUlDazdYSEpjYm4xY2NseHVYSEpjYm1aMWJtTjBhVzl1SUhkd1ltTmZZV3A0WDJOc2FXTnJYMjl1WDJSaGRHVnpYM2RwWkdVb0tYdGNjbHh1WEhScVVYVmxjbmtvSUNjalltOXZhMmx1WjE5a1lYUmxjMTltZFd4c0xDNWliMjlyYVc1blgyUmhkR1Z6WDNOdFlXeHNKeUFwTG1ocFpHVW9LVHRjY2x4dVhIUnFVWFZsY25rb0lDY2pZbTl2YTJsdVoxOWtZWFJsYzE5emJXRnNiQ3d1WW05dmEybHVaMTlrWVhSbGMxOW1kV3hzSnlBcExuTm9iM2NvS1R0Y2NseHVYSFIzY0dKalgyRnFlRjlpYjI5cmFXNW5YM05sYm1SZmMyVmhjbU5vWDNKbGNYVmxjM1JmZDJsMGFGOXdZWEpoYlhNb0lIc25kV2xmZFhOeVgxOWtZWFJsYzE5emFHOXlkRjkzYVdSbEp6b2dKM2RwWkdVbmZTQXBPMXh5WEc1OVhISmNibHh5WEc1bWRXNWpkR2x2YmlCM2NHSmpYMkZxZUY5amJHbGphMTl2Ymw5a1lYUmxjMTkwYjJkbmJHVW9kR2hwYzE5a1lYUmxLWHRjY2x4dVhISmNibHgwYWxGMVpYSjVLQ0IwYUdselgyUmhkR1VnS1M1d1lYSmxiblJ6S0NBbkxuZHdZbU5mWTI5c1gyUmhkR1Z6SnlBcExtWnBibVFvSUNjdVltOXZhMmx1WjE5a1lYUmxjMTl6YldGc2JDY2dLUzUwYjJkbmJHVW9LVHRjY2x4dVhIUnFVWFZsY25rb0lIUm9hWE5mWkdGMFpTQXBMbkJoY21WdWRITW9JQ2N1ZDNCaVkxOWpiMnhmWkdGMFpYTW5JQ2t1Wm1sdVpDZ2dKeTVpYjI5cmFXNW5YMlJoZEdWelgyWjFiR3duSUNrdWRHOW5aMnhsS0NrN1hISmNibHh5WEc1Y2RDOHFYSEpjYmx4MGRtRnlJSFpwYzJsaWJHVmZjMlZqZEdsdmJpQTlJR3BSZFdWeWVTZ2dkR2hwYzE5a1lYUmxJQ2t1Y0dGeVpXNTBjeWdnSnk1aWIyOXJhVzVuWDJSaGRHVnpYMlY0Y0dGdVpGOXpaV04wYVc5dUp5QXBPMXh5WEc1Y2RIWnBjMmxpYkdWZmMyVmpkR2x2Ymk1b2FXUmxLQ2s3WEhKY2JseDBhV1lnS0NCMmFYTnBZbXhsWDNObFkzUnBiMjR1YUdGelEyeGhjM01vSUNkaWIyOXJhVzVuWDJSaGRHVnpYMloxYkd3bklDa2dLWHRjY2x4dVhIUmNkSFpwYzJsaWJHVmZjMlZqZEdsdmJpNXdZWEpsYm5SektDQW5MbmR3WW1OZlkyOXNYMlJoZEdWekp5QXBMbVpwYm1Rb0lDY3VZbTl2YTJsdVoxOWtZWFJsYzE5emJXRnNiQ2NnS1M1emFHOTNLQ2s3WEhKY2JseDBmU0JsYkhObElIdGNjbHh1WEhSY2RIWnBjMmxpYkdWZmMyVmpkR2x2Ymk1d1lYSmxiblJ6S0NBbkxuZHdZbU5mWTI5c1gyUmhkR1Z6SnlBcExtWnBibVFvSUNjdVltOXZhMmx1WjE5a1lYUmxjMTltZFd4c0p5QXBMbk5vYjNjb0tUdGNjbHh1WEhSOUtpOWNjbHh1WEhSamIyNXpiMnhsTG14dlp5Z2dKM2R3WW1OZllXcDRYMk5zYVdOclgyOXVYMlJoZEdWelgzUnZaMmRzWlNjc0lIUm9hWE5mWkdGMFpTQXBPMXh5WEc1OVhISmNibHh5WEc0dktpcGNjbHh1SUNvZ0lDQk1iMk5oYkdVZ0lDQXRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMGdLaTljY2x4dVhISmNiaThxS2x4eVhHNGdLaUJjZEZObGJHVmpkQ0J2Y0hScGIyNXpJR2x1SUhObGJHVmpkQ0JpYjNobGN5QmlZWE5sWkNCdmJpQmhkSFJ5YVdKMWRHVWdYQ0oyWVd4MVpWOXZabDl6Wld4bFkzUmxaRjl2Y0hScGIyNWNJaUJoYm1RZ1VrVkVJR052Ykc5eUlHRnVaQ0JvYVc1MElHWnZjaUJNVDBOQlRFVWdZblYwZEc5dUlDQWdMUzBnSUVsMEozTWdZMkZzYkdWa0lHWnliMjBnWEhSM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDJSbFptbHVaVjkxYVY5b2IyOXJjeWdwSUNCY2RHVmhZMmdnSUhScGJXVWdZV1owWlhJZ1RHbHpkR2x1WnlCc2IyRmthVzVuTGx4eVhHNGdLaTljY2x4dVpuVnVZM1JwYjI0Z2QzQmlZMTloYW5oZlltOXZhMmx1WjE5ZmRXbGZaR1ZtYVc1bFgxOXNiMk5oYkdVb0tYdGNjbHh1WEhKY2JseDBhbEYxWlhKNUtDQW5MbmR3WW1OZmJHbHpkR2x1WjE5amIyNTBZV2x1WlhJZ2MyVnNaV04wSnlBcExtVmhZMmdvSUdaMWJtTjBhVzl1SUNnZ2FXNWtaWGdnS1h0Y2NseHVYSEpjYmx4MFhIUjJZWElnYzJWc1pXTjBhVzl1SUQwZ2FsRjFaWEo1S0NCMGFHbHpJQ2t1WVhSMGNpZ2dYQ0oyWVd4MVpWOXZabDl6Wld4bFkzUmxaRjl2Y0hScGIyNWNJaUFwTzF4MFhIUmNkQzh2SUVSbFptbHVaU0J6Wld4bFkzUmxaQ0J6Wld4bFkzUWdZbTk0WlhOY2NseHVYSEpjYmx4MFhIUnBaaUFvSUhWdVpHVm1hVzVsWkNBaFBUMGdjMlZzWldOMGFXOXVJQ2w3WEhKY2JseDBYSFJjZEdwUmRXVnllU2dnZEdocGN5QXBMbVpwYm1Rb0lDZHZjSFJwYjI1YmRtRnNkV1U5WENJbklDc2djMlZzWldOMGFXOXVJQ3NnSjF3aVhTY2dLUzV3Y205d0tDQW5jMlZzWldOMFpXUW5MQ0IwY25WbElDazdYSEpjYmx4eVhHNWNkRngwWEhScFppQW9JQ2duSnlBaFBTQnpaV3hsWTNScGIyNHBJQ1ltSUNocVVYVmxjbmtvSUhSb2FYTWdLUzVvWVhORGJHRnpjeWdnSjNObGRGOWliMjlyYVc1blgyeHZZMkZzWlY5elpXeGxZM1JpYjNnbklDa3BJQ2w3WEhSY2RGeDBYSFJjZEZ4MFhIUmNkQzh2SUV4dlkyRnNaVnh5WEc1Y2NseHVYSFJjZEZ4MFhIUjJZWElnWW05dmEybHVaMTlzYjJOaGJHVmZZblYwZEc5dUlEMGdhbEYxWlhKNUtDQjBhR2x6SUNrdWNHRnlaVzUwY3lnZ0p5NTFhVjlsYkdWdFpXNTBYMnh2WTJGc1pTY2dLUzVtYVc1a0tDQW5Mbk5sZEY5aWIyOXJhVzVuWDJ4dlkyRnNaVjlpZFhSMGIyNG5JQ2xjY2x4dVhISmNibHgwWEhSY2RGeDBMeTlpYjI5cmFXNW5YMnh2WTJGc1pWOWlkWFIwYjI0dVkzTnpLQ0FuWTI5c2IzSW5MQ0FuSTJSaU5EZ3dNQ2NnS1R0Y2RGeDBMeThnVTJWMElHSjFkSFJ2YmlBZ2NtVmtYSEpjYmx4MFhIUmNkRngwWW05dmEybHVaMTlzYjJOaGJHVmZZblYwZEc5dUxtRmtaRU5zWVhOektDQW5kM0JpWTE5MWFWOXlaV1FuSUNrN1hIUmNkQzh2SUZObGRDQmlkWFIwYjI0Z0lISmxaRnh5WEc1Y2RGeDBYSFJjZENCcFppQW9JQ2RtZFc1amRHbHZiaWNnUFQwOUlIUjVjR1Z2WmlnZ2QzQmlZMTkwYVhCd2VTQXBJQ2w3WEhKY2JseDBYSFJjZEZ4MFhIUmliMjlyYVc1blgyeHZZMkZzWlY5aWRYUjBiMjR1WjJWMEtEQXBMbDkwYVhCd2VTNXpaWFJEYjI1MFpXNTBLQ0J6Wld4bFkzUnBiMjRnS1R0Y2NseHVYSFJjZEZ4MFhIUWdmVnh5WEc1Y2RGeDBYSFI5WEhKY2JseDBYSFI5WEhKY2JseDBmU0FwTzF4eVhHNTlYSEpjYmx4eVhHNHZLaXBjY2x4dUlDb2dJQ0JTWlcxaGNtc2dJQ0F0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBnS2k5Y2NseHVYSEpjYmk4cUtseHlYRzRnS2lCRVpXWnBibVVnWTI5dWRHVnVkQ0J2WmlCeVpXMWhjbXNnWENKaWIyOXJhVzVuSUc1dmRHVmNJaUJpZFhSMGIyNGdZVzVrSUhSbGVIUmhjbVZoTGlBZ0xTMGdTWFFuY3lCallXeHNaV1FnWm5KdmJTQmNkSGR3WW1OZllXcDRYMkp2YjJ0cGJtZGZaR1ZtYVc1bFgzVnBYMmh2YjJ0ektDa2dJRngwWldGamFDQWdkR2x0WlNCaFpuUmxjaUJNYVhOMGFXNW5JR3h2WVdScGJtY3VYSEpjYmlBcUwxeHlYRzVtZFc1amRHbHZiaUIzY0dKalgyRnFlRjlpYjI5cmFXNW5YMTkxYVY5a1pXWnBibVZmWDNKbGJXRnlheWdwZTF4eVhHNWNjbHh1WEhScVVYVmxjbmtvSUNjdWQzQmlZMTlzYVhOMGFXNW5YMk52Ym5SaGFXNWxjaUF1ZFdsZmNtVnRZWEpyWDNObFkzUnBiMjRnZEdWNGRHRnlaV0VuSUNrdVpXRmphQ2dnWm5WdVkzUnBiMjRnS0NCcGJtUmxlQ0FwZTF4eVhHNWNkRngwZG1GeUlIUmxlSFJmZG1Gc0lEMGdhbEYxWlhKNUtDQjBhR2x6SUNrdWRtRnNLQ2s3WEhKY2JseDBYSFJwWmlBb0lDaDFibVJsWm1sdVpXUWdJVDA5SUhSbGVIUmZkbUZzS1NBbUppQW9KeWNnSVQwZ2RHVjRkRjkyWVd3cElDbDdYSEpjYmx4eVhHNWNkRngwWEhSMllYSWdjbVZ0WVhKclgySjFkSFJ2YmlBOUlHcFJkV1Z5ZVNnZ2RHaHBjeUFwTG5CaGNtVnVkSE1vSUNjdWRXbGZaM0p2ZFhBbklDa3VabWx1WkNnZ0p5NXpaWFJmWW05dmEybHVaMTl1YjNSbFgySjFkSFJ2YmljZ0tUdGNjbHh1WEhKY2JseDBYSFJjZEdsbUlDZ2djbVZ0WVhKclgySjFkSFJ2Ymk1c1pXNW5kR2dnUGlBd0lDbDdYSEpjYmx4eVhHNWNkRngwWEhSY2RISmxiV0Z5YTE5aWRYUjBiMjR1WVdSa1EyeGhjM01vSUNkM2NHSmpYM1ZwWDNKbFpDY2dLVHRjZEZ4MEx5OGdVMlYwSUdKMWRIUnZiaUFnY21Wa1hISmNibHgwWEhSY2RGeDBhV1lnS0NBblpuVnVZM1JwYjI0bklEMDlQU0IwZVhCbGIyWWdLSGR3WW1OZmRHbHdjSGtwSUNsN1hISmNibHgwWEhSY2RGeDBYSFF2TDNKbGJXRnlhMTlpZFhSMGIyNHVaMlYwS0NBd0lDa3VYM1JwY0hCNUxtRnNiRzkzU0ZSTlRDQTlJSFJ5ZFdVN1hISmNibHgwWEhSY2RGeDBYSFF2TDNKbGJXRnlhMTlpZFhSMGIyNHVaMlYwS0NBd0lDa3VYM1JwY0hCNUxuTmxkRU52Ym5SbGJuUW9JSFJsZUhSZmRtRnNMbkpsY0d4aFkyVW9MMXRjWEc1Y1hISmRMMmNzSUNjOFluSStKeWtnS1R0Y2NseHVYSEpjYmx4MFhIUmNkRngwWEhSeVpXMWhjbXRmWW5WMGRHOXVMbWRsZENnZ01DQXBMbDkwYVhCd2VTNXpaWFJRY205d2N5Z2dlMXh5WEc1Y2RGeDBYSFJjZEZ4MFhIUmhiR3h2ZDBoVVRVdzZJSFJ5ZFdVc1hISmNibHgwWEhSY2RGeDBYSFJjZEdOdmJuUmxiblFnSURvZ2RHVjRkRjkyWVd3dWNtVndiR0ZqWlNnZ0wxdGNYRzVjWEhKZEwyY3NJQ2M4WW5JK0p5QXBYSEpjYmx4MFhIUmNkRngwWEhSOUlDazdYSEpjYmx4MFhIUmNkRngwZlZ4eVhHNWNkRngwWEhSOVhISmNibHgwWEhSOVhISmNibHgwZlNBcE8xeHlYRzU5WEhKY2JseHlYRzR2S2lwY2NseHVJQ29nUVdOMGFXOXVjeUFzZDJobGJpQjNaU0JqYkdsamF5QnZiaUJjSWxKbGJXRnlhMXdpSUdKMWRIUnZiaTVjY2x4dUlDcGNjbHh1SUNvZ1FIQmhjbUZ0SUdweFgySjFkSFJ2YmlBZ0xWeDBkR2hwY3lCcVVYVmxjbmtnWW5WMGRHOXVJQ0J2WW1wbFkzUmNjbHh1SUNvdlhISmNibVoxYm1OMGFXOXVJSGR3WW1OZllXcDRYMkp2YjJ0cGJtZGZYM1ZwWDJOc2FXTnJYMTl5WlcxaGNtc29JR3B4WDJKMWRIUnZiaUFwZTF4eVhHNWNjbHh1WEhScWNWOWlkWFIwYjI0dWNHRnlaVzUwY3lnbkxuVnBYMmR5YjNWd0p5a3VabWx1WkNnbkxuVnBYM0psYldGeWExOXpaV04wYVc5dUp5a3VkRzluWjJ4bEtDazdYSEpjYm4xY2NseHVYSEpjYmx4eVhHNHZLaXBjY2x4dUlDb2dJQ0JEYUdGdVoyVWdZbTl2YTJsdVp5QnlaWE52ZFhKalpTQWdJQzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBnS2k5Y2NseHVYSEpjYm1aMWJtTjBhVzl1SUhkd1ltTmZZV3A0WDJKdmIydHBibWRmWDNWcFgyTnNhV05yWDNOb2IzZGZYMk5vWVc1blpWOXlaWE52ZFhKalpTZ2dZbTl2YTJsdVoxOXBaQ3dnY21WemIzVnlZMlZmYVdRZ0tYdGNjbHh1WEhKY2JseDBMeThnUkdWbWFXNWxJRWxFSUc5bUlHSnZiMnRwYm1jZ2RHOGdhR2xrWkdWdUlHbHVjSFYwWEhKY2JseDBhbEYxWlhKNUtDQW5JMk5vWVc1blpWOWliMjlyYVc1blgzSmxjMjkxY21ObFgxOWliMjlyYVc1blgybGtKeUFwTG5aaGJDZ2dZbTl2YTJsdVoxOXBaQ0FwTzF4eVhHNWNjbHh1WEhRdkx5QlRaV3hsWTNRZ1ltOXZhMmx1WnlCeVpYTnZkWEpqWlNBZ2RHaGhkQ0JpWld4dmJtY2dkRzhnSUdKdmIydHBibWRjY2x4dVhIUnFVWFZsY25rb0lDY2pZMmhoYm1kbFgySnZiMnRwYm1kZmNtVnpiM1Z5WTJWZlgzSmxjMjkxY21ObFgzTmxiR1ZqZENjZ0tTNTJZV3dvSUhKbGMyOTFjbU5sWDJsa0lDa3VkSEpwWjJkbGNpZ2dKMk5vWVc1blpTY2dLVHRjY2x4dVhIUjJZWElnWTJKeU8xeHlYRzVjY2x4dVhIUXZMeUJIWlhRZ1VtVnpiM1Z5WTJVZ2MyVmpkR2x2Ymx4eVhHNWNkR05pY2lBOUlHcFJkV1Z5ZVNnZ1hDSWpZMmhoYm1kbFgySnZiMnRwYm1kZmNtVnpiM1Z5WTJWZlgzTmxZM1JwYjI1Y0lpQXBMbVJsZEdGamFDZ3BPMXh5WEc1Y2NseHVYSFF2THlCQmNIQmxibVFnYVhRZ2RHOGdZbTl2YTJsdVp5QlNUMWRjY2x4dVhIUmpZbkl1WVhCd1pXNWtWRzhvSUdwUmRXVnllU2dnWENJamRXbGZYMk5vWVc1blpWOWliMjlyYVc1blgzSmxjMjkxY21ObFgxOXpaV04wYVc5dVgybHVYMkp2YjJ0cGJtZGZYQ0lnS3lCaWIyOXJhVzVuWDJsa0lDa2dLVHRjY2x4dVhIUmpZbklnUFNCdWRXeHNPMXh5WEc1Y2NseHVYSFF2THlCSWFXUmxJSE5sWTNScGIyNXpJRzltSUZ3aVEyaGhibWRsSUdKdmIydHBibWNnY21WemIzVnlZMlZjSWlCcGJpQmhiR3dnYjNSb1pYSWdZbTl2YTJsdVozTWdVazlYYzF4eVhHNWNkQzh2YWxGMVpYSjVLQ0JjSWk1MWFWOWZZMmhoYm1kbFgySnZiMnRwYm1kZmNtVnpiM1Z5WTJWZlgzTmxZM1JwYjI1ZmFXNWZZbTl2YTJsdVoxd2lJQ2t1YUdsa1pTZ3BPMXh5WEc1Y2RHbG1JQ2dnSVNCcVVYVmxjbmtvSUZ3aUkzVnBYMTlqYUdGdVoyVmZZbTl2YTJsdVoxOXlaWE52ZFhKalpWOWZjMlZqZEdsdmJsOXBibDlpYjI5cmFXNW5YMXdpSUNzZ1ltOXZhMmx1WjE5cFpDQXBMbWx6S0NjNmRtbHphV0pzWlNjcElDbDdYSEpjYmx4MFhIUnFVWFZsY25rb0lGd2lMblZwWDE5MWJtUmxjbDloWTNScGIyNXpYM0p2ZDE5ZmMyVmpkR2x2Ymw5cGJsOWliMjlyYVc1blhDSWdLUzVvYVdSbEtDazdYSEpjYmx4MGZWeHlYRzVjY2x4dVhIUXZMeUJUYUc5M0lHOXViSGtnWENKamFHRnVaMlVnWW05dmEybHVaeUJ5WlhOdmRYSmpaVndpSUhObFkzUnBiMjRnSUdadmNpQmpkWEp5Wlc1MElHSnZiMnRwYm1kY2NseHVYSFJxVVhWbGNua29JRndpSTNWcFgxOWphR0Z1WjJWZlltOXZhMmx1WjE5eVpYTnZkWEpqWlY5ZmMyVmpkR2x2Ymw5cGJsOWliMjlyYVc1blgxd2lJQ3NnWW05dmEybHVaMTlwWkNBcExuUnZaMmRzWlNncE8xeHlYRzU5WEhKY2JseHlYRzVtZFc1amRHbHZiaUIzY0dKalgyRnFlRjlpYjI5cmFXNW5YMTkxYVY5amJHbGphMTl6WVhabFgxOWphR0Z1WjJWZmNtVnpiM1Z5WTJVb0lIUm9hWE5mWld3c0lHSnZiMnRwYm1kZllXTjBhVzl1TENCbGJGOXBaQ0FwZTF4eVhHNWNjbHh1WEhSM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDJGcVlYaGZZV04wYVc5dVgzSmxjWFZsYzNRb0lIdGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDZGliMjlyYVc1blgyRmpkR2x2YmljZ0lDQWdJQ0FnT2lCaWIyOXJhVzVuWDJGamRHbHZiaXhjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkQ2RpYjI5cmFXNW5YMmxrSnlBZ0lDQWdJQ0FnSUNBZ09pQnFVWFZsY25rb0lDY2pZMmhoYm1kbFgySnZiMnRwYm1kZmNtVnpiM1Z5WTJWZlgySnZiMnRwYm1kZmFXUW5JQ2t1ZG1Gc0tDa3NYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUW5jMlZzWldOMFpXUmZjbVZ6YjNWeVkyVmZhV1FuSURvZ2FsRjFaWEo1S0NBbkkyTm9ZVzVuWlY5aWIyOXJhVzVuWDNKbGMyOTFjbU5sWDE5eVpYTnZkWEpqWlY5elpXeGxZM1FuSUNrdWRtRnNLQ2tzWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFFuZFdsZlkyeHBZMnRsWkY5bGJHVnRaVzUwWDJsa0p6b2daV3hmYVdSY2NseHVYSFI5SUNrN1hISmNibHh5WEc1Y2RIZHdZbU5mWW5WMGRHOXVYMlZ1WVdKc1pWOXNiMkZrYVc1blgybGpiMjRvSUhSb2FYTmZaV3dnS1R0Y2NseHVYSEpjYmx4MEx5OGdkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOWZkV2xmWTJ4cFkydGZZMnh2YzJWZlgyTm9ZVzVuWlY5eVpYTnZkWEpqWlNncE8xeHlYRzU5WEhKY2JseHlYRzVtZFc1amRHbHZiaUIzY0dKalgyRnFlRjlpYjI5cmFXNW5YMTkxYVY5amJHbGphMTlqYkc5elpWOWZZMmhoYm1kbFgzSmxjMjkxY21ObEtDbDdYSEpjYmx4eVhHNWNkSFpoY2lCalluSmpaVHRjY2x4dVhISmNibHgwTHk4Z1IyVjBJRkpsYzI5MWNtTmxJSE5sWTNScGIyNWNjbHh1WEhSalluSmpaU0E5SUdwUmRXVnllU2hjSWlOamFHRnVaMlZmWW05dmEybHVaMTl5WlhOdmRYSmpaVjlmYzJWamRHbHZibHdpS1M1a1pYUmhZMmdvS1R0Y2NseHVYSEpjYmx4MEx5OGdRWEJ3Wlc1a0lHbDBJSFJ2SUdocFpHUmxiaUJJVkUxTUlIUmxiWEJzWVhSbElITmxZM1JwYjI0Z0lHRjBJQ0IwYUdVZ1ltOTBkRzl0SUNCdlppQjBhR1VnY0dGblpWeHlYRzVjZEdOaWNtTmxMbUZ3Y0dWdVpGUnZLR3BSZFdWeWVTaGNJaU4zY0dKalgyaHBaR1JsYmw5MFpXMXdiR0YwWlY5ZlkyaGhibWRsWDJKdmIydHBibWRmY21WemIzVnlZMlZjSWlrcE8xeHlYRzVjZEdOaWNtTmxJRDBnYm5Wc2JEdGNjbHh1WEhKY2JseDBMeThnU0dsa1pTQmhiR3dnWTJoaGJtZGxJR0p2YjJ0cGJtY2djbVZ6YjNWeVkyVnpJSE5sWTNScGIyNXpYSEpjYmx4MGFsRjFaWEo1S0Z3aUxuVnBYMTlqYUdGdVoyVmZZbTl2YTJsdVoxOXlaWE52ZFhKalpWOWZjMlZqZEdsdmJsOXBibDlpYjI5cmFXNW5YQ0lwTG1ocFpHVW9LVHRjY2x4dWZWeHlYRzVjY2x4dUx5b3FYSEpjYmlBcUlDQWdSSFZ3YkdsallYUmxJR0p2YjJ0cGJtY2dhVzRnYjNSb1pYSWdjbVZ6YjNWeVkyVWdJQ0F0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRJQ292WEhKY2JseHlYRzVtZFc1amRHbHZiaUIzY0dKalgyRnFlRjlpYjI5cmFXNW5YMTkxYVY5amJHbGphMTl6YUc5M1gxOWtkWEJzYVdOaGRHVmZZbTl2YTJsdVp5Z2dZbTl2YTJsdVoxOXBaQ3dnY21WemIzVnlZMlZmYVdRZ0tYdGNjbHh1WEhKY2JseDBMeThnUkdWbWFXNWxJRWxFSUc5bUlHSnZiMnRwYm1jZ2RHOGdhR2xrWkdWdUlHbHVjSFYwWEhKY2JseDBhbEYxWlhKNUtDQW5JMlIxY0d4cFkyRjBaVjlpYjI5cmFXNW5YM1J2WDI5MGFHVnlYM0psYzI5MWNtTmxYMTlpYjI5cmFXNW5YMmxrSnlBcExuWmhiQ2dnWW05dmEybHVaMTlwWkNBcE8xeHlYRzVjY2x4dVhIUXZMeUJUWld4bFkzUWdZbTl2YTJsdVp5QnlaWE52ZFhKalpTQWdkR2hoZENCaVpXeHZibWNnZEc4Z0lHSnZiMnRwYm1kY2NseHVYSFJxVVhWbGNua29JQ2NqWkhWd2JHbGpZWFJsWDJKdmIydHBibWRmZEc5ZmIzUm9aWEpmY21WemIzVnlZMlZmWDNKbGMyOTFjbU5sWDNObGJHVmpkQ2NnS1M1MllXd29JSEpsYzI5MWNtTmxYMmxrSUNrdWRISnBaMmRsY2lnZ0oyTm9ZVzVuWlNjZ0tUdGNjbHh1WEhSMllYSWdZMkp5TzF4eVhHNWNjbHh1WEhRdkx5QkhaWFFnVW1WemIzVnlZMlVnYzJWamRHbHZibHh5WEc1Y2RHTmljaUE5SUdwUmRXVnllU2dnWENJalpIVndiR2xqWVhSbFgySnZiMnRwYm1kZmRHOWZiM1JvWlhKZmNtVnpiM1Z5WTJWZlgzTmxZM1JwYjI1Y0lpQXBMbVJsZEdGamFDZ3BPMXh5WEc1Y2NseHVYSFF2THlCQmNIQmxibVFnYVhRZ2RHOGdZbTl2YTJsdVp5QlNUMWRjY2x4dVhIUmpZbkl1WVhCd1pXNWtWRzhvSUdwUmRXVnllU2dnWENJamRXbGZYMlIxY0d4cFkyRjBaVjlpYjI5cmFXNW5YM1J2WDI5MGFHVnlYM0psYzI5MWNtTmxYMTl6WldOMGFXOXVYMmx1WDJKdmIydHBibWRmWENJZ0t5QmliMjlyYVc1blgybGtJQ2tnS1R0Y2NseHVYSFJqWW5JZ1BTQnVkV3hzTzF4eVhHNWNjbHh1WEhRdkx5QklhV1JsSUhObFkzUnBiMjV6SUc5bUlGd2lSSFZ3YkdsallYUmxJR0p2YjJ0cGJtZGNJaUJwYmlCaGJHd2diM1JvWlhJZ1ltOXZhMmx1WjNNZ1VrOVhjMXh5WEc1Y2RHbG1JQ2dnSVNCcVVYVmxjbmtvSUZ3aUkzVnBYMTlrZFhCc2FXTmhkR1ZmWW05dmEybHVaMTkwYjE5dmRHaGxjbDl5WlhOdmRYSmpaVjlmYzJWamRHbHZibDlwYmw5aWIyOXJhVzVuWDF3aUlDc2dZbTl2YTJsdVoxOXBaQ0FwTG1sektDYzZkbWx6YVdKc1pTY3BJQ2w3WEhKY2JseDBYSFJxVVhWbGNua29JRndpTG5WcFgxOTFibVJsY2w5aFkzUnBiMjV6WDNKdmQxOWZjMlZqZEdsdmJsOXBibDlpYjI5cmFXNW5YQ0lnS1M1b2FXUmxLQ2s3WEhKY2JseDBmVnh5WEc1Y2NseHVYSFF2THlCVGFHOTNJRzl1YkhrZ1hDSkVkWEJzYVdOaGRHVWdZbTl2YTJsdVoxd2lJSE5sWTNScGIyNGdJR1p2Y2lCamRYSnlaVzUwSUdKdmIydHBibWNnVWs5WFhISmNibHgwYWxGMVpYSjVLQ0JjSWlOMWFWOWZaSFZ3YkdsallYUmxYMkp2YjJ0cGJtZGZkRzlmYjNSb1pYSmZjbVZ6YjNWeVkyVmZYM05sWTNScGIyNWZhVzVmWW05dmEybHVaMTljSWlBcklHSnZiMnRwYm1kZmFXUWdLUzUwYjJkbmJHVW9LVHRjY2x4dWZWeHlYRzVjY2x4dVpuVnVZM1JwYjI0Z2QzQmlZMTloYW5oZlltOXZhMmx1WjE5ZmRXbGZZMnhwWTJ0ZmMyRjJaVjlmWkhWd2JHbGpZWFJsWDJKdmIydHBibWNvSUhSb2FYTmZaV3dzSUdKdmIydHBibWRmWVdOMGFXOXVMQ0JsYkY5cFpDQXBlMXh5WEc1Y2NseHVYSFIzY0dKalgyRnFlRjlpYjI5cmFXNW5YMkZxWVhoZllXTjBhVzl1WDNKbGNYVmxjM1FvSUh0Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENkaWIyOXJhVzVuWDJGamRHbHZiaWNnSUNBZ0lDQWdPaUJpYjI5cmFXNW5YMkZqZEdsdmJpeGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDZGliMjlyYVc1blgybGtKeUFnSUNBZ0lDQWdJQ0FnT2lCcVVYVmxjbmtvSUNjalpIVndiR2xqWVhSbFgySnZiMnRwYm1kZmRHOWZiM1JvWlhKZmNtVnpiM1Z5WTJWZlgySnZiMnRwYm1kZmFXUW5JQ2t1ZG1Gc0tDa3NYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUW5jMlZzWldOMFpXUmZjbVZ6YjNWeVkyVmZhV1FuSURvZ2FsRjFaWEo1S0NBbkkyUjFjR3hwWTJGMFpWOWliMjlyYVc1blgzUnZYMjkwYUdWeVgzSmxjMjkxY21ObFgxOXlaWE52ZFhKalpWOXpaV3hsWTNRbklDa3VkbUZzS0Nrc1hISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhRbmRXbGZZMnhwWTJ0bFpGOWxiR1Z0Wlc1MFgybGtKem9nWld4ZmFXUmNjbHh1WEhSOUlDazdYSEpjYmx4eVhHNWNkSGR3WW1OZlluVjBkRzl1WDJWdVlXSnNaVjlzYjJGa2FXNW5YMmxqYjI0b0lIUm9hWE5mWld3Z0tUdGNjbHh1WEhKY2JseDBMeThnZDNCaVkxOWhhbmhmWW05dmEybHVaMTlmZFdsZlkyeHBZMnRmWTJ4dmMyVmZYMk5vWVc1blpWOXlaWE52ZFhKalpTZ3BPMXh5WEc1OVhISmNibHh5WEc1bWRXNWpkR2x2YmlCM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDE5MWFWOWpiR2xqYTE5amJHOXpaVjlmWkhWd2JHbGpZWFJsWDJKdmIydHBibWNvS1h0Y2NseHVYSEpjYmx4MGRtRnlJR05pY21ObE8xeHlYRzVjY2x4dVhIUXZMeUJIWlhRZ1VtVnpiM1Z5WTJVZ2MyVmpkR2x2Ymx4eVhHNWNkR05pY21ObElEMGdhbEYxWlhKNUtGd2lJMlIxY0d4cFkyRjBaVjlpYjI5cmFXNW5YM1J2WDI5MGFHVnlYM0psYzI5MWNtTmxYMTl6WldOMGFXOXVYQ0lwTG1SbGRHRmphQ2dwTzF4eVhHNWNjbHh1WEhRdkx5QkJjSEJsYm1RZ2FYUWdkRzhnYUdsa1pHVnVJRWhVVFV3Z2RHVnRjR3hoZEdVZ2MyVmpkR2x2YmlBZ1lYUWdJSFJvWlNCaWIzUjBiMjBnSUc5bUlIUm9aU0J3WVdkbFhISmNibHgwWTJKeVkyVXVZWEJ3Wlc1a1ZHOG9hbEYxWlhKNUtGd2lJM2R3WW1OZmFHbGtaR1Z1WDNSbGJYQnNZWFJsWDE5a2RYQnNhV05oZEdWZlltOXZhMmx1WjE5MGIxOXZkR2hsY2w5eVpYTnZkWEpqWlZ3aUtTazdYSEpjYmx4MFkySnlZMlVnUFNCdWRXeHNPMXh5WEc1Y2NseHVYSFF2THlCSWFXUmxJR0ZzYkNCamFHRnVaMlVnWW05dmEybHVaeUJ5WlhOdmRYSmpaWE1nYzJWamRHbHZibk5jY2x4dVhIUnFVWFZsY25rb1hDSXVkV2xmWDJSMWNHeHBZMkYwWlY5aWIyOXJhVzVuWDNSdlgyOTBhR1Z5WDNKbGMyOTFjbU5sWDE5elpXTjBhVzl1WDJsdVgySnZiMnRwYm1kY0lpa3VhR2xrWlNncE8xeHlYRzU5WEhKY2JseHlYRzR2S2lwY2NseHVJQ29nSUNCRGFHRnVaMlVnY0dGNWJXVnVkQ0J6ZEdGMGRYTWdJQ0F0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwZ0tpOWNjbHh1WEhKY2JtWjFibU4wYVc5dUlIZHdZbU5mWVdwNFgySnZiMnRwYm1kZlgzVnBYMk5zYVdOclgzTm9iM2RmWDNObGRGOXdZWGx0Wlc1MFgzTjBZWFIxY3lnZ1ltOXZhMmx1WjE5cFpDQXBlMXh5WEc1Y2NseHVYSFIyWVhJZ2FsTmxiR1ZqZENBOUlHcFJkV1Z5ZVNnZ0p5TjFhVjlmYzJWMFgzQmhlVzFsYm5SZmMzUmhkSFZ6WDE5elpXTjBhVzl1WDJsdVgySnZiMnRwYm1kZkp5QXJJR0p2YjJ0cGJtZGZhV1FnS1M1bWFXNWtLQ0FuYzJWc1pXTjBKeUFwWEhKY2JseHlYRzVjZEhaaGNpQnpaV3hsWTNSbFpGOXdZWGxmYzNSaGRIVnpJRDBnYWxObGJHVmpkQzVoZEhSeUtDQmNJbUZxZUMxelpXeGxZM1JsWkMxMllXeDFaVndpSUNrN1hISmNibHh5WEc1Y2RDOHZJRWx6SUdsMElHWnNiMkYwSUMwZ2RHaGxiaUFnYVhRbmN5QjFibXR1YjNkdVhISmNibHgwYVdZZ0tDQWhhWE5PWVU0b0lIQmhjbk5sUm14dllYUW9JSE5sYkdWamRHVmtYM0JoZVY5emRHRjBkWE1nS1NBcElDbDdYSEpjYmx4MFhIUnFVMlZzWldOMExtWnBibVFvSUNkdmNIUnBiMjViZG1Gc2RXVTlYQ0l4WENKZEp5QXBMbkJ5YjNBb0lDZHpaV3hsWTNSbFpDY3NJSFJ5ZFdVZ0tUdGNkRngwWEhSY2RGeDBYSFJjZEZ4MEx5OGdWVzVyYm05M2JpQWdkbUZzZFdVZ2FYTWdKekVuSUdsdUlITmxiR1ZqZENCaWIzaGNjbHh1WEhSOUlHVnNjMlVnZTF4eVhHNWNkRngwYWxObGJHVmpkQzVtYVc1a0tDQW5iM0IwYVc5dVczWmhiSFZsUFZ3aUp5QXJJSE5sYkdWamRHVmtYM0JoZVY5emRHRjBkWE1nS3lBblhDSmRKeUFwTG5CeWIzQW9JQ2R6Wld4bFkzUmxaQ2NzSUhSeWRXVWdLVHRjZEZ4MEx5OGdUM1JvWlhKM2FYTmxJR3R1YjNkdUlIQmhlVzFsYm5RZ2MzUmhkSFZ6WEhKY2JseDBmVnh5WEc1Y2NseHVYSFF2THlCSWFXUmxJSE5sWTNScGIyNXpJRzltSUZ3aVEyaGhibWRsSUdKdmIydHBibWNnY21WemIzVnlZMlZjSWlCcGJpQmhiR3dnYjNSb1pYSWdZbTl2YTJsdVozTWdVazlYYzF4eVhHNWNkR2xtSUNnZ0lTQnFVWFZsY25rb0lGd2lJM1ZwWDE5elpYUmZjR0Y1YldWdWRGOXpkR0YwZFhOZlgzTmxZM1JwYjI1ZmFXNWZZbTl2YTJsdVoxOWNJaUFySUdKdmIydHBibWRmYVdRZ0tTNXBjeWduT25acGMybGliR1VuS1NBcGUxeHlYRzVjZEZ4MGFsRjFaWEo1S0NCY0lpNTFhVjlmZFc1a1pYSmZZV04wYVc5dWMxOXliM2RmWDNObFkzUnBiMjVmYVc1ZlltOXZhMmx1WjF3aUlDa3VhR2xrWlNncE8xeHlYRzVjZEgxY2NseHVYSEpjYmx4MEx5OGdVMmh2ZHlCdmJteDVJRndpWTJoaGJtZGxJR0p2YjJ0cGJtY2djbVZ6YjNWeVkyVmNJaUJ6WldOMGFXOXVJQ0JtYjNJZ1kzVnljbVZ1ZENCaWIyOXJhVzVuWEhKY2JseDBhbEYxWlhKNUtDQmNJaU4xYVY5ZmMyVjBYM0JoZVcxbGJuUmZjM1JoZEhWelgxOXpaV04wYVc5dVgybHVYMkp2YjJ0cGJtZGZYQ0lnS3lCaWIyOXJhVzVuWDJsa0lDa3VkRzluWjJ4bEtDazdYSEpjYm4xY2NseHVYSEpjYm1aMWJtTjBhVzl1SUhkd1ltTmZZV3A0WDJKdmIydHBibWRmWDNWcFgyTnNhV05yWDNOaGRtVmZYM05sZEY5d1lYbHRaVzUwWDNOMFlYUjFjeWdnWW05dmEybHVaMTlwWkN3Z2RHaHBjMTlsYkN3Z1ltOXZhMmx1WjE5aFkzUnBiMjRzSUdWc1gybGtJQ2w3WEhKY2JseHlYRzVjZEhkd1ltTmZZV3A0WDJKdmIydHBibWRmWVdwaGVGOWhZM1JwYjI1ZmNtVnhkV1Z6ZENnZ2UxeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEoySnZiMnRwYm1kZllXTjBhVzl1SnlBZ0lDQWdJQ0E2SUdKdmIydHBibWRmWVdOMGFXOXVMRnh5WEc1Y2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBKMkp2YjJ0cGJtZGZhV1FuSUNBZ0lDQWdJQ0FnSUNBNklHSnZiMnRwYm1kZmFXUXNYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUW5jMlZzWldOMFpXUmZjR0Y1YldWdWRGOXpkR0YwZFhNbklEb2dhbEYxWlhKNUtDQW5JM1ZwWDJKMGJsOXpaWFJmY0dGNWJXVnVkRjl6ZEdGMGRYTW5JQ3NnWW05dmEybHVaMTlwWkNBcExuWmhiQ2dwTEZ4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwSjNWcFgyTnNhV05yWldSZlpXeGxiV1Z1ZEY5cFpDYzZJR1ZzWDJsa0lDc2dKMTl6WVhabEoxeHlYRzVjZEgwZ0tUdGNjbHh1WEhKY2JseDBkM0JpWTE5aWRYUjBiMjVmWlc1aFlteGxYMnh2WVdScGJtZGZhV052YmlnZ2RHaHBjMTlsYkNBcE8xeHlYRzVjY2x4dVhIUnFVWFZsY25rb0lDY2pKeUFySUdWc1gybGtJQ3NnSjE5allXNWpaV3duS1M1b2FXUmxLQ2s3WEhKY2JseDBMeTkzY0dKalgySjFkSFJ2Ymw5bGJtRmliR1ZmYkc5aFpHbHVaMTlwWTI5dUtDQnFVWFZsY25rb0lDY2pKeUFySUdWc1gybGtJQ3NnSjE5allXNWpaV3duS1M1blpYUW9NQ2tnS1R0Y2NseHVYSEpjYm4xY2NseHVYSEpjYm1aMWJtTjBhVzl1SUhkd1ltTmZZV3A0WDJKdmIydHBibWRmWDNWcFgyTnNhV05yWDJOc2IzTmxYMTl6WlhSZmNHRjViV1Z1ZEY5emRHRjBkWE1vS1h0Y2NseHVYSFF2THlCSWFXUmxJR0ZzYkNCamFHRnVaMlVnSUhCaGVXMWxiblFnYzNSaGRIVnpJR1p2Y2lCaWIyOXJhVzVuWEhKY2JseDBhbEYxWlhKNUtGd2lMblZwWDE5elpYUmZjR0Y1YldWdWRGOXpkR0YwZFhOZlgzTmxZM1JwYjI1ZmFXNWZZbTl2YTJsdVoxd2lLUzVvYVdSbEtDazdYSEpjYm4xY2NseHVYSEpjYmx4eVhHNHZLaXBjY2x4dUlDb2dJQ0JEYUdGdVoyVWdZbTl2YTJsdVp5QmpiM04wSUNBZ0xTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBnS2k5Y2NseHVYSEpjYm1aMWJtTjBhVzl1SUhkd1ltTmZZV3A0WDJKdmIydHBibWRmWDNWcFgyTnNhV05yWDNOaGRtVmZYM05sZEY5aWIyOXJhVzVuWDJOdmMzUW9JR0p2YjJ0cGJtZGZhV1FzSUhSb2FYTmZaV3dzSUdKdmIydHBibWRmWVdOMGFXOXVMQ0JsYkY5cFpDQXBlMXh5WEc1Y2NseHVYSFIzY0dKalgyRnFlRjlpYjI5cmFXNW5YMkZxWVhoZllXTjBhVzl1WDNKbGNYVmxjM1FvSUh0Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENkaWIyOXJhVzVuWDJGamRHbHZiaWNnSUNBZ0lDQWdPaUJpYjI5cmFXNW5YMkZqZEdsdmJpeGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDZGliMjlyYVc1blgybGtKeUFnSUNBZ0lDQWdJQ0FnT2lCaWIyOXJhVzVuWDJsa0xGeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEoySnZiMnRwYm1kZlkyOXpkQ2NnWEhSY2RDQWdJRG9nYWxGMVpYSjVLQ0FuSTNWcFgySjBibDl6WlhSZlltOXZhMmx1WjE5amIzTjBKeUFySUdKdmIydHBibWRmYVdRZ0t5QW5YMk52YzNRbktTNTJZV3dvS1N4Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENkMWFWOWpiR2xqYTJWa1gyVnNaVzFsYm5SZmFXUW5PaUJsYkY5cFpDQXJJQ2RmYzJGMlpTZGNjbHh1WEhSOUlDazdYSEpjYmx4eVhHNWNkSGR3WW1OZlluVjBkRzl1WDJWdVlXSnNaVjlzYjJGa2FXNW5YMmxqYjI0b0lIUm9hWE5mWld3Z0tUdGNjbHh1WEhKY2JseDBhbEYxWlhKNUtDQW5JeWNnS3lCbGJGOXBaQ0FySUNkZlkyRnVZMlZzSnlrdWFHbGtaU2dwTzF4eVhHNWNkQzh2ZDNCaVkxOWlkWFIwYjI1ZlpXNWhZbXhsWDJ4dllXUnBibWRmYVdOdmJpZ2dhbEYxWlhKNUtDQW5JeWNnS3lCbGJGOXBaQ0FySUNkZlkyRnVZMlZzSnlrdVoyVjBLREFwSUNrN1hISmNibHh5WEc1OVhISmNibHh5WEc1bWRXNWpkR2x2YmlCM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDE5MWFWOWpiR2xqYTE5amJHOXpaVjlmYzJWMFgySnZiMnRwYm1kZlkyOXpkQ2dwZTF4eVhHNWNkQzh2SUVocFpHVWdZV3hzSUdOb1lXNW5aU0FnY0dGNWJXVnVkQ0J6ZEdGMGRYTWdabTl5SUdKdmIydHBibWRjY2x4dVhIUnFVWFZsY25rb1hDSXVkV2xmWDNObGRGOWliMjlyYVc1blgyTnZjM1JmWDNObFkzUnBiMjVmYVc1ZlltOXZhMmx1WjF3aUtTNW9hV1JsS0NrN1hISmNibjFjY2x4dVhISmNibHh5WEc0dktpcGNjbHh1SUNvZ0lDQlRaVzVrSUZCaGVXMWxiblFnY21WeGRXVnpkQ0FnSUMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRJQ292WEhKY2JseHlYRzVtZFc1amRHbHZiaUIzY0dKalgyRnFlRjlpYjI5cmFXNW5YMTkxYVY5amJHbGphMTlmYzJWdVpGOXdZWGx0Wlc1MFgzSmxjWFZsYzNRb0tYdGNjbHh1WEhKY2JseDBkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOWhhbUY0WDJGamRHbHZibDl5WlhGMVpYTjBLQ0I3WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFFuWW05dmEybHVaMTloWTNScGIyNG5JQ0FnSUNBZ0lEb2dKM05sYm1SZmNHRjViV1Z1ZEY5eVpYRjFaWE4wSnl4Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENkaWIyOXJhVzVuWDJsa0p5QWdJQ0FnSUNBZ0lDQWdPaUJxVVhWbGNua29JQ2NqZDNCaVkxOXRiMlJoYkY5ZmNHRjViV1Z1ZEY5eVpYRjFaWE4wWDE5aWIyOXJhVzVuWDJsa0p5a3VkbUZzS0Nrc1hISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhRbmNtVmhjMjl1WDI5bVgyRmpkR2x2YmljZ1hIUWdJQ0E2SUdwUmRXVnllU2dnSnlOM2NHSmpYMjF2WkdGc1gxOXdZWGx0Wlc1MFgzSmxjWFZsYzNSZlgzSmxZWE52Ymw5dlpsOWhZM1JwYjI0bktTNTJZV3dvS1N4Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENkMWFWOWpiR2xqYTJWa1gyVnNaVzFsYm5SZmFXUW5PaUFuZDNCaVkxOXRiMlJoYkY5ZmNHRjViV1Z1ZEY5eVpYRjFaWE4wWDE5aWRYUjBiMjVmYzJWdVpDZGNjbHh1WEhSOUlDazdYSEpjYmx4MGQzQmlZMTlpZFhSMGIyNWZaVzVoWW14bFgyeHZZV1JwYm1kZmFXTnZiaWdnYWxGMVpYSjVLQ0FuSTNkd1ltTmZiVzlrWVd4ZlgzQmhlVzFsYm5SZmNtVnhkV1Z6ZEY5ZlluVjBkRzl1WDNObGJtUW5JQ2t1WjJWMEtDQXdJQ2tnS1R0Y2NseHVmVnh5WEc1Y2NseHVYSEpjYmk4cUtseHlYRzRnS2lBZ0lFbHRjRzl5ZENCSGIyOW5iR1VnUTJGc1pXNWtZWElnSUMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTQXFMMXh5WEc1Y2NseHVablZ1WTNScGIyNGdkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOWZkV2xmWTJ4cFkydGZYMmx0Y0c5eWRGOW5iMjluYkdWZlkyRnNaVzVrWVhJb0tYdGNjbHh1WEhKY2JseDBkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOWhhbUY0WDJGamRHbHZibDl5WlhGMVpYTjBLQ0I3WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFFuWW05dmEybHVaMTloWTNScGIyNG5JQ0FnSUNBZ0lEb2dKMmx0Y0c5eWRGOW5iMjluYkdWZlkyRnNaVzVrWVhJbkxGeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEozVnBYMk5zYVdOclpXUmZaV3hsYldWdWRGOXBaQ2M2SUNkM2NHSmpYMjF2WkdGc1gxOXBiWEJ2Y25SZloyOXZaMnhsWDJOaGJHVnVaR0Z5WDE5aWRYUjBiMjVmYzJWdVpDZGNjbHh1WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFFzSUNkaWIyOXJhVzVuWDJkallXeGZaWFpsYm5SelgyWnliMjBuSURvZ1hIUmNkRngwWEhScVVYVmxjbmtvSUNjamQzQmlZMTl0YjJSaGJGOWZhVzF3YjNKMFgyZHZiMmRzWlY5allXeGxibVJoY2w5ZmMyVmpkR2x2YmlBalltOXZhMmx1WjE5blkyRnNYMlYyWlc1MGMxOW1jbTl0SUc5d2RHbHZianB6Wld4bFkzUmxaQ2NwTG5aaGJDZ3BYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUXNJQ2RpYjI5cmFXNW5YMmRqWVd4ZlpYWmxiblJ6WDJaeWIyMWZiMlptYzJWMEp5QTZJRngwWEhScVVYVmxjbmtvSUNjamQzQmlZMTl0YjJSaGJGOWZhVzF3YjNKMFgyZHZiMmRzWlY5allXeGxibVJoY2w5ZmMyVmpkR2x2YmlBalltOXZhMmx1WjE5blkyRnNYMlYyWlc1MGMxOW1jbTl0WDI5bVpuTmxkQ2NnS1M1MllXd29LVnh5WEc1Y2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBMQ0FuWW05dmEybHVaMTluWTJGc1gyVjJaVzUwYzE5bWNtOXRYMjltWm5ObGRGOTBlWEJsSnlBNklGeDBhbEYxWlhKNUtDQW5JM2R3WW1OZmJXOWtZV3hmWDJsdGNHOXlkRjluYjI5bmJHVmZZMkZzWlc1a1lYSmZYM05sWTNScGIyNGdJMkp2YjJ0cGJtZGZaMk5oYkY5bGRtVnVkSE5mWm5KdmJWOXZabVp6WlhSZmRIbHdaU0J2Y0hScGIyNDZjMlZzWldOMFpXUW5LUzUyWVd3b0tWeHlYRzVjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkQ3dnSjJKdmIydHBibWRmWjJOaGJGOWxkbVZ1ZEhOZmRXNTBhV3duSURvZ1hIUmNkRngwYWxGMVpYSjVLQ0FuSTNkd1ltTmZiVzlrWVd4ZlgybHRjRzl5ZEY5bmIyOW5iR1ZmWTJGc1pXNWtZWEpmWDNObFkzUnBiMjRnSTJKdmIydHBibWRmWjJOaGJGOWxkbVZ1ZEhOZmRXNTBhV3dnYjNCMGFXOXVPbk5sYkdWamRHVmtKeWt1ZG1Gc0tDbGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDd2dKMkp2YjJ0cGJtZGZaMk5oYkY5bGRtVnVkSE5mZFc1MGFXeGZiMlptYzJWMEp5QTZJRngwWEhScVVYVmxjbmtvSUNjamQzQmlZMTl0YjJSaGJGOWZhVzF3YjNKMFgyZHZiMmRzWlY5allXeGxibVJoY2w5ZmMyVmpkR2x2YmlBalltOXZhMmx1WjE5blkyRnNYMlYyWlc1MGMxOTFiblJwYkY5dlptWnpaWFFuSUNrdWRtRnNLQ2xjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkQ3dnSjJKdmIydHBibWRmWjJOaGJGOWxkbVZ1ZEhOZmRXNTBhV3hmYjJabWMyVjBYM1I1Y0dVbklEb2dhbEYxWlhKNUtDQW5JM2R3WW1OZmJXOWtZV3hmWDJsdGNHOXlkRjluYjI5bmJHVmZZMkZzWlc1a1lYSmZYM05sWTNScGIyNGdJMkp2YjJ0cGJtZGZaMk5oYkY5bGRtVnVkSE5mZFc1MGFXeGZiMlptYzJWMFgzUjVjR1VnYjNCMGFXOXVPbk5sYkdWamRHVmtKeWt1ZG1Gc0tDbGNjbHh1WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFFzSUNkaWIyOXJhVzVuWDJkallXeGZaWFpsYm5SelgyMWhlQ2NnT2lCY2RHcFJkV1Z5ZVNnZ0p5TjNjR0pqWDIxdlpHRnNYMTlwYlhCdmNuUmZaMjl2WjJ4bFgyTmhiR1Z1WkdGeVgxOXpaV04wYVc5dUlDTmliMjlyYVc1blgyZGpZV3hmWlhabGJuUnpYMjFoZUNjZ0tTNTJZV3dvS1Z4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwTENBblltOXZhMmx1WjE5blkyRnNYM0psYzI5MWNtTmxKeUE2SUZ4MGFsRjFaWEo1S0NBbkkzZHdZbU5mYlc5a1lXeGZYMmx0Y0c5eWRGOW5iMjluYkdWZlkyRnNaVzVrWVhKZlgzTmxZM1JwYjI0Z0kzZHdZbU5mWW05dmEybHVaMTl5WlhOdmRYSmpaU0J2Y0hScGIyNDZjMlZzWldOMFpXUW5LUzUyWVd3b0tWeHlYRzVjZEgwZ0tUdGNjbHh1WEhSM2NHSmpYMkoxZEhSdmJsOWxibUZpYkdWZmJHOWhaR2x1WjE5cFkyOXVLQ0JxVVhWbGNua29JQ2NqZDNCaVkxOXRiMlJoYkY5ZmFXMXdiM0owWDJkdmIyZHNaVjlqWVd4bGJtUmhjbDlmYzJWamRHbHZiaUFqZDNCaVkxOXRiMlJoYkY5ZmFXMXdiM0owWDJkdmIyZHNaVjlqWVd4bGJtUmhjbDlmWW5WMGRHOXVYM05sYm1RbklDa3VaMlYwS0NBd0lDa2dLVHRjY2x4dWZWeHlYRzVjY2x4dVhISmNiaThxS2x4eVhHNGdLaUFnSUVWNGNHOXlkQ0JpYjI5cmFXNW5jeUIwYnlCRFUxWWdJQzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFNBcUwxeHlYRzVtZFc1amRHbHZiaUIzY0dKalgyRnFlRjlpYjI5cmFXNW5YMTkxYVY5amJHbGphMTlmWlhod2IzSjBYMk56ZGlnZ2NHRnlZVzF6SUNsN1hISmNibHh5WEc1Y2RIWmhjaUJ6Wld4bFkzUmxaRjlpYjI5cmFXNW5YMmxrWDJGeWNpQTlJSGR3WW1OZloyVjBYM05sYkdWamRHVmtYM0p2ZDE5cFpDZ3BPMXh5WEc1Y2NseHVYSFIzY0dKalgyRnFlRjlpYjI5cmFXNW5YMkZxWVhoZllXTjBhVzl1WDNKbGNYVmxjM1FvSUh0Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENkaWIyOXJhVzVuWDJGamRHbHZiaWNnSUNBZ0lDQWdJRG9nY0dGeVlXMXpXeUFuWW05dmEybHVaMTloWTNScGIyNG5JRjBzWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFFuZFdsZlkyeHBZMnRsWkY5bGJHVnRaVzUwWDJsa0p5QTZJSEJoY21GdGMxc2dKM1ZwWDJOc2FXTnJaV1JmWld4bGJXVnVkRjlwWkNjZ1hTeGNjbHh1WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFFuWlhod2IzSjBYM1I1Y0dVbklDQWdJQ0FnSUNBZ0lDQTZJSEJoY21GdGMxc2dKMlY0Y0c5eWRGOTBlWEJsSnlCZExGeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEoyTnpkbDlsZUhCdmNuUmZjMlZ3WVhKaGRHOXlKeUFnT2lCd1lYSmhiWE5iSUNkamMzWmZaWGh3YjNKMFgzTmxjR0Z5WVhSdmNpY2dYU3hjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkQ2RqYzNaZlpYaHdiM0owWDNOcmFYQmZabWxsYkdSekp6b2djR0Z5WVcxeld5QW5ZM04yWDJWNGNHOXlkRjl6YTJsd1gyWnBaV3hrY3ljZ1hTeGNjbHh1WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFFuWW05dmEybHVaMTlwWkNkY2REb2djMlZzWldOMFpXUmZZbTl2YTJsdVoxOXBaRjloY25JdWFtOXBiaWduTENjcExGeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEozTmxZWEpqYUY5d1lYSmhiWE1uSURvZ2QzQmlZMTloYW5oZlltOXZhMmx1WjE5c2FYTjBhVzVuTG5ObFlYSmphRjluWlhSZllXeHNYM0JoY21GdGN5Z3BYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MGZTQXBPMXh5WEc1Y2NseHVYSFIyWVhJZ2RHaHBjMTlsYkNBOUlHcFJkV1Z5ZVNnZ0p5TW5JQ3NnY0dGeVlXMXpXeUFuZFdsZlkyeHBZMnRsWkY5bGJHVnRaVzUwWDJsa0p5QmRJQ2t1WjJWMEtDQXdJQ2xjY2x4dVhISmNibHgwZDNCaVkxOWlkWFIwYjI1ZlpXNWhZbXhsWDJ4dllXUnBibWRmYVdOdmJpZ2dkR2hwYzE5bGJDQXBPMXh5WEc1OVhISmNibHh5WEc0dktpcGNjbHh1SUNvZ1QzQmxiaUJWVWt3Z2FXNGdibVYzSUhSaFlpQXRJRzFoYVc1c2VTQWdhWFFuY3lCMWMyVmtJR1p2Y2lCdmNHVnVJRU5UVmlCc2FXNXJJQ0JtYjNJZ1pHOTNibXh2WVdSbFpDQmxlSEJ2Y25SbFpDQmliMjlyYVc1bmN5QmhjeUJEVTFaY2NseHVJQ3BjY2x4dUlDb2dRSEJoY21GdElHVjRjRzl5ZEY5amMzWmZkWEpzWEhKY2JpQXFMMXh5WEc1bWRXNWpkR2x2YmlCM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDE5bGVIQnZjblJmWTNOMlgzVnliRjlmWkc5M2JteHZZV1FvSUdWNGNHOXlkRjlqYzNaZmRYSnNJQ2w3WEhKY2JseHlYRzVjZEM4dmRtRnlJSE5sYkdWamRHVmtYMkp2YjJ0cGJtZGZhV1JmWVhKeUlEMGdkM0JpWTE5blpYUmZjMlZzWldOMFpXUmZjbTkzWDJsa0tDazdYSEpjYmx4eVhHNWNkR1J2WTNWdFpXNTBMbXh2WTJGMGFXOXVMbWh5WldZZ1BTQmxlSEJ2Y25SZlkzTjJYM1Z5YkRzdkx5QXJJQ2NtYzJWc1pXTjBaV1JmYVdROUp5QXJJSE5sYkdWamRHVmtYMkp2YjJ0cGJtZGZhV1JmWVhKeUxtcHZhVzRvSnl3bktUdGNjbHh1WEhKY2JseDBMeThnU1hRbmN5QnZjR1Z1SUdGa1pHbDBhVzl1WVd3Z1pHbGhiRzluSUdadmNpQmhjMnRwYm1jZ2IzQmxibWx1WnlCMWJISWdhVzRnYm1WM0lIUmhZbHh5WEc1Y2RDOHZJSGRwYm1SdmR5NXZjR1Z1S0NCbGVIQnZjblJmWTNOMlgzVnliQ3dnSjE5aWJHRnVheWNwTG1adlkzVnpLQ2s3WEhKY2JuMGlYU3dpWm1sc1pTSTZJbWx1WTJ4MVpHVnpMM0JoWjJVdFltOXZhMmx1WjNNdlgyOTFkQzlpYjI5cmFXNW5jMTlmWVdOMGFXOXVjeTVxY3lKOVxuIl0sIm5hbWVzIjpbIl90eXBlb2YiLCJvYmoiLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwid3BiY19hanhfYm9va2luZ19hamF4X2FjdGlvbl9yZXF1ZXN0IiwiYWN0aW9uX3BhcmFtIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiY29uc29sZSIsImdyb3VwQ29sbGFwc2VkIiwibG9nIiwid3BiY19ib29raW5nX2xpc3RpbmdfcmVsb2FkX2J1dHRvbl9fc3Bpbl9zdGFydCIsIkFycmF5IiwiaXNBcnJheSIsIndwYmNfZ2V0X3NlbGVjdGVkX2xvY2FsZSIsIndwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZyIsImdldF9zZWN1cmVfcGFyYW0iLCJhY3Rpb25fcG9zdF9wYXJhbXMiLCJhY3Rpb24iLCJub25jZSIsIndwYmNfYWp4X3VzZXJfaWQiLCJ3cGJjX2FqeF9sb2NhbGUiLCJhY3Rpb25fcGFyYW1zIiwic2VhcmNoX3BhcmFtcyIsImpRdWVyeSIsInBvc3QiLCJ3cGJjX2dsb2JhbDEiLCJ3cGJjX2FqYXh1cmwiLCJyZXNwb25zZV9kYXRhIiwidGV4dFN0YXR1cyIsImpxWEhSIiwiZ3JvdXBFbmQiLCJoaWRlIiwiZ2V0X290aGVyX3BhcmFtIiwiaHRtbCIsIndwYmNfYm9va2luZ19saXN0aW5nX3JlbG9hZF9idXR0b25fX3NwaW5fcGF1c2UiLCJ3cGJjX2FkbWluX3Nob3dfbWVzc2FnZSIsInJlcGxhY2UiLCJpc19yZWxvYWRfYWpheF9saXN0aW5nIiwid3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X3dpdGhfcGFyYW1zIiwic2V0VGltZW91dCIsIndwYmNfYm9va2luZ19saXN0aW5nX3JlbG9hZF9idXR0b25fX2lzX3NwaW4iLCJkb2N1bWVudCIsImxvY2F0aW9uIiwiaHJlZiIsInJlbG9hZCIsIndwYmNfYWp4X2Jvb2tpbmdfX2V4cG9ydF9jc3ZfdXJsX19kb3dubG9hZCIsIndwYmNfYWp4X2Jvb2tpbmdfX2FjdHVhbF9saXN0aW5nX19zaG93Iiwid3BiY19idXR0b25fX3JlbW92ZV9zcGluIiwid3BiY19wb3B1cF9tb2RhbHNfX2hpZGUiLCJmYWlsIiwiZXJyb3JUaHJvd24iLCJ3aW5kb3ciLCJlcnJvcl9tZXNzYWdlIiwicmVzcG9uc2VUZXh0Iiwid3BiY19hanhfYm9va2luZ19zaG93X21lc3NhZ2UiLCJidXR0b25fY2xpY2tlZF9lbGVtZW50X2lkIiwicHJldmlvc19jbGFzc2VzIiwiakVsZW1lbnQiLCJ3cGJjX2J1dHRvbl9kaXNhYmxlX2xvYWRpbmdfaWNvbiIsImdldCIsIndwYmNfYnV0dG9uX2VuYWJsZV9sb2FkaW5nX2ljb24iLCJ0aGlzX2J1dHRvbiIsImpCdXR0b24iLCJqSWNvbiIsImZpbmQiLCJhdHRyIiwicmVtb3ZlQ2xhc3MiLCJhZGRDbGFzcyIsInByZXZpb3VzX29uY2xpY2siLCJ3cGJjX215X21vZGFsIiwid3BiY19hanhfY2xpY2tfb25fZGF0ZXNfc2hvcnQiLCJzaG93IiwidWlfdXNyX19kYXRlc19zaG9ydF93aWRlIiwid3BiY19hanhfY2xpY2tfb25fZGF0ZXNfd2lkZSIsIndwYmNfYWp4X2NsaWNrX29uX2RhdGVzX3RvZ2dsZSIsInRoaXNfZGF0ZSIsInBhcmVudHMiLCJ0b2dnbGUiLCJ3cGJjX2FqeF9ib29raW5nX191aV9kZWZpbmVfX2xvY2FsZSIsImVhY2giLCJpbmRleCIsImJvb2tpbmdfbG9jYWxlX2J1dHRvbiIsInNlbGVjdGlvbiIsInRoaXMiLCJwcm9wIiwiaGFzQ2xhc3MiLCJ3cGJjX3RpcHB5IiwiX3RpcHB5Iiwic2V0Q29udGVudCIsIndwYmNfYWp4X2Jvb2tpbmdfX3VpX2RlZmluZV9fcmVtYXJrIiwicmVtYXJrX2J1dHRvbiIsInRleHRfdmFsIiwidmFsIiwic2V0UHJvcHMiLCJhbGxvd0hUTUwiLCJjb250ZW50Iiwid3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfX3JlbWFyayIsImpxX2J1dHRvbiIsIndwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX3Nob3dfX2NoYW5nZV9yZXNvdXJjZSIsImJvb2tpbmdfaWQiLCJyZXNvdXJjZV9pZCIsInRyaWdnZXIiLCJkZXRhY2giLCJhcHBlbmRUbyIsImlzIiwid3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfc2F2ZV9fY2hhbmdlX3Jlc291cmNlIiwidGhpc19lbCIsImJvb2tpbmdfYWN0aW9uIiwiZWxfaWQiLCJzZWxlY3RlZF9yZXNvdXJjZV9pZCIsInVpX2NsaWNrZWRfZWxlbWVudF9pZCIsIndwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX2Nsb3NlX19jaGFuZ2VfcmVzb3VyY2UiLCJ3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19zaG93X19kdXBsaWNhdGVfYm9va2luZyIsIndwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX3NhdmVfX2R1cGxpY2F0ZV9ib29raW5nIiwid3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfY2xvc2VfX2R1cGxpY2F0ZV9ib29raW5nIiwid3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfc2hvd19fc2V0X3BheW1lbnRfc3RhdHVzIiwialNlbGVjdCIsInNlbGVjdGVkX3BheV9zdGF0dXMiLCJpc05hTiIsInBhcnNlRmxvYXQiLCJ3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19zYXZlX19zZXRfcGF5bWVudF9zdGF0dXMiLCJzZWxlY3RlZF9wYXltZW50X3N0YXR1cyIsIndwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX2Nsb3NlX19zZXRfcGF5bWVudF9zdGF0dXMiLCJ3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19zYXZlX19zZXRfYm9va2luZ19jb3N0IiwiYm9va2luZ19jb3N0Iiwid3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfY2xvc2VfX3NldF9ib29raW5nX2Nvc3QiLCJ3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19fc2VuZF9wYXltZW50X3JlcXVlc3QiLCJyZWFzb25fb2ZfYWN0aW9uIiwid3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfX2ltcG9ydF9nb29nbGVfY2FsZW5kYXIiLCJib29raW5nX2djYWxfZXZlbnRzX2Zyb20iLCJib29raW5nX2djYWxfZXZlbnRzX2Zyb21fb2Zmc2V0IiwiYm9va2luZ19nY2FsX2V2ZW50c19mcm9tX29mZnNldF90eXBlIiwiYm9va2luZ19nY2FsX2V2ZW50c191bnRpbCIsImJvb2tpbmdfZ2NhbF9ldmVudHNfdW50aWxfb2Zmc2V0IiwiYm9va2luZ19nY2FsX2V2ZW50c191bnRpbF9vZmZzZXRfdHlwZSIsImJvb2tpbmdfZ2NhbF9ldmVudHNfbWF4IiwiYm9va2luZ19nY2FsX3Jlc291cmNlIiwid3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfX2V4cG9ydF9jc3YiLCJwYXJhbXMiLCJzZWxlY3RlZF9ib29raW5nX2lkX2FyciIsIndwYmNfZ2V0X3NlbGVjdGVkX3Jvd19pZCIsImV4cG9ydF90eXBlIiwiY3N2X2V4cG9ydF9zZXBhcmF0b3IiLCJjc3ZfZXhwb3J0X3NraXBfZmllbGRzIiwiam9pbiIsInNlYXJjaF9nZXRfYWxsX3BhcmFtcyIsImV4cG9ydF9jc3ZfdXJsIl0sIm1hcHBpbmdzIjoiYUFXQSxTQUFTQSxRQUFRQyxHQUFrQyxPQUFPRCxRQUFVLG1CQUFxQkUsUUFBVSxpQkFBbUJBLE9BQU9DLFNBQVcsU0FBVUYsR0FBTyxjQUFjQSxHQUFTLFNBQVVBLEdBQU8sT0FBT0EsR0FBTyxtQkFBcUJDLFFBQVVELEVBQUlHLGNBQWdCRixRQUFVRCxJQUFRQyxPQUFPRyxVQUFZLGdCQUFrQkosSUFBZ0JBLEdBRXpVLFNBQVNLLHVDQUNQLElBQUlDLEVBQWtDLEVBQW5CQyxVQUFVQyxhQUErQkMsSUFBakJGLFVBQVUsR0FBbUJBLFVBQVUsR0FBSyxHQUN2RkcsUUFBUUMsZUFBZSw0QkFDdkJELFFBQVFFLElBQUksaUNBQWtDTixHQUU5Q08saURBRUlKLE1BQWFILEVBQXlCLFlBQU1RLE1BQU1DLFFBQVFULEVBQXlCLGNBRXJGQSxFQUFxQixPQUFJVSx5QkFBeUJWLEVBQXlCLFdBQUdXLHlCQUF5QkMsaUJBQWlCLFlBRzFILElBQUlDLEVBQXFCLENBQ3ZCQyxPQUFRLDJCQUNSQyxNQUFPSix5QkFBeUJDLGlCQUFpQixTQUNqREksaUJBQWtCYixNQUFhSCxFQUFzQixRQUFJVyx5QkFBeUJDLGlCQUFpQixXQUFhWixFQUFzQixRQUN0SWlCLGdCQUFpQmQsTUFBYUgsRUFBcUIsT0FBSVcseUJBQXlCQyxpQkFBaUIsVUFBWVosRUFBcUIsT0FDbElrQixjQUFlbEIsUUFHeUIsSUFBL0JBLEVBQWFtQixnQkFDdEJOLEVBQWtDLGNBQUliLEVBQWFtQixxQkFDNUNOLEVBQW1CSyxjQUFjQyxlQUkxQ0MsT0FBT0MsS0FBS0MsYUFBYUMsYUFBY1YsRUFRdkMsU0FBVVcsRUFBZUMsRUFBWUMsR0FJbkMsT0FIQXRCLFFBQVFFLElBQUksNERBQTZEa0IsR0FDekVwQixRQUFRdUIsV0FFdUIsV0FBM0JsQyxRQUFRK0IsSUFBaUQsT0FBbEJBLEdBQ3pDSixPQUFPLHFCQUFxQlEsWUFDNUJSLE9BQU9ULHlCQUF5QmtCLGdCQUFnQixzQkFBc0JDLEtBQUssNEVBQThFTixFQUFnQixZQUkzS08saURBQ0FDLHdCQUF3QlIsRUFBd0MseUJBQUVTLFFBQVEsTUFBTyxVQUFXLEtBQU9ULEVBQXVDLHdCQUFJLFVBQVksUUFBUyxLQUUvSixLQUFPQSxFQUF1Qyw0QkFDNUNVLEdBQXlCLEtBRWZWLEVBQXNELHVDQUFzQixxQkFDeEZXLGlEQUFpRFgsRUFBc0QsdUNBQXNCLG9CQUMxR1ksV0FBVyxXQUN4QkMsZ0RBQ0VsQyxNQUFhcUIsRUFBc0QsdUNBQXNCLG1CQUFxQixrQkFDaEhjLFNBQVNDLFNBQVNDLEtBQU9oQixFQUFzRCx1Q0FBc0IsbUJBQXFCLGtCQUUxSGMsU0FBU0MsU0FBU0UsV0FHckIsS0FDSFAsR0FBeUIsR0FJdkIvQixNQUFhcUIsRUFBc0QsdUNBQWtCLGlCQUN2RmtCLDJDQUEyQ2xCLEVBQXNELHVDQUFrQixnQkFDbkhVLEdBQXlCLEdBR3ZCQSxHQUNGUywwQ0FLSkMseUJBQXlCcEIsRUFBa0MsbUJBQXlCLHVCQUVwRnFCLCtCQUNBekIsT0FBTyxpQkFBaUJVLEtBQUtOLElBaEM3QixJQWNJVSxJQW1CSFksS0FBSyxTQUFVcEIsRUFBT0QsRUFBWXNCLEdBQy9CQyxPQUFPNUMsU0FBVzRDLE9BQU81QyxRQUFRRSxLQUNuQ0YsUUFBUUUsSUFBSSxhQUFjb0IsRUFBT0QsRUFBWXNCLEdBRy9DM0IsT0FBTyxxQkFBcUJRLE9BQ3hCcUIsRUFBZ0IsMkJBQXVDRixFQUV2RHJCLEVBQU13QixlQUNSRCxHQUFpQnZCLEVBQU13QixjQUd6QkQsRUFBZ0JBLEVBQWNoQixRQUFRLE1BQU8sVUFDN0NrQiw4QkFBOEJGLEtBZ0JsQyxTQUFTTCx5QkFBeUJRLEdBQ2hDLElBQUlDLEVBQWtCLEdBVXRCLE9BUklsRCxNQUFhaUQsSUFDWEUsRUFBV2xDLE9BQU8sSUFBTWdDLElBRWZsRCxTQUNYbUQsRUFBa0JFLGlDQUFpQ0QsRUFBU0UsSUFBSSxLQUk3REgsRUFVVCxTQUFTSSxnQ0FBZ0NDLEdBQ3ZDLElBQUlDLEVBQVV2QyxPQUFPc0MsR0FDakJFLEVBQVFELEVBQVFFLEtBQUssS0FDckJSLEVBQWtCTyxFQUFNRSxLQUFLLFNBY2pDLE9BYkFGLEVBQU1HLGNBQWNDLFNBQVMscURBSTdCSixFQUFNRSxLQUFLLHNCQUF1QlQsR0FDbENNLEVBQVFLLFNBQVMsWUFJakJMLEVBQVFHLEtBQUssd0JBQXlCSCxFQUFRRyxLQUFLLFlBRW5ESCxFQUFRRyxLQUFLLFVBQVcsSUFFakJULEVBVVQsU0FBU0UsaUNBQWlDRyxHQUN4QyxJQUFJQyxFQUFVdkMsT0FBT3NDLEdBQ2pCRSxFQUFRRCxFQUFRRSxLQUFLLEtBQ3JCUixFQUFrQk8sRUFBTUUsS0FBSyx1QkFFN0IsSUFBTVQsR0FDUk8sRUFBTUcsY0FBY0MsU0FBU1gsR0FHL0JNLEVBQVFJLFlBQVksWUFFaEJFLEVBQW1CTixFQUFRRyxLQUFLLHlCQU1wQyxNQUpJLElBQU1HLEdBQ1JOLEVBQVFHLEtBQUssVUFBV0csR0FHbkJaLEVBT1QsU0FBU1IsMEJBRUgsbUJBQXNCekIsT0FBTyxxQkFBcUI4QyxlQUNwRDlDLE9BQU8scUJBQXFCOEMsY0FBYyxRQU85QyxTQUFTQyxnQ0FDUC9DLE9BQU8sNENBQTRDUSxPQUNuRFIsT0FBTyw0Q0FBNENnRCxPQUNuRGpDLGlEQUFpRCxDQUMvQ2tDLHlCQUE0QixVQUloQyxTQUFTQywrQkFDUGxELE9BQU8sNENBQTRDUSxPQUNuRFIsT0FBTyw0Q0FBNENnRCxPQUNuRGpDLGlEQUFpRCxDQUMvQ2tDLHlCQUE0QixTQUloQyxTQUFTRSwrQkFBK0JDLEdBQ3RDcEQsT0FBT29ELEdBQVdDLFFBQVEsbUJBQW1CWixLQUFLLHdCQUF3QmEsU0FDMUV0RCxPQUFPb0QsR0FBV0MsUUFBUSxtQkFBbUJaLEtBQUssdUJBQXVCYSxTQVV6RXRFLFFBQVFFLElBQUksaUNBQWtDa0UsR0FVaEQsU0FBU0csc0NBQ1B2RCxPQUFPLGtDQUFrQ3dELEtBQUssU0FBVUMsR0FDdEQsSUFPUUMsRUFQSkMsRUFBWTNELE9BQU80RCxNQUFNbEIsS0FBSyxpQ0FFOUIzRCxJQUFjNEUsSUFDaEIzRCxPQUFPNEQsTUFBTW5CLEtBQUssaUJBQW1Ca0IsRUFBWSxNQUFNRSxLQUFLLFlBQVksR0FFcEUsSUFBTUYsR0FBYTNELE9BQU80RCxNQUFNRSxTQUFTLG1DQUV2Q0osRUFBd0IxRCxPQUFPNEQsTUFBTVAsUUFBUSxzQkFBc0JaLEtBQUssK0JBRXRERyxTQUFTLGVBRTNCLG1CQUFzQm1CLFlBQ3hCTCxFQUFzQnRCLElBQUksR0FBRzRCLE9BQU9DLFdBQVdOLE9BY3pELFNBQVNPLHNDQUNQbEUsT0FBTyx1REFBdUR3RCxLQUFLLFNBQVVDLEdBQzNFLElBR01VLEVBSEZDLEVBQVdwRSxPQUFPNEQsTUFBTVMsV0FFeEJ0RixJQUFjcUYsR0FBWSxJQUFNQSxHQUdQLEdBRnZCRCxFQUFnQm5FLE9BQU80RCxNQUFNUCxRQUFRLGFBQWFaLEtBQUssNkJBRXpDM0QsU0FDaEJxRixFQUFjdkIsU0FBUyxlQUVuQixtQkFBc0JtQixZQUd4QkksRUFBYy9CLElBQUksR0FBRzRCLE9BQU9NLFNBQVMsQ0FDbkNDLFdBQVcsRUFDWEMsUUFBU0osRUFBU3ZELFFBQVEsVUFBVyxhQWNqRCxTQUFTNEQsbUNBQW1DQyxHQUMxQ0EsRUFBVXJCLFFBQVEsYUFBYVosS0FBSyxzQkFBc0JhLFNBTTVELFNBQVNxQixpREFBaURDLEVBQVlDLEdBRXBFN0UsT0FBTyx3Q0FBd0NxRSxJQUFJTyxHQUVuRDVFLE9BQU8sNkNBQTZDcUUsSUFBSVEsR0FBYUMsUUFBUSxVQUd2RTlFLE9BQU8scUNBQXFDK0UsU0FFOUNDLFNBQVNoRixPQUFPLG9EQUFzRDRFLElBSXJFNUUsT0FBTyxvREFBc0Q0RSxHQUFZSyxHQUFHLGFBQy9FakYsT0FBTyw4Q0FBOENRLE9BSXZEUixPQUFPLG9EQUFzRDRFLEdBQVl0QixTQUczRSxTQUFTNEIsaURBQWlEQyxFQUFTQyxFQUFnQkMsR0FDakYxRyxxQ0FBcUMsQ0FDbkN5RyxlQUFrQkEsRUFDbEJSLFdBQWM1RSxPQUFPLHdDQUF3Q3FFLE1BQzdEaUIscUJBQXdCdEYsT0FBTyw2Q0FBNkNxRSxNQUM1RWtCLHNCQUF5QkYsSUFFM0JoRCxnQ0FBZ0M4QyxHQUdsQyxTQUFTSyxvREFHQ3hGLE9BQU8scUNBQXFDK0UsU0FFOUNDLFNBQVNoRixPQUFPLG1EQUd0QkEsT0FBTyxvREFBb0RRLE9BTTdELFNBQVNpRixtREFBbURiLEVBQVlDLEdBRXRFN0UsT0FBTyxvREFBb0RxRSxJQUFJTyxHQUUvRDVFLE9BQU8seURBQXlEcUUsSUFBSVEsR0FBYUMsUUFBUSxVQUduRjlFLE9BQU8saURBQWlEK0UsU0FFMURDLFNBQVNoRixPQUFPLGdFQUFrRTRFLElBR2pGNUUsT0FBTyxnRUFBa0U0RSxHQUFZSyxHQUFHLGFBQzNGakYsT0FBTyw4Q0FBOENRLE9BSXZEUixPQUFPLGdFQUFrRTRFLEdBQVl0QixTQUd2RixTQUFTb0MsbURBQW1EUCxFQUFTQyxFQUFnQkMsR0FDbkYxRyxxQ0FBcUMsQ0FDbkN5RyxlQUFrQkEsRUFDbEJSLFdBQWM1RSxPQUFPLG9EQUFvRHFFLE1BQ3pFaUIscUJBQXdCdEYsT0FBTyx5REFBeURxRSxNQUN4RmtCLHNCQUF5QkYsSUFFM0JoRCxnQ0FBZ0M4QyxHQUdsQyxTQUFTUSxzREFHQzNGLE9BQU8saURBQWlEK0UsU0FFMURDLFNBQVNoRixPQUFPLCtEQUd0QkEsT0FBTyxnRUFBZ0VRLE9BTXpFLFNBQVNvRixvREFBb0RoQixHQUMzRCxJQUFJaUIsRUFBVTdGLE9BQU8sK0NBQWlENEUsR0FBWW5DLEtBQUssVUFDbkZxRCxFQUFzQkQsRUFBUW5ELEtBQUssdUJBRWxDcUQsTUFBTUMsV0FBV0YsSUFHcEJELEVBQVFwRCxLQUFLLGlCQUFtQnFELEVBQXNCLE1BRnRERCxFQUFRcEQsS0FBSyxzQkFFK0NvQixLQUFLLFlBQVksR0FJMUU3RCxPQUFPLCtDQUFpRDRFLEdBQVlLLEdBQUcsYUFDMUVqRixPQUFPLDhDQUE4Q1EsT0FJdkRSLE9BQU8sK0NBQWlENEUsR0FBWXRCLFNBR3RFLFNBQVMyQyxvREFBb0RyQixFQUFZTyxFQUFTQyxFQUFnQkMsR0FDaEcxRyxxQ0FBcUMsQ0FDbkN5RyxlQUFrQkEsRUFDbEJSLFdBQWNBLEVBQ2RzQix3QkFBMkJsRyxPQUFPLDZCQUErQjRFLEdBQVlQLE1BQzdFa0Isc0JBQXlCRixFQUFRLFVBRW5DaEQsZ0NBQWdDOEMsR0FDaENuRixPQUFPLElBQU1xRixFQUFRLFdBQVc3RSxPQUdsQyxTQUFTMkYsdURBRVBuRyxPQUFPLCtDQUErQ1EsT0FNeEQsU0FBUzRGLGtEQUFrRHhCLEVBQVlPLEVBQVNDLEVBQWdCQyxHQUM5RjFHLHFDQUFxQyxDQUNuQ3lHLGVBQWtCQSxFQUNsQlIsV0FBY0EsRUFDZHlCLGFBQWdCckcsT0FBTywyQkFBNkI0RSxFQUFhLFNBQVNQLE1BQzFFa0Isc0JBQXlCRixFQUFRLFVBRW5DaEQsZ0NBQWdDOEMsR0FDaENuRixPQUFPLElBQU1xRixFQUFRLFdBQVc3RSxPQUdsQyxTQUFTOEYscURBRVB0RyxPQUFPLDZDQUE2Q1EsT0FNdEQsU0FBUytGLG1EQUNQNUgscUNBQXFDLENBQ25DeUcsZUFBa0IsdUJBQ2xCUixXQUFjNUUsT0FBTyw0Q0FBNENxRSxNQUNqRW1DLGlCQUFvQnhHLE9BQU8sa0RBQWtEcUUsTUFDN0VrQixzQkFBeUIsNkNBRTNCbEQsZ0NBQWdDckMsT0FBTyw2Q0FBNkNvQyxJQUFJLElBTTFGLFNBQVNxRSxxREFDUDlILHFDQUFxQyxDQUNuQ3lHLGVBQWtCLHlCQUNsQkcsc0JBQXlCLGtEQUN6Qm1CLHlCQUE0QjFHLE9BQU8sMEZBQTBGcUUsTUFDN0hzQyxnQ0FBbUMzRyxPQUFPLGlGQUFpRnFFLE1BQzNIdUMscUNBQXdDNUcsT0FBTyxzR0FBc0dxRSxNQUNySndDLDBCQUE2QjdHLE9BQU8sMkZBQTJGcUUsTUFDL0h5QyxpQ0FBb0M5RyxPQUFPLGtGQUFrRnFFLE1BQzdIMEMsc0NBQXlDL0csT0FBTyx1R0FBdUdxRSxNQUN2SjJDLHdCQUEyQmhILE9BQU8seUVBQXlFcUUsTUFDM0c0QyxzQkFBeUJqSCxPQUFPLHVGQUF1RnFFLFFBRXpIaEMsZ0NBQWdDckMsT0FBTyxpR0FBaUdvQyxJQUFJLElBTTlJLFNBQVM4RSx1Q0FBdUNDLEdBQzlDLElBQUlDLEVBQTBCQywyQkFDOUIxSSxxQ0FBcUMsQ0FDbkN5RyxlQUFrQitCLEVBQXVCLGVBQ3pDNUIsc0JBQXlCNEIsRUFBOEIsc0JBQ3ZERyxZQUFlSCxFQUFvQixZQUNuQ0kscUJBQXdCSixFQUE2QixxQkFDckRLLHVCQUEwQkwsRUFBK0IsdUJBQ3pEdkMsV0FBY3dDLEVBQXdCSyxLQUFLLEtBQzNDMUgsY0FBaUJSLHlCQUF5Qm1JLDBCQUc1Q3JGLGdDQURjckMsT0FBTyxJQUFNbUgsRUFBOEIsdUJBQUcvRSxJQUFJLElBVWxFLFNBQVNkLDJDQUEyQ3FHLEdBRWxEekcsU0FBU0MsU0FBU0MsS0FBT3VHIn0=
|
includes/page-bookings/_out/bookings__hooks.js
ADDED
@@ -0,0 +1,143 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
"use strict";
|
2 |
+
/**
|
3 |
+
* Define HTML ui Hooks: on KeyUp | Change | -> Sort Order & Number Items / Page
|
4 |
+
* * We are chnaged it once, because such elements always the same
|
5 |
+
*/
|
6 |
+
|
7 |
+
function wpbc_ajx_booking_define_ui_hooks_once() {
|
8 |
+
//------------------------------------------------------------------------------------------------------------------
|
9 |
+
// Booked dates
|
10 |
+
//------------------------------------------------------------------------------------------------------------------
|
11 |
+
jQuery('#wh_booking_date').on('change', function (event) {
|
12 |
+
var changed_value = JSON.parse(jQuery('#wh_booking_date').val());
|
13 |
+
wpbc_ajx_booking_send_search_request_with_params({
|
14 |
+
'wh_booking_date': changed_value,
|
15 |
+
'page_num': 1,
|
16 |
+
// Frontend selected elements (saving for future use, after F5)
|
17 |
+
'ui_wh_booking_date_radio': jQuery('input[name="ui_wh_booking_date_radio"]:checked').val(),
|
18 |
+
'ui_wh_booking_date_next': jQuery('#ui_wh_booking_date_next').val(),
|
19 |
+
'ui_wh_booking_date_prior': jQuery('#ui_wh_booking_date_prior').val(),
|
20 |
+
'ui_wh_booking_date_checkin': jQuery('#ui_wh_booking_date_checkin').val(),
|
21 |
+
'ui_wh_booking_date_checkout': jQuery('#ui_wh_booking_date_checkout').val()
|
22 |
+
});
|
23 |
+
}); //------------------------------------------------------------------------------------------------------------------
|
24 |
+
// Approved | Pending | All
|
25 |
+
//------------------------------------------------------------------------------------------------------------------
|
26 |
+
|
27 |
+
jQuery('#wh_approved').on('change', function (event) {
|
28 |
+
var changed_value = jQuery('#wh_approved').val();
|
29 |
+
changed_value = JSON.parse(changed_value);
|
30 |
+
wpbc_ajx_booking_send_search_request_with_params({
|
31 |
+
'wh_approved': changed_value[0],
|
32 |
+
'page_num': 1
|
33 |
+
});
|
34 |
+
}); //------------------------------------------------------------------------------------------------------------------
|
35 |
+
// Keywords
|
36 |
+
//------------------------------------------------------------------------------------------------------------------
|
37 |
+
|
38 |
+
jQuery('#wpbc_search_field').on("keyup", function (event) {
|
39 |
+
if (13 !== event.which) {
|
40 |
+
wpbc_ajx_booking_searching_after_few_seconds('#wpbc_search_field'); // Searching after 1.5 seconds after Key Up
|
41 |
+
} else {
|
42 |
+
wpbc_ajx_booking_searching_after_few_seconds('#wpbc_search_field', 0); // Immediate search
|
43 |
+
}
|
44 |
+
}); //------------------------------------------------------------------------------------------------------------------
|
45 |
+
// Existing | Trash | Any
|
46 |
+
//------------------------------------------------------------------------------------------------------------------
|
47 |
+
|
48 |
+
jQuery('#wh_trash').on('change', function (event) {
|
49 |
+
var changed_value = JSON.parse(jQuery('#wh_trash').val());
|
50 |
+
wpbc_ajx_booking_send_search_request_with_params({
|
51 |
+
'wh_trash': changed_value[0],
|
52 |
+
'page_num': 1
|
53 |
+
});
|
54 |
+
}); //------------------------------------------------------------------------------------------------------------------
|
55 |
+
// All bookings | New bookings
|
56 |
+
//------------------------------------------------------------------------------------------------------------------
|
57 |
+
|
58 |
+
jQuery('#wh_what_bookings').on('change', function (event) {
|
59 |
+
var changed_value = JSON.parse(jQuery('#wh_what_bookings').val());
|
60 |
+
wpbc_ajx_booking_send_search_request_with_params({
|
61 |
+
'wh_what_bookings': changed_value[0],
|
62 |
+
'page_num': 1
|
63 |
+
});
|
64 |
+
}); //------------------------------------------------------------------------------------------------------------------
|
65 |
+
// "Creation Date" of bookings
|
66 |
+
//------------------------------------------------------------------------------------------------------------------
|
67 |
+
|
68 |
+
jQuery('#wh_modification_date').on('change', function (event) {
|
69 |
+
var changed_value = JSON.parse(jQuery('#wh_modification_date').val());
|
70 |
+
wpbc_ajx_booking_send_search_request_with_params({
|
71 |
+
'wh_modification_date': changed_value,
|
72 |
+
'page_num': 1,
|
73 |
+
// Frontend selected elements (saving for future use, after F5)
|
74 |
+
'ui_wh_modification_date_radio': jQuery('input[name="ui_wh_modification_date_radio"]:checked').val(),
|
75 |
+
'ui_wh_modification_date_prior': jQuery('#ui_wh_modification_date_prior').val(),
|
76 |
+
'ui_wh_modification_date_checkin': jQuery('#ui_wh_modification_date_checkin').val(),
|
77 |
+
'ui_wh_modification_date_checkout': jQuery('#ui_wh_modification_date_checkout').val()
|
78 |
+
});
|
79 |
+
}); //------------------------------------------------------------------------------------------------------------------
|
80 |
+
// Payment Status
|
81 |
+
//------------------------------------------------------------------------------------------------------------------
|
82 |
+
|
83 |
+
jQuery('#wh_pay_status').on('change', function (event) {
|
84 |
+
var changed_value = JSON.parse(jQuery('#wh_pay_status').val());
|
85 |
+
wpbc_ajx_booking_send_search_request_with_params({
|
86 |
+
'wh_pay_status': changed_value,
|
87 |
+
'page_num': 1,
|
88 |
+
// Frontend selected elements (saving for future use, after F5)
|
89 |
+
'ui_wh_pay_status_radio': undefined === jQuery('input[name="ui_wh_pay_status_radio"]:checked').val() ? '' : jQuery('input[name="ui_wh_pay_status_radio"]:checked').val(),
|
90 |
+
'ui_wh_pay_status_custom': jQuery('#ui_wh_pay_status_custom').val()
|
91 |
+
});
|
92 |
+
}); //------------------------------------------------------------------------------------------------------------------
|
93 |
+
// Min Cost
|
94 |
+
//------------------------------------------------------------------------------------------------------------------
|
95 |
+
|
96 |
+
jQuery('#wh_cost').on('change', function (event) {
|
97 |
+
var changed_value = jQuery('#wh_cost').val();
|
98 |
+
wpbc_ajx_booking_send_search_request_with_params({
|
99 |
+
'wh_cost': changed_value,
|
100 |
+
'page_num': 1
|
101 |
+
});
|
102 |
+
}); //------------------------------------------------------------------------------------------------------------------
|
103 |
+
// Max Cost
|
104 |
+
//------------------------------------------------------------------------------------------------------------------
|
105 |
+
|
106 |
+
jQuery('#wh_cost2').on('change', function (event) {
|
107 |
+
var changed_value = jQuery('#wh_cost2').val();
|
108 |
+
wpbc_ajx_booking_send_search_request_with_params({
|
109 |
+
'wh_cost2': changed_value,
|
110 |
+
'page_num': 1
|
111 |
+
});
|
112 |
+
}); //------------------------------------------------------------------------------------------------------------------
|
113 |
+
// Booking resources
|
114 |
+
//------------------------------------------------------------------------------------------------------------------
|
115 |
+
|
116 |
+
jQuery('#wh_booking_type').on('change', function (event) {
|
117 |
+
var changed_value = jQuery('#wh_booking_type').val(); // it's get as array
|
118 |
+
|
119 |
+
if (Array.isArray(changed_value) && 0 === changed_value.length) {
|
120 |
+
changed_value = ['-1'];
|
121 |
+
}
|
122 |
+
|
123 |
+
wpbc_ajx_booking_send_search_request_with_params({
|
124 |
+
'wh_booking_type': changed_value,
|
125 |
+
'page_num': 1
|
126 |
+
});
|
127 |
+
}); //------------------------------------------------------------------------------------------------------------------
|
128 |
+
// Sorting
|
129 |
+
//------------------------------------------------------------------------------------------------------------------
|
130 |
+
|
131 |
+
jQuery('#wh_sort').on('change', function (event) {
|
132 |
+
var changed_value = jQuery('#wh_sort').val();
|
133 |
+
changed_value = JSON.parse(changed_value);
|
134 |
+
wpbc_ajx_booking_send_search_request_with_params({
|
135 |
+
'wh_sort': changed_value[0]
|
136 |
+
});
|
137 |
+
});
|
138 |
+
}
|
139 |
+
|
140 |
+
jQuery(document).ready(function () {
|
141 |
+
wpbc_ajx_booking_define_ui_hooks_once();
|
142 |
+
});
|
143 |
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluY2x1ZGVzL3BhZ2UtYm9va2luZ3MvX3NyYy9ib29raW5nc19faG9va3MuanMiXSwibmFtZXMiOlsid3BiY19hanhfYm9va2luZ19kZWZpbmVfdWlfaG9va3Nfb25jZSIsImpRdWVyeSIsIm9uIiwiZXZlbnQiLCJjaGFuZ2VkX3ZhbHVlIiwiSlNPTiIsInBhcnNlIiwidmFsIiwid3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X3dpdGhfcGFyYW1zIiwid2hpY2giLCJ3cGJjX2FqeF9ib29raW5nX3NlYXJjaGluZ19hZnRlcl9mZXdfc2Vjb25kcyIsInVuZGVmaW5lZCIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsImRvY3VtZW50IiwicmVhZHkiXSwibWFwcGluZ3MiOiJBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsU0FBU0EscUNBQVQsR0FBZ0Q7QUFFL0M7QUFDQTtBQUNBO0FBQ0FDLEVBQUFBLE1BQU0sQ0FBRSxrQkFBRixDQUFOLENBQTZCQyxFQUE3QixDQUFpQyxRQUFqQyxFQUEyQyxVQUFVQyxLQUFWLEVBQWlCO0FBRTNELFFBQUlDLGFBQWEsR0FBR0MsSUFBSSxDQUFDQyxLQUFMLENBQVlMLE1BQU0sQ0FBRSxrQkFBRixDQUFOLENBQTZCTSxHQUE3QixFQUFaLENBQXBCO0FBRUFDLElBQUFBLGdEQUFnRCxDQUFFO0FBQ3JDLHlCQUFtQkosYUFEa0I7QUFFckMsa0JBQW1CLENBRmtCO0FBR3JDO0FBQ0Esa0NBQStCSCxNQUFNLENBQUUsZ0RBQUYsQ0FBTixDQUEyRE0sR0FBM0QsRUFKTTtBQUtyQyxpQ0FBK0JOLE1BQU0sQ0FBRSwwQkFBRixDQUFOLENBQXFDTSxHQUFyQyxFQUxNO0FBTXJDLGtDQUErQk4sTUFBTSxDQUFFLDJCQUFGLENBQU4sQ0FBc0NNLEdBQXRDLEVBTk07QUFPckMsb0NBQStCTixNQUFNLENBQUUsNkJBQUYsQ0FBTixDQUF3Q00sR0FBeEMsRUFQTTtBQVFyQyxxQ0FBK0JOLE1BQU0sQ0FBRSw4QkFBRixDQUFOLENBQXlDTSxHQUF6QztBQVJNLEtBQUYsQ0FBaEQ7QUFVQSxHQWRELEVBTCtDLENBcUIvQztBQUNBO0FBQ0E7O0FBQ0FOLEVBQUFBLE1BQU0sQ0FBRSxjQUFGLENBQU4sQ0FBeUJDLEVBQXpCLENBQTZCLFFBQTdCLEVBQXVDLFVBQVVDLEtBQVYsRUFBaUI7QUFFdkQsUUFBSUMsYUFBYSxHQUFHSCxNQUFNLENBQUUsY0FBRixDQUFOLENBQXlCTSxHQUF6QixFQUFwQjtBQUVBSCxJQUFBQSxhQUFhLEdBQUdDLElBQUksQ0FBQ0MsS0FBTCxDQUFZRixhQUFaLENBQWhCO0FBRUFJLElBQUFBLGdEQUFnRCxDQUFFO0FBQ3JDLHFCQUFlSixhQUFhLENBQUUsQ0FBRixDQURTO0FBRXJDLGtCQUFlO0FBRnNCLEtBQUYsQ0FBaEQ7QUFJQSxHQVZELEVBeEIrQyxDQW9DL0M7QUFDQTtBQUNBOztBQUNBSCxFQUFBQSxNQUFNLENBQUUsb0JBQUYsQ0FBTixDQUErQkMsRUFBL0IsQ0FBbUMsT0FBbkMsRUFBNEMsVUFBV0MsS0FBWCxFQUFrQjtBQUM3RCxRQUFLLE9BQU9BLEtBQUssQ0FBQ00sS0FBbEIsRUFBeUI7QUFDeEJDLE1BQUFBLDRDQUE0QyxDQUFFLG9CQUFGLENBQTVDLENBRHdCLENBQ3VEO0FBQy9FLEtBRkQsTUFFTztBQUNOQSxNQUFBQSw0Q0FBNEMsQ0FBRSxvQkFBRixFQUF3QixDQUF4QixDQUE1QyxDQURNLENBQzJFO0FBQ2pGO0FBQ0QsR0FORCxFQXZDK0MsQ0ErQy9DO0FBQ0E7QUFDQTs7QUFDQVQsRUFBQUEsTUFBTSxDQUFFLFdBQUYsQ0FBTixDQUFzQkMsRUFBdEIsQ0FBMEIsUUFBMUIsRUFBb0MsVUFBVUMsS0FBVixFQUFpQjtBQUVwRCxRQUFJQyxhQUFhLEdBQUdDLElBQUksQ0FBQ0MsS0FBTCxDQUFZTCxNQUFNLENBQUUsV0FBRixDQUFOLENBQXNCTSxHQUF0QixFQUFaLENBQXBCO0FBRUFDLElBQUFBLGdEQUFnRCxDQUFFO0FBQ3JDLGtCQUFZSixhQUFhLENBQUUsQ0FBRixDQURZO0FBRXJDLGtCQUFZO0FBRnlCLEtBQUYsQ0FBaEQ7QUFJQSxHQVJELEVBbEQrQyxDQTREL0M7QUFDQTtBQUNBOztBQUNBSCxFQUFBQSxNQUFNLENBQUUsbUJBQUYsQ0FBTixDQUE4QkMsRUFBOUIsQ0FBa0MsUUFBbEMsRUFBNEMsVUFBVUMsS0FBVixFQUFpQjtBQUU1RCxRQUFJQyxhQUFhLEdBQUdDLElBQUksQ0FBQ0MsS0FBTCxDQUFZTCxNQUFNLENBQUUsbUJBQUYsQ0FBTixDQUE4Qk0sR0FBOUIsRUFBWixDQUFwQjtBQUVBQyxJQUFBQSxnREFBZ0QsQ0FBRTtBQUNyQywwQkFBb0JKLGFBQWEsQ0FBRSxDQUFGLENBREk7QUFFckMsa0JBQVk7QUFGeUIsS0FBRixDQUFoRDtBQUlBLEdBUkQsRUEvRCtDLENBeUUvQztBQUNBO0FBQ0E7O0FBQ0FILEVBQUFBLE1BQU0sQ0FBRSx1QkFBRixDQUFOLENBQWtDQyxFQUFsQyxDQUFzQyxRQUF0QyxFQUFnRCxVQUFVQyxLQUFWLEVBQWlCO0FBRWhFLFFBQUlDLGFBQWEsR0FBR0MsSUFBSSxDQUFDQyxLQUFMLENBQVlMLE1BQU0sQ0FBRSx1QkFBRixDQUFOLENBQWtDTSxHQUFsQyxFQUFaLENBQXBCO0FBRUFDLElBQUFBLGdEQUFnRCxDQUFFO0FBQ3JDLDhCQUF3QkosYUFEYTtBQUVyQyxrQkFBbUIsQ0FGa0I7QUFHckM7QUFDQSx1Q0FBb0NILE1BQU0sQ0FBRSxxREFBRixDQUFOLENBQWdFTSxHQUFoRSxFQUpDO0FBS3JDLHVDQUFvQ04sTUFBTSxDQUFFLGdDQUFGLENBQU4sQ0FBMkNNLEdBQTNDLEVBTEM7QUFNckMseUNBQW9DTixNQUFNLENBQUUsa0NBQUYsQ0FBTixDQUE2Q00sR0FBN0MsRUFOQztBQU9yQywwQ0FBb0NOLE1BQU0sQ0FBRSxtQ0FBRixDQUFOLENBQThDTSxHQUE5QztBQVBDLEtBQUYsQ0FBaEQ7QUFTQSxHQWJELEVBNUUrQyxDQTJGL0M7QUFDQTtBQUNBOztBQUNBTixFQUFBQSxNQUFNLENBQUUsZ0JBQUYsQ0FBTixDQUEyQkMsRUFBM0IsQ0FBK0IsUUFBL0IsRUFBeUMsVUFBVUMsS0FBVixFQUFpQjtBQUV6RCxRQUFJQyxhQUFhLEdBQUdDLElBQUksQ0FBQ0MsS0FBTCxDQUFZTCxNQUFNLENBQUUsZ0JBQUYsQ0FBTixDQUEyQk0sR0FBM0IsRUFBWixDQUFwQjtBQUVBQyxJQUFBQSxnREFBZ0QsQ0FBRTtBQUNyQyx1QkFBaUJKLGFBRG9CO0FBRXJDLGtCQUFtQixDQUZrQjtBQUdyQztBQUNBLGdDQUErQk8sU0FBUyxLQUFLVixNQUFNLENBQUUsOENBQUYsQ0FBTixDQUF5RE0sR0FBekQsRUFBaEIsR0FDbkIsRUFEbUIsR0FFbkJOLE1BQU0sQ0FBRSw4Q0FBRixDQUFOLENBQXlETSxHQUF6RCxFQU4yQjtBQVFyQyxpQ0FBMkJOLE1BQU0sQ0FBRSwwQkFBRixDQUFOLENBQXFDTSxHQUFyQztBQVJVLEtBQUYsQ0FBaEQ7QUFZQSxHQWhCRCxFQTlGK0MsQ0FnSC9DO0FBQ0E7QUFDQTs7QUFDQU4sRUFBQUEsTUFBTSxDQUFFLFVBQUYsQ0FBTixDQUFxQkMsRUFBckIsQ0FBeUIsUUFBekIsRUFBbUMsVUFBVUMsS0FBVixFQUFpQjtBQUVuRCxRQUFJQyxhQUFhLEdBQUdILE1BQU0sQ0FBRSxVQUFGLENBQU4sQ0FBcUJNLEdBQXJCLEVBQXBCO0FBRUFDLElBQUFBLGdEQUFnRCxDQUFFO0FBQ3JDLGlCQUFZSixhQUR5QjtBQUVyQyxrQkFBWTtBQUZ5QixLQUFGLENBQWhEO0FBSUEsR0FSRCxFQW5IK0MsQ0E2SC9DO0FBQ0E7QUFDQTs7QUFDQUgsRUFBQUEsTUFBTSxDQUFFLFdBQUYsQ0FBTixDQUFzQkMsRUFBdEIsQ0FBMEIsUUFBMUIsRUFBb0MsVUFBVUMsS0FBVixFQUFpQjtBQUVwRCxRQUFJQyxhQUFhLEdBQUdILE1BQU0sQ0FBRSxXQUFGLENBQU4sQ0FBc0JNLEdBQXRCLEVBQXBCO0FBRUFDLElBQUFBLGdEQUFnRCxDQUFFO0FBQ3JDLGtCQUFhSixhQUR3QjtBQUVyQyxrQkFBWTtBQUZ5QixLQUFGLENBQWhEO0FBSUEsR0FSRCxFQWhJK0MsQ0EwSS9DO0FBQ0E7QUFDQTs7QUFDQUgsRUFBQUEsTUFBTSxDQUFFLGtCQUFGLENBQU4sQ0FBNkJDLEVBQTdCLENBQWlDLFFBQWpDLEVBQTJDLFVBQVVDLEtBQVYsRUFBaUI7QUFFM0QsUUFBSUMsYUFBYSxHQUFJSCxNQUFNLENBQUUsa0JBQUYsQ0FBTixDQUE2Qk0sR0FBN0IsRUFBckIsQ0FGMkQsQ0FFRDs7QUFDMUQsUUFBT0ssS0FBSyxDQUFDQyxPQUFOLENBQWVULGFBQWYsQ0FBRixJQUF3QyxNQUFNQSxhQUFhLENBQUNVLE1BQWpFLEVBQTJFO0FBQzFFVixNQUFBQSxhQUFhLEdBQUcsQ0FBQyxJQUFELENBQWhCO0FBQ0E7O0FBQ0RJLElBQUFBLGdEQUFnRCxDQUFFO0FBQ3JDLHlCQUFvQkosYUFEaUI7QUFFckMsa0JBQVk7QUFGeUIsS0FBRixDQUFoRDtBQUlBLEdBVkQsRUE3SStDLENBMEovQztBQUNBO0FBQ0E7O0FBQ0FILEVBQUFBLE1BQU0sQ0FBRSxVQUFGLENBQU4sQ0FBcUJDLEVBQXJCLENBQXlCLFFBQXpCLEVBQW1DLFVBQVVDLEtBQVYsRUFBaUI7QUFFbkQsUUFBSUMsYUFBYSxHQUFHSCxNQUFNLENBQUUsVUFBRixDQUFOLENBQXFCTSxHQUFyQixFQUFwQjtBQUVBSCxJQUFBQSxhQUFhLEdBQUdDLElBQUksQ0FBQ0MsS0FBTCxDQUFZRixhQUFaLENBQWhCO0FBRUFJLElBQUFBLGdEQUFnRCxDQUFFO0FBQ3JDLGlCQUFXSixhQUFhLENBQUUsQ0FBRjtBQURhLEtBQUYsQ0FBaEQ7QUFHQSxHQVREO0FBV0E7O0FBRURILE1BQU0sQ0FBQ2MsUUFBRCxDQUFOLENBQWlCQyxLQUFqQixDQUF1QixZQUFVO0FBQ2hDaEIsRUFBQUEscUNBQXFDO0FBQ3JDLENBRkQiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuXHJcbi8qKlxyXG4gKiBEZWZpbmUgSFRNTCB1aSBIb29rczogb24gS2V5VXAgfCBDaGFuZ2UgfCAtPiBTb3J0IE9yZGVyICYgTnVtYmVyIEl0ZW1zIC8gUGFnZVxyXG4gKiAqIFdlIGFyZSBjaG5hZ2VkIGl0IG9uY2UsIGJlY2F1c2Ugc3VjaCAgZWxlbWVudHMgYWx3YXlzIHRoZSBzYW1lXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX2RlZmluZV91aV9ob29rc19vbmNlKCl7XHJcblxyXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0Ly8gQm9va2VkIGRhdGVzXHJcblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRqUXVlcnkoICcjd2hfYm9va2luZ19kYXRlJyApLm9uKCAnY2hhbmdlJywgZnVuY3Rpb24oIGV2ZW50ICl7XHJcblxyXG5cdFx0dmFyIGNoYW5nZWRfdmFsdWUgPSBKU09OLnBhcnNlKCBqUXVlcnkoICcjd2hfYm9va2luZ19kYXRlJyApLnZhbCgpICk7XHJcblxyXG5cdFx0d3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X3dpdGhfcGFyYW1zKCB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd3aF9ib29raW5nX2RhdGUnOiBjaGFuZ2VkX3ZhbHVlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQncGFnZV9udW0nICAgICAgIDogMSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRnJvbnRlbmQgc2VsZWN0ZWQgZWxlbWVudHMgKHNhdmluZyBmb3IgZnV0dXJlIHVzZSwgYWZ0ZXIgRjUpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd1aV93aF9ib29raW5nX2RhdGVfcmFkaW8nICAgOiBqUXVlcnkoICdpbnB1dFtuYW1lPVwidWlfd2hfYm9va2luZ19kYXRlX3JhZGlvXCJdOmNoZWNrZWQnICkudmFsKCksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd1aV93aF9ib29raW5nX2RhdGVfbmV4dCcgICAgOiBqUXVlcnkoICcjdWlfd2hfYm9va2luZ19kYXRlX25leHQnICkudmFsKCksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd1aV93aF9ib29raW5nX2RhdGVfcHJpb3InICAgOiBqUXVlcnkoICcjdWlfd2hfYm9va2luZ19kYXRlX3ByaW9yJyApLnZhbCgpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndWlfd2hfYm9va2luZ19kYXRlX2NoZWNraW4nIDogalF1ZXJ5KCAnI3VpX3doX2Jvb2tpbmdfZGF0ZV9jaGVja2luJyApLnZhbCgpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndWlfd2hfYm9va2luZ19kYXRlX2NoZWNrb3V0JzogalF1ZXJ5KCAnI3VpX3doX2Jvb2tpbmdfZGF0ZV9jaGVja291dCcgKS52YWwoKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSApO1xyXG5cdH0gKTtcclxuXHJcblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyBBcHByb3ZlZCB8IFBlbmRpbmcgfCBBbGxcclxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdGpRdWVyeSggJyN3aF9hcHByb3ZlZCcgKS5vbiggJ2NoYW5nZScsIGZ1bmN0aW9uKCBldmVudCApe1xyXG5cclxuXHRcdHZhciBjaGFuZ2VkX3ZhbHVlID0galF1ZXJ5KCAnI3doX2FwcHJvdmVkJyApLnZhbCgpO1xyXG5cclxuXHRcdGNoYW5nZWRfdmFsdWUgPSBKU09OLnBhcnNlKCBjaGFuZ2VkX3ZhbHVlICk7XHJcblxyXG5cdFx0d3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X3dpdGhfcGFyYW1zKCB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd3aF9hcHByb3ZlZCc6IGNoYW5nZWRfdmFsdWVbIDAgXSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3BhZ2VfbnVtJyAgIDogMVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSApO1xyXG5cdH0gKTtcclxuXHJcblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyBLZXl3b3Jkc1xyXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0alF1ZXJ5KCAnI3dwYmNfc2VhcmNoX2ZpZWxkJyApLm9uKCBcImtleXVwXCIsIGZ1bmN0aW9uICggZXZlbnQgKXtcclxuXHRcdGlmICggMTMgIT09IGV2ZW50LndoaWNoICl7XHJcblx0XHRcdHdwYmNfYWp4X2Jvb2tpbmdfc2VhcmNoaW5nX2FmdGVyX2Zld19zZWNvbmRzKCAnI3dwYmNfc2VhcmNoX2ZpZWxkJyApO1x0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU2VhcmNoaW5nIGFmdGVyIDEuNSBzZWNvbmRzIGFmdGVyIEtleSBVcFxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0d3BiY19hanhfYm9va2luZ19zZWFyY2hpbmdfYWZ0ZXJfZmV3X3NlY29uZHMoICcjd3BiY19zZWFyY2hfZmllbGQnLCAwICk7XHRcdFx0XHRcdFx0XHRcdFx0Ly8gSW1tZWRpYXRlIHNlYXJjaFxyXG5cdFx0fVxyXG5cdH0gKTtcclxuXHJcblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyBFeGlzdGluZyB8IFRyYXNoIHwgQW55XHJcblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRqUXVlcnkoICcjd2hfdHJhc2gnICkub24oICdjaGFuZ2UnLCBmdW5jdGlvbiggZXZlbnQgKXtcclxuXHJcblx0XHR2YXIgY2hhbmdlZF92YWx1ZSA9IEpTT04ucGFyc2UoIGpRdWVyeSggJyN3aF90cmFzaCcgKS52YWwoKSApO1xyXG5cclxuXHRcdHdwYmNfYWp4X2Jvb2tpbmdfc2VuZF9zZWFyY2hfcmVxdWVzdF93aXRoX3BhcmFtcygge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnd2hfdHJhc2gnOiBjaGFuZ2VkX3ZhbHVlWyAwIF0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdwYWdlX251bSc6IDFcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gKTtcclxuXHR9ICk7XHJcblxyXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0Ly8gQWxsIGJvb2tpbmdzIHwgTmV3IGJvb2tpbmdzXHJcblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRqUXVlcnkoICcjd2hfd2hhdF9ib29raW5ncycgKS5vbiggJ2NoYW5nZScsIGZ1bmN0aW9uKCBldmVudCApe1xyXG5cclxuXHRcdHZhciBjaGFuZ2VkX3ZhbHVlID0gSlNPTi5wYXJzZSggalF1ZXJ5KCAnI3doX3doYXRfYm9va2luZ3MnICkudmFsKCkgKTtcclxuXHJcblx0XHR3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMoIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3doX3doYXRfYm9va2luZ3MnOiBjaGFuZ2VkX3ZhbHVlWyAwIF0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdwYWdlX251bSc6IDFcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gKTtcclxuXHR9ICk7XHJcblxyXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0Ly8gXCJDcmVhdGlvbiBEYXRlXCIgICBvZiBib29raW5nc1xyXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0alF1ZXJ5KCAnI3doX21vZGlmaWNhdGlvbl9kYXRlJyApLm9uKCAnY2hhbmdlJywgZnVuY3Rpb24oIGV2ZW50ICl7XHJcblxyXG5cdFx0dmFyIGNoYW5nZWRfdmFsdWUgPSBKU09OLnBhcnNlKCBqUXVlcnkoICcjd2hfbW9kaWZpY2F0aW9uX2RhdGUnICkudmFsKCkgKTtcclxuXHJcblx0XHR3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMoIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3doX21vZGlmaWNhdGlvbl9kYXRlJzogY2hhbmdlZF92YWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3BhZ2VfbnVtJyAgICAgICA6IDEsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEZyb250ZW5kIHNlbGVjdGVkIGVsZW1lbnRzIChzYXZpbmcgZm9yIGZ1dHVyZSB1c2UsIGFmdGVyIEY1KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndWlfd2hfbW9kaWZpY2F0aW9uX2RhdGVfcmFkaW8nICAgOiBqUXVlcnkoICdpbnB1dFtuYW1lPVwidWlfd2hfbW9kaWZpY2F0aW9uX2RhdGVfcmFkaW9cIl06Y2hlY2tlZCcgKS52YWwoKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3VpX3doX21vZGlmaWNhdGlvbl9kYXRlX3ByaW9yJyAgIDogalF1ZXJ5KCAnI3VpX3doX21vZGlmaWNhdGlvbl9kYXRlX3ByaW9yJyApLnZhbCgpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndWlfd2hfbW9kaWZpY2F0aW9uX2RhdGVfY2hlY2tpbicgOiBqUXVlcnkoICcjdWlfd2hfbW9kaWZpY2F0aW9uX2RhdGVfY2hlY2tpbicgKS52YWwoKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3VpX3doX21vZGlmaWNhdGlvbl9kYXRlX2NoZWNrb3V0JzogalF1ZXJ5KCAnI3VpX3doX21vZGlmaWNhdGlvbl9kYXRlX2NoZWNrb3V0JyApLnZhbCgpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9ICk7XHJcblx0fSApO1xyXG5cclxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdC8vIFBheW1lbnQgU3RhdHVzXHJcblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRqUXVlcnkoICcjd2hfcGF5X3N0YXR1cycgKS5vbiggJ2NoYW5nZScsIGZ1bmN0aW9uKCBldmVudCApe1xyXG5cclxuXHRcdHZhciBjaGFuZ2VkX3ZhbHVlID0gSlNPTi5wYXJzZSggalF1ZXJ5KCAnI3doX3BheV9zdGF0dXMnICkudmFsKCkgKTtcclxuXHJcblx0XHR3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMoIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3doX3BheV9zdGF0dXMnOiBjaGFuZ2VkX3ZhbHVlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQncGFnZV9udW0nICAgICAgIDogMSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRnJvbnRlbmQgc2VsZWN0ZWQgZWxlbWVudHMgKHNhdmluZyBmb3IgZnV0dXJlIHVzZSwgYWZ0ZXIgRjUpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd1aV93aF9wYXlfc3RhdHVzX3JhZGlvJyA6ICggKCB1bmRlZmluZWQgPT09IGpRdWVyeSggJ2lucHV0W25hbWU9XCJ1aV93aF9wYXlfc3RhdHVzX3JhZGlvXCJdOmNoZWNrZWQnICkudmFsKCkgKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyAnJ1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiBqUXVlcnkoICdpbnB1dFtuYW1lPVwidWlfd2hfcGF5X3N0YXR1c19yYWRpb1wiXTpjaGVja2VkJyApLnZhbCgpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd1aV93aF9wYXlfc3RhdHVzX2N1c3RvbSc6IGpRdWVyeSggJyN1aV93aF9wYXlfc3RhdHVzX2N1c3RvbScgKS52YWwoKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSApO1xyXG5cclxuXHJcblx0fSApO1xyXG5cclxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdC8vIE1pbiBDb3N0XHJcblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRqUXVlcnkoICcjd2hfY29zdCcgKS5vbiggJ2NoYW5nZScsIGZ1bmN0aW9uKCBldmVudCApe1xyXG5cclxuXHRcdHZhciBjaGFuZ2VkX3ZhbHVlID0galF1ZXJ5KCAnI3doX2Nvc3QnICkudmFsKCk7XHJcblxyXG5cdFx0d3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X3dpdGhfcGFyYW1zKCB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd3aF9jb3N0JyA6IGNoYW5nZWRfdmFsdWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdwYWdlX251bSc6IDFcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gKTtcclxuXHR9ICk7XHJcblxyXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0Ly8gTWF4IENvc3RcclxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdGpRdWVyeSggJyN3aF9jb3N0MicgKS5vbiggJ2NoYW5nZScsIGZ1bmN0aW9uKCBldmVudCApe1xyXG5cclxuXHRcdHZhciBjaGFuZ2VkX3ZhbHVlID0galF1ZXJ5KCAnI3doX2Nvc3QyJyApLnZhbCgpO1xyXG5cclxuXHRcdHdwYmNfYWp4X2Jvb2tpbmdfc2VuZF9zZWFyY2hfcmVxdWVzdF93aXRoX3BhcmFtcygge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnd2hfY29zdDInIDogY2hhbmdlZF92YWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3BhZ2VfbnVtJzogMVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSApO1xyXG5cdH0gKTtcclxuXHJcblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyBCb29raW5nIHJlc291cmNlc1xyXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0alF1ZXJ5KCAnI3doX2Jvb2tpbmdfdHlwZScgKS5vbiggJ2NoYW5nZScsIGZ1bmN0aW9uKCBldmVudCApe1xyXG5cclxuXHRcdHZhciBjaGFuZ2VkX3ZhbHVlID0gIGpRdWVyeSggJyN3aF9ib29raW5nX3R5cGUnICkudmFsKCk7XHRcdC8vIGl0J3MgZ2V0IGFzIGFycmF5XHJcblx0XHRpZiAoICggQXJyYXkuaXNBcnJheSggY2hhbmdlZF92YWx1ZSApICkgJiYgKCAwID09PSBjaGFuZ2VkX3ZhbHVlLmxlbmd0aCApICl7XHJcblx0XHRcdGNoYW5nZWRfdmFsdWUgPSBbJy0xJ107XHJcblx0XHR9XHJcblx0XHR3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMoIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3doX2Jvb2tpbmdfdHlwZScgOiBjaGFuZ2VkX3ZhbHVlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQncGFnZV9udW0nOiAxXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9ICk7XHJcblx0fSApO1xyXG5cclxuXHJcblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyBTb3J0aW5nXHJcblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRqUXVlcnkoICcjd2hfc29ydCcgKS5vbiggJ2NoYW5nZScsIGZ1bmN0aW9uKCBldmVudCApe1xyXG5cclxuXHRcdHZhciBjaGFuZ2VkX3ZhbHVlID0galF1ZXJ5KCAnI3doX3NvcnQnICkudmFsKCk7XHJcblxyXG5cdFx0Y2hhbmdlZF92YWx1ZSA9IEpTT04ucGFyc2UoIGNoYW5nZWRfdmFsdWUgKTtcclxuXHJcblx0XHR3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMoIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3doX3NvcnQnOiBjaGFuZ2VkX3ZhbHVlWyAwIF1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gKTtcclxuXHR9ICk7XHJcblxyXG59XHJcblxyXG5qUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7XHJcblx0d3BiY19hanhfYm9va2luZ19kZWZpbmVfdWlfaG9va3Nfb25jZSgpO1xyXG59KTtcclxuIl0sImZpbGUiOiJpbmNsdWRlcy9wYWdlLWJvb2tpbmdzL19vdXQvYm9va2luZ3NfX2hvb2tzLmpzIn0=
|
includes/page-bookings/_out/bookings__hooks.min.js
ADDED
@@ -0,0 +1,2 @@
|
|
Â
|
|
Â
|
1 |
+
"use strict";function wpbc_ajx_booking_define_ui_hooks_once(){jQuery("#wh_booking_date").on("change",function(_){var a=JSON.parse(jQuery("#wh_booking_date").val());wpbc_ajx_booking_send_search_request_with_params({wh_booking_date:a,page_num:1,ui_wh_booking_date_radio:jQuery('input[name="ui_wh_booking_date_radio"]:checked').val(),ui_wh_booking_date_next:jQuery("#ui_wh_booking_date_next").val(),ui_wh_booking_date_prior:jQuery("#ui_wh_booking_date_prior").val(),ui_wh_booking_date_checkin:jQuery("#ui_wh_booking_date_checkin").val(),ui_wh_booking_date_checkout:jQuery("#ui_wh_booking_date_checkout").val()})}),jQuery("#wh_approved").on("change",function(_){var a=jQuery("#wh_approved").val(),a=JSON.parse(a);wpbc_ajx_booking_send_search_request_with_params({wh_approved:a[0],page_num:1})}),jQuery("#wpbc_search_field").on("keyup",function(_){13!==_.which?wpbc_ajx_booking_searching_after_few_seconds("#wpbc_search_field"):wpbc_ajx_booking_searching_after_few_seconds("#wpbc_search_field",0)}),jQuery("#wh_trash").on("change",function(_){var a=JSON.parse(jQuery("#wh_trash").val());wpbc_ajx_booking_send_search_request_with_params({wh_trash:a[0],page_num:1})}),jQuery("#wh_what_bookings").on("change",function(_){var a=JSON.parse(jQuery("#wh_what_bookings").val());wpbc_ajx_booking_send_search_request_with_params({wh_what_bookings:a[0],page_num:1})}),jQuery("#wh_modification_date").on("change",function(_){var a=JSON.parse(jQuery("#wh_modification_date").val());wpbc_ajx_booking_send_search_request_with_params({wh_modification_date:a,page_num:1,ui_wh_modification_date_radio:jQuery('input[name="ui_wh_modification_date_radio"]:checked').val(),ui_wh_modification_date_prior:jQuery("#ui_wh_modification_date_prior").val(),ui_wh_modification_date_checkin:jQuery("#ui_wh_modification_date_checkin").val(),ui_wh_modification_date_checkout:jQuery("#ui_wh_modification_date_checkout").val()})}),jQuery("#wh_pay_status").on("change",function(_){var a=JSON.parse(jQuery("#wh_pay_status").val());wpbc_ajx_booking_send_search_request_with_params({wh_pay_status:a,page_num:1,ui_wh_pay_status_radio:void 0===jQuery('input[name="ui_wh_pay_status_radio"]:checked').val()?"":jQuery('input[name="ui_wh_pay_status_radio"]:checked').val(),ui_wh_pay_status_custom:jQuery("#ui_wh_pay_status_custom").val()})}),jQuery("#wh_cost").on("change",function(_){var a=jQuery("#wh_cost").val();wpbc_ajx_booking_send_search_request_with_params({wh_cost:a,page_num:1})}),jQuery("#wh_cost2").on("change",function(_){var a=jQuery("#wh_cost2").val();wpbc_ajx_booking_send_search_request_with_params({wh_cost2:a,page_num:1})}),jQuery("#wh_booking_type").on("change",function(_){var a=jQuery("#wh_booking_type").val();Array.isArray(a)&&0===a.length&&(a=["-1"]),wpbc_ajx_booking_send_search_request_with_params({wh_booking_type:a,page_num:1})}),jQuery("#wh_sort").on("change",function(_){var a=jQuery("#wh_sort").val(),a=JSON.parse(a);wpbc_ajx_booking_send_search_request_with_params({wh_sort:a[0]})})}jQuery(document).ready(function(){wpbc_ajx_booking_define_ui_hooks_once()});
|
2 |
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1ib29raW5ncy9fb3V0L2Jvb2tpbmdzX19ob29rcy5taW4uanMiLCJzb3VyY2VzIjpbImluY2x1ZGVzL3BhZ2UtYm9va2luZ3MvX291dC9ib29raW5nc19faG9va3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG4vKipcclxuICogRGVmaW5lIEhUTUwgdWkgSG9va3M6IG9uIEtleVVwIHwgQ2hhbmdlIHwgLT4gU29ydCBPcmRlciAmIE51bWJlciBJdGVtcyAvIFBhZ2VcclxuICogKiBXZSBhcmUgY2huYWdlZCBpdCBvbmNlLCBiZWNhdXNlIHN1Y2ggIGVsZW1lbnRzIGFsd2F5cyB0aGUgc2FtZVxyXG4gKi9cblxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19kZWZpbmVfdWlfaG9va3Nfb25jZSgpIHtcbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gQm9va2VkIGRhdGVzXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIGpRdWVyeSgnI3doX2Jvb2tpbmdfZGF0ZScpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgY2hhbmdlZF92YWx1ZSA9IEpTT04ucGFyc2UoalF1ZXJ5KCcjd2hfYm9va2luZ19kYXRlJykudmFsKCkpO1xuICAgIHdwYmNfYWp4X2Jvb2tpbmdfc2VuZF9zZWFyY2hfcmVxdWVzdF93aXRoX3BhcmFtcyh7XG4gICAgICAnd2hfYm9va2luZ19kYXRlJzogY2hhbmdlZF92YWx1ZSxcbiAgICAgICdwYWdlX251bSc6IDEsXG4gICAgICAvLyBGcm9udGVuZCBzZWxlY3RlZCBlbGVtZW50cyAoc2F2aW5nIGZvciBmdXR1cmUgdXNlLCBhZnRlciBGNSlcbiAgICAgICd1aV93aF9ib29raW5nX2RhdGVfcmFkaW8nOiBqUXVlcnkoJ2lucHV0W25hbWU9XCJ1aV93aF9ib29raW5nX2RhdGVfcmFkaW9cIl06Y2hlY2tlZCcpLnZhbCgpLFxuICAgICAgJ3VpX3doX2Jvb2tpbmdfZGF0ZV9uZXh0JzogalF1ZXJ5KCcjdWlfd2hfYm9va2luZ19kYXRlX25leHQnKS52YWwoKSxcbiAgICAgICd1aV93aF9ib29raW5nX2RhdGVfcHJpb3InOiBqUXVlcnkoJyN1aV93aF9ib29raW5nX2RhdGVfcHJpb3InKS52YWwoKSxcbiAgICAgICd1aV93aF9ib29raW5nX2RhdGVfY2hlY2tpbic6IGpRdWVyeSgnI3VpX3doX2Jvb2tpbmdfZGF0ZV9jaGVja2luJykudmFsKCksXG4gICAgICAndWlfd2hfYm9va2luZ19kYXRlX2NoZWNrb3V0JzogalF1ZXJ5KCcjdWlfd2hfYm9va2luZ19kYXRlX2NoZWNrb3V0JykudmFsKClcbiAgICB9KTtcbiAgfSk7IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEFwcHJvdmVkIHwgUGVuZGluZyB8IEFsbFxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGpRdWVyeSgnI3doX2FwcHJvdmVkJykub24oJ2NoYW5nZScsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIHZhciBjaGFuZ2VkX3ZhbHVlID0galF1ZXJ5KCcjd2hfYXBwcm92ZWQnKS52YWwoKTtcbiAgICBjaGFuZ2VkX3ZhbHVlID0gSlNPTi5wYXJzZShjaGFuZ2VkX3ZhbHVlKTtcbiAgICB3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMoe1xuICAgICAgJ3doX2FwcHJvdmVkJzogY2hhbmdlZF92YWx1ZVswXSxcbiAgICAgICdwYWdlX251bSc6IDFcbiAgICB9KTtcbiAgfSk7IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEtleXdvcmRzXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgalF1ZXJ5KCcjd3BiY19zZWFyY2hfZmllbGQnKS5vbihcImtleXVwXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmICgxMyAhPT0gZXZlbnQud2hpY2gpIHtcbiAgICAgIHdwYmNfYWp4X2Jvb2tpbmdfc2VhcmNoaW5nX2FmdGVyX2Zld19zZWNvbmRzKCcjd3BiY19zZWFyY2hfZmllbGQnKTsgLy8gU2VhcmNoaW5nIGFmdGVyIDEuNSBzZWNvbmRzIGFmdGVyIEtleSBVcFxuICAgIH0gZWxzZSB7XG4gICAgICB3cGJjX2FqeF9ib29raW5nX3NlYXJjaGluZ19hZnRlcl9mZXdfc2Vjb25kcygnI3dwYmNfc2VhcmNoX2ZpZWxkJywgMCk7IC8vIEltbWVkaWF0ZSBzZWFyY2hcbiAgICB9XG4gIH0pOyAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBFeGlzdGluZyB8IFRyYXNoIHwgQW55XG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgalF1ZXJ5KCcjd2hfdHJhc2gnKS5vbignY2hhbmdlJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIGNoYW5nZWRfdmFsdWUgPSBKU09OLnBhcnNlKGpRdWVyeSgnI3doX3RyYXNoJykudmFsKCkpO1xuICAgIHdwYmNfYWp4X2Jvb2tpbmdfc2VuZF9zZWFyY2hfcmVxdWVzdF93aXRoX3BhcmFtcyh7XG4gICAgICAnd2hfdHJhc2gnOiBjaGFuZ2VkX3ZhbHVlWzBdLFxuICAgICAgJ3BhZ2VfbnVtJzogMVxuICAgIH0pO1xuICB9KTsgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gQWxsIGJvb2tpbmdzIHwgTmV3IGJvb2tpbmdzXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgalF1ZXJ5KCcjd2hfd2hhdF9ib29raW5ncycpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgY2hhbmdlZF92YWx1ZSA9IEpTT04ucGFyc2UoalF1ZXJ5KCcjd2hfd2hhdF9ib29raW5ncycpLnZhbCgpKTtcbiAgICB3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMoe1xuICAgICAgJ3doX3doYXRfYm9va2luZ3MnOiBjaGFuZ2VkX3ZhbHVlWzBdLFxuICAgICAgJ3BhZ2VfbnVtJzogMVxuICAgIH0pO1xuICB9KTsgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gXCJDcmVhdGlvbiBEYXRlXCIgICBvZiBib29raW5nc1xuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGpRdWVyeSgnI3doX21vZGlmaWNhdGlvbl9kYXRlJykub24oJ2NoYW5nZScsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIHZhciBjaGFuZ2VkX3ZhbHVlID0gSlNPTi5wYXJzZShqUXVlcnkoJyN3aF9tb2RpZmljYXRpb25fZGF0ZScpLnZhbCgpKTtcbiAgICB3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMoe1xuICAgICAgJ3doX21vZGlmaWNhdGlvbl9kYXRlJzogY2hhbmdlZF92YWx1ZSxcbiAgICAgICdwYWdlX251bSc6IDEsXG4gICAgICAvLyBGcm9udGVuZCBzZWxlY3RlZCBlbGVtZW50cyAoc2F2aW5nIGZvciBmdXR1cmUgdXNlLCBhZnRlciBGNSlcbiAgICAgICd1aV93aF9tb2RpZmljYXRpb25fZGF0ZV9yYWRpbyc6IGpRdWVyeSgnaW5wdXRbbmFtZT1cInVpX3doX21vZGlmaWNhdGlvbl9kYXRlX3JhZGlvXCJdOmNoZWNrZWQnKS52YWwoKSxcbiAgICAgICd1aV93aF9tb2RpZmljYXRpb25fZGF0ZV9wcmlvcic6IGpRdWVyeSgnI3VpX3doX21vZGlmaWNhdGlvbl9kYXRlX3ByaW9yJykudmFsKCksXG4gICAgICAndWlfd2hfbW9kaWZpY2F0aW9uX2RhdGVfY2hlY2tpbic6IGpRdWVyeSgnI3VpX3doX21vZGlmaWNhdGlvbl9kYXRlX2NoZWNraW4nKS52YWwoKSxcbiAgICAgICd1aV93aF9tb2RpZmljYXRpb25fZGF0ZV9jaGVja291dCc6IGpRdWVyeSgnI3VpX3doX21vZGlmaWNhdGlvbl9kYXRlX2NoZWNrb3V0JykudmFsKClcbiAgICB9KTtcbiAgfSk7IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFBheW1lbnQgU3RhdHVzXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgalF1ZXJ5KCcjd2hfcGF5X3N0YXR1cycpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgY2hhbmdlZF92YWx1ZSA9IEpTT04ucGFyc2UoalF1ZXJ5KCcjd2hfcGF5X3N0YXR1cycpLnZhbCgpKTtcbiAgICB3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMoe1xuICAgICAgJ3doX3BheV9zdGF0dXMnOiBjaGFuZ2VkX3ZhbHVlLFxuICAgICAgJ3BhZ2VfbnVtJzogMSxcbiAgICAgIC8vIEZyb250ZW5kIHNlbGVjdGVkIGVsZW1lbnRzIChzYXZpbmcgZm9yIGZ1dHVyZSB1c2UsIGFmdGVyIEY1KVxuICAgICAgJ3VpX3doX3BheV9zdGF0dXNfcmFkaW8nOiB1bmRlZmluZWQgPT09IGpRdWVyeSgnaW5wdXRbbmFtZT1cInVpX3doX3BheV9zdGF0dXNfcmFkaW9cIl06Y2hlY2tlZCcpLnZhbCgpID8gJycgOiBqUXVlcnkoJ2lucHV0W25hbWU9XCJ1aV93aF9wYXlfc3RhdHVzX3JhZGlvXCJdOmNoZWNrZWQnKS52YWwoKSxcbiAgICAgICd1aV93aF9wYXlfc3RhdHVzX2N1c3RvbSc6IGpRdWVyeSgnI3VpX3doX3BheV9zdGF0dXNfY3VzdG9tJykudmFsKClcbiAgICB9KTtcbiAgfSk7IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIE1pbiBDb3N0XG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgalF1ZXJ5KCcjd2hfY29zdCcpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgY2hhbmdlZF92YWx1ZSA9IGpRdWVyeSgnI3doX2Nvc3QnKS52YWwoKTtcbiAgICB3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMoe1xuICAgICAgJ3doX2Nvc3QnOiBjaGFuZ2VkX3ZhbHVlLFxuICAgICAgJ3BhZ2VfbnVtJzogMVxuICAgIH0pO1xuICB9KTsgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTWF4IENvc3RcbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBqUXVlcnkoJyN3aF9jb3N0MicpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgY2hhbmdlZF92YWx1ZSA9IGpRdWVyeSgnI3doX2Nvc3QyJykudmFsKCk7XG4gICAgd3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X3dpdGhfcGFyYW1zKHtcbiAgICAgICd3aF9jb3N0Mic6IGNoYW5nZWRfdmFsdWUsXG4gICAgICAncGFnZV9udW0nOiAxXG4gICAgfSk7XG4gIH0pOyAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBCb29raW5nIHJlc291cmNlc1xuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGpRdWVyeSgnI3doX2Jvb2tpbmdfdHlwZScpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgY2hhbmdlZF92YWx1ZSA9IGpRdWVyeSgnI3doX2Jvb2tpbmdfdHlwZScpLnZhbCgpOyAvLyBpdCdzIGdldCBhcyBhcnJheVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2hhbmdlZF92YWx1ZSkgJiYgMCA9PT0gY2hhbmdlZF92YWx1ZS5sZW5ndGgpIHtcbiAgICAgIGNoYW5nZWRfdmFsdWUgPSBbJy0xJ107XG4gICAgfVxuXG4gICAgd3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X3dpdGhfcGFyYW1zKHtcbiAgICAgICd3aF9ib29raW5nX3R5cGUnOiBjaGFuZ2VkX3ZhbHVlLFxuICAgICAgJ3BhZ2VfbnVtJzogMVxuICAgIH0pO1xuICB9KTsgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gU29ydGluZ1xuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGpRdWVyeSgnI3doX3NvcnQnKS5vbignY2hhbmdlJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIGNoYW5nZWRfdmFsdWUgPSBqUXVlcnkoJyN3aF9zb3J0JykudmFsKCk7XG4gICAgY2hhbmdlZF92YWx1ZSA9IEpTT04ucGFyc2UoY2hhbmdlZF92YWx1ZSk7XG4gICAgd3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X3dpdGhfcGFyYW1zKHtcbiAgICAgICd3aF9zb3J0JzogY2hhbmdlZF92YWx1ZVswXVxuICAgIH0pO1xuICB9KTtcbn1cblxualF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7XG4gIHdwYmNfYWp4X2Jvb2tpbmdfZGVmaW5lX3VpX2hvb2tzX29uY2UoKTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbWx1WTJ4MVpHVnpMM0JoWjJVdFltOXZhMmx1WjNNdlgzTnlZeTlpYjI5cmFXNW5jMTlmYUc5dmEzTXVhbk1pWFN3aWJtRnRaWE1pT2xzaWQzQmlZMTloYW5oZlltOXZhMmx1WjE5a1pXWnBibVZmZFdsZmFHOXZhM05mYjI1alpTSXNJbXBSZFdWeWVTSXNJbTl1SWl3aVpYWmxiblFpTENKamFHRnVaMlZrWDNaaGJIVmxJaXdpU2xOUFRpSXNJbkJoY25ObElpd2lkbUZzSWl3aWQzQmlZMTloYW5oZlltOXZhMmx1WjE5elpXNWtYM05sWVhKamFGOXlaWEYxWlhOMFgzZHBkR2hmY0dGeVlXMXpJaXdpZDJocFkyZ2lMQ0ozY0dKalgyRnFlRjlpYjI5cmFXNW5YM05sWVhKamFHbHVaMTloWm5SbGNsOW1aWGRmYzJWamIyNWtjeUlzSW5WdVpHVm1hVzVsWkNJc0lrRnljbUY1SWl3aWFYTkJjbkpoZVNJc0lteGxibWQwYUNJc0ltUnZZM1Z0Wlc1MElpd2ljbVZoWkhraVhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQk8wRkJSVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdPMEZCUTBFc1UwRkJVMEVzY1VOQlFWUXNSMEZCWjBRN1FVRkZMME03UVVGRFFUdEJRVU5CTzBGQlEwRkRMRVZCUVVGQkxFMUJRVTBzUTBGQlJTeHJRa0ZCUml4RFFVRk9MRU5CUVRaQ1F5eEZRVUUzUWl4RFFVRnBReXhSUVVGcVF5eEZRVUV5UXl4VlFVRlZReXhMUVVGV0xFVkJRV2xDTzBGQlJUTkVMRkZCUVVsRExHRkJRV0VzUjBGQlIwTXNTVUZCU1N4RFFVRkRReXhMUVVGTUxFTkJRVmxNTEUxQlFVMHNRMEZCUlN4clFrRkJSaXhEUVVGT0xFTkJRVFpDVFN4SFFVRTNRaXhGUVVGYUxFTkJRWEJDTzBGQlJVRkRMRWxCUVVGQkxHZEVRVUZuUkN4RFFVRkZPMEZCUTNKRExIbENRVUZ0UWtvc1lVRkVhMEk3UVVGRmNrTXNhMEpCUVcxQ0xFTkJSbXRDTzBGQlIzSkRPMEZCUTBFc2EwTkJRU3RDU0N4TlFVRk5MRU5CUVVVc1owUkJRVVlzUTBGQlRpeERRVUV5UkUwc1IwRkJNMFFzUlVGS1RUdEJRVXR5UXl4cFEwRkJLMEpPTEUxQlFVMHNRMEZCUlN3d1FrRkJSaXhEUVVGT0xFTkJRWEZEVFN4SFFVRnlReXhGUVV4Tk8wRkJUWEpETEd0RFFVRXJRazRzVFVGQlRTeERRVUZGTERKQ1FVRkdMRU5CUVU0c1EwRkJjME5OTEVkQlFYUkRMRVZCVGswN1FVRlBja01zYjBOQlFTdENUaXhOUVVGTkxFTkJRVVVzTmtKQlFVWXNRMEZCVGl4RFFVRjNRMDBzUjBGQmVFTXNSVUZRVFR0QlFWRnlReXh4UTBGQkswSk9MRTFCUVUwc1EwRkJSU3c0UWtGQlJpeERRVUZPTEVOQlFYbERUU3hIUVVGNlF6dEJRVkpOTEV0QlFVWXNRMEZCYUVRN1FVRlZRU3hIUVdSRUxFVkJUQ3RETEVOQmNVSXZRenRCUVVOQk8wRkJRMEU3TzBGQlEwRk9MRVZCUVVGQkxFMUJRVTBzUTBGQlJTeGpRVUZHTEVOQlFVNHNRMEZCZVVKRExFVkJRWHBDTEVOQlFUWkNMRkZCUVRkQ0xFVkJRWFZETEZWQlFWVkRMRXRCUVZZc1JVRkJhVUk3UVVGRmRrUXNVVUZCU1VNc1lVRkJZU3hIUVVGSFNDeE5RVUZOTEVOQlFVVXNZMEZCUml4RFFVRk9MRU5CUVhsQ1RTeEhRVUY2UWl4RlFVRndRanRCUVVWQlNDeEpRVUZCUVN4aFFVRmhMRWRCUVVkRExFbEJRVWtzUTBGQlEwTXNTMEZCVEN4RFFVRlpSaXhoUVVGYUxFTkJRV2hDTzBGQlJVRkpMRWxCUVVGQkxHZEVRVUZuUkN4RFFVRkZPMEZCUTNKRExIRkNRVUZsU2l4aFFVRmhMRU5CUVVVc1EwRkJSaXhEUVVSVE8wRkJSWEpETEd0Q1FVRmxPMEZCUm5OQ0xFdEJRVVlzUTBGQmFFUTdRVUZKUVN4SFFWWkVMRVZCZUVJclF5eERRVzlETDBNN1FVRkRRVHRCUVVOQk96dEJRVU5CU0N4RlFVRkJRU3hOUVVGTkxFTkJRVVVzYjBKQlFVWXNRMEZCVGl4RFFVRXJRa01zUlVGQkwwSXNRMEZCYlVNc1QwRkJia01zUlVGQk5FTXNWVUZCVjBNc1MwRkJXQ3hGUVVGclFqdEJRVU0zUkN4UlFVRkxMRTlCUVU5QkxFdEJRVXNzUTBGQlEwMHNTMEZCYkVJc1JVRkJlVUk3UVVGRGVFSkRMRTFCUVVGQkxEUkRRVUUwUXl4RFFVRkZMRzlDUVVGR0xFTkJRVFZETEVOQlJIZENMRU5CUTNWRU8wRkJReTlGTEV0QlJrUXNUVUZGVHp0QlFVTk9RU3hOUVVGQlFTdzBRMEZCTkVNc1EwRkJSU3h2UWtGQlJpeEZRVUYzUWl4RFFVRjRRaXhEUVVFMVF5eERRVVJOTEVOQlF6SkZPMEZCUTJwR08wRkJRMFFzUjBGT1JDeEZRWFpESzBNc1EwRXJReTlETzBGQlEwRTdRVUZEUVRzN1FVRkRRVlFzUlVGQlFVRXNUVUZCVFN4RFFVRkZMRmRCUVVZc1EwRkJUaXhEUVVGelFrTXNSVUZCZEVJc1EwRkJNRUlzVVVGQk1VSXNSVUZCYjBNc1ZVRkJWVU1zUzBGQlZpeEZRVUZwUWp0QlFVVndSQ3hSUVVGSlF5eGhRVUZoTEVkQlFVZERMRWxCUVVrc1EwRkJRME1zUzBGQlRDeERRVUZaVEN4TlFVRk5MRU5CUVVVc1YwRkJSaXhEUVVGT0xFTkJRWE5DVFN4SFFVRjBRaXhGUVVGYUxFTkJRWEJDTzBGQlJVRkRMRWxCUVVGQkxHZEVRVUZuUkN4RFFVRkZPMEZCUTNKRExHdENRVUZaU2l4aFFVRmhMRU5CUVVVc1EwRkJSaXhEUVVSWk8wRkJSWEpETEd0Q1FVRlpPMEZCUm5sQ0xFdEJRVVlzUTBGQmFFUTdRVUZKUVN4SFFWSkVMRVZCYkVRclF5eERRVFJFTDBNN1FVRkRRVHRCUVVOQk96dEJRVU5CU0N4RlFVRkJRU3hOUVVGTkxFTkJRVVVzYlVKQlFVWXNRMEZCVGl4RFFVRTRRa01zUlVGQk9VSXNRMEZCYTBNc1VVRkJiRU1zUlVGQk5FTXNWVUZCVlVNc1MwRkJWaXhGUVVGcFFqdEJRVVUxUkN4UlFVRkpReXhoUVVGaExFZEJRVWRETEVsQlFVa3NRMEZCUTBNc1MwRkJUQ3hEUVVGWlRDeE5RVUZOTEVOQlFVVXNiVUpCUVVZc1EwRkJUaXhEUVVFNFFrMHNSMEZCT1VJc1JVRkJXaXhEUVVGd1FqdEJRVVZCUXl4SlFVRkJRU3huUkVGQlowUXNRMEZCUlR0QlFVTnlReXd3UWtGQmIwSktMR0ZCUVdFc1EwRkJSU3hEUVVGR0xFTkJSRWs3UVVGRmNrTXNhMEpCUVZrN1FVRkdlVUlzUzBGQlJpeERRVUZvUkR0QlFVbEJMRWRCVWtRc1JVRXZSQ3RETEVOQmVVVXZRenRCUVVOQk8wRkJRMEU3TzBGQlEwRklMRVZCUVVGQkxFMUJRVTBzUTBGQlJTeDFRa0ZCUml4RFFVRk9MRU5CUVd0RFF5eEZRVUZzUXl4RFFVRnpReXhSUVVGMFF5eEZRVUZuUkN4VlFVRlZReXhMUVVGV0xFVkJRV2xDTzBGQlJXaEZMRkZCUVVsRExHRkJRV0VzUjBGQlIwTXNTVUZCU1N4RFFVRkRReXhMUVVGTUxFTkJRVmxNTEUxQlFVMHNRMEZCUlN4MVFrRkJSaXhEUVVGT0xFTkJRV3REVFN4SFFVRnNReXhGUVVGYUxFTkJRWEJDTzBGQlJVRkRMRWxCUVVGQkxHZEVRVUZuUkN4RFFVRkZPMEZCUTNKRExEaENRVUYzUWtvc1lVRkVZVHRCUVVWeVF5eHJRa0ZCYlVJc1EwRkdhMEk3UVVGSGNrTTdRVUZEUVN4MVEwRkJiME5JTEUxQlFVMHNRMEZCUlN4eFJFRkJSaXhEUVVGT0xFTkJRV2RGVFN4SFFVRm9SU3hGUVVwRE8wRkJTM0pETEhWRFFVRnZRMDRzVFVGQlRTeERRVUZGTEdkRFFVRkdMRU5CUVU0c1EwRkJNa05OTEVkQlFUTkRMRVZCVEVNN1FVRk5ja01zZVVOQlFXOURUaXhOUVVGTkxFTkJRVVVzYTBOQlFVWXNRMEZCVGl4RFFVRTJRMDBzUjBGQk4wTXNSVUZPUXp0QlFVOXlReXd3UTBGQmIwTk9MRTFCUVUwc1EwRkJSU3h0UTBGQlJpeERRVUZPTEVOQlFUaERUU3hIUVVFNVF6dEJRVkJETEV0QlFVWXNRMEZCYUVRN1FVRlRRU3hIUVdKRUxFVkJOVVVyUXl4RFFUSkdMME03UVVGRFFUdEJRVU5CT3p0QlFVTkJUaXhGUVVGQlFTeE5RVUZOTEVOQlFVVXNaMEpCUVVZc1EwRkJUaXhEUVVFeVFrTXNSVUZCTTBJc1EwRkJLMElzVVVGQkwwSXNSVUZCZVVNc1ZVRkJWVU1zUzBGQlZpeEZRVUZwUWp0QlFVVjZSQ3hSUVVGSlF5eGhRVUZoTEVkQlFVZERMRWxCUVVrc1EwRkJRME1zUzBGQlRDeERRVUZaVEN4TlFVRk5MRU5CUVVVc1owSkJRVVlzUTBGQlRpeERRVUV5UWswc1IwRkJNMElzUlVGQldpeERRVUZ3UWp0QlFVVkJReXhKUVVGQlFTeG5SRUZCWjBRc1EwRkJSVHRCUVVOeVF5eDFRa0ZCYVVKS0xHRkJSRzlDTzBGQlJYSkRMR3RDUVVGdFFpeERRVVpyUWp0QlFVZHlRenRCUVVOQkxHZERRVUVyUWs4c1UwRkJVeXhMUVVGTFZpeE5RVUZOTEVOQlFVVXNPRU5CUVVZc1EwRkJUaXhEUVVGNVJFMHNSMEZCZWtRc1JVRkJhRUlzUjBGRGJrSXNSVUZFYlVJc1IwRkZia0pPTEUxQlFVMHNRMEZCUlN3NFEwRkJSaXhEUVVGT0xFTkJRWGxFVFN4SFFVRjZSQ3hGUVU0eVFqdEJRVkZ5UXl4cFEwRkJNa0pPTEUxQlFVMHNRMEZCUlN3d1FrRkJSaXhEUVVGT0xFTkJRWEZEVFN4SFFVRnlRenRCUVZKVkxFdEJRVVlzUTBGQmFFUTdRVUZaUVN4SFFXaENSQ3hGUVRsR0swTXNRMEZuU0M5RE8wRkJRMEU3UVVGRFFUczdRVUZEUVU0c1JVRkJRVUVzVFVGQlRTeERRVUZGTEZWQlFVWXNRMEZCVGl4RFFVRnhRa01zUlVGQmNrSXNRMEZCZVVJc1VVRkJla0lzUlVGQmJVTXNWVUZCVlVNc1MwRkJWaXhGUVVGcFFqdEJRVVZ1UkN4UlFVRkpReXhoUVVGaExFZEJRVWRJTEUxQlFVMHNRMEZCUlN4VlFVRkdMRU5CUVU0c1EwRkJjVUpOTEVkQlFYSkNMRVZCUVhCQ08wRkJSVUZETEVsQlFVRkJMR2RFUVVGblJDeERRVUZGTzBGQlEzSkRMR2xDUVVGWlNpeGhRVVI1UWp0QlFVVnlReXhyUWtGQldUdEJRVVo1UWl4TFFVRkdMRU5CUVdoRU8wRkJTVUVzUjBGU1JDeEZRVzVJSzBNc1EwRTJTQzlETzBGQlEwRTdRVUZEUVRzN1FVRkRRVWdzUlVGQlFVRXNUVUZCVFN4RFFVRkZMRmRCUVVZc1EwRkJUaXhEUVVGelFrTXNSVUZCZEVJc1EwRkJNRUlzVVVGQk1VSXNSVUZCYjBNc1ZVRkJWVU1zUzBGQlZpeEZRVUZwUWp0QlFVVndSQ3hSUVVGSlF5eGhRVUZoTEVkQlFVZElMRTFCUVUwc1EwRkJSU3hYUVVGR0xFTkJRVTRzUTBGQmMwSk5MRWRCUVhSQ0xFVkJRWEJDTzBGQlJVRkRMRWxCUVVGQkxHZEVRVUZuUkN4RFFVRkZPMEZCUTNKRExHdENRVUZoU2l4aFFVUjNRanRCUVVWeVF5eHJRa0ZCV1R0QlFVWjVRaXhMUVVGR0xFTkJRV2hFTzBGQlNVRXNSMEZTUkN4RlFXaEpLME1zUTBFd1NTOURPMEZCUTBFN1FVRkRRVHM3UVVGRFFVZ3NSVUZCUVVFc1RVRkJUU3hEUVVGRkxHdENRVUZHTEVOQlFVNHNRMEZCTmtKRExFVkJRVGRDTEVOQlFXbERMRkZCUVdwRExFVkJRVEpETEZWQlFWVkRMRXRCUVZZc1JVRkJhVUk3UVVGRk0wUXNVVUZCU1VNc1lVRkJZU3hIUVVGSlNDeE5RVUZOTEVOQlFVVXNhMEpCUVVZc1EwRkJUaXhEUVVFMlFrMHNSMEZCTjBJc1JVRkJja0lzUTBGR01rUXNRMEZGUkRzN1FVRkRNVVFzVVVGQlQwc3NTMEZCU3l4RFFVRkRReXhQUVVGT0xFTkJRV1ZVTEdGQlFXWXNRMEZCUml4SlFVRjNReXhOUVVGTlFTeGhRVUZoTEVOQlFVTlZMRTFCUVdwRkxFVkJRVEpGTzBGQlF6RkZWaXhOUVVGQlFTeGhRVUZoTEVkQlFVY3NRMEZCUXl4SlFVRkVMRU5CUVdoQ08wRkJRMEU3TzBGQlEwUkpMRWxCUVVGQkxHZEVRVUZuUkN4RFFVRkZPMEZCUTNKRExIbENRVUZ2UWtvc1lVRkVhVUk3UVVGRmNrTXNhMEpCUVZrN1FVRkdlVUlzUzBGQlJpeERRVUZvUkR0QlFVbEJMRWRCVmtRc1JVRTNTU3RETEVOQk1Fb3ZRenRCUVVOQk8wRkJRMEU3TzBGQlEwRklMRVZCUVVGQkxFMUJRVTBzUTBGQlJTeFZRVUZHTEVOQlFVNHNRMEZCY1VKRExFVkJRWEpDTEVOQlFYbENMRkZCUVhwQ0xFVkJRVzFETEZWQlFWVkRMRXRCUVZZc1JVRkJhVUk3UVVGRmJrUXNVVUZCU1VNc1lVRkJZU3hIUVVGSFNDeE5RVUZOTEVOQlFVVXNWVUZCUml4RFFVRk9MRU5CUVhGQ1RTeEhRVUZ5UWl4RlFVRndRanRCUVVWQlNDeEpRVUZCUVN4aFFVRmhMRWRCUVVkRExFbEJRVWtzUTBGQlEwTXNTMEZCVEN4RFFVRlpSaXhoUVVGYUxFTkJRV2hDTzBGQlJVRkpMRWxCUVVGQkxHZEVRVUZuUkN4RFFVRkZPMEZCUTNKRExHbENRVUZYU2l4aFFVRmhMRU5CUVVVc1EwRkJSanRCUVVSaExFdEJRVVlzUTBGQmFFUTdRVUZIUVN4SFFWUkVPMEZCVjBFN08wRkJSVVJJTEUxQlFVMHNRMEZCUTJNc1VVRkJSQ3hEUVVGT0xFTkJRV2xDUXl4TFFVRnFRaXhEUVVGMVFpeFpRVUZWTzBGQlEyaERhRUlzUlVGQlFVRXNjVU5CUVhGRE8wRkJRM0pETEVOQlJrUWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpjSW5WelpTQnpkSEpwWTNSY0lqdGNjbHh1WEhKY2JpOHFLbHh5WEc0Z0tpQkVaV1pwYm1VZ1NGUk5UQ0IxYVNCSWIyOXJjem9nYjI0Z1MyVjVWWEFnZkNCRGFHRnVaMlVnZkNBdFBpQlRiM0owSUU5eVpHVnlJQ1lnVG5WdFltVnlJRWwwWlcxeklDOGdVR0ZuWlZ4eVhHNGdLaUFxSUZkbElHRnlaU0JqYUc1aFoyVmtJR2wwSUc5dVkyVXNJR0psWTJGMWMyVWdjM1ZqYUNBZ1pXeGxiV1Z1ZEhNZ1lXeDNZWGx6SUhSb1pTQnpZVzFsWEhKY2JpQXFMMXh5WEc1bWRXNWpkR2x2YmlCM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDJSbFptbHVaVjkxYVY5b2IyOXJjMTl2Ym1ObEtDbDdYSEpjYmx4eVhHNWNkQzh2TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRYSEpjYmx4MEx5OGdRbTl2YTJWa0lHUmhkR1Z6WEhKY2JseDBMeTh0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMWNjbHh1WEhScVVYVmxjbmtvSUNjamQyaGZZbTl2YTJsdVoxOWtZWFJsSnlBcExtOXVLQ0FuWTJoaGJtZGxKeXdnWm5WdVkzUnBiMjRvSUdWMlpXNTBJQ2w3WEhKY2JseHlYRzVjZEZ4MGRtRnlJR05vWVc1blpXUmZkbUZzZFdVZ1BTQktVMDlPTG5CaGNuTmxLQ0JxVVhWbGNua29JQ2NqZDJoZlltOXZhMmx1WjE5a1lYUmxKeUFwTG5aaGJDZ3BJQ2s3WEhKY2JseHlYRzVjZEZ4MGQzQmlZMTloYW5oZlltOXZhMmx1WjE5elpXNWtYM05sWVhKamFGOXlaWEYxWlhOMFgzZHBkR2hmY0dGeVlXMXpLQ0I3WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkQ2QzYUY5aWIyOXJhVzVuWDJSaGRHVW5PaUJqYUdGdVoyVmtYM1poYkhWbExGeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhRbmNHRm5aVjl1ZFcwbklDQWdJQ0FnSURvZ01TeGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEx5OGdSbkp2Ym5SbGJtUWdjMlZzWldOMFpXUWdaV3hsYldWdWRITWdLSE5oZG1sdVp5Qm1iM0lnWm5WMGRYSmxJSFZ6WlN3Z1lXWjBaWElnUmpVcFhISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENkMWFWOTNhRjlpYjI5cmFXNW5YMlJoZEdWZmNtRmthVzhuSUNBZ09pQnFVWFZsY25rb0lDZHBibkIxZEZ0dVlXMWxQVndpZFdsZmQyaGZZbTl2YTJsdVoxOWtZWFJsWDNKaFpHbHZYQ0pkT21Ob1pXTnJaV1FuSUNrdWRtRnNLQ2tzWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkQ2QxYVY5M2FGOWliMjlyYVc1blgyUmhkR1ZmYm1WNGRDY2dJQ0FnT2lCcVVYVmxjbmtvSUNjamRXbGZkMmhmWW05dmEybHVaMTlrWVhSbFgyNWxlSFFuSUNrdWRtRnNLQ2tzWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkQ2QxYVY5M2FGOWliMjlyYVc1blgyUmhkR1ZmY0hKcGIzSW5JQ0FnT2lCcVVYVmxjbmtvSUNjamRXbGZkMmhmWW05dmEybHVaMTlrWVhSbFgzQnlhVzl5SnlBcExuWmhiQ2dwTEZ4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFFuZFdsZmQyaGZZbTl2YTJsdVoxOWtZWFJsWDJOb1pXTnJhVzRuSURvZ2FsRjFaWEo1S0NBbkkzVnBYM2RvWDJKdmIydHBibWRmWkdGMFpWOWphR1ZqYTJsdUp5QXBMblpoYkNncExGeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhRbmRXbGZkMmhmWW05dmEybHVaMTlrWVhSbFgyTm9aV05yYjNWMEp6b2dhbEYxWlhKNUtDQW5JM1ZwWDNkb1gySnZiMnRwYm1kZlpHRjBaVjlqYUdWamEyOTFkQ2NnS1M1MllXd29LVnh5WEc1Y2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MGZTQXBPMXh5WEc1Y2RIMGdLVHRjY2x4dVhISmNibHgwTHk4dExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzFjY2x4dVhIUXZMeUJCY0hCeWIzWmxaQ0I4SUZCbGJtUnBibWNnZkNCQmJHeGNjbHh1WEhRdkx5MHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFZ4eVhHNWNkR3BSZFdWeWVTZ2dKeU4zYUY5aGNIQnliM1psWkNjZ0tTNXZiaWdnSjJOb1lXNW5aU2NzSUdaMWJtTjBhVzl1S0NCbGRtVnVkQ0FwZTF4eVhHNWNjbHh1WEhSY2RIWmhjaUJqYUdGdVoyVmtYM1poYkhWbElEMGdhbEYxWlhKNUtDQW5JM2RvWDJGd2NISnZkbVZrSnlBcExuWmhiQ2dwTzF4eVhHNWNjbHh1WEhSY2RHTm9ZVzVuWldSZmRtRnNkV1VnUFNCS1UwOU9MbkJoY25ObEtDQmphR0Z1WjJWa1gzWmhiSFZsSUNrN1hISmNibHh5WEc1Y2RGeDBkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOXpaVzVrWDNObFlYSmphRjl5WlhGMVpYTjBYM2RwZEdoZmNHRnlZVzF6S0NCN1hISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENkM2FGOWhjSEJ5YjNabFpDYzZJR05vWVc1blpXUmZkbUZzZFdWYklEQWdYU3hjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBKM0JoWjJWZmJuVnRKeUFnSURvZ01WeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwZlNBcE8xeHlYRzVjZEgwZ0tUdGNjbHh1WEhKY2JseDBMeTh0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMWNjbHh1WEhRdkx5QkxaWGwzYjNKa2MxeHlYRzVjZEM4dkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0WEhKY2JseDBhbEYxWlhKNUtDQW5JM2R3WW1OZmMyVmhjbU5vWDJacFpXeGtKeUFwTG05dUtDQmNJbXRsZVhWd1hDSXNJR1oxYm1OMGFXOXVJQ2dnWlhabGJuUWdLWHRjY2x4dVhIUmNkR2xtSUNnZ01UTWdJVDA5SUdWMlpXNTBMbmRvYVdOb0lDbDdYSEpjYmx4MFhIUmNkSGR3WW1OZllXcDRYMkp2YjJ0cGJtZGZjMlZoY21Ob2FXNW5YMkZtZEdWeVgyWmxkMTl6WldOdmJtUnpLQ0FuSTNkd1ltTmZjMlZoY21Ob1gyWnBaV3hrSnlBcE8xeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBMeThnVTJWaGNtTm9hVzVuSUdGbWRHVnlJREV1TlNCelpXTnZibVJ6SUdGbWRHVnlJRXRsZVNCVmNGeHlYRzVjZEZ4MGZTQmxiSE5sSUh0Y2NseHVYSFJjZEZ4MGQzQmlZMTloYW5oZlltOXZhMmx1WjE5elpXRnlZMmhwYm1kZllXWjBaWEpmWm1WM1gzTmxZMjl1WkhNb0lDY2pkM0JpWTE5elpXRnlZMmhmWm1sbGJHUW5MQ0F3SUNrN1hIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEx5OGdTVzF0WldScFlYUmxJSE5sWVhKamFGeHlYRzVjZEZ4MGZWeHlYRzVjZEgwZ0tUdGNjbHh1WEhKY2JseDBMeTh0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMWNjbHh1WEhRdkx5QkZlR2x6ZEdsdVp5QjhJRlJ5WVhOb0lId2dRVzU1WEhKY2JseDBMeTh0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMWNjbHh1WEhScVVYVmxjbmtvSUNjamQyaGZkSEpoYzJnbklDa3ViMjRvSUNkamFHRnVaMlVuTENCbWRXNWpkR2x2YmlnZ1pYWmxiblFnS1h0Y2NseHVYSEpjYmx4MFhIUjJZWElnWTJoaGJtZGxaRjkyWVd4MVpTQTlJRXBUVDA0dWNHRnljMlVvSUdwUmRXVnllU2dnSnlOM2FGOTBjbUZ6YUNjZ0tTNTJZV3dvS1NBcE8xeHlYRzVjY2x4dVhIUmNkSGR3WW1OZllXcDRYMkp2YjJ0cGJtZGZjMlZ1WkY5elpXRnlZMmhmY21WeGRXVnpkRjkzYVhSb1gzQmhjbUZ0Y3lnZ2UxeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhRbmQyaGZkSEpoYzJnbk9pQmphR0Z1WjJWa1gzWmhiSFZsV3lBd0lGMHNYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDZHdZV2RsWDI1MWJTYzZJREZjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RIMGdLVHRjY2x4dVhIUjlJQ2s3WEhKY2JseHlYRzVjZEM4dkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0WEhKY2JseDBMeThnUVd4c0lHSnZiMnRwYm1keklId2dUbVYzSUdKdmIydHBibWR6WEhKY2JseDBMeTh0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMWNjbHh1WEhScVVYVmxjbmtvSUNjamQyaGZkMmhoZEY5aWIyOXJhVzVuY3ljZ0tTNXZiaWdnSjJOb1lXNW5aU2NzSUdaMWJtTjBhVzl1S0NCbGRtVnVkQ0FwZTF4eVhHNWNjbHh1WEhSY2RIWmhjaUJqYUdGdVoyVmtYM1poYkhWbElEMGdTbE5QVGk1d1lYSnpaU2dnYWxGMVpYSjVLQ0FuSTNkb1gzZG9ZWFJmWW05dmEybHVaM01uSUNrdWRtRnNLQ2tnS1R0Y2NseHVYSEpjYmx4MFhIUjNjR0pqWDJGcWVGOWliMjlyYVc1blgzTmxibVJmYzJWaGNtTm9YM0psY1hWbGMzUmZkMmwwYUY5d1lYSmhiWE1vSUh0Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwSjNkb1gzZG9ZWFJmWW05dmEybHVaM01uT2lCamFHRnVaMlZrWDNaaGJIVmxXeUF3SUYwc1hISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENkd1lXZGxYMjUxYlNjNklERmNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEgwZ0tUdGNjbHh1WEhSOUlDazdYSEpjYmx4eVhHNWNkQzh2TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRYSEpjYmx4MEx5OGdYQ0pEY21WaGRHbHZiaUJFWVhSbFhDSWdJQ0J2WmlCaWIyOXJhVzVuYzF4eVhHNWNkQzh2TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRYSEpjYmx4MGFsRjFaWEo1S0NBbkkzZG9YMjF2WkdsbWFXTmhkR2x2Ymw5a1lYUmxKeUFwTG05dUtDQW5ZMmhoYm1kbEp5d2dablZ1WTNScGIyNG9JR1YyWlc1MElDbDdYSEpjYmx4eVhHNWNkRngwZG1GeUlHTm9ZVzVuWldSZmRtRnNkV1VnUFNCS1UwOU9MbkJoY25ObEtDQnFVWFZsY25rb0lDY2pkMmhmYlc5a2FXWnBZMkYwYVc5dVgyUmhkR1VuSUNrdWRtRnNLQ2tnS1R0Y2NseHVYSEpjYmx4MFhIUjNjR0pqWDJGcWVGOWliMjlyYVc1blgzTmxibVJmYzJWaGNtTm9YM0psY1hWbGMzUmZkMmwwYUY5d1lYSmhiWE1vSUh0Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwSjNkb1gyMXZaR2xtYVdOaGRHbHZibDlrWVhSbEp6b2dZMmhoYm1kbFpGOTJZV3gxWlN4Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwSjNCaFoyVmZiblZ0SnlBZ0lDQWdJQ0E2SURFc1hISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEM4dklFWnliMjUwWlc1a0lITmxiR1ZqZEdWa0lHVnNaVzFsYm5SeklDaHpZWFpwYm1jZ1ptOXlJR1oxZEhWeVpTQjFjMlVzSUdGbWRHVnlJRVkxS1Z4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFFuZFdsZmQyaGZiVzlrYVdacFkyRjBhVzl1WDJSaGRHVmZjbUZrYVc4bklDQWdPaUJxVVhWbGNua29JQ2RwYm5CMWRGdHVZVzFsUFZ3aWRXbGZkMmhmYlc5a2FXWnBZMkYwYVc5dVgyUmhkR1ZmY21Ga2FXOWNJbDA2WTJobFkydGxaQ2NnS1M1MllXd29LU3hjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBKM1ZwWDNkb1gyMXZaR2xtYVdOaGRHbHZibDlrWVhSbFgzQnlhVzl5SnlBZ0lEb2dhbEYxWlhKNUtDQW5JM1ZwWDNkb1gyMXZaR2xtYVdOaGRHbHZibDlrWVhSbFgzQnlhVzl5SnlBcExuWmhiQ2dwTEZ4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFFuZFdsZmQyaGZiVzlrYVdacFkyRjBhVzl1WDJSaGRHVmZZMmhsWTJ0cGJpY2dPaUJxVVhWbGNua29JQ2NqZFdsZmQyaGZiVzlrYVdacFkyRjBhVzl1WDJSaGRHVmZZMmhsWTJ0cGJpY2dLUzUyWVd3b0tTeGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEozVnBYM2RvWDIxdlpHbG1hV05oZEdsdmJsOWtZWFJsWDJOb1pXTnJiM1YwSnpvZ2FsRjFaWEo1S0NBbkkzVnBYM2RvWDIxdlpHbG1hV05oZEdsdmJsOWtZWFJsWDJOb1pXTnJiM1YwSnlBcExuWmhiQ2dwWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUjlJQ2s3WEhKY2JseDBmU0FwTzF4eVhHNWNjbHh1WEhRdkx5MHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFZ4eVhHNWNkQzh2SUZCaGVXMWxiblFnVTNSaGRIVnpYSEpjYmx4MEx5OHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMxY2NseHVYSFJxVVhWbGNua29JQ2NqZDJoZmNHRjVYM04wWVhSMWN5Y2dLUzV2YmlnZ0oyTm9ZVzVuWlNjc0lHWjFibU4wYVc5dUtDQmxkbVZ1ZENBcGUxeHlYRzVjY2x4dVhIUmNkSFpoY2lCamFHRnVaMlZrWDNaaGJIVmxJRDBnU2xOUFRpNXdZWEp6WlNnZ2FsRjFaWEo1S0NBbkkzZG9YM0JoZVY5emRHRjBkWE1uSUNrdWRtRnNLQ2tnS1R0Y2NseHVYSEpjYmx4MFhIUjNjR0pqWDJGcWVGOWliMjlyYVc1blgzTmxibVJmYzJWaGNtTm9YM0psY1hWbGMzUmZkMmwwYUY5d1lYSmhiWE1vSUh0Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwSjNkb1gzQmhlVjl6ZEdGMGRYTW5PaUJqYUdGdVoyVmtYM1poYkhWbExGeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhRbmNHRm5aVjl1ZFcwbklDQWdJQ0FnSURvZ01TeGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEx5OGdSbkp2Ym5SbGJtUWdjMlZzWldOMFpXUWdaV3hsYldWdWRITWdLSE5oZG1sdVp5Qm1iM0lnWm5WMGRYSmxJSFZ6WlN3Z1lXWjBaWElnUmpVcFhISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENkMWFWOTNhRjl3WVhsZmMzUmhkSFZ6WDNKaFpHbHZKeUE2SUNnZ0tDQjFibVJsWm1sdVpXUWdQVDA5SUdwUmRXVnllU2dnSjJsdWNIVjBXMjVoYldVOVhDSjFhVjkzYUY5d1lYbGZjM1JoZEhWelgzSmhaR2x2WENKZE9tTm9aV05yWldRbklDa3VkbUZzS0NrZ0tWeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwUHlBbkoxeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwT2lCcVVYVmxjbmtvSUNkcGJuQjFkRnR1WVcxbFBWd2lkV2xmZDJoZmNHRjVYM04wWVhSMWMxOXlZV1JwYjF3aVhUcGphR1ZqYTJWa0p5QXBMblpoYkNncFhISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDQWdJQ2tzWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkQ2QxYVY5M2FGOXdZWGxmYzNSaGRIVnpYMk4xYzNSdmJTYzZJR3BSZFdWeWVTZ2dKeU4xYVY5M2FGOXdZWGxmYzNSaGRIVnpYMk4xYzNSdmJTY2dLUzUyWVd3b0tWeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwZlNBcE8xeHlYRzVjY2x4dVhISmNibHgwZlNBcE8xeHlYRzVjY2x4dVhIUXZMeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExWeHlYRzVjZEM4dklFMXBiaUJEYjNOMFhISmNibHgwTHk4dExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzFjY2x4dVhIUnFVWFZsY25rb0lDY2pkMmhmWTI5emRDY2dLUzV2YmlnZ0oyTm9ZVzVuWlNjc0lHWjFibU4wYVc5dUtDQmxkbVZ1ZENBcGUxeHlYRzVjY2x4dVhIUmNkSFpoY2lCamFHRnVaMlZrWDNaaGJIVmxJRDBnYWxGMVpYSjVLQ0FuSTNkb1gyTnZjM1FuSUNrdWRtRnNLQ2s3WEhKY2JseHlYRzVjZEZ4MGQzQmlZMTloYW5oZlltOXZhMmx1WjE5elpXNWtYM05sWVhKamFGOXlaWEYxWlhOMFgzZHBkR2hmY0dGeVlXMXpLQ0I3WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkQ2QzYUY5amIzTjBKeUE2SUdOb1lXNW5aV1JmZG1Gc2RXVXNYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDZHdZV2RsWDI1MWJTYzZJREZjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RIMGdLVHRjY2x4dVhIUjlJQ2s3WEhKY2JseHlYRzVjZEM4dkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0WEhKY2JseDBMeThnVFdGNElFTnZjM1JjY2x4dVhIUXZMeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExWeHlYRzVjZEdwUmRXVnllU2dnSnlOM2FGOWpiM04wTWljZ0tTNXZiaWdnSjJOb1lXNW5aU2NzSUdaMWJtTjBhVzl1S0NCbGRtVnVkQ0FwZTF4eVhHNWNjbHh1WEhSY2RIWmhjaUJqYUdGdVoyVmtYM1poYkhWbElEMGdhbEYxWlhKNUtDQW5JM2RvWDJOdmMzUXlKeUFwTG5aaGJDZ3BPMXh5WEc1Y2NseHVYSFJjZEhkd1ltTmZZV3A0WDJKdmIydHBibWRmYzJWdVpGOXpaV0Z5WTJoZmNtVnhkV1Z6ZEY5M2FYUm9YM0JoY21GdGN5Z2dlMXh5WEc1Y2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUW5kMmhmWTI5emRESW5JRG9nWTJoaGJtZGxaRjkyWVd4MVpTeGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEozQmhaMlZmYm5WdEp6b2dNVnh5WEc1Y2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MGZTQXBPMXh5WEc1Y2RIMGdLVHRjY2x4dVhISmNibHgwTHk4dExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzFjY2x4dVhIUXZMeUJDYjI5cmFXNW5JSEpsYzI5MWNtTmxjMXh5WEc1Y2RDOHZMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdFhISmNibHgwYWxGMVpYSjVLQ0FuSTNkb1gySnZiMnRwYm1kZmRIbHdaU2NnS1M1dmJpZ2dKMk5vWVc1blpTY3NJR1oxYm1OMGFXOXVLQ0JsZG1WdWRDQXBlMXh5WEc1Y2NseHVYSFJjZEhaaGNpQmphR0Z1WjJWa1gzWmhiSFZsSUQwZ0lHcFJkV1Z5ZVNnZ0p5TjNhRjlpYjI5cmFXNW5YM1I1Y0dVbklDa3VkbUZzS0NrN1hIUmNkQzh2SUdsMEozTWdaMlYwSUdGeklHRnljbUY1WEhKY2JseDBYSFJwWmlBb0lDZ2dRWEp5WVhrdWFYTkJjbkpoZVNnZ1kyaGhibWRsWkY5MllXeDFaU0FwSUNrZ0ppWWdLQ0F3SUQwOVBTQmphR0Z1WjJWa1gzWmhiSFZsTG14bGJtZDBhQ0FwSUNsN1hISmNibHgwWEhSY2RHTm9ZVzVuWldSZmRtRnNkV1VnUFNCYkp5MHhKMTA3WEhKY2JseDBYSFI5WEhKY2JseDBYSFIzY0dKalgyRnFlRjlpYjI5cmFXNW5YM05sYm1SZmMyVmhjbU5vWDNKbGNYVmxjM1JmZDJsMGFGOXdZWEpoYlhNb0lIdGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEozZG9YMkp2YjJ0cGJtZGZkSGx3WlNjZ09pQmphR0Z1WjJWa1gzWmhiSFZsTEZ4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFFuY0dGblpWOXVkVzBuT2lBeFhISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFI5SUNrN1hISmNibHgwZlNBcE8xeHlYRzVjY2x4dVhISmNibHgwTHk4dExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzFjY2x4dVhIUXZMeUJUYjNKMGFXNW5YSEpjYmx4MEx5OHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMxY2NseHVYSFJxVVhWbGNua29JQ2NqZDJoZmMyOXlkQ2NnS1M1dmJpZ2dKMk5vWVc1blpTY3NJR1oxYm1OMGFXOXVLQ0JsZG1WdWRDQXBlMXh5WEc1Y2NseHVYSFJjZEhaaGNpQmphR0Z1WjJWa1gzWmhiSFZsSUQwZ2FsRjFaWEo1S0NBbkkzZG9YM052Y25RbklDa3VkbUZzS0NrN1hISmNibHh5WEc1Y2RGeDBZMmhoYm1kbFpGOTJZV3gxWlNBOUlFcFRUMDR1Y0dGeWMyVW9JR05vWVc1blpXUmZkbUZzZFdVZ0tUdGNjbHh1WEhKY2JseDBYSFIzY0dKalgyRnFlRjlpYjI5cmFXNW5YM05sYm1SZmMyVmhjbU5vWDNKbGNYVmxjM1JmZDJsMGFGOXdZWEpoYlhNb0lIdGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEozZG9YM052Y25Rbk9pQmphR0Z1WjJWa1gzWmhiSFZsV3lBd0lGMWNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEgwZ0tUdGNjbHh1WEhSOUlDazdYSEpjYmx4eVhHNTlYSEpjYmx4eVhHNXFVWFZsY25rb1pHOWpkVzFsYm5RcExuSmxZV1I1S0daMWJtTjBhVzl1S0NsN1hISmNibHgwZDNCaVkxOWhhbmhmWW05dmEybHVaMTlrWldacGJtVmZkV2xmYUc5dmEzTmZiMjVqWlNncE8xeHlYRzU5S1R0Y2NseHVJbDBzSW1acGJHVWlPaUpwYm1Oc2RXUmxjeTl3WVdkbExXSnZiMnRwYm1kekwxOXZkWFF2WW05dmEybHVaM05mWDJodmIydHpMbXB6SW4wPVxuIl0sIm5hbWVzIjpbIndwYmNfYWp4X2Jvb2tpbmdfZGVmaW5lX3VpX2hvb2tzX29uY2UiLCJqUXVlcnkiLCJvbiIsImV2ZW50IiwiY2hhbmdlZF92YWx1ZSIsIkpTT04iLCJwYXJzZSIsInZhbCIsIndwYmNfYWp4X2Jvb2tpbmdfc2VuZF9zZWFyY2hfcmVxdWVzdF93aXRoX3BhcmFtcyIsIndoX2Jvb2tpbmdfZGF0ZSIsInBhZ2VfbnVtIiwidWlfd2hfYm9va2luZ19kYXRlX3JhZGlvIiwidWlfd2hfYm9va2luZ19kYXRlX25leHQiLCJ1aV93aF9ib29raW5nX2RhdGVfcHJpb3IiLCJ1aV93aF9ib29raW5nX2RhdGVfY2hlY2tpbiIsInVpX3doX2Jvb2tpbmdfZGF0ZV9jaGVja291dCIsIndoX2FwcHJvdmVkIiwid2hpY2giLCJ3cGJjX2FqeF9ib29raW5nX3NlYXJjaGluZ19hZnRlcl9mZXdfc2Vjb25kcyIsIndoX3RyYXNoIiwid2hfd2hhdF9ib29raW5ncyIsIndoX21vZGlmaWNhdGlvbl9kYXRlIiwidWlfd2hfbW9kaWZpY2F0aW9uX2RhdGVfcmFkaW8iLCJ1aV93aF9tb2RpZmljYXRpb25fZGF0ZV9wcmlvciIsInVpX3doX21vZGlmaWNhdGlvbl9kYXRlX2NoZWNraW4iLCJ1aV93aF9tb2RpZmljYXRpb25fZGF0ZV9jaGVja291dCIsIndoX3BheV9zdGF0dXMiLCJ1aV93aF9wYXlfc3RhdHVzX3JhZGlvIiwidW5kZWZpbmVkIiwidWlfd2hfcGF5X3N0YXR1c19jdXN0b20iLCJ3aF9jb3N0Iiwid2hfY29zdDIiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJ3aF9ib29raW5nX3R5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
|
includes/page-bookings/_out/bookings__listing.js
ADDED
@@ -0,0 +1,502 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
"use strict";
|
2 |
+
|
3 |
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
4 |
+
|
5 |
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
6 |
+
|
7 |
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
8 |
+
|
9 |
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
10 |
+
|
11 |
+
jQuery('body').on({
|
12 |
+
'touchmove': function touchmove(e) {
|
13 |
+
jQuery('.timespartly').each(function (index) {
|
14 |
+
var td_el = jQuery(this).get(0);
|
15 |
+
|
16 |
+
if (undefined != td_el._tippy) {
|
17 |
+
var instance = td_el._tippy;
|
18 |
+
instance.hide();
|
19 |
+
}
|
20 |
+
});
|
21 |
+
}
|
22 |
+
});
|
23 |
+
/**
|
24 |
+
* Request Object
|
25 |
+
* Here we can define Search parameters and Update it later, when some parameter was changed
|
26 |
+
*
|
27 |
+
*/
|
28 |
+
|
29 |
+
var wpbc_ajx_booking_listing = function (obj, $) {
|
30 |
+
// Secure parameters for Ajax ------------------------------------------------------------------------------------
|
31 |
+
var p_secure = obj.security_obj = obj.security_obj || {
|
32 |
+
user_id: 0,
|
33 |
+
nonce: '',
|
34 |
+
locale: ''
|
35 |
+
};
|
36 |
+
|
37 |
+
obj.set_secure_param = function (param_key, param_val) {
|
38 |
+
p_secure[param_key] = param_val;
|
39 |
+
};
|
40 |
+
|
41 |
+
obj.get_secure_param = function (param_key) {
|
42 |
+
return p_secure[param_key];
|
43 |
+
}; // Listing Search parameters ------------------------------------------------------------------------------------
|
44 |
+
|
45 |
+
|
46 |
+
var p_listing = obj.search_request_obj = obj.search_request_obj || {
|
47 |
+
sort: "booking_id",
|
48 |
+
sort_type: "DESC",
|
49 |
+
page_num: 1,
|
50 |
+
page_items_count: 10,
|
51 |
+
create_date: "",
|
52 |
+
keyword: "",
|
53 |
+
source: ""
|
54 |
+
};
|
55 |
+
|
56 |
+
obj.search_set_all_params = function (request_param_obj) {
|
57 |
+
p_listing = request_param_obj;
|
58 |
+
};
|
59 |
+
|
60 |
+
obj.search_get_all_params = function () {
|
61 |
+
return p_listing;
|
62 |
+
};
|
63 |
+
|
64 |
+
obj.search_get_param = function (param_key) {
|
65 |
+
return p_listing[param_key];
|
66 |
+
};
|
67 |
+
|
68 |
+
obj.search_set_param = function (param_key, param_val) {
|
69 |
+
// if ( Array.isArray( param_val ) ){
|
70 |
+
// param_val = JSON.stringify( param_val );
|
71 |
+
// }
|
72 |
+
p_listing[param_key] = param_val;
|
73 |
+
};
|
74 |
+
|
75 |
+
obj.search_set_params_arr = function (params_arr) {
|
76 |
+
_.each(params_arr, function (p_val, p_key, p_data) {
|
77 |
+
// Define different Search parameters for request
|
78 |
+
this.search_set_param(p_key, p_val);
|
79 |
+
});
|
80 |
+
}; // Other parameters ------------------------------------------------------------------------------------
|
81 |
+
|
82 |
+
|
83 |
+
var p_other = obj.other_obj = obj.other_obj || {};
|
84 |
+
|
85 |
+
obj.set_other_param = function (param_key, param_val) {
|
86 |
+
p_other[param_key] = param_val;
|
87 |
+
};
|
88 |
+
|
89 |
+
obj.get_other_param = function (param_key) {
|
90 |
+
return p_other[param_key];
|
91 |
+
};
|
92 |
+
|
93 |
+
return obj;
|
94 |
+
}(wpbc_ajx_booking_listing || {}, jQuery);
|
95 |
+
/**
|
96 |
+
* Ajax ------------------------------------------------------------------------------------------------------ */
|
97 |
+
|
98 |
+
/**
|
99 |
+
* Send Ajax search request
|
100 |
+
* for searching specific Keyword and other params
|
101 |
+
*/
|
102 |
+
|
103 |
+
|
104 |
+
function wpbc_ajx_booking_ajax_search_request() {
|
105 |
+
console.groupCollapsed('AJX_BOOKING_LISTING');
|
106 |
+
console.log(' == Before Ajax Send - search_get_all_params() == ', wpbc_ajx_booking_listing.search_get_all_params());
|
107 |
+
wpbc_booking_listing_reload_button__spin_start();
|
108 |
+
/*
|
109 |
+
//FixIn: forVideo
|
110 |
+
if ( ! is_this_action ){
|
111 |
+
//wpbc_ajx_booking__actual_listing__hide();
|
112 |
+
jQuery( wpbc_ajx_booking_listing.get_other_param( 'listing_container' ) ).html(
|
113 |
+
'<div style="width:100%;text-align: center;" id="wpbc_loading_section"><span class="wpbc_icn_autorenew wpbc_spin"></span></div>'
|
114 |
+
+ jQuery( wpbc_ajx_booking_listing.get_other_param( 'listing_container' ) ).html()
|
115 |
+
);
|
116 |
+
if ( 'function' === typeof (jQuery( '#wpbc_loading_section' ).wpbc_my_modal) ){ //FixIn: 9.0.1.5
|
117 |
+
jQuery( '#wpbc_loading_section' ).wpbc_my_modal( 'show' );
|
118 |
+
} else {
|
119 |
+
alert( 'Warning! Booking Calendar. Its seems that you have deactivated loading of Bootstrap JS files at Booking Settings General page in Advanced section.' )
|
120 |
+
}
|
121 |
+
}
|
122 |
+
is_this_action = false;
|
123 |
+
*/
|
124 |
+
// Start Ajax
|
125 |
+
|
126 |
+
jQuery.post(wpbc_global1.wpbc_ajaxurl, {
|
127 |
+
action: 'WPBC_AJX_BOOKING_LISTING',
|
128 |
+
wpbc_ajx_user_id: wpbc_ajx_booking_listing.get_secure_param('user_id'),
|
129 |
+
nonce: wpbc_ajx_booking_listing.get_secure_param('nonce'),
|
130 |
+
wpbc_ajx_locale: wpbc_ajx_booking_listing.get_secure_param('locale'),
|
131 |
+
search_params: wpbc_ajx_booking_listing.search_get_all_params()
|
132 |
+
},
|
133 |
+
/**
|
134 |
+
* S u c c e s s
|
135 |
+
*
|
136 |
+
* @param response_data - its object returned from Ajax - class-live-searcg.php
|
137 |
+
* @param textStatus - 'success'
|
138 |
+
* @param jqXHR - Object
|
139 |
+
*/
|
140 |
+
function (response_data, textStatus, jqXHR) {
|
141 |
+
//FixIn: forVideo
|
142 |
+
//jQuery( '#wpbc_loading_section' ).wpbc_my_modal( 'hide' );
|
143 |
+
console.log(' == Response WPBC_AJX_BOOKING_LISTING == ', response_data);
|
144 |
+
console.groupEnd(); // Probably Error
|
145 |
+
|
146 |
+
if (_typeof(response_data) !== 'object' || response_data === null) {
|
147 |
+
jQuery('#wh_sort_selector').hide();
|
148 |
+
jQuery(wpbc_ajx_booking_listing.get_other_param('listing_container')).html('<div class="wpbc-settings-notice notice-warning" style="text-align:left">' + response_data + '</div>');
|
149 |
+
return;
|
150 |
+
} // Reload page, after filter toolbar was reseted
|
151 |
+
|
152 |
+
|
153 |
+
if (undefined != response_data['ajx_cleaned_params'] && 'reset_done' === response_data['ajx_cleaned_params']['ui_reset']) {
|
154 |
+
location.reload();
|
155 |
+
return;
|
156 |
+
} // Show listing
|
157 |
+
|
158 |
+
|
159 |
+
if (response_data['ajx_count'] > 0) {
|
160 |
+
wpbc_ajx_booking_show_listing(response_data['ajx_items'], response_data['ajx_search_params'], response_data['ajx_booking_resources']);
|
161 |
+
wpbc_pagination_echo(wpbc_ajx_booking_listing.get_other_param('pagination_container'), {
|
162 |
+
'page_active': response_data['ajx_search_params']['page_num'],
|
163 |
+
'pages_count': Math.ceil(response_data['ajx_count'] / response_data['ajx_search_params']['page_items_count']),
|
164 |
+
'page_items_count': response_data['ajx_search_params']['page_items_count'],
|
165 |
+
'sort_type': response_data['ajx_search_params']['sort_type']
|
166 |
+
});
|
167 |
+
wpbc_ajx_booking_define_ui_hooks(); // Redefine Hooks, because we show new DOM elements
|
168 |
+
} else {
|
169 |
+
wpbc_ajx_booking__actual_listing__hide();
|
170 |
+
jQuery(wpbc_ajx_booking_listing.get_other_param('listing_container')).html('<div class="wpbc-settings-notice0 notice-warning0" style="text-align:center;margin-left:-50px;">' + '<strong>' + 'No results found for current filter options...' + '</strong>' + //'<strong>' + 'No results found...' + '</strong>' +
|
171 |
+
'</div>');
|
172 |
+
} // Update new booking count
|
173 |
+
|
174 |
+
|
175 |
+
if (undefined !== response_data['ajx_new_bookings_count']) {
|
176 |
+
var ajx_new_bookings_count = parseInt(response_data['ajx_new_bookings_count']);
|
177 |
+
|
178 |
+
if (ajx_new_bookings_count > 0) {
|
179 |
+
jQuery('.wpbc_badge_count').show();
|
180 |
+
}
|
181 |
+
|
182 |
+
jQuery('.bk-update-count').html(ajx_new_bookings_count);
|
183 |
+
}
|
184 |
+
|
185 |
+
wpbc_booking_listing_reload_button__spin_pause();
|
186 |
+
jQuery('#ajax_respond').html(response_data); // For ability to show response, add such DIV element to page
|
187 |
+
}).fail(function (jqXHR, textStatus, errorThrown) {
|
188 |
+
if (window.console && window.console.log) {
|
189 |
+
console.log('Ajax_Error', jqXHR, textStatus, errorThrown);
|
190 |
+
}
|
191 |
+
|
192 |
+
jQuery('#wh_sort_selector').hide();
|
193 |
+
var error_message = '<strong>' + 'Error!' + '</strong> ' + errorThrown;
|
194 |
+
|
195 |
+
if (jqXHR.responseText) {
|
196 |
+
error_message += jqXHR.responseText;
|
197 |
+
}
|
198 |
+
|
199 |
+
error_message = error_message.replace(/\n/g, "<br />");
|
200 |
+
wpbc_ajx_booking_show_message(error_message);
|
201 |
+
}) // .done( function ( data, textStatus, jqXHR ) { if ( window.console && window.console.log ){ console.log( 'second success', data, textStatus, jqXHR ); } })
|
202 |
+
// .always( function ( data_jqXHR, textStatus, jqXHR_errorThrown ) { if ( window.console && window.console.log ){ console.log( 'always finished', data_jqXHR, textStatus, jqXHR_errorThrown ); } })
|
203 |
+
; // End Ajax
|
204 |
+
}
|
205 |
+
/**
|
206 |
+
* Views ----------------------------------------------------------------------------------------------------- */
|
207 |
+
|
208 |
+
/**
|
209 |
+
* Show Listing Table and define gMail checkbox hooks
|
210 |
+
*
|
211 |
+
* @param json_items_arr - JSON object with Items
|
212 |
+
* @param json_search_params - JSON object with Search
|
213 |
+
*/
|
214 |
+
|
215 |
+
|
216 |
+
function wpbc_ajx_booking_show_listing(json_items_arr, json_search_params, json_booking_resources) {
|
217 |
+
wpbc_ajx_define_templates__resource_manipulation(json_items_arr, json_search_params, json_booking_resources); //console.log( 'json_items_arr' , json_items_arr, json_search_params );
|
218 |
+
|
219 |
+
jQuery('#wh_sort_selector').css("display", "flex");
|
220 |
+
var list_header_tpl = wp.template('wpbc_ajx_booking_list_header');
|
221 |
+
var list_row_tpl = wp.template('wpbc_ajx_booking_list_row'); // Header
|
222 |
+
|
223 |
+
jQuery(wpbc_ajx_booking_listing.get_other_param('listing_container')).html(list_header_tpl()); // Body
|
224 |
+
|
225 |
+
jQuery(wpbc_ajx_booking_listing.get_other_param('listing_container')).append('<div class="wpbc_selectable_body"></div>'); // R o w s
|
226 |
+
|
227 |
+
console.groupCollapsed('LISTING_ROWS'); // LISTING_ROWS
|
228 |
+
|
229 |
+
_.each(json_items_arr, function (p_val, p_key, p_data) {
|
230 |
+
if ('undefined' !== typeof json_search_params['keyword']) {
|
231 |
+
// Parameter for marking keyword with different color in a list
|
232 |
+
p_val['__search_request_keyword__'] = json_search_params['keyword'];
|
233 |
+
} else {
|
234 |
+
p_val['__search_request_keyword__'] = '';
|
235 |
+
}
|
236 |
+
|
237 |
+
p_val['booking_resources'] = json_booking_resources;
|
238 |
+
jQuery(wpbc_ajx_booking_listing.get_other_param('listing_container') + ' .wpbc_selectable_body').append(list_row_tpl(p_val));
|
239 |
+
});
|
240 |
+
|
241 |
+
console.groupEnd(); // LISTING_ROWS
|
242 |
+
|
243 |
+
wpbc_define_gmail_checkbox_selection(jQuery); // Redefine Hooks for clicking at Checkboxes
|
244 |
+
}
|
245 |
+
/**
|
246 |
+
* Define template for changing booking resources & update it each time, when listing updating, useful for showing actual booking resources.
|
247 |
+
*
|
248 |
+
* @param json_items_arr - JSON object with Items
|
249 |
+
* @param json_search_params - JSON object with Search
|
250 |
+
* @param json_booking_resources - JSON object with Resources
|
251 |
+
*/
|
252 |
+
|
253 |
+
|
254 |
+
function wpbc_ajx_define_templates__resource_manipulation(json_items_arr, json_search_params, json_booking_resources) {
|
255 |
+
// Change booking resource
|
256 |
+
var change_booking_resource_tpl = wp.template('wpbc_ajx_change_booking_resource');
|
257 |
+
jQuery('#wpbc_hidden_template__change_booking_resource').html(change_booking_resource_tpl({
|
258 |
+
'ajx_search_params': json_search_params,
|
259 |
+
'ajx_booking_resources': json_booking_resources
|
260 |
+
})); // Duplicate booking resource
|
261 |
+
|
262 |
+
var duplicate_booking_to_other_resource_tpl = wp.template('wpbc_ajx_duplicate_booking_to_other_resource');
|
263 |
+
jQuery('#wpbc_hidden_template__duplicate_booking_to_other_resource').html(duplicate_booking_to_other_resource_tpl({
|
264 |
+
'ajx_search_params': json_search_params,
|
265 |
+
'ajx_booking_resources': json_booking_resources
|
266 |
+
}));
|
267 |
+
}
|
268 |
+
/**
|
269 |
+
* Show just message instead of listing and hide pagination
|
270 |
+
*/
|
271 |
+
|
272 |
+
|
273 |
+
function wpbc_ajx_booking_show_message(message) {
|
274 |
+
wpbc_ajx_booking__actual_listing__hide();
|
275 |
+
jQuery(wpbc_ajx_booking_listing.get_other_param('listing_container')).html('<div class="wpbc-settings-notice notice-warning" style="text-align:left">' + message + '</div>');
|
276 |
+
}
|
277 |
+
/**
|
278 |
+
* H o o k s - its Action/Times when need to re-Render Views ----------------------------------------------- */
|
279 |
+
|
280 |
+
/**
|
281 |
+
* Send Ajax Search Request after Updating search request parameters
|
282 |
+
*
|
283 |
+
* @param params_arr
|
284 |
+
*/
|
285 |
+
|
286 |
+
|
287 |
+
function wpbc_ajx_booking_send_search_request_with_params(params_arr) {
|
288 |
+
// Define different Search parameters for request
|
289 |
+
_.each(params_arr, function (p_val, p_key, p_data) {
|
290 |
+
//console.log( 'Request for: ', p_key, p_val );
|
291 |
+
wpbc_ajx_booking_listing.search_set_param(p_key, p_val);
|
292 |
+
}); // Send Ajax Request
|
293 |
+
|
294 |
+
|
295 |
+
wpbc_ajx_booking_ajax_search_request();
|
296 |
+
}
|
297 |
+
/**
|
298 |
+
* Search request for "Page Number"
|
299 |
+
* @param page_number int
|
300 |
+
*/
|
301 |
+
|
302 |
+
|
303 |
+
function wpbc_ajx_booking_pagination_click(page_number) {
|
304 |
+
wpbc_ajx_booking_send_search_request_with_params({
|
305 |
+
'page_num': page_number
|
306 |
+
});
|
307 |
+
}
|
308 |
+
/**
|
309 |
+
* Keyword Searching ----------------------------------------------------------------------------------------- */
|
310 |
+
|
311 |
+
/**
|
312 |
+
* Search request for "Keyword", also set current page to 1
|
313 |
+
*
|
314 |
+
* @param element_id - HTML ID of element, where was entered keyword
|
315 |
+
*/
|
316 |
+
|
317 |
+
|
318 |
+
function wpbc_ajx_booking_send_search_request_for_keyword(element_id) {
|
319 |
+
// We need to Reset page_num to 1 with each new search, because we can be at page #4, but after new search we can have totally only 1 page
|
320 |
+
wpbc_ajx_booking_send_search_request_with_params({
|
321 |
+
'keyword': jQuery(element_id).val(),
|
322 |
+
'page_num': 1
|
323 |
+
});
|
324 |
+
}
|
325 |
+
/**
|
326 |
+
* Send search request after few seconds (usually after 1,5 sec)
|
327 |
+
* Closure function. Its useful, for do not send too many Ajax requests, when someone make fast typing.
|
328 |
+
*/
|
329 |
+
|
330 |
+
|
331 |
+
var wpbc_ajx_booking_searching_after_few_seconds = function () {
|
332 |
+
var closed_timer = 0;
|
333 |
+
return function (element_id, timer_delay) {
|
334 |
+
// Get default value of "timer_delay", if parameter was not passed into the function.
|
335 |
+
timer_delay = typeof timer_delay !== 'undefined' ? timer_delay : 1500;
|
336 |
+
clearTimeout(closed_timer); // Clear previous timer
|
337 |
+
// Start new Timer
|
338 |
+
|
339 |
+
closed_timer = setTimeout(wpbc_ajx_booking_send_search_request_for_keyword.bind(null, element_id), timer_delay);
|
340 |
+
};
|
341 |
+
}();
|
342 |
+
/**
|
343 |
+
* Define Dynamic Hooks (like pagination click, which renew each time with new listing showing) ------------- */
|
344 |
+
|
345 |
+
/**
|
346 |
+
* Define HTML ui Hooks: on KeyUp | Change | -> Sort Order & Number Items / Page
|
347 |
+
* We are hcnaged it each time, when showing new listing, because DOM elements chnaged
|
348 |
+
*/
|
349 |
+
|
350 |
+
|
351 |
+
function wpbc_ajx_booking_define_ui_hooks() {
|
352 |
+
if ('function' === typeof wpbc_define_tippy_tooltips) {
|
353 |
+
wpbc_define_tippy_tooltips('.wpbc_listing_container ');
|
354 |
+
}
|
355 |
+
|
356 |
+
wpbc_ajx_booking__ui_define__locale();
|
357 |
+
wpbc_ajx_booking__ui_define__remark(); // Items Per Page
|
358 |
+
|
359 |
+
jQuery('.wpbc_items_per_page').on('change', function (event) {
|
360 |
+
wpbc_ajx_booking_send_search_request_with_params({
|
361 |
+
'page_items_count': jQuery(this).val(),
|
362 |
+
'page_num': 1
|
363 |
+
});
|
364 |
+
}); // Sorting
|
365 |
+
|
366 |
+
jQuery('.wpbc_items_sort_type').on('change', function (event) {
|
367 |
+
wpbc_ajx_booking_send_search_request_with_params({
|
368 |
+
'sort_type': jQuery(this).val()
|
369 |
+
});
|
370 |
+
});
|
371 |
+
}
|
372 |
+
/**
|
373 |
+
* Show / Hide Listing --------------------------------------------------------------------------------------- */
|
374 |
+
|
375 |
+
/**
|
376 |
+
* Show Listing Table - Sending Ajax Request - with parameters that we early defined in "wpbc_ajx_booking_listing" Obj.
|
377 |
+
*/
|
378 |
+
|
379 |
+
|
380 |
+
function wpbc_ajx_booking__actual_listing__show() {
|
381 |
+
wpbc_ajx_booking_ajax_search_request(); // Send Ajax Request - with parameters that we early defined in "wpbc_ajx_booking_listing" Obj.
|
382 |
+
}
|
383 |
+
/**
|
384 |
+
* Hide Listing Table ( and Pagination )
|
385 |
+
*/
|
386 |
+
|
387 |
+
|
388 |
+
function wpbc_ajx_booking__actual_listing__hide() {
|
389 |
+
jQuery('#wh_sort_selector').hide();
|
390 |
+
jQuery(wpbc_ajx_booking_listing.get_other_param('listing_container')).html('');
|
391 |
+
jQuery(wpbc_ajx_booking_listing.get_other_param('pagination_container')).html('');
|
392 |
+
}
|
393 |
+
/**
|
394 |
+
* Support functions for Content Template data --------------------------------------------------------------- */
|
395 |
+
|
396 |
+
/**
|
397 |
+
* Highlight strings,
|
398 |
+
* by inserting <span class="fieldvalue name fieldsearchvalue">...</span> html elements into the string.
|
399 |
+
* @param {string} booking_details - Source string
|
400 |
+
* @param {string} booking_keyword - Keyword to highlight
|
401 |
+
* @returns {string}
|
402 |
+
*/
|
403 |
+
|
404 |
+
|
405 |
+
function wpbc_get_highlighted_search_keyword(booking_details, booking_keyword) {
|
406 |
+
booking_keyword = booking_keyword.trim().toLowerCase();
|
407 |
+
|
408 |
+
if (0 == booking_keyword.length) {
|
409 |
+
return booking_details;
|
410 |
+
} // Highlight substring withing HTML tags in "Content of booking fields data" -- e.g. starting from > and ending with <
|
411 |
+
|
412 |
+
|
413 |
+
var keywordRegex = new RegExp("fieldvalue[^<>]*>([^<]*".concat(booking_keyword, "[^<]*)"), 'gim'); //let matches = [...booking_details.toLowerCase().matchAll( keywordRegex )];
|
414 |
+
|
415 |
+
var matches = booking_details.toLowerCase().matchAll(keywordRegex);
|
416 |
+
matches = Array.from(matches);
|
417 |
+
var strings_arr = [];
|
418 |
+
var pos_previous = 0;
|
419 |
+
var search_pos_start;
|
420 |
+
var search_pos_end;
|
421 |
+
|
422 |
+
var _iterator = _createForOfIteratorHelper(matches),
|
423 |
+
_step;
|
424 |
+
|
425 |
+
try {
|
426 |
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
427 |
+
var match = _step.value;
|
428 |
+
search_pos_start = match.index + match[0].toLowerCase().indexOf('>', 0) + 1;
|
429 |
+
strings_arr.push(booking_details.substr(pos_previous, search_pos_start - pos_previous));
|
430 |
+
search_pos_end = booking_details.toLowerCase().indexOf('<', search_pos_start);
|
431 |
+
strings_arr.push('<span class="fieldvalue name fieldsearchvalue">' + booking_details.substr(search_pos_start, search_pos_end - search_pos_start) + '</span>');
|
432 |
+
pos_previous = search_pos_end;
|
433 |
+
}
|
434 |
+
} catch (err) {
|
435 |
+
_iterator.e(err);
|
436 |
+
} finally {
|
437 |
+
_iterator.f();
|
438 |
+
}
|
439 |
+
|
440 |
+
strings_arr.push(booking_details.substr(pos_previous, booking_details.length - pos_previous));
|
441 |
+
return strings_arr.join('');
|
442 |
+
}
|
443 |
+
/**
|
444 |
+
* Convert special HTML characters from: & -> &
|
445 |
+
*
|
446 |
+
* @param text
|
447 |
+
* @returns {*}
|
448 |
+
*/
|
449 |
+
|
450 |
+
|
451 |
+
function wpbc_decode_HTML_entities(text) {
|
452 |
+
var textArea = document.createElement('textarea');
|
453 |
+
textArea.innerHTML = text;
|
454 |
+
return textArea.value;
|
455 |
+
}
|
456 |
+
/**
|
457 |
+
* Convert TO special HTML characters from: & -> &
|
458 |
+
*
|
459 |
+
* @param text
|
460 |
+
* @returns {*}
|
461 |
+
*/
|
462 |
+
|
463 |
+
|
464 |
+
function wpbc_encode_HTML_entities(text) {
|
465 |
+
var textArea = document.createElement('textarea');
|
466 |
+
textArea.innerText = text;
|
467 |
+
return textArea.innerHTML;
|
468 |
+
}
|
469 |
+
/**
|
470 |
+
* Support Functions - Spin Icon in Buttons ------------------------------------------------------------------ */
|
471 |
+
|
472 |
+
/**
|
473 |
+
* Spin button in Filter toolbar - Start
|
474 |
+
*/
|
475 |
+
|
476 |
+
|
477 |
+
function wpbc_booking_listing_reload_button__spin_start() {
|
478 |
+
jQuery('#wpbc_booking_listing_reload_button .menu_icon.wpbc_spin').removeClass('wpbc_animation_pause');
|
479 |
+
}
|
480 |
+
/**
|
481 |
+
* Spin button in Filter toolbar - Pause
|
482 |
+
*/
|
483 |
+
|
484 |
+
|
485 |
+
function wpbc_booking_listing_reload_button__spin_pause() {
|
486 |
+
jQuery('#wpbc_booking_listing_reload_button .menu_icon.wpbc_spin').addClass('wpbc_animation_pause');
|
487 |
+
}
|
488 |
+
/**
|
489 |
+
* Spin button in Filter toolbar - is Spinning ?
|
490 |
+
*
|
491 |
+
* @returns {boolean}
|
492 |
+
*/
|
493 |
+
|
494 |
+
|
495 |
+
function wpbc_booking_listing_reload_button__is_spin() {
|
496 |
+
if (jQuery('#wpbc_booking_listing_reload_button .menu_icon.wpbc_spin').hasClass('wpbc_animation_pause')) {
|
497 |
+
return true;
|
498 |
+
} else {
|
499 |
+
return false;
|
500 |
+
}
|
501 |
+
}
|
502 |
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluY2x1ZGVzL3BhZ2UtYm9va2luZ3MvX3NyYy9ib29raW5nc19fbGlzdGluZy5qcyJdLCJuYW1lcyI6WyJqUXVlcnkiLCJvbiIsImUiLCJlYWNoIiwiaW5kZXgiLCJ0ZF9lbCIsImdldCIsInVuZGVmaW5lZCIsIl90aXBweSIsImluc3RhbmNlIiwiaGlkZSIsIndwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZyIsIm9iaiIsIiQiLCJwX3NlY3VyZSIsInNlY3VyaXR5X29iaiIsInVzZXJfaWQiLCJub25jZSIsImxvY2FsZSIsInNldF9zZWN1cmVfcGFyYW0iLCJwYXJhbV9rZXkiLCJwYXJhbV92YWwiLCJnZXRfc2VjdXJlX3BhcmFtIiwicF9saXN0aW5nIiwic2VhcmNoX3JlcXVlc3Rfb2JqIiwic29ydCIsInNvcnRfdHlwZSIsInBhZ2VfbnVtIiwicGFnZV9pdGVtc19jb3VudCIsImNyZWF0ZV9kYXRlIiwia2V5d29yZCIsInNvdXJjZSIsInNlYXJjaF9zZXRfYWxsX3BhcmFtcyIsInJlcXVlc3RfcGFyYW1fb2JqIiwic2VhcmNoX2dldF9hbGxfcGFyYW1zIiwic2VhcmNoX2dldF9wYXJhbSIsInNlYXJjaF9zZXRfcGFyYW0iLCJzZWFyY2hfc2V0X3BhcmFtc19hcnIiLCJwYXJhbXNfYXJyIiwiXyIsInBfdmFsIiwicF9rZXkiLCJwX2RhdGEiLCJwX290aGVyIiwib3RoZXJfb2JqIiwic2V0X290aGVyX3BhcmFtIiwiZ2V0X290aGVyX3BhcmFtIiwid3BiY19hanhfYm9va2luZ19hamF4X3NlYXJjaF9yZXF1ZXN0IiwiY29uc29sZSIsImdyb3VwQ29sbGFwc2VkIiwibG9nIiwid3BiY19ib29raW5nX2xpc3RpbmdfcmVsb2FkX2J1dHRvbl9fc3Bpbl9zdGFydCIsInBvc3QiLCJ3cGJjX2dsb2JhbDEiLCJ3cGJjX2FqYXh1cmwiLCJhY3Rpb24iLCJ3cGJjX2FqeF91c2VyX2lkIiwid3BiY19hanhfbG9jYWxlIiwic2VhcmNoX3BhcmFtcyIsInJlc3BvbnNlX2RhdGEiLCJ0ZXh0U3RhdHVzIiwianFYSFIiLCJncm91cEVuZCIsImh0bWwiLCJsb2NhdGlvbiIsInJlbG9hZCIsIndwYmNfYWp4X2Jvb2tpbmdfc2hvd19saXN0aW5nIiwid3BiY19wYWdpbmF0aW9uX2VjaG8iLCJNYXRoIiwiY2VpbCIsIndwYmNfYWp4X2Jvb2tpbmdfZGVmaW5lX3VpX2hvb2tzIiwid3BiY19hanhfYm9va2luZ19fYWN0dWFsX2xpc3RpbmdfX2hpZGUiLCJhanhfbmV3X2Jvb2tpbmdzX2NvdW50IiwicGFyc2VJbnQiLCJzaG93Iiwid3BiY19ib29raW5nX2xpc3RpbmdfcmVsb2FkX2J1dHRvbl9fc3Bpbl9wYXVzZSIsImZhaWwiLCJlcnJvclRocm93biIsIndpbmRvdyIsImVycm9yX21lc3NhZ2UiLCJyZXNwb25zZVRleHQiLCJyZXBsYWNlIiwid3BiY19hanhfYm9va2luZ19zaG93X21lc3NhZ2UiLCJqc29uX2l0ZW1zX2FyciIsImpzb25fc2VhcmNoX3BhcmFtcyIsImpzb25fYm9va2luZ19yZXNvdXJjZXMiLCJ3cGJjX2FqeF9kZWZpbmVfdGVtcGxhdGVzX19yZXNvdXJjZV9tYW5pcHVsYXRpb24iLCJjc3MiLCJsaXN0X2hlYWRlcl90cGwiLCJ3cCIsInRlbXBsYXRlIiwibGlzdF9yb3dfdHBsIiwiYXBwZW5kIiwid3BiY19kZWZpbmVfZ21haWxfY2hlY2tib3hfc2VsZWN0aW9uIiwiY2hhbmdlX2Jvb2tpbmdfcmVzb3VyY2VfdHBsIiwiZHVwbGljYXRlX2Jvb2tpbmdfdG9fb3RoZXJfcmVzb3VyY2VfdHBsIiwibWVzc2FnZSIsIndwYmNfYWp4X2Jvb2tpbmdfc2VuZF9zZWFyY2hfcmVxdWVzdF93aXRoX3BhcmFtcyIsIndwYmNfYWp4X2Jvb2tpbmdfcGFnaW5hdGlvbl9jbGljayIsInBhZ2VfbnVtYmVyIiwid3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X2Zvcl9rZXl3b3JkIiwiZWxlbWVudF9pZCIsInZhbCIsIndwYmNfYWp4X2Jvb2tpbmdfc2VhcmNoaW5nX2FmdGVyX2Zld19zZWNvbmRzIiwiY2xvc2VkX3RpbWVyIiwidGltZXJfZGVsYXkiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiYmluZCIsIndwYmNfZGVmaW5lX3RpcHB5X3Rvb2x0aXBzIiwid3BiY19hanhfYm9va2luZ19fdWlfZGVmaW5lX19sb2NhbGUiLCJ3cGJjX2FqeF9ib29raW5nX191aV9kZWZpbmVfX3JlbWFyayIsImV2ZW50Iiwid3BiY19hanhfYm9va2luZ19fYWN0dWFsX2xpc3RpbmdfX3Nob3ciLCJ3cGJjX2dldF9oaWdobGlnaHRlZF9zZWFyY2hfa2V5d29yZCIsImJvb2tpbmdfZGV0YWlscyIsImJvb2tpbmdfa2V5d29yZCIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsImxlbmd0aCIsImtleXdvcmRSZWdleCIsIlJlZ0V4cCIsIm1hdGNoZXMiLCJtYXRjaEFsbCIsIkFycmF5IiwiZnJvbSIsInN0cmluZ3NfYXJyIiwicG9zX3ByZXZpb3VzIiwic2VhcmNoX3Bvc19zdGFydCIsInNlYXJjaF9wb3NfZW5kIiwibWF0Y2giLCJpbmRleE9mIiwicHVzaCIsInN1YnN0ciIsImpvaW4iLCJ3cGJjX2RlY29kZV9IVE1MX2VudGl0aWVzIiwidGV4dCIsInRleHRBcmVhIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiaW5uZXJIVE1MIiwidmFsdWUiLCJ3cGJjX2VuY29kZV9IVE1MX2VudGl0aWVzIiwiaW5uZXJUZXh0IiwicmVtb3ZlQ2xhc3MiLCJhZGRDbGFzcyIsIndwYmNfYm9va2luZ19saXN0aW5nX3JlbG9hZF9idXR0b25fX2lzX3NwaW4iLCJoYXNDbGFzcyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7QUFFQUEsTUFBTSxDQUFDLE1BQUQsQ0FBTixDQUFlQyxFQUFmLENBQWtCO0FBQ2QsZUFBYSxtQkFBU0MsQ0FBVCxFQUFZO0FBRTNCRixJQUFBQSxNQUFNLENBQUUsY0FBRixDQUFOLENBQXlCRyxJQUF6QixDQUErQixVQUFXQyxLQUFYLEVBQWtCO0FBRWhELFVBQUlDLEtBQUssR0FBR0wsTUFBTSxDQUFFLElBQUYsQ0FBTixDQUFlTSxHQUFmLENBQW9CLENBQXBCLENBQVo7O0FBRUEsVUFBTUMsU0FBUyxJQUFJRixLQUFLLENBQUNHLE1BQXpCLEVBQWtDO0FBRWpDLFlBQUlDLFFBQVEsR0FBR0osS0FBSyxDQUFDRyxNQUFyQjtBQUNBQyxRQUFBQSxRQUFRLENBQUNDLElBQVQ7QUFDQTtBQUNELEtBVEQ7QUFVQTtBQWJnQixDQUFsQjtBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLElBQUlDLHdCQUF3QixHQUFJLFVBQVdDLEdBQVgsRUFBZ0JDLENBQWhCLEVBQW1CO0FBRWxEO0FBQ0EsTUFBSUMsUUFBUSxHQUFHRixHQUFHLENBQUNHLFlBQUosR0FBbUJILEdBQUcsQ0FBQ0csWUFBSixJQUFvQjtBQUN4Q0MsSUFBQUEsT0FBTyxFQUFFLENBRCtCO0FBRXhDQyxJQUFBQSxLQUFLLEVBQUksRUFGK0I7QUFHeENDLElBQUFBLE1BQU0sRUFBRztBQUgrQixHQUF0RDs7QUFNQU4sRUFBQUEsR0FBRyxDQUFDTyxnQkFBSixHQUF1QixVQUFXQyxTQUFYLEVBQXNCQyxTQUF0QixFQUFrQztBQUN4RFAsSUFBQUEsUUFBUSxDQUFFTSxTQUFGLENBQVIsR0FBd0JDLFNBQXhCO0FBQ0EsR0FGRDs7QUFJQVQsRUFBQUEsR0FBRyxDQUFDVSxnQkFBSixHQUF1QixVQUFXRixTQUFYLEVBQXVCO0FBQzdDLFdBQU9OLFFBQVEsQ0FBRU0sU0FBRixDQUFmO0FBQ0EsR0FGRCxDQWJrRCxDQWtCbEQ7OztBQUNBLE1BQUlHLFNBQVMsR0FBR1gsR0FBRyxDQUFDWSxrQkFBSixHQUF5QlosR0FBRyxDQUFDWSxrQkFBSixJQUEwQjtBQUNsREMsSUFBQUEsSUFBSSxFQUFjLFlBRGdDO0FBRWxEQyxJQUFBQSxTQUFTLEVBQVMsTUFGZ0M7QUFHbERDLElBQUFBLFFBQVEsRUFBVSxDQUhnQztBQUlsREMsSUFBQUEsZ0JBQWdCLEVBQUUsRUFKZ0M7QUFLbERDLElBQUFBLFdBQVcsRUFBTyxFQUxnQztBQU1sREMsSUFBQUEsT0FBTyxFQUFXLEVBTmdDO0FBT2xEQyxJQUFBQSxNQUFNLEVBQVk7QUFQZ0MsR0FBbkU7O0FBVUFuQixFQUFBQSxHQUFHLENBQUNvQixxQkFBSixHQUE0QixVQUFXQyxpQkFBWCxFQUErQjtBQUMxRFYsSUFBQUEsU0FBUyxHQUFHVSxpQkFBWjtBQUNBLEdBRkQ7O0FBSUFyQixFQUFBQSxHQUFHLENBQUNzQixxQkFBSixHQUE0QixZQUFZO0FBQ3ZDLFdBQU9YLFNBQVA7QUFDQSxHQUZEOztBQUlBWCxFQUFBQSxHQUFHLENBQUN1QixnQkFBSixHQUF1QixVQUFXZixTQUFYLEVBQXVCO0FBQzdDLFdBQU9HLFNBQVMsQ0FBRUgsU0FBRixDQUFoQjtBQUNBLEdBRkQ7O0FBSUFSLEVBQUFBLEdBQUcsQ0FBQ3dCLGdCQUFKLEdBQXVCLFVBQVdoQixTQUFYLEVBQXNCQyxTQUF0QixFQUFrQztBQUN4RDtBQUNBO0FBQ0E7QUFDQUUsSUFBQUEsU0FBUyxDQUFFSCxTQUFGLENBQVQsR0FBeUJDLFNBQXpCO0FBQ0EsR0FMRDs7QUFPQVQsRUFBQUEsR0FBRyxDQUFDeUIscUJBQUosR0FBNEIsVUFBVUMsVUFBVixFQUFzQjtBQUNqREMsSUFBQUEsQ0FBQyxDQUFDcEMsSUFBRixDQUFRbUMsVUFBUixFQUFvQixVQUFXRSxLQUFYLEVBQWtCQyxLQUFsQixFQUF5QkMsTUFBekIsRUFBaUM7QUFBZ0I7QUFDcEUsV0FBS04sZ0JBQUwsQ0FBdUJLLEtBQXZCLEVBQThCRCxLQUE5QjtBQUNBLEtBRkQ7QUFHQSxHQUpELENBaERrRCxDQXVEbEQ7OztBQUNBLE1BQUlHLE9BQU8sR0FBRy9CLEdBQUcsQ0FBQ2dDLFNBQUosR0FBZ0JoQyxHQUFHLENBQUNnQyxTQUFKLElBQWlCLEVBQS9DOztBQUVBaEMsRUFBQUEsR0FBRyxDQUFDaUMsZUFBSixHQUFzQixVQUFXekIsU0FBWCxFQUFzQkMsU0FBdEIsRUFBa0M7QUFDdkRzQixJQUFBQSxPQUFPLENBQUV2QixTQUFGLENBQVAsR0FBdUJDLFNBQXZCO0FBQ0EsR0FGRDs7QUFJQVQsRUFBQUEsR0FBRyxDQUFDa0MsZUFBSixHQUFzQixVQUFXMUIsU0FBWCxFQUF1QjtBQUM1QyxXQUFPdUIsT0FBTyxDQUFFdkIsU0FBRixDQUFkO0FBQ0EsR0FGRDs7QUFLQSxTQUFPUixHQUFQO0FBQ0EsQ0FwRStCLENBb0U3QkQsd0JBQXdCLElBQUksRUFwRUMsRUFvRUdYLE1BcEVILENBQWhDO0FBdUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFNBQVMrQyxvQ0FBVCxHQUErQztBQUUvQ0MsRUFBQUEsT0FBTyxDQUFDQyxjQUFSLENBQXVCLHFCQUF2QjtBQUErQ0QsRUFBQUEsT0FBTyxDQUFDRSxHQUFSLENBQWEsb0RBQWIsRUFBb0V2Qyx3QkFBd0IsQ0FBQ3VCLHFCQUF6QixFQUFwRTtBQUU5Q2lCLEVBQUFBLDhDQUE4QztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNDOztBQUNBbkQsRUFBQUEsTUFBTSxDQUFDb0QsSUFBUCxDQUFhQyxZQUFZLENBQUNDLFlBQTFCLEVBQ0c7QUFDQ0MsSUFBQUEsTUFBTSxFQUFZLDBCQURuQjtBQUVDQyxJQUFBQSxnQkFBZ0IsRUFBRTdDLHdCQUF3QixDQUFDVyxnQkFBekIsQ0FBMkMsU0FBM0MsQ0FGbkI7QUFHQ0wsSUFBQUEsS0FBSyxFQUFhTix3QkFBd0IsQ0FBQ1csZ0JBQXpCLENBQTJDLE9BQTNDLENBSG5CO0FBSUNtQyxJQUFBQSxlQUFlLEVBQUc5Qyx3QkFBd0IsQ0FBQ1csZ0JBQXpCLENBQTJDLFFBQTNDLENBSm5CO0FBTUNvQyxJQUFBQSxhQUFhLEVBQUcvQyx3QkFBd0IsQ0FBQ3VCLHFCQUF6QjtBQU5qQixHQURIO0FBU0c7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDSSxZQUFXeUIsYUFBWCxFQUEwQkMsVUFBMUIsRUFBc0NDLEtBQXRDLEVBQThDO0FBQ2xEO0FBQ0E7QUFFQWIsSUFBQUEsT0FBTyxDQUFDRSxHQUFSLENBQWEsMkNBQWIsRUFBMERTLGFBQTFEO0FBQTJFWCxJQUFBQSxPQUFPLENBQUNjLFFBQVIsR0FKekIsQ0FLN0M7O0FBQ0EsUUFBTSxRQUFPSCxhQUFQLE1BQXlCLFFBQTFCLElBQXdDQSxhQUFhLEtBQUssSUFBL0QsRUFBc0U7QUFDckUzRCxNQUFBQSxNQUFNLENBQUUsbUJBQUYsQ0FBTixDQUE4QlUsSUFBOUI7QUFDQVYsTUFBQUEsTUFBTSxDQUFFVyx3QkFBd0IsQ0FBQ21DLGVBQXpCLENBQTBDLG1CQUExQyxDQUFGLENBQU4sQ0FBMEVpQixJQUExRSxDQUNXLDhFQUNDSixhQURELEdBRUEsUUFIWDtBQUtBO0FBQ0EsS0FkNEMsQ0FnQjdDOzs7QUFDQSxRQUFpQnBELFNBQVMsSUFBSW9ELGFBQWEsQ0FBRSxvQkFBRixDQUFoQyxJQUNKLGlCQUFpQkEsYUFBYSxDQUFFLG9CQUFGLENBQWIsQ0FBdUMsVUFBdkMsQ0FEeEIsRUFFQztBQUNBSyxNQUFBQSxRQUFRLENBQUNDLE1BQVQ7QUFDQTtBQUNBLEtBdEI0QyxDQXdCN0M7OztBQUNBLFFBQUtOLGFBQWEsQ0FBRSxXQUFGLENBQWIsR0FBK0IsQ0FBcEMsRUFBdUM7QUFFdENPLE1BQUFBLDZCQUE2QixDQUFFUCxhQUFhLENBQUUsV0FBRixDQUFmLEVBQWdDQSxhQUFhLENBQUUsbUJBQUYsQ0FBN0MsRUFBc0VBLGFBQWEsQ0FBRSx1QkFBRixDQUFuRixDQUE3QjtBQUVBUSxNQUFBQSxvQkFBb0IsQ0FDbkJ4RCx3QkFBd0IsQ0FBQ21DLGVBQXpCLENBQTBDLHNCQUExQyxDQURtQixFQUVuQjtBQUNDLHVCQUFlYSxhQUFhLENBQUUsbUJBQUYsQ0FBYixDQUFzQyxVQUF0QyxDQURoQjtBQUVDLHVCQUFlUyxJQUFJLENBQUNDLElBQUwsQ0FBV1YsYUFBYSxDQUFFLFdBQUYsQ0FBYixHQUErQkEsYUFBYSxDQUFFLG1CQUFGLENBQWIsQ0FBc0Msa0JBQXRDLENBQTFDLENBRmhCO0FBSUMsNEJBQW9CQSxhQUFhLENBQUUsbUJBQUYsQ0FBYixDQUFzQyxrQkFBdEMsQ0FKckI7QUFLQyxxQkFBb0JBLGFBQWEsQ0FBRSxtQkFBRixDQUFiLENBQXNDLFdBQXRDO0FBTHJCLE9BRm1CLENBQXBCO0FBVUFXLE1BQUFBLGdDQUFnQyxHQWRNLENBY0c7QUFFekMsS0FoQkQsTUFnQk87QUFFTkMsTUFBQUEsc0NBQXNDO0FBQ3RDdkUsTUFBQUEsTUFBTSxDQUFFVyx3QkFBd0IsQ0FBQ21DLGVBQXpCLENBQTBDLG1CQUExQyxDQUFGLENBQU4sQ0FBMEVpQixJQUExRSxDQUNLLHFHQUNDLFVBREQsR0FDYyxnREFEZCxHQUNpRSxXQURqRSxHQUVDO0FBQ0QsY0FKTDtBQU1BLEtBbEQ0QyxDQW9EN0M7OztBQUNBLFFBQUt4RCxTQUFTLEtBQUtvRCxhQUFhLENBQUUsd0JBQUYsQ0FBaEMsRUFBOEQ7QUFDN0QsVUFBSWEsc0JBQXNCLEdBQUdDLFFBQVEsQ0FBRWQsYUFBYSxDQUFFLHdCQUFGLENBQWYsQ0FBckM7O0FBQ0EsVUFBSWEsc0JBQXNCLEdBQUMsQ0FBM0IsRUFBNkI7QUFDNUJ4RSxRQUFBQSxNQUFNLENBQUUsbUJBQUYsQ0FBTixDQUE4QjBFLElBQTlCO0FBQ0E7O0FBQ0QxRSxNQUFBQSxNQUFNLENBQUUsa0JBQUYsQ0FBTixDQUE2QitELElBQTdCLENBQW1DUyxzQkFBbkM7QUFDQTs7QUFFREcsSUFBQUEsOENBQThDO0FBRTlDM0UsSUFBQUEsTUFBTSxDQUFFLGVBQUYsQ0FBTixDQUEwQitELElBQTFCLENBQWdDSixhQUFoQyxFQS9ENkMsQ0ErREs7QUFDbEQsR0FoRkosRUFpRk1pQixJQWpGTixDQWlGWSxVQUFXZixLQUFYLEVBQWtCRCxVQUFsQixFQUE4QmlCLFdBQTlCLEVBQTRDO0FBQUssUUFBS0MsTUFBTSxDQUFDOUIsT0FBUCxJQUFrQjhCLE1BQU0sQ0FBQzlCLE9BQVAsQ0FBZUUsR0FBdEMsRUFBMkM7QUFBRUYsTUFBQUEsT0FBTyxDQUFDRSxHQUFSLENBQWEsWUFBYixFQUEyQlcsS0FBM0IsRUFBa0NELFVBQWxDLEVBQThDaUIsV0FBOUM7QUFBOEQ7O0FBQ3BLN0UsSUFBQUEsTUFBTSxDQUFFLG1CQUFGLENBQU4sQ0FBOEJVLElBQTlCO0FBQ0EsUUFBSXFFLGFBQWEsR0FBRyxhQUFhLFFBQWIsR0FBd0IsWUFBeEIsR0FBdUNGLFdBQTNEOztBQUNBLFFBQUtoQixLQUFLLENBQUNtQixZQUFYLEVBQXlCO0FBQ3hCRCxNQUFBQSxhQUFhLElBQUlsQixLQUFLLENBQUNtQixZQUF2QjtBQUNBOztBQUNERCxJQUFBQSxhQUFhLEdBQUdBLGFBQWEsQ0FBQ0UsT0FBZCxDQUF1QixLQUF2QixFQUE4QixRQUE5QixDQUFoQjtBQUVBQyxJQUFBQSw2QkFBNkIsQ0FBRUgsYUFBRixDQUE3QjtBQUNDLEdBMUZMLEVBMkZVO0FBQ047QUE1RkosR0F2QjhDLENBb0h2QztBQUNQO0FBR0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFNBQVNiLDZCQUFULENBQXdDaUIsY0FBeEMsRUFBd0RDLGtCQUF4RCxFQUE0RUMsc0JBQTVFLEVBQW9HO0FBRW5HQyxFQUFBQSxnREFBZ0QsQ0FBRUgsY0FBRixFQUFrQkMsa0JBQWxCLEVBQXNDQyxzQkFBdEMsQ0FBaEQsQ0FGbUcsQ0FJcEc7O0FBQ0NyRixFQUFBQSxNQUFNLENBQUUsbUJBQUYsQ0FBTixDQUE4QnVGLEdBQTlCLENBQW1DLFNBQW5DLEVBQThDLE1BQTlDO0FBQ0EsTUFBSUMsZUFBZSxHQUFHQyxFQUFFLENBQUNDLFFBQUgsQ0FBYSw4QkFBYixDQUF0QjtBQUNBLE1BQUlDLFlBQVksR0FBTUYsRUFBRSxDQUFDQyxRQUFILENBQWEsMkJBQWIsQ0FBdEIsQ0FQbUcsQ0FVbkc7O0FBQ0ExRixFQUFBQSxNQUFNLENBQUVXLHdCQUF3QixDQUFDbUMsZUFBekIsQ0FBMEMsbUJBQTFDLENBQUYsQ0FBTixDQUEwRWlCLElBQTFFLENBQWdGeUIsZUFBZSxFQUEvRixFQVhtRyxDQWFuRzs7QUFDQXhGLEVBQUFBLE1BQU0sQ0FBRVcsd0JBQXdCLENBQUNtQyxlQUF6QixDQUEwQyxtQkFBMUMsQ0FBRixDQUFOLENBQTBFOEMsTUFBMUUsQ0FBa0YsMENBQWxGLEVBZG1HLENBZ0JuRzs7QUFDRDVDLEVBQUFBLE9BQU8sQ0FBQ0MsY0FBUixDQUF3QixjQUF4QixFQWpCb0csQ0FpQnZDOztBQUM1RFYsRUFBQUEsQ0FBQyxDQUFDcEMsSUFBRixDQUFRZ0YsY0FBUixFQUF3QixVQUFXM0MsS0FBWCxFQUFrQkMsS0FBbEIsRUFBeUJDLE1BQXpCLEVBQWlDO0FBQ3hELFFBQUssZ0JBQWdCLE9BQU8wQyxrQkFBa0IsQ0FBRSxTQUFGLENBQTlDLEVBQTZEO0FBQWM7QUFDMUU1QyxNQUFBQSxLQUFLLENBQUUsNEJBQUYsQ0FBTCxHQUF3QzRDLGtCQUFrQixDQUFFLFNBQUYsQ0FBMUQ7QUFDQSxLQUZELE1BRU87QUFDTjVDLE1BQUFBLEtBQUssQ0FBRSw0QkFBRixDQUFMLEdBQXdDLEVBQXhDO0FBQ0E7O0FBQ0RBLElBQUFBLEtBQUssQ0FBRSxtQkFBRixDQUFMLEdBQStCNkMsc0JBQS9CO0FBQ0FyRixJQUFBQSxNQUFNLENBQUVXLHdCQUF3QixDQUFDbUMsZUFBekIsQ0FBMEMsbUJBQTFDLElBQWtFLHdCQUFwRSxDQUFOLENBQXFHOEMsTUFBckcsQ0FBNkdELFlBQVksQ0FBRW5ELEtBQUYsQ0FBekg7QUFDQSxHQVJEOztBQVNEUSxFQUFBQSxPQUFPLENBQUNjLFFBQVIsR0EzQm9HLENBMkJ2RDs7QUFFNUMrQixFQUFBQSxvQ0FBb0MsQ0FBRTdGLE1BQUYsQ0FBcEMsQ0E3Qm1HLENBNkI5QztBQUNyRDtBQUdBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQyxTQUFTc0YsZ0RBQVQsQ0FBMkRILGNBQTNELEVBQTJFQyxrQkFBM0UsRUFBK0ZDLHNCQUEvRixFQUF1SDtBQUV0SDtBQUNBLE1BQUlTLDJCQUEyQixHQUFHTCxFQUFFLENBQUNDLFFBQUgsQ0FBYSxrQ0FBYixDQUFsQztBQUVBMUYsRUFBQUEsTUFBTSxDQUFFLGdEQUFGLENBQU4sQ0FBMkQrRCxJQUEzRCxDQUNpQitCLDJCQUEyQixDQUFFO0FBQ3pCLHlCQUF5QlYsa0JBREE7QUFFekIsNkJBQXlCQztBQUZBLEdBQUYsQ0FENUMsRUFMc0gsQ0FZdEg7O0FBQ0EsTUFBSVUsdUNBQXVDLEdBQUdOLEVBQUUsQ0FBQ0MsUUFBSCxDQUFhLDhDQUFiLENBQTlDO0FBRUExRixFQUFBQSxNQUFNLENBQUUsNERBQUYsQ0FBTixDQUF1RStELElBQXZFLENBQ2lCZ0MsdUNBQXVDLENBQUU7QUFDckMseUJBQXlCWCxrQkFEWTtBQUVyQyw2QkFBeUJDO0FBRlksR0FBRixDQUR4RDtBQU1BO0FBR0Y7QUFDQTtBQUNBOzs7QUFDQSxTQUFTSCw2QkFBVCxDQUF3Q2MsT0FBeEMsRUFBaUQ7QUFFaER6QixFQUFBQSxzQ0FBc0M7QUFFdEN2RSxFQUFBQSxNQUFNLENBQUVXLHdCQUF3QixDQUFDbUMsZUFBekIsQ0FBMEMsbUJBQTFDLENBQUYsQ0FBTixDQUEwRWlCLElBQTFFLENBQ1csOEVBQ0NpQyxPQURELEdBRUEsUUFIWDtBQUtBO0FBR0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxTQUFTQyxnREFBVCxDQUE0RDNELFVBQTVELEVBQXdFO0FBRXZFO0FBQ0FDLEVBQUFBLENBQUMsQ0FBQ3BDLElBQUYsQ0FBUW1DLFVBQVIsRUFBb0IsVUFBV0UsS0FBWCxFQUFrQkMsS0FBbEIsRUFBeUJDLE1BQXpCLEVBQWtDO0FBQ3JEO0FBQ0EvQixJQUFBQSx3QkFBd0IsQ0FBQ3lCLGdCQUF6QixDQUEyQ0ssS0FBM0MsRUFBa0RELEtBQWxEO0FBQ0EsR0FIRCxFQUh1RSxDQVF2RTs7O0FBQ0FPLEVBQUFBLG9DQUFvQztBQUNwQztBQUVEO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxTQUFTbUQsaUNBQVQsQ0FBNENDLFdBQTVDLEVBQXlEO0FBRXhERixFQUFBQSxnREFBZ0QsQ0FBRTtBQUN6QyxnQkFBWUU7QUFENkIsR0FBRixDQUFoRDtBQUdBO0FBR0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxTQUFTQyxnREFBVCxDQUEyREMsVUFBM0QsRUFBd0U7QUFFdkU7QUFDQUosRUFBQUEsZ0RBQWdELENBQUU7QUFDeEMsZUFBYWpHLE1BQU0sQ0FBRXFHLFVBQUYsQ0FBTixDQUFxQkMsR0FBckIsRUFEMkI7QUFFeEMsZ0JBQVk7QUFGNEIsR0FBRixDQUFoRDtBQUlBO0FBRUE7QUFDRDtBQUNBO0FBQ0E7OztBQUNDLElBQUlDLDRDQUE0QyxHQUFHLFlBQVc7QUFFN0QsTUFBSUMsWUFBWSxHQUFHLENBQW5CO0FBRUEsU0FBTyxVQUFXSCxVQUFYLEVBQXVCSSxXQUF2QixFQUFvQztBQUUxQztBQUNBQSxJQUFBQSxXQUFXLEdBQUcsT0FBT0EsV0FBUCxLQUF1QixXQUF2QixHQUFxQ0EsV0FBckMsR0FBbUQsSUFBakU7QUFFQUMsSUFBQUEsWUFBWSxDQUFFRixZQUFGLENBQVosQ0FMMEMsQ0FLWDtBQUUvQjs7QUFDQUEsSUFBQUEsWUFBWSxHQUFHRyxVQUFVLENBQUVQLGdEQUFnRCxDQUFDUSxJQUFqRCxDQUF3RCxJQUF4RCxFQUE4RFAsVUFBOUQsQ0FBRixFQUE4RUksV0FBOUUsQ0FBekI7QUFDQSxHQVREO0FBVUEsQ0Fka0QsRUFBbkQ7QUFpQkQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsU0FBU25DLGdDQUFULEdBQTJDO0FBRTFDLE1BQUssZUFBZSxPQUFRdUMsMEJBQTVCLEVBQTJEO0FBQzFEQSxJQUFBQSwwQkFBMEIsQ0FBRSwwQkFBRixDQUExQjtBQUNBOztBQUVEQyxFQUFBQSxtQ0FBbUM7QUFDbkNDLEVBQUFBLG1DQUFtQyxHQVBPLENBUzFDOztBQUNBL0csRUFBQUEsTUFBTSxDQUFFLHNCQUFGLENBQU4sQ0FBaUNDLEVBQWpDLENBQXFDLFFBQXJDLEVBQStDLFVBQVUrRyxLQUFWLEVBQWlCO0FBRS9EZixJQUFBQSxnREFBZ0QsQ0FBRTtBQUN6QywwQkFBc0JqRyxNQUFNLENBQUUsSUFBRixDQUFOLENBQWVzRyxHQUFmLEVBRG1CO0FBRXpDLGtCQUFZO0FBRjZCLEtBQUYsQ0FBaEQ7QUFJQSxHQU5ELEVBVjBDLENBa0IxQzs7QUFDQXRHLEVBQUFBLE1BQU0sQ0FBRSx1QkFBRixDQUFOLENBQWtDQyxFQUFsQyxDQUFzQyxRQUF0QyxFQUFnRCxVQUFVK0csS0FBVixFQUFpQjtBQUVoRWYsSUFBQUEsZ0RBQWdELENBQUU7QUFBQyxtQkFBYWpHLE1BQU0sQ0FBRSxJQUFGLENBQU4sQ0FBZXNHLEdBQWY7QUFBZCxLQUFGLENBQWhEO0FBQ0EsR0FIRDtBQUlBO0FBR0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUNBLFNBQVNXLHNDQUFULEdBQWlEO0FBRWhEbEUsRUFBQUEsb0NBQW9DLEdBRlksQ0FFTjtBQUMxQztBQUVEO0FBQ0E7QUFDQTs7O0FBQ0EsU0FBU3dCLHNDQUFULEdBQWlEO0FBQ2hEdkUsRUFBQUEsTUFBTSxDQUFFLG1CQUFGLENBQU4sQ0FBOEJVLElBQTlCO0FBQ0FWLEVBQUFBLE1BQU0sQ0FBRVcsd0JBQXdCLENBQUNtQyxlQUF6QixDQUEwQyxtQkFBMUMsQ0FBRixDQUFOLENBQTZFaUIsSUFBN0UsQ0FBbUYsRUFBbkY7QUFDQS9ELEVBQUFBLE1BQU0sQ0FBRVcsd0JBQXdCLENBQUNtQyxlQUF6QixDQUEwQyxzQkFBMUMsQ0FBRixDQUFOLENBQTZFaUIsSUFBN0UsQ0FBbUYsRUFBbkY7QUFDQTtBQUdEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFNBQVNtRCxtQ0FBVCxDQUE4Q0MsZUFBOUMsRUFBK0RDLGVBQS9ELEVBQWdGO0FBRS9FQSxFQUFBQSxlQUFlLEdBQUdBLGVBQWUsQ0FBQ0MsSUFBaEIsR0FBdUJDLFdBQXZCLEVBQWxCOztBQUNBLE1BQUssS0FBS0YsZUFBZSxDQUFDRyxNQUExQixFQUFrQztBQUNqQyxXQUFPSixlQUFQO0FBQ0EsR0FMOEUsQ0FPL0U7OztBQUNBLE1BQUlLLFlBQVksR0FBRyxJQUFJQyxNQUFKLGtDQUFzQ0wsZUFBdEMsYUFBK0QsS0FBL0QsQ0FBbkIsQ0FSK0UsQ0FVL0U7O0FBQ0EsTUFBSU0sT0FBTyxHQUFHUCxlQUFlLENBQUNHLFdBQWhCLEdBQThCSyxRQUE5QixDQUF3Q0gsWUFBeEMsQ0FBZDtBQUNDRSxFQUFBQSxPQUFPLEdBQUdFLEtBQUssQ0FBQ0MsSUFBTixDQUFZSCxPQUFaLENBQVY7QUFFRCxNQUFJSSxXQUFXLEdBQUcsRUFBbEI7QUFDQSxNQUFJQyxZQUFZLEdBQUcsQ0FBbkI7QUFDQSxNQUFJQyxnQkFBSjtBQUNBLE1BQUlDLGNBQUo7O0FBakIrRSw2Q0FtQjFEUCxPQW5CMEQ7QUFBQTs7QUFBQTtBQW1CL0Usd0RBQThCO0FBQUEsVUFBbEJRLEtBQWtCO0FBRTdCRixNQUFBQSxnQkFBZ0IsR0FBR0UsS0FBSyxDQUFDOUgsS0FBTixHQUFjOEgsS0FBSyxDQUFFLENBQUYsQ0FBTCxDQUFXWixXQUFYLEdBQXlCYSxPQUF6QixDQUFrQyxHQUFsQyxFQUF1QyxDQUF2QyxDQUFkLEdBQTJELENBQTlFO0FBRUFMLE1BQUFBLFdBQVcsQ0FBQ00sSUFBWixDQUFrQmpCLGVBQWUsQ0FBQ2tCLE1BQWhCLENBQXdCTixZQUF4QixFQUF1Q0MsZ0JBQWdCLEdBQUdELFlBQTFELENBQWxCO0FBRUFFLE1BQUFBLGNBQWMsR0FBR2QsZUFBZSxDQUFDRyxXQUFoQixHQUE4QmEsT0FBOUIsQ0FBdUMsR0FBdkMsRUFBNENILGdCQUE1QyxDQUFqQjtBQUVBRixNQUFBQSxXQUFXLENBQUNNLElBQVosQ0FBa0Isb0RBQW9EakIsZUFBZSxDQUFDa0IsTUFBaEIsQ0FBd0JMLGdCQUF4QixFQUEyQ0MsY0FBYyxHQUFHRCxnQkFBNUQsQ0FBcEQsR0FBc0ksU0FBeEo7QUFFQUQsTUFBQUEsWUFBWSxHQUFHRSxjQUFmO0FBQ0E7QUE5QjhFO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBZ0MvRUgsRUFBQUEsV0FBVyxDQUFDTSxJQUFaLENBQWtCakIsZUFBZSxDQUFDa0IsTUFBaEIsQ0FBd0JOLFlBQXhCLEVBQXVDWixlQUFlLENBQUNJLE1BQWhCLEdBQXlCUSxZQUFoRSxDQUFsQjtBQUVBLFNBQU9ELFdBQVcsQ0FBQ1EsSUFBWixDQUFrQixFQUFsQixDQUFQO0FBQ0E7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFNBQVNDLHlCQUFULENBQW9DQyxJQUFwQyxFQUEwQztBQUN6QyxNQUFJQyxRQUFRLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBVCxDQUF3QixVQUF4QixDQUFmO0FBQ0FGLEVBQUFBLFFBQVEsQ0FBQ0csU0FBVCxHQUFxQkosSUFBckI7QUFDQSxTQUFPQyxRQUFRLENBQUNJLEtBQWhCO0FBQ0E7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFNBQVNDLHlCQUFULENBQW1DTixJQUFuQyxFQUF5QztBQUN2QyxNQUFJQyxRQUFRLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBVCxDQUF1QixVQUF2QixDQUFmO0FBQ0FGLEVBQUFBLFFBQVEsQ0FBQ00sU0FBVCxHQUFxQlAsSUFBckI7QUFDQSxTQUFPQyxRQUFRLENBQUNHLFNBQWhCO0FBQ0Q7QUFHRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBQ0EsU0FBU3pGLDhDQUFULEdBQXlEO0FBQ3hEbkQsRUFBQUEsTUFBTSxDQUFFLDBEQUFGLENBQU4sQ0FBb0VnSixXQUFwRSxDQUFpRixzQkFBakY7QUFDQTtBQUVEO0FBQ0E7QUFDQTs7O0FBQ0EsU0FBU3JFLDhDQUFULEdBQXlEO0FBQ3hEM0UsRUFBQUEsTUFBTSxDQUFFLDBEQUFGLENBQU4sQ0FBcUVpSixRQUFyRSxDQUErRSxzQkFBL0U7QUFDQTtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFNBQVNDLDJDQUFULEdBQXNEO0FBQ2xELE1BQUtsSixNQUFNLENBQUUsMERBQUYsQ0FBTixDQUFxRW1KLFFBQXJFLENBQStFLHNCQUEvRSxDQUFMLEVBQThHO0FBQ2hILFdBQU8sSUFBUDtBQUNBLEdBRkUsTUFFSTtBQUNOLFdBQU8sS0FBUDtBQUNBO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmpRdWVyeSgnYm9keScpLm9uKHtcclxuICAgICd0b3VjaG1vdmUnOiBmdW5jdGlvbihlKSB7XHJcblxyXG5cdFx0alF1ZXJ5KCAnLnRpbWVzcGFydGx5JyApLmVhY2goIGZ1bmN0aW9uICggaW5kZXggKXtcclxuXHJcblx0XHRcdHZhciB0ZF9lbCA9IGpRdWVyeSggdGhpcyApLmdldCggMCApO1xyXG5cclxuXHRcdFx0aWYgKCAodW5kZWZpbmVkICE9IHRkX2VsLl90aXBweSkgKXtcclxuXHJcblx0XHRcdFx0dmFyIGluc3RhbmNlID0gdGRfZWwuX3RpcHB5O1xyXG5cdFx0XHRcdGluc3RhbmNlLmhpZGUoKTtcclxuXHRcdFx0fVxyXG5cdFx0fSApO1xyXG5cdH1cclxufSk7XHJcblxyXG4vKipcclxuICogUmVxdWVzdCBPYmplY3RcclxuICogSGVyZSB3ZSBjYW4gIGRlZmluZSBTZWFyY2ggcGFyYW1ldGVycyBhbmQgVXBkYXRlIGl0IGxhdGVyLCAgd2hlbiAgc29tZSBwYXJhbWV0ZXIgd2FzIGNoYW5nZWRcclxuICpcclxuICovXHJcbnZhciB3cGJjX2FqeF9ib29raW5nX2xpc3RpbmcgPSAoZnVuY3Rpb24gKCBvYmosICQpIHtcclxuXHJcblx0Ly8gU2VjdXJlIHBhcmFtZXRlcnMgZm9yIEFqYXhcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdHZhciBwX3NlY3VyZSA9IG9iai5zZWN1cml0eV9vYmogPSBvYmouc2VjdXJpdHlfb2JqIHx8IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dXNlcl9pZDogMCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bm9uY2UgIDogJycsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxvY2FsZSA6ICcnXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIH07XHJcblxyXG5cdG9iai5zZXRfc2VjdXJlX3BhcmFtID0gZnVuY3Rpb24gKCBwYXJhbV9rZXksIHBhcmFtX3ZhbCApIHtcclxuXHRcdHBfc2VjdXJlWyBwYXJhbV9rZXkgXSA9IHBhcmFtX3ZhbDtcclxuXHR9O1xyXG5cclxuXHRvYmouZ2V0X3NlY3VyZV9wYXJhbSA9IGZ1bmN0aW9uICggcGFyYW1fa2V5ICkge1xyXG5cdFx0cmV0dXJuIHBfc2VjdXJlWyBwYXJhbV9rZXkgXTtcclxuXHR9O1xyXG5cclxuXHJcblx0Ly8gTGlzdGluZyBTZWFyY2ggcGFyYW1ldGVyc1x0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0dmFyIHBfbGlzdGluZyA9IG9iai5zZWFyY2hfcmVxdWVzdF9vYmogPSBvYmouc2VhcmNoX3JlcXVlc3Rfb2JqIHx8IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c29ydCAgICAgICAgICAgIDogXCJib29raW5nX2lkXCIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNvcnRfdHlwZSAgICAgICA6IFwiREVTQ1wiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwYWdlX251bSAgICAgICAgOiAxLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwYWdlX2l0ZW1zX2NvdW50OiAxMCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y3JlYXRlX2RhdGUgICAgIDogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5d29yZCAgICAgICAgIDogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c291cmNlICAgICAgICAgIDogXCJcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcclxuXHJcblx0b2JqLnNlYXJjaF9zZXRfYWxsX3BhcmFtcyA9IGZ1bmN0aW9uICggcmVxdWVzdF9wYXJhbV9vYmogKSB7XHJcblx0XHRwX2xpc3RpbmcgPSByZXF1ZXN0X3BhcmFtX29iajtcclxuXHR9O1xyXG5cclxuXHRvYmouc2VhcmNoX2dldF9hbGxfcGFyYW1zID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0cmV0dXJuIHBfbGlzdGluZztcclxuXHR9O1xyXG5cclxuXHRvYmouc2VhcmNoX2dldF9wYXJhbSA9IGZ1bmN0aW9uICggcGFyYW1fa2V5ICkge1xyXG5cdFx0cmV0dXJuIHBfbGlzdGluZ1sgcGFyYW1fa2V5IF07XHJcblx0fTtcclxuXHJcblx0b2JqLnNlYXJjaF9zZXRfcGFyYW0gPSBmdW5jdGlvbiAoIHBhcmFtX2tleSwgcGFyYW1fdmFsICkge1xyXG5cdFx0Ly8gaWYgKCBBcnJheS5pc0FycmF5KCBwYXJhbV92YWwgKSApe1xyXG5cdFx0Ly8gXHRwYXJhbV92YWwgPSBKU09OLnN0cmluZ2lmeSggcGFyYW1fdmFsICk7XHJcblx0XHQvLyB9XHJcblx0XHRwX2xpc3RpbmdbIHBhcmFtX2tleSBdID0gcGFyYW1fdmFsO1xyXG5cdH07XHJcblxyXG5cdG9iai5zZWFyY2hfc2V0X3BhcmFtc19hcnIgPSBmdW5jdGlvbiggcGFyYW1zX2FyciApe1xyXG5cdFx0Xy5lYWNoKCBwYXJhbXNfYXJyLCBmdW5jdGlvbiAoIHBfdmFsLCBwX2tleSwgcF9kYXRhICl7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmaW5lIGRpZmZlcmVudCBTZWFyY2ggIHBhcmFtZXRlcnMgZm9yIHJlcXVlc3RcclxuXHRcdFx0dGhpcy5zZWFyY2hfc2V0X3BhcmFtKCBwX2tleSwgcF92YWwgKTtcclxuXHRcdH0gKTtcclxuXHR9XHJcblxyXG5cclxuXHQvLyBPdGhlciBwYXJhbWV0ZXJzIFx0XHRcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdHZhciBwX290aGVyID0gb2JqLm90aGVyX29iaiA9IG9iai5vdGhlcl9vYmogfHwgeyB9O1xyXG5cclxuXHRvYmouc2V0X290aGVyX3BhcmFtID0gZnVuY3Rpb24gKCBwYXJhbV9rZXksIHBhcmFtX3ZhbCApIHtcclxuXHRcdHBfb3RoZXJbIHBhcmFtX2tleSBdID0gcGFyYW1fdmFsO1xyXG5cdH07XHJcblxyXG5cdG9iai5nZXRfb3RoZXJfcGFyYW0gPSBmdW5jdGlvbiAoIHBhcmFtX2tleSApIHtcclxuXHRcdHJldHVybiBwX290aGVyWyBwYXJhbV9rZXkgXTtcclxuXHR9O1xyXG5cclxuXHJcblx0cmV0dXJuIG9iajtcclxufSggd3BiY19hanhfYm9va2luZ19saXN0aW5nIHx8IHt9LCBqUXVlcnkgKSk7XHJcblxyXG5cclxuLyoqXHJcbiAqICAgQWpheCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4vKipcclxuICogU2VuZCBBamF4IHNlYXJjaCByZXF1ZXN0XHJcbiAqIGZvciBzZWFyY2hpbmcgc3BlY2lmaWMgS2V5d29yZCBhbmQgb3RoZXIgcGFyYW1zXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX2FqYXhfc2VhcmNoX3JlcXVlc3QoKXtcclxuXHJcbmNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoJ0FKWF9CT09LSU5HX0xJU1RJTkcnKTsgY29uc29sZS5sb2coICcgPT0gQmVmb3JlIEFqYXggU2VuZCAtIHNlYXJjaF9nZXRfYWxsX3BhcmFtcygpID09ICcgLCB3cGJjX2FqeF9ib29raW5nX2xpc3Rpbmcuc2VhcmNoX2dldF9hbGxfcGFyYW1zKCkgKTtcclxuXHJcblx0d3BiY19ib29raW5nX2xpc3RpbmdfcmVsb2FkX2J1dHRvbl9fc3Bpbl9zdGFydCgpO1xyXG5cclxuLypcclxuLy9GaXhJbjogZm9yVmlkZW9cclxuaWYgKCAhIGlzX3RoaXNfYWN0aW9uICl7XHJcblx0Ly93cGJjX2FqeF9ib29raW5nX19hY3R1YWxfbGlzdGluZ19faGlkZSgpO1xyXG5cdGpRdWVyeSggd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSggJ2xpc3RpbmdfY29udGFpbmVyJyApICkuaHRtbChcclxuXHRcdCc8ZGl2IHN0eWxlPVwid2lkdGg6MTAwJTt0ZXh0LWFsaWduOiBjZW50ZXI7XCIgaWQ9XCJ3cGJjX2xvYWRpbmdfc2VjdGlvblwiPjxzcGFuIGNsYXNzPVwid3BiY19pY25fYXV0b3JlbmV3IHdwYmNfc3BpblwiPjwvc3Bhbj48L2Rpdj4nXHJcblx0XHQrIGpRdWVyeSggd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSggJ2xpc3RpbmdfY29udGFpbmVyJyApICkuaHRtbCgpXHJcblx0KTtcclxuXHRpZiAoICdmdW5jdGlvbicgPT09IHR5cGVvZiAoalF1ZXJ5KCAnI3dwYmNfbG9hZGluZ19zZWN0aW9uJyApLndwYmNfbXlfbW9kYWwpICl7XHRcdFx0Ly9GaXhJbjogOS4wLjEuNVxyXG5cdFx0alF1ZXJ5KCAnI3dwYmNfbG9hZGluZ19zZWN0aW9uJyApLndwYmNfbXlfbW9kYWwoICdzaG93JyApO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRhbGVydCggJ1dhcm5pbmchIEJvb2tpbmcgQ2FsZW5kYXIuIEl0cyBzZWVtcyB0aGF0ICB5b3UgaGF2ZSBkZWFjdGl2YXRlZCBsb2FkaW5nIG9mIEJvb3RzdHJhcCBKUyBmaWxlcyBhdCBCb29raW5nIFNldHRpbmdzIEdlbmVyYWwgcGFnZSBpbiBBZHZhbmNlZCBzZWN0aW9uLicgKVxyXG5cdH1cclxufVxyXG5pc190aGlzX2FjdGlvbiA9IGZhbHNlO1xyXG4qL1xyXG5cdC8vIFN0YXJ0IEFqYXhcclxuXHRqUXVlcnkucG9zdCggd3BiY19nbG9iYWwxLndwYmNfYWpheHVybCxcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRhY3Rpb24gICAgICAgICAgOiAnV1BCQ19BSlhfQk9PS0lOR19MSVNUSU5HJyxcclxuXHRcdFx0XHRcdHdwYmNfYWp4X3VzZXJfaWQ6IHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5nZXRfc2VjdXJlX3BhcmFtKCAndXNlcl9pZCcgKSxcclxuXHRcdFx0XHRcdG5vbmNlICAgICAgICAgICA6IHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5nZXRfc2VjdXJlX3BhcmFtKCAnbm9uY2UnICksXHJcblx0XHRcdFx0XHR3cGJjX2FqeF9sb2NhbGUgOiB3cGJjX2FqeF9ib29raW5nX2xpc3RpbmcuZ2V0X3NlY3VyZV9wYXJhbSggJ2xvY2FsZScgKSxcclxuXHJcblx0XHRcdFx0XHRzZWFyY2hfcGFyYW1zXHQ6IHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5zZWFyY2hfZ2V0X2FsbF9wYXJhbXMoKVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0LyoqXHJcblx0XHRcdFx0ICogUyB1IGMgYyBlIHMgc1xyXG5cdFx0XHRcdCAqXHJcblx0XHRcdFx0ICogQHBhcmFtIHJlc3BvbnNlX2RhdGFcdFx0LVx0aXRzIG9iamVjdCByZXR1cm5lZCBmcm9tICBBamF4IC0gY2xhc3MtbGl2ZS1zZWFyY2cucGhwXHJcblx0XHRcdFx0ICogQHBhcmFtIHRleHRTdGF0dXNcdFx0LVx0J3N1Y2Nlc3MnXHJcblx0XHRcdFx0ICogQHBhcmFtIGpxWEhSXHRcdFx0XHQtXHRPYmplY3RcclxuXHRcdFx0XHQgKi9cclxuXHRcdFx0XHRmdW5jdGlvbiAoIHJlc3BvbnNlX2RhdGEsIHRleHRTdGF0dXMsIGpxWEhSICkge1xyXG4vL0ZpeEluOiBmb3JWaWRlb1xyXG4vL2pRdWVyeSggJyN3cGJjX2xvYWRpbmdfc2VjdGlvbicgKS53cGJjX215X21vZGFsKCAnaGlkZScgKTtcclxuXHJcbmNvbnNvbGUubG9nKCAnID09IFJlc3BvbnNlIFdQQkNfQUpYX0JPT0tJTkdfTElTVElORyA9PSAnLCByZXNwb25zZV9kYXRhICk7IGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuXHRcdFx0XHRcdC8vIFByb2JhYmx5IEVycm9yXHJcblx0XHRcdFx0XHRpZiAoICh0eXBlb2YgcmVzcG9uc2VfZGF0YSAhPT0gJ29iamVjdCcpIHx8IChyZXNwb25zZV9kYXRhID09PSBudWxsKSApe1xyXG5cdFx0XHRcdFx0XHRqUXVlcnkoICcjd2hfc29ydF9zZWxlY3RvcicgKS5oaWRlKCk7XHJcblx0XHRcdFx0XHRcdGpRdWVyeSggd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSggJ2xpc3RpbmdfY29udGFpbmVyJyApICkuaHRtbChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwid3BiYy1zZXR0aW5ncy1ub3RpY2Ugbm90aWNlLXdhcm5pbmdcIiBzdHlsZT1cInRleHQtYWxpZ246bGVmdFwiPicgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZV9kYXRhICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCc8L2Rpdj4nXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBSZWxvYWQgcGFnZSwgYWZ0ZXIgZmlsdGVyIHRvb2xiYXIgd2FzIHJlc2V0ZWRcclxuXHRcdFx0XHRcdGlmICggICAgICAgKCAgICAgdW5kZWZpbmVkICE9IHJlc3BvbnNlX2RhdGFbICdhanhfY2xlYW5lZF9wYXJhbXMnIF0pXHJcblx0XHRcdFx0XHRcdFx0JiYgKCAncmVzZXRfZG9uZScgPT09IHJlc3BvbnNlX2RhdGFbICdhanhfY2xlYW5lZF9wYXJhbXMnIF1bICd1aV9yZXNldCcgXSlcclxuXHRcdFx0XHRcdCl7XHJcblx0XHRcdFx0XHRcdGxvY2F0aW9uLnJlbG9hZCgpO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gU2hvdyBsaXN0aW5nXHJcblx0XHRcdFx0XHRpZiAoIHJlc3BvbnNlX2RhdGFbICdhanhfY291bnQnIF0gPiAwICl7XHJcblxyXG5cdFx0XHRcdFx0XHR3cGJjX2FqeF9ib29raW5nX3Nob3dfbGlzdGluZyggcmVzcG9uc2VfZGF0YVsgJ2FqeF9pdGVtcycgXSwgcmVzcG9uc2VfZGF0YVsgJ2FqeF9zZWFyY2hfcGFyYW1zJyBdLCByZXNwb25zZV9kYXRhWyAnYWp4X2Jvb2tpbmdfcmVzb3VyY2VzJyBdICk7XHJcblxyXG5cdFx0XHRcdFx0XHR3cGJjX3BhZ2luYXRpb25fZWNobyhcclxuXHRcdFx0XHRcdFx0XHR3cGJjX2FqeF9ib29raW5nX2xpc3RpbmcuZ2V0X290aGVyX3BhcmFtKCAncGFnaW5hdGlvbl9jb250YWluZXInICksXHJcblx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0J3BhZ2VfYWN0aXZlJzogcmVzcG9uc2VfZGF0YVsgJ2FqeF9zZWFyY2hfcGFyYW1zJyBdWyAncGFnZV9udW0nIF0sXHJcblx0XHRcdFx0XHRcdFx0XHQncGFnZXNfY291bnQnOiBNYXRoLmNlaWwoIHJlc3BvbnNlX2RhdGFbICdhanhfY291bnQnIF0gLyByZXNwb25zZV9kYXRhWyAnYWp4X3NlYXJjaF9wYXJhbXMnIF1bICdwYWdlX2l0ZW1zX2NvdW50JyBdICksXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0J3BhZ2VfaXRlbXNfY291bnQnOiByZXNwb25zZV9kYXRhWyAnYWp4X3NlYXJjaF9wYXJhbXMnIF1bICdwYWdlX2l0ZW1zX2NvdW50JyBdLFxyXG5cdFx0XHRcdFx0XHRcdFx0J3NvcnRfdHlwZScgICAgICAgOiByZXNwb25zZV9kYXRhWyAnYWp4X3NlYXJjaF9wYXJhbXMnIF1bICdzb3J0X3R5cGUnIF1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdHdwYmNfYWp4X2Jvb2tpbmdfZGVmaW5lX3VpX2hvb2tzKCk7XHRcdFx0XHRcdFx0Ly8gUmVkZWZpbmUgSG9va3MsIGJlY2F1c2Ugd2Ugc2hvdyBuZXcgRE9NIGVsZW1lbnRzXHJcblxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHJcblx0XHRcdFx0XHRcdHdwYmNfYWp4X2Jvb2tpbmdfX2FjdHVhbF9saXN0aW5nX19oaWRlKCk7XHJcblx0XHRcdFx0XHRcdGpRdWVyeSggd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSggJ2xpc3RpbmdfY29udGFpbmVyJyApICkuaHRtbChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwid3BiYy1zZXR0aW5ncy1ub3RpY2UwIG5vdGljZS13YXJuaW5nMFwiIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLWxlZnQ6LTUwcHg7XCI+JyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCc8c3Ryb25nPicgKyAnTm8gcmVzdWx0cyBmb3VuZCBmb3IgY3VycmVudCBmaWx0ZXIgb3B0aW9ucy4uLicgKyAnPC9zdHJvbmc+JyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vJzxzdHJvbmc+JyArICdObyByZXN1bHRzIGZvdW5kLi4uJyArICc8L3N0cm9uZz4nICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCc8L2Rpdj4nXHJcblx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gVXBkYXRlIG5ldyBib29raW5nIGNvdW50XHJcblx0XHRcdFx0XHRpZiAoIHVuZGVmaW5lZCAhPT0gcmVzcG9uc2VfZGF0YVsgJ2FqeF9uZXdfYm9va2luZ3NfY291bnQnIF0gKXtcclxuXHRcdFx0XHRcdFx0dmFyIGFqeF9uZXdfYm9va2luZ3NfY291bnQgPSBwYXJzZUludCggcmVzcG9uc2VfZGF0YVsgJ2FqeF9uZXdfYm9va2luZ3NfY291bnQnIF0gKVxyXG5cdFx0XHRcdFx0XHRpZiAoYWp4X25ld19ib29raW5nc19jb3VudD4wKXtcclxuXHRcdFx0XHRcdFx0XHRqUXVlcnkoICcud3BiY19iYWRnZV9jb3VudCcgKS5zaG93KCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0alF1ZXJ5KCAnLmJrLXVwZGF0ZS1jb3VudCcgKS5odG1sKCBhanhfbmV3X2Jvb2tpbmdzX2NvdW50ICk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0d3BiY19ib29raW5nX2xpc3RpbmdfcmVsb2FkX2J1dHRvbl9fc3Bpbl9wYXVzZSgpO1xyXG5cclxuXHRcdFx0XHRcdGpRdWVyeSggJyNhamF4X3Jlc3BvbmQnICkuaHRtbCggcmVzcG9uc2VfZGF0YSApO1x0XHQvLyBGb3IgYWJpbGl0eSB0byBzaG93IHJlc3BvbnNlLCBhZGQgc3VjaCBESVYgZWxlbWVudCB0byBwYWdlXHJcblx0XHRcdFx0fVxyXG5cdFx0XHQgICkuZmFpbCggZnVuY3Rpb24gKCBqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24gKSB7ICAgIGlmICggd2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUubG9nICl7IGNvbnNvbGUubG9nKCAnQWpheF9FcnJvcicsIGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93biApOyB9XHJcblx0XHRcdFx0XHRqUXVlcnkoICcjd2hfc29ydF9zZWxlY3RvcicgKS5oaWRlKCk7XHJcblx0XHRcdFx0XHR2YXIgZXJyb3JfbWVzc2FnZSA9ICc8c3Ryb25nPicgKyAnRXJyb3IhJyArICc8L3N0cm9uZz4gJyArIGVycm9yVGhyb3duIDtcclxuXHRcdFx0XHRcdGlmICgganFYSFIucmVzcG9uc2VUZXh0ICl7XHJcblx0XHRcdFx0XHRcdGVycm9yX21lc3NhZ2UgKz0ganFYSFIucmVzcG9uc2VUZXh0O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZXJyb3JfbWVzc2FnZSA9IGVycm9yX21lc3NhZ2UucmVwbGFjZSggL1xcbi9nLCBcIjxiciAvPlwiICk7XHJcblxyXG5cdFx0XHRcdFx0d3BiY19hanhfYm9va2luZ19zaG93X21lc3NhZ2UoIGVycm9yX21lc3NhZ2UgKTtcclxuXHRcdFx0ICB9KVxyXG5cdCAgICAgICAgICAvLyAuZG9uZSggICBmdW5jdGlvbiAoIGRhdGEsIHRleHRTdGF0dXMsIGpxWEhSICkgeyAgIGlmICggd2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUubG9nICl7IGNvbnNvbGUubG9nKCAnc2Vjb25kIHN1Y2Nlc3MnLCBkYXRhLCB0ZXh0U3RhdHVzLCBqcVhIUiApOyB9ICAgIH0pXHJcblx0XHRcdCAgLy8gLmFsd2F5cyggZnVuY3Rpb24gKCBkYXRhX2pxWEhSLCB0ZXh0U3RhdHVzLCBqcVhIUl9lcnJvclRocm93biApIHsgICBpZiAoIHdpbmRvdy5jb25zb2xlICYmIHdpbmRvdy5jb25zb2xlLmxvZyApeyBjb25zb2xlLmxvZyggJ2Fsd2F5cyBmaW5pc2hlZCcsIGRhdGFfanFYSFIsIHRleHRTdGF0dXMsIGpxWEhSX2Vycm9yVGhyb3duICk7IH0gICAgIH0pXHJcblx0XHRcdCAgOyAgLy8gRW5kIEFqYXhcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiAgIFZpZXdzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuLyoqXHJcbiAqIFNob3cgTGlzdGluZyBUYWJsZSBcdFx0YW5kIGRlZmluZSBnTWFpbCBjaGVja2JveCBob29rc1xyXG4gKlxyXG4gKiBAcGFyYW0ganNvbl9pdGVtc19hcnJcdFx0LSBKU09OIG9iamVjdCB3aXRoIEl0ZW1zXHJcbiAqIEBwYXJhbSBqc29uX3NlYXJjaF9wYXJhbXNcdC0gSlNPTiBvYmplY3Qgd2l0aCBTZWFyY2hcclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfc2hvd19saXN0aW5nKCBqc29uX2l0ZW1zX2FyciwganNvbl9zZWFyY2hfcGFyYW1zLCBqc29uX2Jvb2tpbmdfcmVzb3VyY2VzICl7XHJcblxyXG5cdHdwYmNfYWp4X2RlZmluZV90ZW1wbGF0ZXNfX3Jlc291cmNlX21hbmlwdWxhdGlvbigganNvbl9pdGVtc19hcnIsIGpzb25fc2VhcmNoX3BhcmFtcywganNvbl9ib29raW5nX3Jlc291cmNlcyApO1xyXG5cclxuLy9jb25zb2xlLmxvZyggJ2pzb25faXRlbXNfYXJyJyAsIGpzb25faXRlbXNfYXJyLCBqc29uX3NlYXJjaF9wYXJhbXMgKTtcclxuXHRqUXVlcnkoICcjd2hfc29ydF9zZWxlY3RvcicgKS5jc3MoIFwiZGlzcGxheVwiLCBcImZsZXhcIiApO1xyXG5cdHZhciBsaXN0X2hlYWRlcl90cGwgPSB3cC50ZW1wbGF0ZSggJ3dwYmNfYWp4X2Jvb2tpbmdfbGlzdF9oZWFkZXInICk7XHJcblx0dmFyIGxpc3Rfcm93X3RwbCAgICA9IHdwLnRlbXBsYXRlKCAnd3BiY19hanhfYm9va2luZ19saXN0X3JvdycgKTtcclxuXHJcblxyXG5cdC8vIEhlYWRlclxyXG5cdGpRdWVyeSggd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSggJ2xpc3RpbmdfY29udGFpbmVyJyApICkuaHRtbCggbGlzdF9oZWFkZXJfdHBsKCkgKTtcclxuXHJcblx0Ly8gQm9keVxyXG5cdGpRdWVyeSggd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSggJ2xpc3RpbmdfY29udGFpbmVyJyApICkuYXBwZW5kKCAnPGRpdiBjbGFzcz1cIndwYmNfc2VsZWN0YWJsZV9ib2R5XCI+PC9kaXY+JyApO1xyXG5cclxuXHQvLyBSIG8gdyBzXHJcbmNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoICdMSVNUSU5HX1JPV1MnICk7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIExJU1RJTkdfUk9XU1xyXG5cdF8uZWFjaCgganNvbl9pdGVtc19hcnIsIGZ1bmN0aW9uICggcF92YWwsIHBfa2V5LCBwX2RhdGEgKXtcclxuXHRcdGlmICggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBqc29uX3NlYXJjaF9wYXJhbXNbICdrZXl3b3JkJyBdICl7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBQYXJhbWV0ZXIgZm9yIG1hcmtpbmcga2V5d29yZCB3aXRoIGRpZmZlcmVudCBjb2xvciBpbiBhIGxpc3RcclxuXHRcdFx0cF92YWxbICdfX3NlYXJjaF9yZXF1ZXN0X2tleXdvcmRfXycgXSA9IGpzb25fc2VhcmNoX3BhcmFtc1sgJ2tleXdvcmQnIF07XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRwX3ZhbFsgJ19fc2VhcmNoX3JlcXVlc3Rfa2V5d29yZF9fJyBdID0gJyc7XHJcblx0XHR9XHJcblx0XHRwX3ZhbFsgJ2Jvb2tpbmdfcmVzb3VyY2VzJyBdID0ganNvbl9ib29raW5nX3Jlc291cmNlcztcclxuXHRcdGpRdWVyeSggd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSggJ2xpc3RpbmdfY29udGFpbmVyJyApICsgJyAud3BiY19zZWxlY3RhYmxlX2JvZHknICkuYXBwZW5kKCBsaXN0X3Jvd190cGwoIHBfdmFsICkgKTtcclxuXHR9ICk7XHJcbmNvbnNvbGUuZ3JvdXBFbmQoKTsgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBMSVNUSU5HX1JPV1NcclxuXHJcblx0d3BiY19kZWZpbmVfZ21haWxfY2hlY2tib3hfc2VsZWN0aW9uKCBqUXVlcnkgKTtcdFx0XHRcdFx0XHQvLyBSZWRlZmluZSBIb29rcyBmb3IgY2xpY2tpbmcgYXQgQ2hlY2tib3hlc1xyXG59XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBEZWZpbmUgdGVtcGxhdGUgZm9yIGNoYW5naW5nIGJvb2tpbmcgcmVzb3VyY2VzICYgIHVwZGF0ZSBpdCBlYWNoIHRpbWUsICB3aGVuICBsaXN0aW5nIHVwZGF0aW5nLCB1c2VmdWwgIGZvciBzaG93aW5nIGFjdHVhbCAgYm9va2luZyByZXNvdXJjZXMuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ganNvbl9pdGVtc19hcnJcdFx0LSBKU09OIG9iamVjdCB3aXRoIEl0ZW1zXHJcblx0ICogQHBhcmFtIGpzb25fc2VhcmNoX3BhcmFtc1x0LSBKU09OIG9iamVjdCB3aXRoIFNlYXJjaFxyXG5cdCAqIEBwYXJhbSBqc29uX2Jvb2tpbmdfcmVzb3VyY2VzXHQtIEpTT04gb2JqZWN0IHdpdGggUmVzb3VyY2VzXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19hanhfZGVmaW5lX3RlbXBsYXRlc19fcmVzb3VyY2VfbWFuaXB1bGF0aW9uKCBqc29uX2l0ZW1zX2FyciwganNvbl9zZWFyY2hfcGFyYW1zLCBqc29uX2Jvb2tpbmdfcmVzb3VyY2VzICl7XHJcblxyXG5cdFx0Ly8gQ2hhbmdlIGJvb2tpbmcgcmVzb3VyY2VcclxuXHRcdHZhciBjaGFuZ2VfYm9va2luZ19yZXNvdXJjZV90cGwgPSB3cC50ZW1wbGF0ZSggJ3dwYmNfYWp4X2NoYW5nZV9ib29raW5nX3Jlc291cmNlJyApO1xyXG5cclxuXHRcdGpRdWVyeSggJyN3cGJjX2hpZGRlbl90ZW1wbGF0ZV9fY2hhbmdlX2Jvb2tpbmdfcmVzb3VyY2UnICkuaHRtbChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjaGFuZ2VfYm9va2luZ19yZXNvdXJjZV90cGwoIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdhanhfc2VhcmNoX3BhcmFtcycgICAgOiBqc29uX3NlYXJjaF9wYXJhbXMsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnYWp4X2Jvb2tpbmdfcmVzb3VyY2VzJzoganNvbl9ib29raW5nX3Jlc291cmNlc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHJcblx0XHQvLyBEdXBsaWNhdGUgYm9va2luZyByZXNvdXJjZVxyXG5cdFx0dmFyIGR1cGxpY2F0ZV9ib29raW5nX3RvX290aGVyX3Jlc291cmNlX3RwbCA9IHdwLnRlbXBsYXRlKCAnd3BiY19hanhfZHVwbGljYXRlX2Jvb2tpbmdfdG9fb3RoZXJfcmVzb3VyY2UnICk7XHJcblxyXG5cdFx0alF1ZXJ5KCAnI3dwYmNfaGlkZGVuX3RlbXBsYXRlX19kdXBsaWNhdGVfYm9va2luZ190b19vdGhlcl9yZXNvdXJjZScgKS5odG1sKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGR1cGxpY2F0ZV9ib29raW5nX3RvX290aGVyX3Jlc291cmNlX3RwbCgge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2FqeF9zZWFyY2hfcGFyYW1zJyAgICA6IGpzb25fc2VhcmNoX3BhcmFtcyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdhanhfYm9va2luZ19yZXNvdXJjZXMnOiBqc29uX2Jvb2tpbmdfcmVzb3VyY2VzXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSApXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdH1cclxuXHJcblxyXG4vKipcclxuICogU2hvdyBqdXN0IG1lc3NhZ2UgaW5zdGVhZCBvZiBsaXN0aW5nIGFuZCBoaWRlIHBhZ2luYXRpb25cclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfc2hvd19tZXNzYWdlKCBtZXNzYWdlICl7XHJcblxyXG5cdHdwYmNfYWp4X2Jvb2tpbmdfX2FjdHVhbF9saXN0aW5nX19oaWRlKCk7XHJcblxyXG5cdGpRdWVyeSggd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSggJ2xpc3RpbmdfY29udGFpbmVyJyApICkuaHRtbChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JzxkaXYgY2xhc3M9XCJ3cGJjLXNldHRpbmdzLW5vdGljZSBub3RpY2Utd2FybmluZ1wiIHN0eWxlPVwidGV4dC1hbGlnbjpsZWZ0XCI+JyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZSArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCc8L2Rpdj4nXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiAgIEggbyBvIGsgcyAgLSAgaXRzIEFjdGlvbi9UaW1lcyB3aGVuIG5lZWQgdG8gcmUtUmVuZGVyIFZpZXdzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuLyoqXHJcbiAqIFNlbmQgQWpheCBTZWFyY2ggUmVxdWVzdCBhZnRlciBVcGRhdGluZyBzZWFyY2ggcmVxdWVzdCBwYXJhbWV0ZXJzXHJcbiAqXHJcbiAqIEBwYXJhbSBwYXJhbXNfYXJyXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMgKCBwYXJhbXNfYXJyICl7XHJcblxyXG5cdC8vIERlZmluZSBkaWZmZXJlbnQgU2VhcmNoICBwYXJhbWV0ZXJzIGZvciByZXF1ZXN0XHJcblx0Xy5lYWNoKCBwYXJhbXNfYXJyLCBmdW5jdGlvbiAoIHBfdmFsLCBwX2tleSwgcF9kYXRhICkge1xyXG5cdFx0Ly9jb25zb2xlLmxvZyggJ1JlcXVlc3QgZm9yOiAnLCBwX2tleSwgcF92YWwgKTtcclxuXHRcdHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5zZWFyY2hfc2V0X3BhcmFtKCBwX2tleSwgcF92YWwgKTtcclxuXHR9KTtcclxuXHJcblx0Ly8gU2VuZCBBamF4IFJlcXVlc3RcclxuXHR3cGJjX2FqeF9ib29raW5nX2FqYXhfc2VhcmNoX3JlcXVlc3QoKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBcIlBhZ2UgTnVtYmVyXCJcclxuICogQHBhcmFtIHBhZ2VfbnVtYmVyXHRpbnRcclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfcGFnaW5hdGlvbl9jbGljayggcGFnZV9udW1iZXIgKXtcclxuXHJcblx0d3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X3dpdGhfcGFyYW1zKCB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0J3BhZ2VfbnVtJzogcGFnZV9udW1iZXJcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSApO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqICAgS2V5d29yZCBTZWFyY2hpbmcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4vKipcclxuICogU2VhcmNoIHJlcXVlc3QgZm9yIFwiS2V5d29yZFwiLCBhbHNvIHNldCBjdXJyZW50IHBhZ2UgdG8gIDFcclxuICpcclxuICogQHBhcmFtIGVsZW1lbnRfaWRcdC1cdEhUTUwgSUQgIG9mIGVsZW1lbnQsICB3aGVyZSB3YXMgZW50ZXJlZCBrZXl3b3JkXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3RfZm9yX2tleXdvcmQoIGVsZW1lbnRfaWQgKSB7XHJcblxyXG5cdC8vIFdlIG5lZWQgdG8gUmVzZXQgcGFnZV9udW0gdG8gMSB3aXRoIGVhY2ggbmV3IHNlYXJjaCwgYmVjYXVzZSB3ZSBjYW4gYmUgYXQgcGFnZSAjNCwgIGJ1dCBhZnRlciAgbmV3IHNlYXJjaCAgd2UgY2FuICBoYXZlIHRvdGFsbHkgIG9ubHkgIDEgcGFnZVxyXG5cdHdwYmNfYWp4X2Jvb2tpbmdfc2VuZF9zZWFyY2hfcmVxdWVzdF93aXRoX3BhcmFtcygge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2tleXdvcmQnICA6IGpRdWVyeSggZWxlbWVudF9pZCApLnZhbCgpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3BhZ2VfbnVtJzogMVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gKTtcclxufVxyXG5cclxuXHQvKipcclxuXHQgKiBTZW5kIHNlYXJjaCByZXF1ZXN0IGFmdGVyIGZldyBzZWNvbmRzICh1c3VhbGx5IGFmdGVyIDEsNSBzZWMpXHJcblx0ICogQ2xvc3VyZSBmdW5jdGlvbi4gSXRzIHVzZWZ1bCwgIGZvciBkbyAgbm90IHNlbmQgdG9vIG1hbnkgQWpheCByZXF1ZXN0cywgd2hlbiBzb21lb25lIG1ha2UgZmFzdCB0eXBpbmcuXHJcblx0ICovXHJcblx0dmFyIHdwYmNfYWp4X2Jvb2tpbmdfc2VhcmNoaW5nX2FmdGVyX2Zld19zZWNvbmRzID0gZnVuY3Rpb24gKCl7XHJcblxyXG5cdFx0dmFyIGNsb3NlZF90aW1lciA9IDA7XHJcblxyXG5cdFx0cmV0dXJuIGZ1bmN0aW9uICggZWxlbWVudF9pZCwgdGltZXJfZGVsYXkgKXtcclxuXHJcblx0XHRcdC8vIEdldCBkZWZhdWx0IHZhbHVlIG9mIFwidGltZXJfZGVsYXlcIiwgIGlmIHBhcmFtZXRlciB3YXMgbm90IHBhc3NlZCBpbnRvIHRoZSBmdW5jdGlvbi5cclxuXHRcdFx0dGltZXJfZGVsYXkgPSB0eXBlb2YgdGltZXJfZGVsYXkgIT09ICd1bmRlZmluZWQnID8gdGltZXJfZGVsYXkgOiAxNTAwO1xyXG5cclxuXHRcdFx0Y2xlYXJUaW1lb3V0KCBjbG9zZWRfdGltZXIgKTtcdFx0Ly8gQ2xlYXIgcHJldmlvdXMgdGltZXJcclxuXHJcblx0XHRcdC8vIFN0YXJ0IG5ldyBUaW1lclxyXG5cdFx0XHRjbG9zZWRfdGltZXIgPSBzZXRUaW1lb3V0KCB3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3RfZm9yX2tleXdvcmQuYmluZCggIG51bGwsIGVsZW1lbnRfaWQgKSwgdGltZXJfZGVsYXkgKTtcclxuXHRcdH1cclxuXHR9KCk7XHJcblxyXG5cclxuLyoqXHJcbiAqICAgRGVmaW5lIER5bmFtaWMgSG9va3MgIChsaWtlIHBhZ2luYXRpb24gY2xpY2ssIHdoaWNoIHJlbmV3IGVhY2ggdGltZSB3aXRoIG5ldyBsaXN0aW5nIHNob3dpbmcpICAtLS0tLS0tLS0tLS0tICovXHJcblxyXG4vKipcclxuICogRGVmaW5lIEhUTUwgdWkgSG9va3M6IG9uIEtleVVwIHwgQ2hhbmdlIHwgLT4gU29ydCBPcmRlciAmIE51bWJlciBJdGVtcyAvIFBhZ2VcclxuICogV2UgYXJlIGhjbmFnZWQgaXQgZWFjaCAgdGltZSwgd2hlbiBzaG93aW5nIG5ldyBsaXN0aW5nLCBiZWNhdXNlIERPTSBlbGVtZW50cyBjaG5hZ2VkXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX2RlZmluZV91aV9ob29rcygpe1xyXG5cclxuXHRpZiAoICdmdW5jdGlvbicgPT09IHR5cGVvZiggd3BiY19kZWZpbmVfdGlwcHlfdG9vbHRpcHMgKSApIHtcclxuXHRcdHdwYmNfZGVmaW5lX3RpcHB5X3Rvb2x0aXBzKCAnLndwYmNfbGlzdGluZ19jb250YWluZXIgJyApO1xyXG5cdH1cclxuXHJcblx0d3BiY19hanhfYm9va2luZ19fdWlfZGVmaW5lX19sb2NhbGUoKTtcclxuXHR3cGJjX2FqeF9ib29raW5nX191aV9kZWZpbmVfX3JlbWFyaygpO1xyXG5cclxuXHQvLyBJdGVtcyBQZXIgUGFnZVxyXG5cdGpRdWVyeSggJy53cGJjX2l0ZW1zX3Blcl9wYWdlJyApLm9uKCAnY2hhbmdlJywgZnVuY3Rpb24oIGV2ZW50ICl7XHJcblxyXG5cdFx0d3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X3dpdGhfcGFyYW1zKCB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQncGFnZV9pdGVtc19jb3VudCcgIDogalF1ZXJ5KCB0aGlzICkudmFsKCksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQncGFnZV9udW0nOiAxXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSApO1xyXG5cdH0gKTtcclxuXHJcblx0Ly8gU29ydGluZ1xyXG5cdGpRdWVyeSggJy53cGJjX2l0ZW1zX3NvcnRfdHlwZScgKS5vbiggJ2NoYW5nZScsIGZ1bmN0aW9uKCBldmVudCApe1xyXG5cclxuXHRcdHdwYmNfYWp4X2Jvb2tpbmdfc2VuZF9zZWFyY2hfcmVxdWVzdF93aXRoX3BhcmFtcyggeydzb3J0X3R5cGUnOiBqUXVlcnkoIHRoaXMgKS52YWwoKX0gKTtcclxuXHR9ICk7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogICBTaG93IC8gSGlkZSBMaXN0aW5nICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbi8qKlxyXG4gKiAgU2hvdyBMaXN0aW5nIFRhYmxlIFx0LSBcdFNlbmRpbmcgQWpheCBSZXF1ZXN0XHQtXHR3aXRoIHBhcmFtZXRlcnMgdGhhdCAgd2UgZWFybHkgIGRlZmluZWQgaW4gXCJ3cGJjX2FqeF9ib29raW5nX2xpc3RpbmdcIiBPYmouXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX19hY3R1YWxfbGlzdGluZ19fc2hvdygpe1xyXG5cclxuXHR3cGJjX2FqeF9ib29raW5nX2FqYXhfc2VhcmNoX3JlcXVlc3QoKTtcdFx0XHQvLyBTZW5kIEFqYXggUmVxdWVzdFx0LVx0d2l0aCBwYXJhbWV0ZXJzIHRoYXQgIHdlIGVhcmx5ICBkZWZpbmVkIGluIFwid3BiY19hanhfYm9va2luZ19saXN0aW5nXCIgT2JqLlxyXG59XHJcblxyXG4vKipcclxuICogSGlkZSBMaXN0aW5nIFRhYmxlICggYW5kIFBhZ2luYXRpb24gKVxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19fYWN0dWFsX2xpc3RpbmdfX2hpZGUoKXtcclxuXHRqUXVlcnkoICcjd2hfc29ydF9zZWxlY3RvcicgKS5oaWRlKCk7XHJcblx0alF1ZXJ5KCB3cGJjX2FqeF9ib29raW5nX2xpc3RpbmcuZ2V0X290aGVyX3BhcmFtKCAnbGlzdGluZ19jb250YWluZXInICkgICAgKS5odG1sKCAnJyApO1xyXG5cdGpRdWVyeSggd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSggJ3BhZ2luYXRpb25fY29udGFpbmVyJyApICkuaHRtbCggJycgKTtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiAgIFN1cHBvcnQgZnVuY3Rpb25zIGZvciBDb250ZW50IFRlbXBsYXRlIGRhdGEgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuLyoqXHJcbiAqIEhpZ2hsaWdodCBzdHJpbmdzLFxyXG4gKiBieSBpbnNlcnRpbmcgPHNwYW4gY2xhc3M9XCJmaWVsZHZhbHVlIG5hbWUgZmllbGRzZWFyY2h2YWx1ZVwiPi4uLjwvc3Bhbj4gaHRtbCAgZWxlbWVudHMgaW50byB0aGUgc3RyaW5nLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gYm9va2luZ19kZXRhaWxzIFx0LSBTb3VyY2Ugc3RyaW5nXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBib29raW5nX2tleXdvcmRcdC0gS2V5d29yZCB0byBoaWdobGlnaHRcclxuICogQHJldHVybnMge3N0cmluZ31cclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfZ2V0X2hpZ2hsaWdodGVkX3NlYXJjaF9rZXl3b3JkKCBib29raW5nX2RldGFpbHMsIGJvb2tpbmdfa2V5d29yZCApe1xyXG5cclxuXHRib29raW5nX2tleXdvcmQgPSBib29raW5nX2tleXdvcmQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcblx0aWYgKCAwID09IGJvb2tpbmdfa2V5d29yZC5sZW5ndGggKXtcclxuXHRcdHJldHVybiBib29raW5nX2RldGFpbHM7XHJcblx0fVxyXG5cclxuXHQvLyBIaWdobGlnaHQgc3Vic3RyaW5nIHdpdGhpbmcgSFRNTCB0YWdzIGluIFwiQ29udGVudCBvZiBib29raW5nIGZpZWxkcyBkYXRhXCIgLS0gZS5nLiBzdGFydGluZyBmcm9tICA+ICBhbmQgZW5kaW5nIHdpdGggPFxyXG5cdGxldCBrZXl3b3JkUmVnZXggPSBuZXcgUmVnRXhwKCBgZmllbGR2YWx1ZVtePD5dKj4oW148XSoke2Jvb2tpbmdfa2V5d29yZH1bXjxdKilgLCAnZ2ltJyApO1xyXG5cclxuXHQvL2xldCBtYXRjaGVzID0gWy4uLmJvb2tpbmdfZGV0YWlscy50b0xvd2VyQ2FzZSgpLm1hdGNoQWxsKCBrZXl3b3JkUmVnZXggKV07XHJcblx0bGV0IG1hdGNoZXMgPSBib29raW5nX2RldGFpbHMudG9Mb3dlckNhc2UoKS5tYXRjaEFsbCgga2V5d29yZFJlZ2V4ICk7XHJcblx0XHRtYXRjaGVzID0gQXJyYXkuZnJvbSggbWF0Y2hlcyApO1xyXG5cclxuXHRsZXQgc3RyaW5nc19hcnIgPSBbXTtcclxuXHRsZXQgcG9zX3ByZXZpb3VzID0gMDtcclxuXHRsZXQgc2VhcmNoX3Bvc19zdGFydDtcclxuXHRsZXQgc2VhcmNoX3Bvc19lbmQ7XHJcblxyXG5cdGZvciAoIGNvbnN0IG1hdGNoIG9mIG1hdGNoZXMgKXtcclxuXHJcblx0XHRzZWFyY2hfcG9zX3N0YXJ0ID0gbWF0Y2guaW5kZXggKyBtYXRjaFsgMCBdLnRvTG93ZXJDYXNlKCkuaW5kZXhPZiggJz4nLCAwICkgKyAxIDtcclxuXHJcblx0XHRzdHJpbmdzX2Fyci5wdXNoKCBib29raW5nX2RldGFpbHMuc3Vic3RyKCBwb3NfcHJldmlvdXMsIChzZWFyY2hfcG9zX3N0YXJ0IC0gcG9zX3ByZXZpb3VzKSApICk7XHJcblxyXG5cdFx0c2VhcmNoX3Bvc19lbmQgPSBib29raW5nX2RldGFpbHMudG9Mb3dlckNhc2UoKS5pbmRleE9mKCAnPCcsIHNlYXJjaF9wb3Nfc3RhcnQgKTtcclxuXHJcblx0XHRzdHJpbmdzX2Fyci5wdXNoKCAnPHNwYW4gY2xhc3M9XCJmaWVsZHZhbHVlIG5hbWUgZmllbGRzZWFyY2h2YWx1ZVwiPicgKyBib29raW5nX2RldGFpbHMuc3Vic3RyKCBzZWFyY2hfcG9zX3N0YXJ0LCAoc2VhcmNoX3Bvc19lbmQgLSBzZWFyY2hfcG9zX3N0YXJ0KSApICsgJzwvc3Bhbj4nICk7XHJcblxyXG5cdFx0cG9zX3ByZXZpb3VzID0gc2VhcmNoX3Bvc19lbmQ7XHJcblx0fVxyXG5cclxuXHRzdHJpbmdzX2Fyci5wdXNoKCBib29raW5nX2RldGFpbHMuc3Vic3RyKCBwb3NfcHJldmlvdXMsIChib29raW5nX2RldGFpbHMubGVuZ3RoIC0gcG9zX3ByZXZpb3VzKSApICk7XHJcblxyXG5cdHJldHVybiBzdHJpbmdzX2Fyci5qb2luKCAnJyApO1xyXG59XHJcblxyXG4vKipcclxuICogQ29udmVydCBzcGVjaWFsIEhUTUwgY2hhcmFjdGVycyAgIGZyb206XHQgJmFtcDsgXHQtPiBcdCZcclxuICpcclxuICogQHBhcmFtIHRleHRcclxuICogQHJldHVybnMgeyp9XHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2RlY29kZV9IVE1MX2VudGl0aWVzKCB0ZXh0ICl7XHJcblx0dmFyIHRleHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ3RleHRhcmVhJyApO1xyXG5cdHRleHRBcmVhLmlubmVySFRNTCA9IHRleHQ7XHJcblx0cmV0dXJuIHRleHRBcmVhLnZhbHVlO1xyXG59XHJcblxyXG4vKipcclxuICogQ29udmVydCBUTyBzcGVjaWFsIEhUTUwgY2hhcmFjdGVycyAgIGZyb206XHQgJiBcdC0+IFx0JmFtcDtcclxuICpcclxuICogQHBhcmFtIHRleHRcclxuICogQHJldHVybnMgeyp9XHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2VuY29kZV9IVE1MX2VudGl0aWVzKHRleHQpIHtcclxuICB2YXIgdGV4dEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xyXG4gIHRleHRBcmVhLmlubmVyVGV4dCA9IHRleHQ7XHJcbiAgcmV0dXJuIHRleHRBcmVhLmlubmVySFRNTDtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiAgIFN1cHBvcnQgRnVuY3Rpb25zIC0gU3BpbiBJY29uIGluIEJ1dHRvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuLyoqXHJcbiAqIFNwaW4gYnV0dG9uIGluIEZpbHRlciB0b29sYmFyICAtICBTdGFydFxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19ib29raW5nX2xpc3RpbmdfcmVsb2FkX2J1dHRvbl9fc3Bpbl9zdGFydCgpe1xyXG5cdGpRdWVyeSggJyN3cGJjX2Jvb2tpbmdfbGlzdGluZ19yZWxvYWRfYnV0dG9uIC5tZW51X2ljb24ud3BiY19zcGluJykucmVtb3ZlQ2xhc3MoICd3cGJjX2FuaW1hdGlvbl9wYXVzZScgKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNwaW4gYnV0dG9uIGluIEZpbHRlciB0b29sYmFyICAtICBQYXVzZVxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19ib29raW5nX2xpc3RpbmdfcmVsb2FkX2J1dHRvbl9fc3Bpbl9wYXVzZSgpe1xyXG5cdGpRdWVyeSggJyN3cGJjX2Jvb2tpbmdfbGlzdGluZ19yZWxvYWRfYnV0dG9uIC5tZW51X2ljb24ud3BiY19zcGluJyApLmFkZENsYXNzKCAnd3BiY19hbmltYXRpb25fcGF1c2UnICk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTcGluIGJ1dHRvbiBpbiBGaWx0ZXIgdG9vbGJhciAgLSAgaXMgU3Bpbm5pbmcgP1xyXG4gKlxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfYm9va2luZ19saXN0aW5nX3JlbG9hZF9idXR0b25fX2lzX3NwaW4oKXtcclxuICAgIGlmICggalF1ZXJ5KCAnI3dwYmNfYm9va2luZ19saXN0aW5nX3JlbG9hZF9idXR0b24gLm1lbnVfaWNvbi53cGJjX3NwaW4nICkuaGFzQ2xhc3MoICd3cGJjX2FuaW1hdGlvbl9wYXVzZScgKSApe1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcbn0iXSwiZmlsZSI6ImluY2x1ZGVzL3BhZ2UtYm9va2luZ3MvX291dC9ib29raW5nc19fbGlzdGluZy5qcyJ9
|
includes/page-bookings/_out/bookings__listing.min.js
ADDED
@@ -0,0 +1,2 @@
|
|
Â
|
|
Â
|
1 |
+
"use strict";function _createForOfIteratorHelper(e,_){var o="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!o){if(Array.isArray(e)||(o=_unsupportedIterableToArray(e))||_&&e&&"number"==typeof e.length){o&&(e=o);var n=0,_=function(){};return{s:_,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:_}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var t,r=!0,a=!1;return{s:function(){o=o.call(e)},n:function(){var e=o.next();return r=e.done,e},e:function(e){a=!0,t=e},f:function(){try{r||null==o.return||o.return()}finally{if(a)throw t}}}}function _unsupportedIterableToArray(e,_){if(e){if("string"==typeof e)return _arrayLikeToArray(e,_);var o=Object.prototype.toString.call(e).slice(8,-1);return"Map"===(o="Object"===o&&e.constructor?e.constructor.name:o)||"Set"===o?Array.from(e):"Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)?_arrayLikeToArray(e,_):void 0}}function _arrayLikeToArray(e,_){(null==_||_>e.length)&&(_=e.length);for(var o=0,n=new Array(_);o<_;o++)n[o]=e[o];return n}function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}jQuery("body").on({touchmove:function(e){jQuery(".timespartly").each(function(e){var _=jQuery(this).get(0);null!=_._tippy&&_._tippy.hide()})}});var wpbc_ajx_booking_listing=function(e){var o=e.security_obj=e.security_obj||{user_id:0,nonce:"",locale:""};e.set_secure_param=function(e,_){o[e]=_},e.get_secure_param=function(e){return o[e]};var n=e.search_request_obj=e.search_request_obj||{sort:"booking_id",sort_type:"DESC",page_num:1,page_items_count:10,create_date:"",keyword:"",source:""};e.search_set_all_params=function(e){n=e},e.search_get_all_params=function(){return n},e.search_get_param=function(e){return n[e]},e.search_set_param=function(e,_){n[e]=_},e.search_set_params_arr=function(e){_.each(e,function(e,_,o){this.search_set_param(_,e)})};var t=e.other_obj=e.other_obj||{};return e.set_other_param=function(e,_){t[e]=_},e.get_other_param=function(e){return t[e]},e}(wpbc_ajx_booking_listing||{},jQuery);function wpbc_ajx_booking_ajax_search_request(){console.groupCollapsed("AJX_BOOKING_LISTING"),console.log(" == Before Ajax Send - search_get_all_params() == ",wpbc_ajx_booking_listing.search_get_all_params()),wpbc_booking_listing_reload_button__spin_start(),jQuery.post(wpbc_global1.wpbc_ajaxurl,{action:"WPBC_AJX_BOOKING_LISTING",wpbc_ajx_user_id:wpbc_ajx_booking_listing.get_secure_param("user_id"),nonce:wpbc_ajx_booking_listing.get_secure_param("nonce"),wpbc_ajx_locale:wpbc_ajx_booking_listing.get_secure_param("locale"),search_params:wpbc_ajx_booking_listing.search_get_all_params()},function(e,_,o){return console.log(" == Response WPBC_AJX_BOOKING_LISTING == ",e),console.groupEnd(),"object"!==_typeof(e)||null===e?(jQuery("#wh_sort_selector").hide(),void jQuery(wpbc_ajx_booking_listing.get_other_param("listing_container")).html('<div class="wpbc-settings-notice notice-warning" style="text-align:left">'+e+"</div>")):void(null==e.ajx_cleaned_params||"reset_done"!==e.ajx_cleaned_params.ui_reset?(0<e.ajx_count?(wpbc_ajx_booking_show_listing(e.ajx_items,e.ajx_search_params,e.ajx_booking_resources),wpbc_pagination_echo(wpbc_ajx_booking_listing.get_other_param("pagination_container"),{page_active:e.ajx_search_params.page_num,pages_count:Math.ceil(e.ajx_count/e.ajx_search_params.page_items_count),page_items_count:e.ajx_search_params.page_items_count,sort_type:e.ajx_search_params.sort_type}),wpbc_ajx_booking_define_ui_hooks()):(wpbc_ajx_booking__actual_listing__hide(),jQuery(wpbc_ajx_booking_listing.get_other_param("listing_container")).html('<div class="wpbc-settings-notice0 notice-warning0" style="text-align:center;margin-left:-50px;"><strong>No results found for current filter options...</strong></div>')),void 0!==e.ajx_new_bookings_count&&(0<(n=parseInt(e.ajx_new_bookings_count))&&jQuery(".wpbc_badge_count").show(),jQuery(".bk-update-count").html(n)),wpbc_booking_listing_reload_button__spin_pause(),jQuery("#ajax_respond").html(e)):location.reload());var n}).fail(function(e,_,o){window.console&&window.console.log&&console.log("Ajax_Error",e,_,o),jQuery("#wh_sort_selector").hide();o="<strong>Error!</strong> "+o;e.responseText&&(o+=e.responseText),wpbc_ajx_booking_show_message(o=o.replace(/\n/g,"<br />"))})}function wpbc_ajx_booking_show_listing(e,n,t){wpbc_ajx_define_templates__resource_manipulation(e,n,t),jQuery("#wh_sort_selector").css("display","flex");var o=wp.template("wpbc_ajx_booking_list_header"),r=wp.template("wpbc_ajx_booking_list_row");jQuery(wpbc_ajx_booking_listing.get_other_param("listing_container")).html(o()),jQuery(wpbc_ajx_booking_listing.get_other_param("listing_container")).append('<div class="wpbc_selectable_body"></div>'),console.groupCollapsed("LISTING_ROWS"),_.each(e,function(e,_,o){void 0!==n.keyword?e.__search_request_keyword__=n.keyword:e.__search_request_keyword__="",e.booking_resources=t,jQuery(wpbc_ajx_booking_listing.get_other_param("listing_container")+" .wpbc_selectable_body").append(r(e))}),console.groupEnd(),wpbc_define_gmail_checkbox_selection(jQuery)}function wpbc_ajx_define_templates__resource_manipulation(e,_,o){var n=wp.template("wpbc_ajx_change_booking_resource");jQuery("#wpbc_hidden_template__change_booking_resource").html(n({ajx_search_params:_,ajx_booking_resources:o}));n=wp.template("wpbc_ajx_duplicate_booking_to_other_resource");jQuery("#wpbc_hidden_template__duplicate_booking_to_other_resource").html(n({ajx_search_params:_,ajx_booking_resources:o}))}function wpbc_ajx_booking_show_message(e){wpbc_ajx_booking__actual_listing__hide(),jQuery(wpbc_ajx_booking_listing.get_other_param("listing_container")).html('<div class="wpbc-settings-notice notice-warning" style="text-align:left">'+e+"</div>")}function wpbc_ajx_booking_send_search_request_with_params(e){_.each(e,function(e,_,o){wpbc_ajx_booking_listing.search_set_param(_,e)}),wpbc_ajx_booking_ajax_search_request()}function wpbc_ajx_booking_pagination_click(e){wpbc_ajx_booking_send_search_request_with_params({page_num:e})}function wpbc_ajx_booking_send_search_request_for_keyword(e){wpbc_ajx_booking_send_search_request_with_params({keyword:jQuery(e).val(),page_num:1})}var wpbc_ajx_booking_searching_after_few_seconds=function(){var o=0;return function(e,_){_=void 0!==_?_:1500,clearTimeout(o),o=setTimeout(wpbc_ajx_booking_send_search_request_for_keyword.bind(null,e),_)}}();function wpbc_ajx_booking_define_ui_hooks(){"function"==typeof wpbc_define_tippy_tooltips&&wpbc_define_tippy_tooltips(".wpbc_listing_container "),wpbc_ajx_booking__ui_define__locale(),wpbc_ajx_booking__ui_define__remark(),jQuery(".wpbc_items_per_page").on("change",function(e){wpbc_ajx_booking_send_search_request_with_params({page_items_count:jQuery(this).val(),page_num:1})}),jQuery(".wpbc_items_sort_type").on("change",function(e){wpbc_ajx_booking_send_search_request_with_params({sort_type:jQuery(this).val()})})}function wpbc_ajx_booking__actual_listing__show(){wpbc_ajx_booking_ajax_search_request()}function wpbc_ajx_booking__actual_listing__hide(){jQuery("#wh_sort_selector").hide(),jQuery(wpbc_ajx_booking_listing.get_other_param("listing_container")).html(""),jQuery(wpbc_ajx_booking_listing.get_other_param("pagination_container")).html("")}function wpbc_get_highlighted_search_keyword(e,_){if(0==(_=_.trim().toLowerCase()).length)return e;var o,n,_=new RegExp("fieldvalue[^<>]*>([^<]*".concat(_,"[^<]*)"),"gim"),_=e.toLowerCase().matchAll(_),t=[],r=0,a=_createForOfIteratorHelper(_=Array.from(_));try{for(a.s();!(n=a.n()).done;){var i=n.value,s=i.index+i[0].toLowerCase().indexOf(">",0)+1;t.push(e.substr(r,s-r)),o=e.toLowerCase().indexOf("<",s),t.push('<span class="fieldvalue name fieldsearchvalue">'+e.substr(s,o-s)+"</span>"),r=o}}catch(e){a.e(e)}finally{a.f()}return t.push(e.substr(r,e.length-r)),t.join("")}function wpbc_decode_HTML_entities(e){var _=document.createElement("textarea");return _.innerHTML=e,_.value}function wpbc_encode_HTML_entities(e){var _=document.createElement("textarea");return _.innerText=e,_.innerHTML}function wpbc_booking_listing_reload_button__spin_start(){jQuery("#wpbc_booking_listing_reload_button .menu_icon.wpbc_spin").removeClass("wpbc_animation_pause")}function wpbc_booking_listing_reload_button__spin_pause(){jQuery("#wpbc_booking_listing_reload_button .menu_icon.wpbc_spin").addClass("wpbc_animation_pause")}function wpbc_booking_listing_reload_button__is_spin(){return!!jQuery("#wpbc_booking_listing_reload_button .menu_icon.wpbc_spin").hasClass("wpbc_animation_pause")}
|
2 |
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1ib29raW5ncy9fb3V0L2Jvb2tpbmdzX19saXN0aW5nLm1pbi5qcyIsInNvdXJjZXMiOlsiaW5jbHVkZXMvcGFnZS1ib29raW5ncy9fb3V0L2Jvb2tpbmdzX19saXN0aW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihvLCBhbGxvd0FycmF5TGlrZSkgeyB2YXIgaXQgPSB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSB8fCBvW1wiQEBpdGVyYXRvclwiXTsgaWYgKCFpdCkgeyBpZiAoQXJyYXkuaXNBcnJheShvKSB8fCAoaXQgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobykpIHx8IGFsbG93QXJyYXlMaWtlICYmIG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSB7IGlmIChpdCkgbyA9IGl0OyB2YXIgaSA9IDA7IHZhciBGID0gZnVuY3Rpb24gRigpIHt9OyByZXR1cm4geyBzOiBGLCBuOiBmdW5jdGlvbiBuKCkgeyBpZiAoaSA+PSBvLmxlbmd0aCkgcmV0dXJuIHsgZG9uZTogdHJ1ZSB9OyByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IG9baSsrXSB9OyB9LCBlOiBmdW5jdGlvbiBlKF9lKSB7IHRocm93IF9lOyB9LCBmOiBGIH07IH0gdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9IHZhciBub3JtYWxDb21wbGV0aW9uID0gdHJ1ZSwgZGlkRXJyID0gZmFsc2UsIGVycjsgcmV0dXJuIHsgczogZnVuY3Rpb24gcygpIHsgaXQgPSBpdC5jYWxsKG8pOyB9LCBuOiBmdW5jdGlvbiBuKCkgeyB2YXIgc3RlcCA9IGl0Lm5leHQoKTsgbm9ybWFsQ29tcGxldGlvbiA9IHN0ZXAuZG9uZTsgcmV0dXJuIHN0ZXA7IH0sIGU6IGZ1bmN0aW9uIGUoX2UyKSB7IGRpZEVyciA9IHRydWU7IGVyciA9IF9lMjsgfSwgZjogZnVuY3Rpb24gZigpIHsgdHJ5IHsgaWYgKCFub3JtYWxDb21wbGV0aW9uICYmIGl0W1wicmV0dXJuXCJdICE9IG51bGwpIGl0W1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChkaWRFcnIpIHRocm93IGVycjsgfSB9IH07IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfSwgX3R5cGVvZihvYmopOyB9XG5cbmpRdWVyeSgnYm9keScpLm9uKHtcbiAgJ3RvdWNobW92ZSc6IGZ1bmN0aW9uIHRvdWNobW92ZShlKSB7XG4gICAgalF1ZXJ5KCcudGltZXNwYXJ0bHknKS5lYWNoKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgdmFyIHRkX2VsID0galF1ZXJ5KHRoaXMpLmdldCgwKTtcblxuICAgICAgaWYgKHVuZGVmaW5lZCAhPSB0ZF9lbC5fdGlwcHkpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gdGRfZWwuX3RpcHB5O1xuICAgICAgICBpbnN0YW5jZS5oaWRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0pO1xuLyoqXHJcbiAqIFJlcXVlc3QgT2JqZWN0XHJcbiAqIEhlcmUgd2UgY2FuICBkZWZpbmUgU2VhcmNoIHBhcmFtZXRlcnMgYW5kIFVwZGF0ZSBpdCBsYXRlciwgIHdoZW4gIHNvbWUgcGFyYW1ldGVyIHdhcyBjaGFuZ2VkXHJcbiAqXHJcbiAqL1xuXG52YXIgd3BiY19hanhfYm9va2luZ19saXN0aW5nID0gZnVuY3Rpb24gKG9iaiwgJCkge1xuICAvLyBTZWN1cmUgcGFyYW1ldGVycyBmb3IgQWpheFx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIHZhciBwX3NlY3VyZSA9IG9iai5zZWN1cml0eV9vYmogPSBvYmouc2VjdXJpdHlfb2JqIHx8IHtcbiAgICB1c2VyX2lkOiAwLFxuICAgIG5vbmNlOiAnJyxcbiAgICBsb2NhbGU6ICcnXG4gIH07XG5cbiAgb2JqLnNldF9zZWN1cmVfcGFyYW0gPSBmdW5jdGlvbiAocGFyYW1fa2V5LCBwYXJhbV92YWwpIHtcbiAgICBwX3NlY3VyZVtwYXJhbV9rZXldID0gcGFyYW1fdmFsO1xuICB9O1xuXG4gIG9iai5nZXRfc2VjdXJlX3BhcmFtID0gZnVuY3Rpb24gKHBhcmFtX2tleSkge1xuICAgIHJldHVybiBwX3NlY3VyZVtwYXJhbV9rZXldO1xuICB9OyAvLyBMaXN0aW5nIFNlYXJjaCBwYXJhbWV0ZXJzXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4gIHZhciBwX2xpc3RpbmcgPSBvYmouc2VhcmNoX3JlcXVlc3Rfb2JqID0gb2JqLnNlYXJjaF9yZXF1ZXN0X29iaiB8fCB7XG4gICAgc29ydDogXCJib29raW5nX2lkXCIsXG4gICAgc29ydF90eXBlOiBcIkRFU0NcIixcbiAgICBwYWdlX251bTogMSxcbiAgICBwYWdlX2l0ZW1zX2NvdW50OiAxMCxcbiAgICBjcmVhdGVfZGF0ZTogXCJcIixcbiAgICBrZXl3b3JkOiBcIlwiLFxuICAgIHNvdXJjZTogXCJcIlxuICB9O1xuXG4gIG9iai5zZWFyY2hfc2V0X2FsbF9wYXJhbXMgPSBmdW5jdGlvbiAocmVxdWVzdF9wYXJhbV9vYmopIHtcbiAgICBwX2xpc3RpbmcgPSByZXF1ZXN0X3BhcmFtX29iajtcbiAgfTtcblxuICBvYmouc2VhcmNoX2dldF9hbGxfcGFyYW1zID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBwX2xpc3Rpbmc7XG4gIH07XG5cbiAgb2JqLnNlYXJjaF9nZXRfcGFyYW0gPSBmdW5jdGlvbiAocGFyYW1fa2V5KSB7XG4gICAgcmV0dXJuIHBfbGlzdGluZ1twYXJhbV9rZXldO1xuICB9O1xuXG4gIG9iai5zZWFyY2hfc2V0X3BhcmFtID0gZnVuY3Rpb24gKHBhcmFtX2tleSwgcGFyYW1fdmFsKSB7XG4gICAgLy8gaWYgKCBBcnJheS5pc0FycmF5KCBwYXJhbV92YWwgKSApe1xuICAgIC8vIFx0cGFyYW1fdmFsID0gSlNPTi5zdHJpbmdpZnkoIHBhcmFtX3ZhbCApO1xuICAgIC8vIH1cbiAgICBwX2xpc3RpbmdbcGFyYW1fa2V5XSA9IHBhcmFtX3ZhbDtcbiAgfTtcblxuICBvYmouc2VhcmNoX3NldF9wYXJhbXNfYXJyID0gZnVuY3Rpb24gKHBhcmFtc19hcnIpIHtcbiAgICBfLmVhY2gocGFyYW1zX2FyciwgZnVuY3Rpb24gKHBfdmFsLCBwX2tleSwgcF9kYXRhKSB7XG4gICAgICAvLyBEZWZpbmUgZGlmZmVyZW50IFNlYXJjaCAgcGFyYW1ldGVycyBmb3IgcmVxdWVzdFxuICAgICAgdGhpcy5zZWFyY2hfc2V0X3BhcmFtKHBfa2V5LCBwX3ZhbCk7XG4gICAgfSk7XG4gIH07IC8vIE90aGVyIHBhcmFtZXRlcnMgXHRcdFx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuICB2YXIgcF9vdGhlciA9IG9iai5vdGhlcl9vYmogPSBvYmoub3RoZXJfb2JqIHx8IHt9O1xuXG4gIG9iai5zZXRfb3RoZXJfcGFyYW0gPSBmdW5jdGlvbiAocGFyYW1fa2V5LCBwYXJhbV92YWwpIHtcbiAgICBwX290aGVyW3BhcmFtX2tleV0gPSBwYXJhbV92YWw7XG4gIH07XG5cbiAgb2JqLmdldF9vdGhlcl9wYXJhbSA9IGZ1bmN0aW9uIChwYXJhbV9rZXkpIHtcbiAgICByZXR1cm4gcF9vdGhlcltwYXJhbV9rZXldO1xuICB9O1xuXG4gIHJldHVybiBvYmo7XG59KHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZyB8fCB7fSwgalF1ZXJ5KTtcbi8qKlxyXG4gKiAgIEFqYXggIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcclxuICogU2VuZCBBamF4IHNlYXJjaCByZXF1ZXN0XHJcbiAqIGZvciBzZWFyY2hpbmcgc3BlY2lmaWMgS2V5d29yZCBhbmQgb3RoZXIgcGFyYW1zXHJcbiAqL1xuXG5cbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfYWpheF9zZWFyY2hfcmVxdWVzdCgpIHtcbiAgY29uc29sZS5ncm91cENvbGxhcHNlZCgnQUpYX0JPT0tJTkdfTElTVElORycpO1xuICBjb25zb2xlLmxvZygnID09IEJlZm9yZSBBamF4IFNlbmQgLSBzZWFyY2hfZ2V0X2FsbF9wYXJhbXMoKSA9PSAnLCB3cGJjX2FqeF9ib29raW5nX2xpc3Rpbmcuc2VhcmNoX2dldF9hbGxfcGFyYW1zKCkpO1xuICB3cGJjX2Jvb2tpbmdfbGlzdGluZ19yZWxvYWRfYnV0dG9uX19zcGluX3N0YXJ0KCk7XG4gIC8qXHJcbiAgLy9GaXhJbjogZm9yVmlkZW9cclxuICBpZiAoICEgaXNfdGhpc19hY3Rpb24gKXtcclxuICBcdC8vd3BiY19hanhfYm9va2luZ19fYWN0dWFsX2xpc3RpbmdfX2hpZGUoKTtcclxuICBcdGpRdWVyeSggd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSggJ2xpc3RpbmdfY29udGFpbmVyJyApICkuaHRtbChcclxuICBcdFx0JzxkaXYgc3R5bGU9XCJ3aWR0aDoxMDAlO3RleHQtYWxpZ246IGNlbnRlcjtcIiBpZD1cIndwYmNfbG9hZGluZ19zZWN0aW9uXCI+PHNwYW4gY2xhc3M9XCJ3cGJjX2ljbl9hdXRvcmVuZXcgd3BiY19zcGluXCI+PC9zcGFuPjwvZGl2PidcclxuICBcdFx0KyBqUXVlcnkoIHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5nZXRfb3RoZXJfcGFyYW0oICdsaXN0aW5nX2NvbnRhaW5lcicgKSApLmh0bWwoKVxyXG4gIFx0KTtcclxuICBcdGlmICggJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIChqUXVlcnkoICcjd3BiY19sb2FkaW5nX3NlY3Rpb24nICkud3BiY19teV9tb2RhbCkgKXtcdFx0XHQvL0ZpeEluOiA5LjAuMS41XHJcbiAgXHRcdGpRdWVyeSggJyN3cGJjX2xvYWRpbmdfc2VjdGlvbicgKS53cGJjX215X21vZGFsKCAnc2hvdycgKTtcclxuICBcdH0gZWxzZSB7XHJcbiAgXHRcdGFsZXJ0KCAnV2FybmluZyEgQm9va2luZyBDYWxlbmRhci4gSXRzIHNlZW1zIHRoYXQgIHlvdSBoYXZlIGRlYWN0aXZhdGVkIGxvYWRpbmcgb2YgQm9vdHN0cmFwIEpTIGZpbGVzIGF0IEJvb2tpbmcgU2V0dGluZ3MgR2VuZXJhbCBwYWdlIGluIEFkdmFuY2VkIHNlY3Rpb24uJyApXHJcbiAgXHR9XHJcbiAgfVxyXG4gIGlzX3RoaXNfYWN0aW9uID0gZmFsc2U7XHJcbiAgKi9cbiAgLy8gU3RhcnQgQWpheFxuXG4gIGpRdWVyeS5wb3N0KHdwYmNfZ2xvYmFsMS53cGJjX2FqYXh1cmwsIHtcbiAgICBhY3Rpb246ICdXUEJDX0FKWF9CT09LSU5HX0xJU1RJTkcnLFxuICAgIHdwYmNfYWp4X3VzZXJfaWQ6IHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5nZXRfc2VjdXJlX3BhcmFtKCd1c2VyX2lkJyksXG4gICAgbm9uY2U6IHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5nZXRfc2VjdXJlX3BhcmFtKCdub25jZScpLFxuICAgIHdwYmNfYWp4X2xvY2FsZTogd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9zZWN1cmVfcGFyYW0oJ2xvY2FsZScpLFxuICAgIHNlYXJjaF9wYXJhbXM6IHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5zZWFyY2hfZ2V0X2FsbF9wYXJhbXMoKVxuICB9LFxuICAvKipcclxuICAgKiBTIHUgYyBjIGUgcyBzXHJcbiAgICpcclxuICAgKiBAcGFyYW0gcmVzcG9uc2VfZGF0YVx0XHQtXHRpdHMgb2JqZWN0IHJldHVybmVkIGZyb20gIEFqYXggLSBjbGFzcy1saXZlLXNlYXJjZy5waHBcclxuICAgKiBAcGFyYW0gdGV4dFN0YXR1c1x0XHQtXHQnc3VjY2VzcydcclxuICAgKiBAcGFyYW0ganFYSFJcdFx0XHRcdC1cdE9iamVjdFxyXG4gICAqL1xuICBmdW5jdGlvbiAocmVzcG9uc2VfZGF0YSwgdGV4dFN0YXR1cywganFYSFIpIHtcbiAgICAvL0ZpeEluOiBmb3JWaWRlb1xuICAgIC8valF1ZXJ5KCAnI3dwYmNfbG9hZGluZ19zZWN0aW9uJyApLndwYmNfbXlfbW9kYWwoICdoaWRlJyApO1xuICAgIGNvbnNvbGUubG9nKCcgPT0gUmVzcG9uc2UgV1BCQ19BSlhfQk9PS0lOR19MSVNUSU5HID09ICcsIHJlc3BvbnNlX2RhdGEpO1xuICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTsgLy8gUHJvYmFibHkgRXJyb3JcblxuICAgIGlmIChfdHlwZW9mKHJlc3BvbnNlX2RhdGEpICE9PSAnb2JqZWN0JyB8fCByZXNwb25zZV9kYXRhID09PSBudWxsKSB7XG4gICAgICBqUXVlcnkoJyN3aF9zb3J0X3NlbGVjdG9yJykuaGlkZSgpO1xuICAgICAgalF1ZXJ5KHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5nZXRfb3RoZXJfcGFyYW0oJ2xpc3RpbmdfY29udGFpbmVyJykpLmh0bWwoJzxkaXYgY2xhc3M9XCJ3cGJjLXNldHRpbmdzLW5vdGljZSBub3RpY2Utd2FybmluZ1wiIHN0eWxlPVwidGV4dC1hbGlnbjpsZWZ0XCI+JyArIHJlc3BvbnNlX2RhdGEgKyAnPC9kaXY+Jyk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBSZWxvYWQgcGFnZSwgYWZ0ZXIgZmlsdGVyIHRvb2xiYXIgd2FzIHJlc2V0ZWRcblxuXG4gICAgaWYgKHVuZGVmaW5lZCAhPSByZXNwb25zZV9kYXRhWydhanhfY2xlYW5lZF9wYXJhbXMnXSAmJiAncmVzZXRfZG9uZScgPT09IHJlc3BvbnNlX2RhdGFbJ2FqeF9jbGVhbmVkX3BhcmFtcyddWyd1aV9yZXNldCddKSB7XG4gICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFNob3cgbGlzdGluZ1xuXG5cbiAgICBpZiAocmVzcG9uc2VfZGF0YVsnYWp4X2NvdW50J10gPiAwKSB7XG4gICAgICB3cGJjX2FqeF9ib29raW5nX3Nob3dfbGlzdGluZyhyZXNwb25zZV9kYXRhWydhanhfaXRlbXMnXSwgcmVzcG9uc2VfZGF0YVsnYWp4X3NlYXJjaF9wYXJhbXMnXSwgcmVzcG9uc2VfZGF0YVsnYWp4X2Jvb2tpbmdfcmVzb3VyY2VzJ10pO1xuICAgICAgd3BiY19wYWdpbmF0aW9uX2VjaG8od3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSgncGFnaW5hdGlvbl9jb250YWluZXInKSwge1xuICAgICAgICAncGFnZV9hY3RpdmUnOiByZXNwb25zZV9kYXRhWydhanhfc2VhcmNoX3BhcmFtcyddWydwYWdlX251bSddLFxuICAgICAgICAncGFnZXNfY291bnQnOiBNYXRoLmNlaWwocmVzcG9uc2VfZGF0YVsnYWp4X2NvdW50J10gLyByZXNwb25zZV9kYXRhWydhanhfc2VhcmNoX3BhcmFtcyddWydwYWdlX2l0ZW1zX2NvdW50J10pLFxuICAgICAgICAncGFnZV9pdGVtc19jb3VudCc6IHJlc3BvbnNlX2RhdGFbJ2FqeF9zZWFyY2hfcGFyYW1zJ11bJ3BhZ2VfaXRlbXNfY291bnQnXSxcbiAgICAgICAgJ3NvcnRfdHlwZSc6IHJlc3BvbnNlX2RhdGFbJ2FqeF9zZWFyY2hfcGFyYW1zJ11bJ3NvcnRfdHlwZSddXG4gICAgICB9KTtcbiAgICAgIHdwYmNfYWp4X2Jvb2tpbmdfZGVmaW5lX3VpX2hvb2tzKCk7IC8vIFJlZGVmaW5lIEhvb2tzLCBiZWNhdXNlIHdlIHNob3cgbmV3IERPTSBlbGVtZW50c1xuICAgIH0gZWxzZSB7XG4gICAgICB3cGJjX2FqeF9ib29raW5nX19hY3R1YWxfbGlzdGluZ19faGlkZSgpO1xuICAgICAgalF1ZXJ5KHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5nZXRfb3RoZXJfcGFyYW0oJ2xpc3RpbmdfY29udGFpbmVyJykpLmh0bWwoJzxkaXYgY2xhc3M9XCJ3cGJjLXNldHRpbmdzLW5vdGljZTAgbm90aWNlLXdhcm5pbmcwXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW4tbGVmdDotNTBweDtcIj4nICsgJzxzdHJvbmc+JyArICdObyByZXN1bHRzIGZvdW5kIGZvciBjdXJyZW50IGZpbHRlciBvcHRpb25zLi4uJyArICc8L3N0cm9uZz4nICsgLy8nPHN0cm9uZz4nICsgJ05vIHJlc3VsdHMgZm91bmQuLi4nICsgJzwvc3Ryb25nPicgK1xuICAgICAgJzwvZGl2PicpO1xuICAgIH0gLy8gVXBkYXRlIG5ldyBib29raW5nIGNvdW50XG5cblxuICAgIGlmICh1bmRlZmluZWQgIT09IHJlc3BvbnNlX2RhdGFbJ2FqeF9uZXdfYm9va2luZ3NfY291bnQnXSkge1xuICAgICAgdmFyIGFqeF9uZXdfYm9va2luZ3NfY291bnQgPSBwYXJzZUludChyZXNwb25zZV9kYXRhWydhanhfbmV3X2Jvb2tpbmdzX2NvdW50J10pO1xuXG4gICAgICBpZiAoYWp4X25ld19ib29raW5nc19jb3VudCA+IDApIHtcbiAgICAgICAgalF1ZXJ5KCcud3BiY19iYWRnZV9jb3VudCcpLnNob3coKTtcbiAgICAgIH1cblxuICAgICAgalF1ZXJ5KCcuYmstdXBkYXRlLWNvdW50JykuaHRtbChhanhfbmV3X2Jvb2tpbmdzX2NvdW50KTtcbiAgICB9XG5cbiAgICB3cGJjX2Jvb2tpbmdfbGlzdGluZ19yZWxvYWRfYnV0dG9uX19zcGluX3BhdXNlKCk7XG4gICAgalF1ZXJ5KCcjYWpheF9yZXNwb25kJykuaHRtbChyZXNwb25zZV9kYXRhKTsgLy8gRm9yIGFiaWxpdHkgdG8gc2hvdyByZXNwb25zZSwgYWRkIHN1Y2ggRElWIGVsZW1lbnQgdG8gcGFnZVxuICB9KS5mYWlsKGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHtcbiAgICBpZiAod2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUubG9nKSB7XG4gICAgICBjb25zb2xlLmxvZygnQWpheF9FcnJvcicsIGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bik7XG4gICAgfVxuXG4gICAgalF1ZXJ5KCcjd2hfc29ydF9zZWxlY3RvcicpLmhpZGUoKTtcbiAgICB2YXIgZXJyb3JfbWVzc2FnZSA9ICc8c3Ryb25nPicgKyAnRXJyb3IhJyArICc8L3N0cm9uZz4gJyArIGVycm9yVGhyb3duO1xuXG4gICAgaWYgKGpxWEhSLnJlc3BvbnNlVGV4dCkge1xuICAgICAgZXJyb3JfbWVzc2FnZSArPSBqcVhIUi5yZXNwb25zZVRleHQ7XG4gICAgfVxuXG4gICAgZXJyb3JfbWVzc2FnZSA9IGVycm9yX21lc3NhZ2UucmVwbGFjZSgvXFxuL2csIFwiPGJyIC8+XCIpO1xuICAgIHdwYmNfYWp4X2Jvb2tpbmdfc2hvd19tZXNzYWdlKGVycm9yX21lc3NhZ2UpO1xuICB9KSAvLyAuZG9uZSggICBmdW5jdGlvbiAoIGRhdGEsIHRleHRTdGF0dXMsIGpxWEhSICkgeyAgIGlmICggd2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUubG9nICl7IGNvbnNvbGUubG9nKCAnc2Vjb25kIHN1Y2Nlc3MnLCBkYXRhLCB0ZXh0U3RhdHVzLCBqcVhIUiApOyB9ICAgIH0pXG4gIC8vIC5hbHdheXMoIGZ1bmN0aW9uICggZGF0YV9qcVhIUiwgdGV4dFN0YXR1cywganFYSFJfZXJyb3JUaHJvd24gKSB7ICAgaWYgKCB3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS5sb2cgKXsgY29uc29sZS5sb2coICdhbHdheXMgZmluaXNoZWQnLCBkYXRhX2pxWEhSLCB0ZXh0U3RhdHVzLCBqcVhIUl9lcnJvclRocm93biApOyB9ICAgICB9KVxuICA7IC8vIEVuZCBBamF4XG59XG4vKipcclxuICogICBWaWV3cyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXHJcbiAqIFNob3cgTGlzdGluZyBUYWJsZSBcdFx0YW5kIGRlZmluZSBnTWFpbCBjaGVja2JveCBob29rc1xyXG4gKlxyXG4gKiBAcGFyYW0ganNvbl9pdGVtc19hcnJcdFx0LSBKU09OIG9iamVjdCB3aXRoIEl0ZW1zXHJcbiAqIEBwYXJhbSBqc29uX3NlYXJjaF9wYXJhbXNcdC0gSlNPTiBvYmplY3Qgd2l0aCBTZWFyY2hcclxuICovXG5cblxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19zaG93X2xpc3RpbmcoanNvbl9pdGVtc19hcnIsIGpzb25fc2VhcmNoX3BhcmFtcywganNvbl9ib29raW5nX3Jlc291cmNlcykge1xuICB3cGJjX2FqeF9kZWZpbmVfdGVtcGxhdGVzX19yZXNvdXJjZV9tYW5pcHVsYXRpb24oanNvbl9pdGVtc19hcnIsIGpzb25fc2VhcmNoX3BhcmFtcywganNvbl9ib29raW5nX3Jlc291cmNlcyk7IC8vY29uc29sZS5sb2coICdqc29uX2l0ZW1zX2FycicgLCBqc29uX2l0ZW1zX2FyciwganNvbl9zZWFyY2hfcGFyYW1zICk7XG5cbiAgalF1ZXJ5KCcjd2hfc29ydF9zZWxlY3RvcicpLmNzcyhcImRpc3BsYXlcIiwgXCJmbGV4XCIpO1xuICB2YXIgbGlzdF9oZWFkZXJfdHBsID0gd3AudGVtcGxhdGUoJ3dwYmNfYWp4X2Jvb2tpbmdfbGlzdF9oZWFkZXInKTtcbiAgdmFyIGxpc3Rfcm93X3RwbCA9IHdwLnRlbXBsYXRlKCd3cGJjX2FqeF9ib29raW5nX2xpc3Rfcm93Jyk7IC8vIEhlYWRlclxuXG4gIGpRdWVyeSh3cGJjX2FqeF9ib29raW5nX2xpc3RpbmcuZ2V0X290aGVyX3BhcmFtKCdsaXN0aW5nX2NvbnRhaW5lcicpKS5odG1sKGxpc3RfaGVhZGVyX3RwbCgpKTsgLy8gQm9keVxuXG4gIGpRdWVyeSh3cGJjX2FqeF9ib29raW5nX2xpc3RpbmcuZ2V0X290aGVyX3BhcmFtKCdsaXN0aW5nX2NvbnRhaW5lcicpKS5hcHBlbmQoJzxkaXYgY2xhc3M9XCJ3cGJjX3NlbGVjdGFibGVfYm9keVwiPjwvZGl2PicpOyAvLyBSIG8gdyBzXG5cbiAgY29uc29sZS5ncm91cENvbGxhcHNlZCgnTElTVElOR19ST1dTJyk7IC8vIExJU1RJTkdfUk9XU1xuXG4gIF8uZWFjaChqc29uX2l0ZW1zX2FyciwgZnVuY3Rpb24gKHBfdmFsLCBwX2tleSwgcF9kYXRhKSB7XG4gICAgaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YganNvbl9zZWFyY2hfcGFyYW1zWydrZXl3b3JkJ10pIHtcbiAgICAgIC8vIFBhcmFtZXRlciBmb3IgbWFya2luZyBrZXl3b3JkIHdpdGggZGlmZmVyZW50IGNvbG9yIGluIGEgbGlzdFxuICAgICAgcF92YWxbJ19fc2VhcmNoX3JlcXVlc3Rfa2V5d29yZF9fJ10gPSBqc29uX3NlYXJjaF9wYXJhbXNbJ2tleXdvcmQnXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcF92YWxbJ19fc2VhcmNoX3JlcXVlc3Rfa2V5d29yZF9fJ10gPSAnJztcbiAgICB9XG5cbiAgICBwX3ZhbFsnYm9va2luZ19yZXNvdXJjZXMnXSA9IGpzb25fYm9va2luZ19yZXNvdXJjZXM7XG4gICAgalF1ZXJ5KHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5nZXRfb3RoZXJfcGFyYW0oJ2xpc3RpbmdfY29udGFpbmVyJykgKyAnIC53cGJjX3NlbGVjdGFibGVfYm9keScpLmFwcGVuZChsaXN0X3Jvd190cGwocF92YWwpKTtcbiAgfSk7XG5cbiAgY29uc29sZS5ncm91cEVuZCgpOyAvLyBMSVNUSU5HX1JPV1NcblxuICB3cGJjX2RlZmluZV9nbWFpbF9jaGVja2JveF9zZWxlY3Rpb24oalF1ZXJ5KTsgLy8gUmVkZWZpbmUgSG9va3MgZm9yIGNsaWNraW5nIGF0IENoZWNrYm94ZXNcbn1cbi8qKlxyXG4gKiBEZWZpbmUgdGVtcGxhdGUgZm9yIGNoYW5naW5nIGJvb2tpbmcgcmVzb3VyY2VzICYgIHVwZGF0ZSBpdCBlYWNoIHRpbWUsICB3aGVuICBsaXN0aW5nIHVwZGF0aW5nLCB1c2VmdWwgIGZvciBzaG93aW5nIGFjdHVhbCAgYm9va2luZyByZXNvdXJjZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBqc29uX2l0ZW1zX2Fyclx0XHQtIEpTT04gb2JqZWN0IHdpdGggSXRlbXNcclxuICogQHBhcmFtIGpzb25fc2VhcmNoX3BhcmFtc1x0LSBKU09OIG9iamVjdCB3aXRoIFNlYXJjaFxyXG4gKiBAcGFyYW0ganNvbl9ib29raW5nX3Jlc291cmNlc1x0LSBKU09OIG9iamVjdCB3aXRoIFJlc291cmNlc1xyXG4gKi9cblxuXG5mdW5jdGlvbiB3cGJjX2FqeF9kZWZpbmVfdGVtcGxhdGVzX19yZXNvdXJjZV9tYW5pcHVsYXRpb24oanNvbl9pdGVtc19hcnIsIGpzb25fc2VhcmNoX3BhcmFtcywganNvbl9ib29raW5nX3Jlc291cmNlcykge1xuICAvLyBDaGFuZ2UgYm9va2luZyByZXNvdXJjZVxuICB2YXIgY2hhbmdlX2Jvb2tpbmdfcmVzb3VyY2VfdHBsID0gd3AudGVtcGxhdGUoJ3dwYmNfYWp4X2NoYW5nZV9ib29raW5nX3Jlc291cmNlJyk7XG4gIGpRdWVyeSgnI3dwYmNfaGlkZGVuX3RlbXBsYXRlX19jaGFuZ2VfYm9va2luZ19yZXNvdXJjZScpLmh0bWwoY2hhbmdlX2Jvb2tpbmdfcmVzb3VyY2VfdHBsKHtcbiAgICAnYWp4X3NlYXJjaF9wYXJhbXMnOiBqc29uX3NlYXJjaF9wYXJhbXMsXG4gICAgJ2FqeF9ib29raW5nX3Jlc291cmNlcyc6IGpzb25fYm9va2luZ19yZXNvdXJjZXNcbiAgfSkpOyAvLyBEdXBsaWNhdGUgYm9va2luZyByZXNvdXJjZVxuXG4gIHZhciBkdXBsaWNhdGVfYm9va2luZ190b19vdGhlcl9yZXNvdXJjZV90cGwgPSB3cC50ZW1wbGF0ZSgnd3BiY19hanhfZHVwbGljYXRlX2Jvb2tpbmdfdG9fb3RoZXJfcmVzb3VyY2UnKTtcbiAgalF1ZXJ5KCcjd3BiY19oaWRkZW5fdGVtcGxhdGVfX2R1cGxpY2F0ZV9ib29raW5nX3RvX290aGVyX3Jlc291cmNlJykuaHRtbChkdXBsaWNhdGVfYm9va2luZ190b19vdGhlcl9yZXNvdXJjZV90cGwoe1xuICAgICdhanhfc2VhcmNoX3BhcmFtcyc6IGpzb25fc2VhcmNoX3BhcmFtcyxcbiAgICAnYWp4X2Jvb2tpbmdfcmVzb3VyY2VzJzoganNvbl9ib29raW5nX3Jlc291cmNlc1xuICB9KSk7XG59XG4vKipcclxuICogU2hvdyBqdXN0IG1lc3NhZ2UgaW5zdGVhZCBvZiBsaXN0aW5nIGFuZCBoaWRlIHBhZ2luYXRpb25cclxuICovXG5cblxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19zaG93X21lc3NhZ2UobWVzc2FnZSkge1xuICB3cGJjX2FqeF9ib29raW5nX19hY3R1YWxfbGlzdGluZ19faGlkZSgpO1xuICBqUXVlcnkod3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSgnbGlzdGluZ19jb250YWluZXInKSkuaHRtbCgnPGRpdiBjbGFzcz1cIndwYmMtc2V0dGluZ3Mtbm90aWNlIG5vdGljZS13YXJuaW5nXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOmxlZnRcIj4nICsgbWVzc2FnZSArICc8L2Rpdj4nKTtcbn1cbi8qKlxyXG4gKiAgIEggbyBvIGsgcyAgLSAgaXRzIEFjdGlvbi9UaW1lcyB3aGVuIG5lZWQgdG8gcmUtUmVuZGVyIFZpZXdzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcclxuICogU2VuZCBBamF4IFNlYXJjaCBSZXF1ZXN0IGFmdGVyIFVwZGF0aW5nIHNlYXJjaCByZXF1ZXN0IHBhcmFtZXRlcnNcclxuICpcclxuICogQHBhcmFtIHBhcmFtc19hcnJcclxuICovXG5cblxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X3dpdGhfcGFyYW1zKHBhcmFtc19hcnIpIHtcbiAgLy8gRGVmaW5lIGRpZmZlcmVudCBTZWFyY2ggIHBhcmFtZXRlcnMgZm9yIHJlcXVlc3RcbiAgXy5lYWNoKHBhcmFtc19hcnIsIGZ1bmN0aW9uIChwX3ZhbCwgcF9rZXksIHBfZGF0YSkge1xuICAgIC8vY29uc29sZS5sb2coICdSZXF1ZXN0IGZvcjogJywgcF9rZXksIHBfdmFsICk7XG4gICAgd3BiY19hanhfYm9va2luZ19saXN0aW5nLnNlYXJjaF9zZXRfcGFyYW0ocF9rZXksIHBfdmFsKTtcbiAgfSk7IC8vIFNlbmQgQWpheCBSZXF1ZXN0XG5cblxuICB3cGJjX2FqeF9ib29raW5nX2FqYXhfc2VhcmNoX3JlcXVlc3QoKTtcbn1cbi8qKlxyXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgXCJQYWdlIE51bWJlclwiXHJcbiAqIEBwYXJhbSBwYWdlX251bWJlclx0aW50XHJcbiAqL1xuXG5cbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfcGFnaW5hdGlvbl9jbGljayhwYWdlX251bWJlcikge1xuICB3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMoe1xuICAgICdwYWdlX251bSc6IHBhZ2VfbnVtYmVyXG4gIH0pO1xufVxuLyoqXHJcbiAqICAgS2V5d29yZCBTZWFyY2hpbmcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxyXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgXCJLZXl3b3JkXCIsIGFsc28gc2V0IGN1cnJlbnQgcGFnZSB0byAgMVxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbWVudF9pZFx0LVx0SFRNTCBJRCAgb2YgZWxlbWVudCwgIHdoZXJlIHdhcyBlbnRlcmVkIGtleXdvcmRcclxuICovXG5cblxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X2Zvcl9rZXl3b3JkKGVsZW1lbnRfaWQpIHtcbiAgLy8gV2UgbmVlZCB0byBSZXNldCBwYWdlX251bSB0byAxIHdpdGggZWFjaCBuZXcgc2VhcmNoLCBiZWNhdXNlIHdlIGNhbiBiZSBhdCBwYWdlICM0LCAgYnV0IGFmdGVyICBuZXcgc2VhcmNoICB3ZSBjYW4gIGhhdmUgdG90YWxseSAgb25seSAgMSBwYWdlXG4gIHdwYmNfYWp4X2Jvb2tpbmdfc2VuZF9zZWFyY2hfcmVxdWVzdF93aXRoX3BhcmFtcyh7XG4gICAgJ2tleXdvcmQnOiBqUXVlcnkoZWxlbWVudF9pZCkudmFsKCksXG4gICAgJ3BhZ2VfbnVtJzogMVxuICB9KTtcbn1cbi8qKlxyXG4gKiBTZW5kIHNlYXJjaCByZXF1ZXN0IGFmdGVyIGZldyBzZWNvbmRzICh1c3VhbGx5IGFmdGVyIDEsNSBzZWMpXHJcbiAqIENsb3N1cmUgZnVuY3Rpb24uIEl0cyB1c2VmdWwsICBmb3IgZG8gIG5vdCBzZW5kIHRvbyBtYW55IEFqYXggcmVxdWVzdHMsIHdoZW4gc29tZW9uZSBtYWtlIGZhc3QgdHlwaW5nLlxyXG4gKi9cblxuXG52YXIgd3BiY19hanhfYm9va2luZ19zZWFyY2hpbmdfYWZ0ZXJfZmV3X3NlY29uZHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjbG9zZWRfdGltZXIgPSAwO1xuICByZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnRfaWQsIHRpbWVyX2RlbGF5KSB7XG4gICAgLy8gR2V0IGRlZmF1bHQgdmFsdWUgb2YgXCJ0aW1lcl9kZWxheVwiLCAgaWYgcGFyYW1ldGVyIHdhcyBub3QgcGFzc2VkIGludG8gdGhlIGZ1bmN0aW9uLlxuICAgIHRpbWVyX2RlbGF5ID0gdHlwZW9mIHRpbWVyX2RlbGF5ICE9PSAndW5kZWZpbmVkJyA/IHRpbWVyX2RlbGF5IDogMTUwMDtcbiAgICBjbGVhclRpbWVvdXQoY2xvc2VkX3RpbWVyKTsgLy8gQ2xlYXIgcHJldmlvdXMgdGltZXJcbiAgICAvLyBTdGFydCBuZXcgVGltZXJcblxuICAgIGNsb3NlZF90aW1lciA9IHNldFRpbWVvdXQod3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X2Zvcl9rZXl3b3JkLmJpbmQobnVsbCwgZWxlbWVudF9pZCksIHRpbWVyX2RlbGF5KTtcbiAgfTtcbn0oKTtcbi8qKlxyXG4gKiAgIERlZmluZSBEeW5hbWljIEhvb2tzICAobGlrZSBwYWdpbmF0aW9uIGNsaWNrLCB3aGljaCByZW5ldyBlYWNoIHRpbWUgd2l0aCBuZXcgbGlzdGluZyBzaG93aW5nKSAgLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcclxuICogRGVmaW5lIEhUTUwgdWkgSG9va3M6IG9uIEtleVVwIHwgQ2hhbmdlIHwgLT4gU29ydCBPcmRlciAmIE51bWJlciBJdGVtcyAvIFBhZ2VcclxuICogV2UgYXJlIGhjbmFnZWQgaXQgZWFjaCAgdGltZSwgd2hlbiBzaG93aW5nIG5ldyBsaXN0aW5nLCBiZWNhdXNlIERPTSBlbGVtZW50cyBjaG5hZ2VkXHJcbiAqL1xuXG5cbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfZGVmaW5lX3VpX2hvb2tzKCkge1xuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIHdwYmNfZGVmaW5lX3RpcHB5X3Rvb2x0aXBzKSB7XG4gICAgd3BiY19kZWZpbmVfdGlwcHlfdG9vbHRpcHMoJy53cGJjX2xpc3RpbmdfY29udGFpbmVyICcpO1xuICB9XG5cbiAgd3BiY19hanhfYm9va2luZ19fdWlfZGVmaW5lX19sb2NhbGUoKTtcbiAgd3BiY19hanhfYm9va2luZ19fdWlfZGVmaW5lX19yZW1hcmsoKTsgLy8gSXRlbXMgUGVyIFBhZ2VcblxuICBqUXVlcnkoJy53cGJjX2l0ZW1zX3Blcl9wYWdlJykub24oJ2NoYW5nZScsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIHdwYmNfYWp4X2Jvb2tpbmdfc2VuZF9zZWFyY2hfcmVxdWVzdF93aXRoX3BhcmFtcyh7XG4gICAgICAncGFnZV9pdGVtc19jb3VudCc6IGpRdWVyeSh0aGlzKS52YWwoKSxcbiAgICAgICdwYWdlX251bSc6IDFcbiAgICB9KTtcbiAgfSk7IC8vIFNvcnRpbmdcblxuICBqUXVlcnkoJy53cGJjX2l0ZW1zX3NvcnRfdHlwZScpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMoe1xuICAgICAgJ3NvcnRfdHlwZSc6IGpRdWVyeSh0aGlzKS52YWwoKVxuICAgIH0pO1xuICB9KTtcbn1cbi8qKlxyXG4gKiAgIFNob3cgLyBIaWRlIExpc3RpbmcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcclxuICogIFNob3cgTGlzdGluZyBUYWJsZSBcdC0gXHRTZW5kaW5nIEFqYXggUmVxdWVzdFx0LVx0d2l0aCBwYXJhbWV0ZXJzIHRoYXQgIHdlIGVhcmx5ICBkZWZpbmVkIGluIFwid3BiY19hanhfYm9va2luZ19saXN0aW5nXCIgT2JqLlxyXG4gKi9cblxuXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX19hY3R1YWxfbGlzdGluZ19fc2hvdygpIHtcbiAgd3BiY19hanhfYm9va2luZ19hamF4X3NlYXJjaF9yZXF1ZXN0KCk7IC8vIFNlbmQgQWpheCBSZXF1ZXN0XHQtXHR3aXRoIHBhcmFtZXRlcnMgdGhhdCAgd2UgZWFybHkgIGRlZmluZWQgaW4gXCJ3cGJjX2FqeF9ib29raW5nX2xpc3RpbmdcIiBPYmouXG59XG4vKipcclxuICogSGlkZSBMaXN0aW5nIFRhYmxlICggYW5kIFBhZ2luYXRpb24gKVxyXG4gKi9cblxuXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX19hY3R1YWxfbGlzdGluZ19faGlkZSgpIHtcbiAgalF1ZXJ5KCcjd2hfc29ydF9zZWxlY3RvcicpLmhpZGUoKTtcbiAgalF1ZXJ5KHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5nZXRfb3RoZXJfcGFyYW0oJ2xpc3RpbmdfY29udGFpbmVyJykpLmh0bWwoJycpO1xuICBqUXVlcnkod3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSgncGFnaW5hdGlvbl9jb250YWluZXInKSkuaHRtbCgnJyk7XG59XG4vKipcclxuICogICBTdXBwb3J0IGZ1bmN0aW9ucyBmb3IgQ29udGVudCBUZW1wbGF0ZSBkYXRhICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXHJcbiAqIEhpZ2hsaWdodCBzdHJpbmdzLFxyXG4gKiBieSBpbnNlcnRpbmcgPHNwYW4gY2xhc3M9XCJmaWVsZHZhbHVlIG5hbWUgZmllbGRzZWFyY2h2YWx1ZVwiPi4uLjwvc3Bhbj4gaHRtbCAgZWxlbWVudHMgaW50byB0aGUgc3RyaW5nLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gYm9va2luZ19kZXRhaWxzIFx0LSBTb3VyY2Ugc3RyaW5nXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBib29raW5nX2tleXdvcmRcdC0gS2V5d29yZCB0byBoaWdobGlnaHRcclxuICogQHJldHVybnMge3N0cmluZ31cclxuICovXG5cblxuZnVuY3Rpb24gd3BiY19nZXRfaGlnaGxpZ2h0ZWRfc2VhcmNoX2tleXdvcmQoYm9va2luZ19kZXRhaWxzLCBib29raW5nX2tleXdvcmQpIHtcbiAgYm9va2luZ19rZXl3b3JkID0gYm9va2luZ19rZXl3b3JkLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmICgwID09IGJvb2tpbmdfa2V5d29yZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gYm9va2luZ19kZXRhaWxzO1xuICB9IC8vIEhpZ2hsaWdodCBzdWJzdHJpbmcgd2l0aGluZyBIVE1MIHRhZ3MgaW4gXCJDb250ZW50IG9mIGJvb2tpbmcgZmllbGRzIGRhdGFcIiAtLSBlLmcuIHN0YXJ0aW5nIGZyb20gID4gIGFuZCBlbmRpbmcgd2l0aCA8XG5cblxuICB2YXIga2V5d29yZFJlZ2V4ID0gbmV3IFJlZ0V4cChcImZpZWxkdmFsdWVbXjw+XSo+KFtePF0qXCIuY29uY2F0KGJvb2tpbmdfa2V5d29yZCwgXCJbXjxdKilcIiksICdnaW0nKTsgLy9sZXQgbWF0Y2hlcyA9IFsuLi5ib29raW5nX2RldGFpbHMudG9Mb3dlckNhc2UoKS5tYXRjaEFsbCgga2V5d29yZFJlZ2V4ICldO1xuXG4gIHZhciBtYXRjaGVzID0gYm9va2luZ19kZXRhaWxzLnRvTG93ZXJDYXNlKCkubWF0Y2hBbGwoa2V5d29yZFJlZ2V4KTtcbiAgbWF0Y2hlcyA9IEFycmF5LmZyb20obWF0Y2hlcyk7XG4gIHZhciBzdHJpbmdzX2FyciA9IFtdO1xuICB2YXIgcG9zX3ByZXZpb3VzID0gMDtcbiAgdmFyIHNlYXJjaF9wb3Nfc3RhcnQ7XG4gIHZhciBzZWFyY2hfcG9zX2VuZDtcblxuICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIobWF0Y2hlcyksXG4gICAgICBfc3RlcDtcblxuICB0cnkge1xuICAgIGZvciAoX2l0ZXJhdG9yLnMoKTsgIShfc3RlcCA9IF9pdGVyYXRvci5uKCkpLmRvbmU7KSB7XG4gICAgICB2YXIgbWF0Y2ggPSBfc3RlcC52YWx1ZTtcbiAgICAgIHNlYXJjaF9wb3Nfc3RhcnQgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignPicsIDApICsgMTtcbiAgICAgIHN0cmluZ3NfYXJyLnB1c2goYm9va2luZ19kZXRhaWxzLnN1YnN0cihwb3NfcHJldmlvdXMsIHNlYXJjaF9wb3Nfc3RhcnQgLSBwb3NfcHJldmlvdXMpKTtcbiAgICAgIHNlYXJjaF9wb3NfZW5kID0gYm9va2luZ19kZXRhaWxzLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignPCcsIHNlYXJjaF9wb3Nfc3RhcnQpO1xuICAgICAgc3RyaW5nc19hcnIucHVzaCgnPHNwYW4gY2xhc3M9XCJmaWVsZHZhbHVlIG5hbWUgZmllbGRzZWFyY2h2YWx1ZVwiPicgKyBib29raW5nX2RldGFpbHMuc3Vic3RyKHNlYXJjaF9wb3Nfc3RhcnQsIHNlYXJjaF9wb3NfZW5kIC0gc2VhcmNoX3Bvc19zdGFydCkgKyAnPC9zcGFuPicpO1xuICAgICAgcG9zX3ByZXZpb3VzID0gc2VhcmNoX3Bvc19lbmQ7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBfaXRlcmF0b3IuZShlcnIpO1xuICB9IGZpbmFsbHkge1xuICAgIF9pdGVyYXRvci5mKCk7XG4gIH1cblxuICBzdHJpbmdzX2Fyci5wdXNoKGJvb2tpbmdfZGV0YWlscy5zdWJzdHIocG9zX3ByZXZpb3VzLCBib29raW5nX2RldGFpbHMubGVuZ3RoIC0gcG9zX3ByZXZpb3VzKSk7XG4gIHJldHVybiBzdHJpbmdzX2Fyci5qb2luKCcnKTtcbn1cbi8qKlxyXG4gKiBDb252ZXJ0IHNwZWNpYWwgSFRNTCBjaGFyYWN0ZXJzICAgZnJvbTpcdCAmYW1wOyBcdC0+IFx0JlxyXG4gKlxyXG4gKiBAcGFyYW0gdGV4dFxyXG4gKiBAcmV0dXJucyB7Kn1cclxuICovXG5cblxuZnVuY3Rpb24gd3BiY19kZWNvZGVfSFRNTF9lbnRpdGllcyh0ZXh0KSB7XG4gIHZhciB0ZXh0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gIHRleHRBcmVhLmlubmVySFRNTCA9IHRleHQ7XG4gIHJldHVybiB0ZXh0QXJlYS52YWx1ZTtcbn1cbi8qKlxyXG4gKiBDb252ZXJ0IFRPIHNwZWNpYWwgSFRNTCBjaGFyYWN0ZXJzICAgZnJvbTpcdCAmIFx0LT4gXHQmYW1wO1xyXG4gKlxyXG4gKiBAcGFyYW0gdGV4dFxyXG4gKiBAcmV0dXJucyB7Kn1cclxuICovXG5cblxuZnVuY3Rpb24gd3BiY19lbmNvZGVfSFRNTF9lbnRpdGllcyh0ZXh0KSB7XG4gIHZhciB0ZXh0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gIHRleHRBcmVhLmlubmVyVGV4dCA9IHRleHQ7XG4gIHJldHVybiB0ZXh0QXJlYS5pbm5lckhUTUw7XG59XG4vKipcclxuICogICBTdXBwb3J0IEZ1bmN0aW9ucyAtIFNwaW4gSWNvbiBpbiBCdXR0b25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXHJcbiAqIFNwaW4gYnV0dG9uIGluIEZpbHRlciB0b29sYmFyICAtICBTdGFydFxyXG4gKi9cblxuXG5mdW5jdGlvbiB3cGJjX2Jvb2tpbmdfbGlzdGluZ19yZWxvYWRfYnV0dG9uX19zcGluX3N0YXJ0KCkge1xuICBqUXVlcnkoJyN3cGJjX2Jvb2tpbmdfbGlzdGluZ19yZWxvYWRfYnV0dG9uIC5tZW51X2ljb24ud3BiY19zcGluJykucmVtb3ZlQ2xhc3MoJ3dwYmNfYW5pbWF0aW9uX3BhdXNlJyk7XG59XG4vKipcclxuICogU3BpbiBidXR0b24gaW4gRmlsdGVyIHRvb2xiYXIgIC0gIFBhdXNlXHJcbiAqL1xuXG5cbmZ1bmN0aW9uIHdwYmNfYm9va2luZ19saXN0aW5nX3JlbG9hZF9idXR0b25fX3NwaW5fcGF1c2UoKSB7XG4gIGpRdWVyeSgnI3dwYmNfYm9va2luZ19saXN0aW5nX3JlbG9hZF9idXR0b24gLm1lbnVfaWNvbi53cGJjX3NwaW4nKS5hZGRDbGFzcygnd3BiY19hbmltYXRpb25fcGF1c2UnKTtcbn1cbi8qKlxyXG4gKiBTcGluIGJ1dHRvbiBpbiBGaWx0ZXIgdG9vbGJhciAgLSAgaXMgU3Bpbm5pbmcgP1xyXG4gKlxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXG5cblxuZnVuY3Rpb24gd3BiY19ib29raW5nX2xpc3RpbmdfcmVsb2FkX2J1dHRvbl9faXNfc3BpbigpIHtcbiAgaWYgKGpRdWVyeSgnI3dwYmNfYm9va2luZ19saXN0aW5nX3JlbG9hZF9idXR0b24gLm1lbnVfaWNvbi53cGJjX3NwaW4nKS5oYXNDbGFzcygnd3BiY19hbmltYXRpb25fcGF1c2UnKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbWx1WTJ4MVpHVnpMM0JoWjJVdFltOXZhMmx1WjNNdlgzTnlZeTlpYjI5cmFXNW5jMTlmYkdsemRHbHVaeTVxY3lKZExDSnVZVzFsY3lJNld5SnFVWFZsY25raUxDSnZiaUlzSW1VaUxDSmxZV05vSWl3aWFXNWtaWGdpTENKMFpGOWxiQ0lzSW1kbGRDSXNJblZ1WkdWbWFXNWxaQ0lzSWw5MGFYQndlU0lzSW1sdWMzUmhibU5sSWl3aWFHbGtaU0lzSW5kd1ltTmZZV3A0WDJKdmIydHBibWRmYkdsemRHbHVaeUlzSW05aWFpSXNJaVFpTENKd1gzTmxZM1Z5WlNJc0luTmxZM1Z5YVhSNVgyOWlhaUlzSW5WelpYSmZhV1FpTENKdWIyNWpaU0lzSW14dlkyRnNaU0lzSW5ObGRGOXpaV04xY21WZmNHRnlZVzBpTENKd1lYSmhiVjlyWlhraUxDSndZWEpoYlY5MllXd2lMQ0puWlhSZmMyVmpkWEpsWDNCaGNtRnRJaXdpY0Y5c2FYTjBhVzVuSWl3aWMyVmhjbU5vWDNKbGNYVmxjM1JmYjJKcUlpd2ljMjl5ZENJc0luTnZjblJmZEhsd1pTSXNJbkJoWjJWZmJuVnRJaXdpY0dGblpWOXBkR1Z0YzE5amIzVnVkQ0lzSW1OeVpXRjBaVjlrWVhSbElpd2lhMlY1ZDI5eVpDSXNJbk52ZFhKalpTSXNJbk5sWVhKamFGOXpaWFJmWVd4c1gzQmhjbUZ0Y3lJc0luSmxjWFZsYzNSZmNHRnlZVzFmYjJKcUlpd2ljMlZoY21Ob1gyZGxkRjloYkd4ZmNHRnlZVzF6SWl3aWMyVmhjbU5vWDJkbGRGOXdZWEpoYlNJc0luTmxZWEpqYUY5elpYUmZjR0Z5WVcwaUxDSnpaV0Z5WTJoZmMyVjBYM0JoY21GdGMxOWhjbklpTENKd1lYSmhiWE5mWVhKeUlpd2lYeUlzSW5CZmRtRnNJaXdpY0Y5clpYa2lMQ0p3WDJSaGRHRWlMQ0p3WDI5MGFHVnlJaXdpYjNSb1pYSmZiMkpxSWl3aWMyVjBYMjkwYUdWeVgzQmhjbUZ0SWl3aVoyVjBYMjkwYUdWeVgzQmhjbUZ0SWl3aWQzQmlZMTloYW5oZlltOXZhMmx1WjE5aGFtRjRYM05sWVhKamFGOXlaWEYxWlhOMElpd2lZMjl1YzI5c1pTSXNJbWR5YjNWd1EyOXNiR0Z3YzJWa0lpd2liRzluSWl3aWQzQmlZMTlpYjI5cmFXNW5YMnhwYzNScGJtZGZjbVZzYjJGa1gySjFkSFJ2Ymw5ZmMzQnBibDl6ZEdGeWRDSXNJbkJ2YzNRaUxDSjNjR0pqWDJkc2IySmhiREVpTENKM2NHSmpYMkZxWVhoMWNtd2lMQ0poWTNScGIyNGlMQ0ozY0dKalgyRnFlRjkxYzJWeVgybGtJaXdpZDNCaVkxOWhhbmhmYkc5allXeGxJaXdpYzJWaGNtTm9YM0JoY21GdGN5SXNJbkpsYzNCdmJuTmxYMlJoZEdFaUxDSjBaWGgwVTNSaGRIVnpJaXdpYW5GWVNGSWlMQ0puY205MWNFVnVaQ0lzSW1oMGJXd2lMQ0pzYjJOaGRHbHZiaUlzSW5KbGJHOWhaQ0lzSW5kd1ltTmZZV3A0WDJKdmIydHBibWRmYzJodmQxOXNhWE4wYVc1bklpd2lkM0JpWTE5d1lXZHBibUYwYVc5dVgyVmphRzhpTENKTllYUm9JaXdpWTJWcGJDSXNJbmR3WW1OZllXcDRYMkp2YjJ0cGJtZGZaR1ZtYVc1bFgzVnBYMmh2YjJ0eklpd2lkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOWZZV04wZFdGc1gyeHBjM1JwYm1kZlgyaHBaR1VpTENKaGFuaGZibVYzWDJKdmIydHBibWR6WDJOdmRXNTBJaXdpY0dGeWMyVkpiblFpTENKemFHOTNJaXdpZDNCaVkxOWliMjlyYVc1blgyeHBjM1JwYm1kZmNtVnNiMkZrWDJKMWRIUnZibDlmYzNCcGJsOXdZWFZ6WlNJc0ltWmhhV3dpTENKbGNuSnZjbFJvY205M2JpSXNJbmRwYm1SdmR5SXNJbVZ5Y205eVgyMWxjM05oWjJVaUxDSnlaWE53YjI1elpWUmxlSFFpTENKeVpYQnNZV05sSWl3aWQzQmlZMTloYW5oZlltOXZhMmx1WjE5emFHOTNYMjFsYzNOaFoyVWlMQ0pxYzI5dVgybDBaVzF6WDJGeWNpSXNJbXB6YjI1ZmMyVmhjbU5vWDNCaGNtRnRjeUlzSW1wemIyNWZZbTl2YTJsdVoxOXlaWE52ZFhKalpYTWlMQ0ozY0dKalgyRnFlRjlrWldacGJtVmZkR1Z0Y0d4aGRHVnpYMTl5WlhOdmRYSmpaVjl0WVc1cGNIVnNZWFJwYjI0aUxDSmpjM01pTENKc2FYTjBYMmhsWVdSbGNsOTBjR3dpTENKM2NDSXNJblJsYlhCc1lYUmxJaXdpYkdsemRGOXliM2RmZEhCc0lpd2lZWEJ3Wlc1a0lpd2lkM0JpWTE5a1pXWnBibVZmWjIxaGFXeGZZMmhsWTJ0aWIzaGZjMlZzWldOMGFXOXVJaXdpWTJoaGJtZGxYMkp2YjJ0cGJtZGZjbVZ6YjNWeVkyVmZkSEJzSWl3aVpIVndiR2xqWVhSbFgySnZiMnRwYm1kZmRHOWZiM1JvWlhKZmNtVnpiM1Z5WTJWZmRIQnNJaXdpYldWemMyRm5aU0lzSW5kd1ltTmZZV3A0WDJKdmIydHBibWRmYzJWdVpGOXpaV0Z5WTJoZmNtVnhkV1Z6ZEY5M2FYUm9YM0JoY21GdGN5SXNJbmR3WW1OZllXcDRYMkp2YjJ0cGJtZGZjR0ZuYVc1aGRHbHZibDlqYkdsamF5SXNJbkJoWjJWZmJuVnRZbVZ5SWl3aWQzQmlZMTloYW5oZlltOXZhMmx1WjE5elpXNWtYM05sWVhKamFGOXlaWEYxWlhOMFgyWnZjbDlyWlhsM2IzSmtJaXdpWld4bGJXVnVkRjlwWkNJc0luWmhiQ0lzSW5kd1ltTmZZV3A0WDJKdmIydHBibWRmYzJWaGNtTm9hVzVuWDJGbWRHVnlYMlpsZDE5elpXTnZibVJ6SWl3aVkyeHZjMlZrWDNScGJXVnlJaXdpZEdsdFpYSmZaR1ZzWVhraUxDSmpiR1ZoY2xScGJXVnZkWFFpTENKelpYUlVhVzFsYjNWMElpd2lZbWx1WkNJc0luZHdZbU5mWkdWbWFXNWxYM1JwY0hCNVgzUnZiMngwYVhCeklpd2lkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOWZkV2xmWkdWbWFXNWxYMTlzYjJOaGJHVWlMQ0ozY0dKalgyRnFlRjlpYjI5cmFXNW5YMTkxYVY5a1pXWnBibVZmWDNKbGJXRnlheUlzSW1WMlpXNTBJaXdpZDNCaVkxOWhhbmhmWW05dmEybHVaMTlmWVdOMGRXRnNYMnhwYzNScGJtZGZYM05vYjNjaUxDSjNjR0pqWDJkbGRGOW9hV2RvYkdsbmFIUmxaRjl6WldGeVkyaGZhMlY1ZDI5eVpDSXNJbUp2YjJ0cGJtZGZaR1YwWVdsc2N5SXNJbUp2YjJ0cGJtZGZhMlY1ZDI5eVpDSXNJblJ5YVcwaUxDSjBiMHh2ZDJWeVEyRnpaU0lzSW14bGJtZDBhQ0lzSW10bGVYZHZjbVJTWldkbGVDSXNJbEpsWjBWNGNDSXNJbTFoZEdOb1pYTWlMQ0p0WVhSamFFRnNiQ0lzSWtGeWNtRjVJaXdpWm5KdmJTSXNJbk4wY21sdVozTmZZWEp5SWl3aWNHOXpYM0J5WlhacGIzVnpJaXdpYzJWaGNtTm9YM0J2YzE5emRHRnlkQ0lzSW5ObFlYSmphRjl3YjNOZlpXNWtJaXdpYldGMFkyZ2lMQ0pwYm1SbGVFOW1JaXdpY0hWemFDSXNJbk4xWW5OMGNpSXNJbXB2YVc0aUxDSjNjR0pqWDJSbFkyOWtaVjlJVkUxTVgyVnVkR2wwYVdWeklpd2lkR1Y0ZENJc0luUmxlSFJCY21WaElpd2laRzlqZFcxbGJuUWlMQ0pqY21WaGRHVkZiR1Z0Wlc1MElpd2lhVzV1WlhKSVZFMU1JaXdpZG1Gc2RXVWlMQ0ozY0dKalgyVnVZMjlrWlY5SVZFMU1YMlZ1ZEdsMGFXVnpJaXdpYVc1dVpYSlVaWGgwSWl3aWNtVnRiM1psUTJ4aGMzTWlMQ0poWkdSRGJHRnpjeUlzSW5kd1ltTmZZbTl2YTJsdVoxOXNhWE4wYVc1blgzSmxiRzloWkY5aWRYUjBiMjVmWDJselgzTndhVzRpTENKb1lYTkRiR0Z6Y3lKZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFN096czdPenM3T3pzN1FVRkZRVUVzVFVGQlRTeERRVUZETEUxQlFVUXNRMEZCVGl4RFFVRmxReXhGUVVGbUxFTkJRV3RDTzBGQlEyUXNaVUZCWVN4dFFrRkJVME1zUTBGQlZDeEZRVUZaTzBGQlJUTkNSaXhKUVVGQlFTeE5RVUZOTEVOQlFVVXNZMEZCUml4RFFVRk9MRU5CUVhsQ1J5eEpRVUY2UWl4RFFVRXJRaXhWUVVGWFF5eExRVUZZTEVWQlFXdENPMEZCUldoRUxGVkJRVWxETEV0QlFVc3NSMEZCUjB3c1RVRkJUU3hEUVVGRkxFbEJRVVlzUTBGQlRpeERRVUZsVFN4SFFVRm1MRU5CUVc5Q0xFTkJRWEJDTEVOQlFWbzdPMEZCUlVFc1ZVRkJUVU1zVTBGQlV5eEpRVUZKUml4TFFVRkxMRU5CUVVOSExFMUJRWHBDTEVWQlFXdERPMEZCUldwRExGbEJRVWxETEZGQlFWRXNSMEZCUjBvc1MwRkJTeXhEUVVGRFJ5eE5RVUZ5UWp0QlFVTkJReXhSUVVGQlFTeFJRVUZSTEVOQlFVTkRMRWxCUVZRN1FVRkRRVHRCUVVORUxFdEJWRVE3UVVGVlFUdEJRV0puUWl4RFFVRnNRanRCUVdkQ1FUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPenRCUVVOQkxFbEJRVWxETEhkQ1FVRjNRaXhIUVVGSkxGVkJRVmRETEVkQlFWZ3NSVUZCWjBKRExFTkJRV2hDTEVWQlFXMUNPMEZCUld4RU8wRkJRMEVzVFVGQlNVTXNVVUZCVVN4SFFVRkhSaXhIUVVGSExFTkJRVU5ITEZsQlFVb3NSMEZCYlVKSUxFZEJRVWNzUTBGQlEwY3NXVUZCU2l4SlFVRnZRanRCUVVONFEwTXNTVUZCUVVFc1QwRkJUeXhGUVVGRkxFTkJSQ3RDTzBGQlJYaERReXhKUVVGQlFTeExRVUZMTEVWQlFVa3NSVUZHSzBJN1FVRkhlRU5ETEVsQlFVRkJMRTFCUVUwc1JVRkJSenRCUVVnclFpeEhRVUYwUkRzN1FVRk5RVTRzUlVGQlFVRXNSMEZCUnl4RFFVRkRUeXhuUWtGQlNpeEhRVUYxUWl4VlFVRlhReXhUUVVGWUxFVkJRWE5DUXl4VFFVRjBRaXhGUVVGclF6dEJRVU40UkZBc1NVRkJRVUVzVVVGQlVTeERRVUZGVFN4VFFVRkdMRU5CUVZJc1IwRkJkMEpETEZOQlFYaENPMEZCUTBFc1IwRkdSRHM3UVVGSlFWUXNSVUZCUVVFc1IwRkJSeXhEUVVGRFZTeG5Ra0ZCU2l4SFFVRjFRaXhWUVVGWFJpeFRRVUZZTEVWQlFYVkNPMEZCUXpkRExGZEJRVTlPTEZGQlFWRXNRMEZCUlUwc1UwRkJSaXhEUVVGbU8wRkJRMEVzUjBGR1JDeERRV0pyUkN4RFFXdENiRVE3T3p0QlFVTkJMRTFCUVVsSExGTkJRVk1zUjBGQlIxZ3NSMEZCUnl4RFFVRkRXU3hyUWtGQlNpeEhRVUY1UWxvc1IwRkJSeXhEUVVGRFdTeHJRa0ZCU2l4SlFVRXdRanRCUVVOc1JFTXNTVUZCUVVFc1NVRkJTU3hGUVVGakxGbEJSR2RETzBGQlJXeEVReXhKUVVGQlFTeFRRVUZUTEVWQlFWTXNUVUZHWjBNN1FVRkhiRVJETEVsQlFVRkJMRkZCUVZFc1JVRkJWU3hEUVVoblF6dEJRVWxzUkVNc1NVRkJRVUVzWjBKQlFXZENMRVZCUVVVc1JVRktaME03UVVGTGJFUkRMRWxCUVVGQkxGZEJRVmNzUlVGQlR5eEZRVXhuUXp0QlFVMXNSRU1zU1VGQlFVRXNUMEZCVHl4RlFVRlhMRVZCVG1kRE8wRkJUMnhFUXl4SlFVRkJRU3hOUVVGTkxFVkJRVms3UVVGUVowTXNSMEZCYmtVN08wRkJWVUZ1UWl4RlFVRkJRU3hIUVVGSExFTkJRVU52UWl4eFFrRkJTaXhIUVVFMFFpeFZRVUZYUXl4cFFrRkJXQ3hGUVVFclFqdEJRVU14UkZZc1NVRkJRVUVzVTBGQlV5eEhRVUZIVlN4cFFrRkJXanRCUVVOQkxFZEJSa1E3TzBGQlNVRnlRaXhGUVVGQlFTeEhRVUZITEVOQlFVTnpRaXh4UWtGQlNpeEhRVUUwUWl4WlFVRlpPMEZCUTNaRExGZEJRVTlZTEZOQlFWQTdRVUZEUVN4SFFVWkVPenRCUVVsQldDeEZRVUZCUVN4SFFVRkhMRU5CUVVOMVFpeG5Ra0ZCU2l4SFFVRjFRaXhWUVVGWFppeFRRVUZZTEVWQlFYVkNPMEZCUXpkRExGZEJRVTlITEZOQlFWTXNRMEZCUlVnc1UwRkJSaXhEUVVGb1FqdEJRVU5CTEVkQlJrUTdPMEZCU1VGU0xFVkJRVUZCTEVkQlFVY3NRMEZCUTNkQ0xHZENRVUZLTEVkQlFYVkNMRlZCUVZkb1FpeFRRVUZZTEVWQlFYTkNReXhUUVVGMFFpeEZRVUZyUXp0QlFVTjRSRHRCUVVOQk8wRkJRMEU3UVVGRFFVVXNTVUZCUVVFc1UwRkJVeXhEUVVGRlNDeFRRVUZHTEVOQlFWUXNSMEZCZVVKRExGTkJRWHBDTzBGQlEwRXNSMEZNUkRzN1FVRlBRVlFzUlVGQlFVRXNSMEZCUnl4RFFVRkRlVUlzY1VKQlFVb3NSMEZCTkVJc1ZVRkJWVU1zVlVGQlZpeEZRVUZ6UWp0QlFVTnFSRU1zU1VGQlFVRXNRMEZCUXl4RFFVRkRjRU1zU1VGQlJpeERRVUZSYlVNc1ZVRkJVaXhGUVVGdlFpeFZRVUZYUlN4TFFVRllMRVZCUVd0Q1F5eExRVUZzUWl4RlFVRjVRa01zVFVGQmVrSXNSVUZCYVVNN1FVRkJaMEk3UVVGRGNFVXNWMEZCUzA0c1owSkJRVXdzUTBGQmRVSkxMRXRCUVhaQ0xFVkJRVGhDUkN4TFFVRTVRanRCUVVOQkxFdEJSa1E3UVVGSFFTeEhRVXBFTEVOQmFFUnJSQ3hEUVhWRWJFUTdPenRCUVVOQkxFMUJRVWxITEU5QlFVOHNSMEZCUnk5Q0xFZEJRVWNzUTBGQlEyZERMRk5CUVVvc1IwRkJaMEpvUXl4SFFVRkhMRU5CUVVOblF5eFRRVUZLTEVsQlFXbENMRVZCUVM5RE96dEJRVVZCYUVNc1JVRkJRVUVzUjBGQlJ5eERRVUZEYVVNc1pVRkJTaXhIUVVGelFpeFZRVUZYZWtJc1UwRkJXQ3hGUVVGelFrTXNVMEZCZEVJc1JVRkJhME03UVVGRGRrUnpRaXhKUVVGQlFTeFBRVUZQTEVOQlFVVjJRaXhUUVVGR0xFTkJRVkFzUjBGQmRVSkRMRk5CUVhaQ08wRkJRMEVzUjBGR1JEczdRVUZKUVZRc1JVRkJRVUVzUjBGQlJ5eERRVUZEYTBNc1pVRkJTaXhIUVVGelFpeFZRVUZYTVVJc1UwRkJXQ3hGUVVGMVFqdEJRVU0xUXl4WFFVRlBkVUlzVDBGQlR5eERRVUZGZGtJc1UwRkJSaXhEUVVGa08wRkJRMEVzUjBGR1JEczdRVUZMUVN4VFFVRlBVaXhIUVVGUU8wRkJRMEVzUTBGd1JTdENMRU5CYjBVM1FrUXNkMEpCUVhkQ0xFbEJRVWtzUlVGd1JVTXNSVUZ2UlVkWUxFMUJjRVZJTEVOQlFXaERPMEZCZFVWQk8wRkJRMEU3TzBGQlJVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN096dEJRVU5CTEZOQlFWTXJReXh2UTBGQlZDeEhRVUVyUXp0QlFVVXZRME1zUlVGQlFVRXNUMEZCVHl4RFFVRkRReXhqUVVGU0xFTkJRWFZDTEhGQ1FVRjJRanRCUVVFclEwUXNSVUZCUVVFc1QwRkJUeXhEUVVGRFJTeEhRVUZTTEVOQlFXRXNiMFJCUVdJc1JVRkJiMFYyUXl4M1FrRkJkMElzUTBGQlEzVkNMSEZDUVVGNlFpeEZRVUZ3UlR0QlFVVTVRMmxDTEVWQlFVRkJMRGhEUVVFNFF6dEJRVVV2UXp0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5ET3p0QlFVTkJia1FzUlVGQlFVRXNUVUZCVFN4RFFVRkRiMFFzU1VGQlVDeERRVUZoUXl4WlFVRlpMRU5CUVVORExGbEJRVEZDTEVWQlEwYzdRVUZEUTBNc1NVRkJRVUVzVFVGQlRTeEZRVUZaTERCQ1FVUnVRanRCUVVWRFF5eEpRVUZCUVN4blFrRkJaMElzUlVGQlJUZERMSGRDUVVGM1FpeERRVUZEVnl4blFrRkJla0lzUTBGQk1rTXNVMEZCTTBNc1EwRkdia0k3UVVGSFEwd3NTVUZCUVVFc1MwRkJTeXhGUVVGaFRpeDNRa0ZCZDBJc1EwRkJRMWNzWjBKQlFYcENMRU5CUVRKRExFOUJRVE5ETEVOQlNHNUNPMEZCU1VOdFF5eEpRVUZCUVN4bFFVRmxMRVZCUVVjNVF5eDNRa0ZCZDBJc1EwRkJRMWNzWjBKQlFYcENMRU5CUVRKRExGRkJRVE5ETEVOQlNtNUNPMEZCVFVOdlF5eEpRVUZCUVN4aFFVRmhMRVZCUVVjdlF5eDNRa0ZCZDBJc1EwRkJRM1ZDTEhGQ1FVRjZRanRCUVU1cVFpeEhRVVJJTzBGQlUwYzdRVUZEU2p0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFNTeFpRVUZYZVVJc1lVRkJXQ3hGUVVFd1FrTXNWVUZCTVVJc1JVRkJjME5ETEV0QlFYUkRMRVZCUVRoRE8wRkJRMnhFTzBGQlEwRTdRVUZGUVdJc1NVRkJRVUVzVDBGQlR5eERRVUZEUlN4SFFVRlNMRU5CUVdFc01rTkJRV0lzUlVGQk1FUlRMR0ZCUVRGRU8wRkJRVEpGV0N4SlFVRkJRU3hQUVVGUExFTkJRVU5qTEZGQlFWSXNSMEZLZWtJc1EwRkxOME03TzBGQlEwRXNVVUZCVFN4UlFVRlBTQ3hoUVVGUUxFMUJRWGxDTEZGQlFURkNMRWxCUVhkRFFTeGhRVUZoTEV0QlFVc3NTVUZCTDBRc1JVRkJjMFU3UVVGRGNrVXpSQ3hOUVVGQlFTeE5RVUZOTEVOQlFVVXNiVUpCUVVZc1EwRkJUaXhEUVVFNFFsVXNTVUZCT1VJN1FVRkRRVllzVFVGQlFVRXNUVUZCVFN4RFFVRkZWeXgzUWtGQmQwSXNRMEZCUTIxRExHVkJRWHBDTEVOQlFUQkRMRzFDUVVFeFF5eERRVUZHTEVOQlFVNHNRMEZCTUVWcFFpeEpRVUV4UlN4RFFVTlhMRGhGUVVORFNpeGhRVVJFTEVkQlJVRXNVVUZJV0R0QlFVdEJPMEZCUTBFc1MwRmtORU1zUTBGblFqZERPenM3UVVGRFFTeFJRVUZwUW5CRUxGTkJRVk1zU1VGQlNXOUVMR0ZCUVdFc1EwRkJSU3h2UWtGQlJpeERRVUZvUXl4SlFVTktMR2xDUVVGcFFrRXNZVUZCWVN4RFFVRkZMRzlDUVVGR0xFTkJRV0lzUTBGQmRVTXNWVUZCZGtNc1EwRkVlRUlzUlVGRlF6dEJRVU5CU3l4TlFVRkJRU3hSUVVGUkxFTkJRVU5ETEUxQlFWUTdRVUZEUVR0QlFVTkJMRXRCZEVJMFF5eERRWGRDTjBNN096dEJRVU5CTEZGQlFVdE9MR0ZCUVdFc1EwRkJSU3hYUVVGR0xFTkJRV0lzUjBGQkswSXNRMEZCY0VNc1JVRkJkVU03UVVGRmRFTlBMRTFCUVVGQkxEWkNRVUUyUWl4RFFVRkZVQ3hoUVVGaExFTkJRVVVzVjBGQlJpeERRVUZtTEVWQlFXZERRU3hoUVVGaExFTkJRVVVzYlVKQlFVWXNRMEZCTjBNc1JVRkJjMFZCTEdGQlFXRXNRMEZCUlN4MVFrRkJSaXhEUVVGdVJpeERRVUUzUWp0QlFVVkJVU3hOUVVGQlFTeHZRa0ZCYjBJc1EwRkRia0o0UkN4M1FrRkJkMElzUTBGQlEyMURMR1ZCUVhwQ0xFTkJRVEJETEhOQ1FVRXhReXhEUVVSdFFpeEZRVVZ1UWp0QlFVTkRMSFZDUVVGbFlTeGhRVUZoTEVOQlFVVXNiVUpCUVVZc1EwRkJZaXhEUVVGelF5eFZRVUYwUXl4RFFVUm9RanRCUVVWRExIVkNRVUZsVXl4SlFVRkpMRU5CUVVORExFbEJRVXdzUTBGQlYxWXNZVUZCWVN4RFFVRkZMRmRCUVVZc1EwRkJZaXhIUVVFclFrRXNZVUZCWVN4RFFVRkZMRzFDUVVGR0xFTkJRV0lzUTBGQmMwTXNhMEpCUVhSRExFTkJRVEZETEVOQlJtaENPMEZCU1VNc05FSkJRVzlDUVN4aFFVRmhMRU5CUVVVc2JVSkJRVVlzUTBGQllpeERRVUZ6UXl4clFrRkJkRU1zUTBGS2NrSTdRVUZMUXl4eFFrRkJiMEpCTEdGQlFXRXNRMEZCUlN4dFFrRkJSaXhEUVVGaUxFTkJRWE5ETEZkQlFYUkRPMEZCVEhKQ0xFOUJSbTFDTEVOQlFYQkNPMEZCVlVGWExFMUJRVUZCTEdkRFFVRm5ReXhIUVdSTkxFTkJZMGM3UVVGRmVrTXNTMEZvUWtRc1RVRm5Razg3UVVGRlRrTXNUVUZCUVVFc2MwTkJRWE5ETzBGQlEzUkRka1VzVFVGQlFVRXNUVUZCVFN4RFFVRkZWeXgzUWtGQmQwSXNRMEZCUTIxRExHVkJRWHBDTEVOQlFUQkRMRzFDUVVFeFF5eERRVUZHTEVOQlFVNHNRMEZCTUVWcFFpeEpRVUV4UlN4RFFVTkxMSEZIUVVORExGVkJSRVFzUjBGRFl5eG5SRUZFWkN4SFFVTnBSU3hYUVVScVJTeEhRVVZETzBGQlEwUXNZMEZLVER0QlFVMUJMRXRCYkVRMFF5eERRVzlFTjBNN096dEJRVU5CTEZGQlFVdDRSQ3hUUVVGVExFdEJRVXR2UkN4aFFVRmhMRU5CUVVVc2QwSkJRVVlzUTBGQmFFTXNSVUZCT0VRN1FVRkROMFFzVlVGQlNXRXNjMEpCUVhOQ0xFZEJRVWRETEZGQlFWRXNRMEZCUldRc1lVRkJZU3hEUVVGRkxIZENRVUZHTEVOQlFXWXNRMEZCY2tNN08wRkJRMEVzVlVGQlNXRXNjMEpCUVhOQ0xFZEJRVU1zUTBGQk0wSXNSVUZCTmtJN1FVRkROVUo0UlN4UlFVRkJRU3hOUVVGTkxFTkJRVVVzYlVKQlFVWXNRMEZCVGl4RFFVRTRRakJGTEVsQlFUbENPMEZCUTBFN08wRkJRMFF4UlN4TlFVRkJRU3hOUVVGTkxFTkJRVVVzYTBKQlFVWXNRMEZCVGl4RFFVRTJRaXRFTEVsQlFUZENMRU5CUVcxRFV5eHpRa0ZCYmtNN1FVRkRRVHM3UVVGRlJFY3NTVUZCUVVFc09FTkJRVGhETzBGQlJUbERNMFVzU1VGQlFVRXNUVUZCVFN4RFFVRkZMR1ZCUVVZc1EwRkJUaXhEUVVFd1FpdEVMRWxCUVRGQ0xFTkJRV2REU2l4aFFVRm9ReXhGUVM5RU5rTXNRMEVyUkVzN1FVRkRiRVFzUjBGb1Jrb3NSVUZwUmsxcFFpeEpRV3BHVGl4RFFXbEdXU3hWUVVGWFppeExRVUZZTEVWQlFXdENSQ3hWUVVGc1FpeEZRVUU0UW1sQ0xGZEJRVGxDTEVWQlFUUkRPMEZCUVVzc1VVRkJTME1zVFVGQlRTeERRVUZET1VJc1QwRkJVQ3hKUVVGclFqaENMRTFCUVUwc1EwRkJRemxDTEU5QlFWQXNRMEZCWlVVc1IwRkJkRU1zUlVGQk1rTTdRVUZCUlVZc1RVRkJRVUVzVDBGQlR5eERRVUZEUlN4SFFVRlNMRU5CUVdFc1dVRkJZaXhGUVVFeVFsY3NTMEZCTTBJc1JVRkJhME5FTEZWQlFXeERMRVZCUVRoRGFVSXNWMEZCT1VNN1FVRkJPRVE3TzBGQlEzQkxOMFVzU1VGQlFVRXNUVUZCVFN4RFFVRkZMRzFDUVVGR0xFTkJRVTRzUTBGQk9FSlZMRWxCUVRsQ08wRkJRMEVzVVVGQlNYRkZMR0ZCUVdFc1IwRkJSeXhoUVVGaExGRkJRV0lzUjBGQmQwSXNXVUZCZUVJc1IwRkJkVU5HTEZkQlFUTkVPenRCUVVOQkxGRkJRVXRvUWl4TFFVRkxMRU5CUVVOdFFpeFpRVUZZTEVWQlFYbENPMEZCUTNoQ1JDeE5RVUZCUVN4aFFVRmhMRWxCUVVsc1FpeExRVUZMTEVOQlFVTnRRaXhaUVVGMlFqdEJRVU5CT3p0QlFVTkVSQ3hKUVVGQlFTeGhRVUZoTEVkQlFVZEJMR0ZCUVdFc1EwRkJRMFVzVDBGQlpDeERRVUYxUWl4TFFVRjJRaXhGUVVFNFFpeFJRVUU1UWl4RFFVRm9RanRCUVVWQlF5eEpRVUZCUVN3MlFrRkJOa0lzUTBGQlJVZ3NZVUZCUml4RFFVRTNRanRCUVVORExFZEJNVVpNTEVWQk1rWlZPMEZCUTA0N1FVRTFSa29zUjBGMlFqaERMRU5CYjBoMlF6dEJRVU5RTzBGQlIwUTdRVUZEUVRzN1FVRkZRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdPenRCUVVOQkxGTkJRVk5pTERaQ1FVRlVMRU5CUVhkRGFVSXNZMEZCZUVNc1JVRkJkMFJETEd0Q1FVRjRSQ3hGUVVFMFJVTXNjMEpCUVRWRkxFVkJRVzlITzBGQlJXNUhReXhGUVVGQlFTeG5SRUZCWjBRc1EwRkJSVWdzWTBGQlJpeEZRVUZyUWtNc2EwSkJRV3hDTEVWQlFYTkRReXh6UWtGQmRFTXNRMEZCYUVRc1EwRkdiVWNzUTBGSmNFYzdPMEZCUTBOeVJpeEZRVUZCUVN4TlFVRk5MRU5CUVVVc2JVSkJRVVlzUTBGQlRpeERRVUU0UW5WR0xFZEJRVGxDTEVOQlFXMURMRk5CUVc1RExFVkJRVGhETEUxQlFUbERPMEZCUTBFc1RVRkJTVU1zWlVGQlpTeEhRVUZIUXl4RlFVRkZMRU5CUVVORExGRkJRVWdzUTBGQllTdzRRa0ZCWWl4RFFVRjBRanRCUVVOQkxFMUJRVWxETEZsQlFWa3NSMEZCVFVZc1JVRkJSU3hEUVVGRFF5eFJRVUZJTEVOQlFXRXNNa0pCUVdJc1EwRkJkRUlzUTBGUWJVY3NRMEZWYmtjN08wRkJRMEV4Uml4RlFVRkJRU3hOUVVGTkxFTkJRVVZYTEhkQ1FVRjNRaXhEUVVGRGJVTXNaVUZCZWtJc1EwRkJNRU1zYlVKQlFURkRMRU5CUVVZc1EwRkJUaXhEUVVFd1JXbENMRWxCUVRGRkxFTkJRV2RHZVVJc1pVRkJaU3hGUVVFdlJpeEZRVmh0Unl4RFFXRnVSenM3UVVGRFFYaEdMRVZCUVVGQkxFMUJRVTBzUTBGQlJWY3NkMEpCUVhkQ0xFTkJRVU50UXl4bFFVRjZRaXhEUVVFd1F5eHRRa0ZCTVVNc1EwRkJSaXhEUVVGT0xFTkJRVEJGT0VNc1RVRkJNVVVzUTBGQmEwWXNNRU5CUVd4R0xFVkJaRzFITEVOQlowSnVSenM3UVVGRFJEVkRMRVZCUVVGQkxFOUJRVThzUTBGQlEwTXNZMEZCVWl4RFFVRjNRaXhqUVVGNFFpeEZRV3BDYjBjc1EwRnBRblpET3p0QlFVTTFSRllzUlVGQlFVRXNRMEZCUXl4RFFVRkRjRU1zU1VGQlJpeERRVUZSWjBZc1kwRkJVaXhGUVVGM1FpeFZRVUZYTTBNc1MwRkJXQ3hGUVVGclFrTXNTMEZCYkVJc1JVRkJlVUpETEUxQlFYcENMRVZCUVdsRE8wRkJRM2hFTEZGQlFVc3NaMEpCUVdkQ0xFOUJRVTh3UXl4clFrRkJhMElzUTBGQlJTeFRRVUZHTEVOQlFUbERMRVZCUVRaRU8wRkJRV003UVVGRE1VVTFReXhOUVVGQlFTeExRVUZMTEVOQlFVVXNORUpCUVVZc1EwRkJUQ3hIUVVGM1F6UkRMR3RDUVVGclFpeERRVUZGTEZOQlFVWXNRMEZCTVVRN1FVRkRRU3hMUVVaRUxFMUJSVTg3UVVGRFRqVkRMRTFCUVVGQkxFdEJRVXNzUTBGQlJTdzBRa0ZCUml4RFFVRk1MRWRCUVhkRExFVkJRWGhETzBGQlEwRTdPMEZCUTBSQkxFbEJRVUZCTEV0QlFVc3NRMEZCUlN4dFFrRkJSaXhEUVVGTUxFZEJRU3RDTmtNc2MwSkJRUzlDTzBGQlEwRnlSaXhKUVVGQlFTeE5RVUZOTEVOQlFVVlhMSGRDUVVGM1FpeERRVUZEYlVNc1pVRkJla0lzUTBGQk1FTXNiVUpCUVRGRExFbEJRV3RGTEhkQ1FVRndSU3hEUVVGT0xFTkJRWEZIT0VNc1RVRkJja2NzUTBGQk5rZEVMRmxCUVZrc1EwRkJSVzVFTEV0QlFVWXNRMEZCZWtnN1FVRkRRU3hIUVZKRU96dEJRVk5FVVN4RlFVRkJRU3hQUVVGUExFTkJRVU5qTEZGQlFWSXNSMEV6UW05SExFTkJNa0oyUkRzN1FVRkZOVU1yUWl4RlFVRkJRU3h2UTBGQmIwTXNRMEZCUlRkR0xFMUJRVVlzUTBGQmNFTXNRMEUzUW0xSExFTkJOa0k1UXp0QlFVTnlSRHRCUVVkQk8wRkJRMFE3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPenM3UVVGRFF5eFRRVUZUYzBZc1owUkJRVlFzUTBGQk1rUklMR05CUVRORUxFVkJRVEpGUXl4clFrRkJNMFVzUlVGQkswWkRMSE5DUVVFdlJpeEZRVUYxU0R0QlFVVjBTRHRCUVVOQkxFMUJRVWxUTERKQ1FVRXlRaXhIUVVGSFRDeEZRVUZGTEVOQlFVTkRMRkZCUVVnc1EwRkJZU3hyUTBGQllpeERRVUZzUXp0QlFVVkJNVVlzUlVGQlFVRXNUVUZCVFN4RFFVRkZMR2RFUVVGR0xFTkJRVTRzUTBGQk1rUXJSQ3hKUVVFelJDeERRVU5wUWl0Q0xESkNRVUV5UWl4RFFVRkZPMEZCUTNwQ0xIbENRVUY1UWxZc2EwSkJSRUU3UVVGRmVrSXNOa0pCUVhsQ1F6dEJRVVpCTEVkQlFVWXNRMEZFTlVNc1JVRk1jMGdzUTBGWmRFZzdPMEZCUTBFc1RVRkJTVlVzZFVOQlFYVkRMRWRCUVVkT0xFVkJRVVVzUTBGQlEwTXNVVUZCU0N4RFFVRmhMRGhEUVVGaUxFTkJRVGxETzBGQlJVRXhSaXhGUVVGQlFTeE5RVUZOTEVOQlFVVXNORVJCUVVZc1EwRkJUaXhEUVVGMVJTdEVMRWxCUVhaRkxFTkJRMmxDWjBNc2RVTkJRWFZETEVOQlFVVTdRVUZEY2tNc2VVSkJRWGxDV0N4clFrRkVXVHRCUVVWeVF5dzJRa0ZCZVVKRE8wRkJSbGtzUjBGQlJpeERRVVI0UkR0QlFVMUJPMEZCUjBZN1FVRkRRVHRCUVVOQk96czdRVUZEUVN4VFFVRlRTQ3cyUWtGQlZDeERRVUYzUTJNc1QwRkJlRU1zUlVGQmFVUTdRVUZGYUVSNlFpeEZRVUZCUVN4elEwRkJjME03UVVGRmRFTjJSU3hGUVVGQlFTeE5RVUZOTEVOQlFVVlhMSGRDUVVGM1FpeERRVUZEYlVNc1pVRkJla0lzUTBGQk1FTXNiVUpCUVRGRExFTkJRVVlzUTBGQlRpeERRVUV3UldsQ0xFbEJRVEZGTEVOQlExY3NPRVZCUTBOcFF5eFBRVVJFTEVkQlJVRXNVVUZJV0R0QlFVdEJPMEZCUjBRN1FVRkRRVHM3UVVGRlFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPenM3UVVGRFFTeFRRVUZUUXl4blJFRkJWQ3hEUVVFMFJETkVMRlZCUVRWRUxFVkJRWGRGTzBGQlJYWkZPMEZCUTBGRExFVkJRVUZCTEVOQlFVTXNRMEZCUTNCRExFbEJRVVlzUTBGQlVXMURMRlZCUVZJc1JVRkJiMElzVlVGQlYwVXNTMEZCV0N4RlFVRnJRa01zUzBGQmJFSXNSVUZCZVVKRExFMUJRWHBDTEVWQlFXdERPMEZCUTNKRU8wRkJRMEV2UWl4SlFVRkJRU3gzUWtGQmQwSXNRMEZCUTNsQ0xHZENRVUY2UWl4RFFVRXlRMHNzUzBGQk0wTXNSVUZCYTBSRUxFdEJRV3hFTzBGQlEwRXNSMEZJUkN4RlFVaDFSU3hEUVZGMlJUczdPMEZCUTBGUExFVkJRVUZCTEc5RFFVRnZRenRCUVVOd1F6dEJRVVZFTzBGQlEwRTdRVUZEUVR0QlFVTkJPenM3UVVGRFFTeFRRVUZUYlVRc2FVTkJRVlFzUTBGQk5FTkRMRmRCUVRWRExFVkJRWGxFTzBGQlJYaEVSaXhGUVVGQlFTeG5SRUZCWjBRc1EwRkJSVHRCUVVONlF5eG5Ra0ZCV1VVN1FVRkVOa0lzUjBGQlJpeERRVUZvUkR0QlFVZEJPMEZCUjBRN1FVRkRRVHM3UVVGRlFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPenM3UVVGRFFTeFRRVUZUUXl4blJFRkJWQ3hEUVVFeVJFTXNWVUZCTTBRc1JVRkJkMFU3UVVGRmRrVTdRVUZEUVVvc1JVRkJRVUVzWjBSQlFXZEVMRU5CUVVVN1FVRkRlRU1zWlVGQllXcEhMRTFCUVUwc1EwRkJSWEZITEZWQlFVWXNRMEZCVGl4RFFVRnhRa01zUjBGQmNrSXNSVUZFTWtJN1FVRkZlRU1zWjBKQlFWazdRVUZHTkVJc1IwRkJSaXhEUVVGb1JEdEJRVWxCTzBGQlJVRTdRVUZEUkR0QlFVTkJPMEZCUTBFN096dEJRVU5ETEVsQlFVbERMRFJEUVVFMFF5eEhRVUZITEZsQlFWYzdRVUZGTjBRc1RVRkJTVU1zV1VGQldTeEhRVUZITEVOQlFXNUNPMEZCUlVFc1UwRkJUeXhWUVVGWFNDeFZRVUZZTEVWQlFYVkNTU3hYUVVGMlFpeEZRVUZ2UXp0QlFVVXhRenRCUVVOQlFTeEpRVUZCUVN4WFFVRlhMRWRCUVVjc1QwRkJUMEVzVjBGQlVDeExRVUYxUWl4WFFVRjJRaXhIUVVGeFEwRXNWMEZCY2tNc1IwRkJiVVFzU1VGQmFrVTdRVUZGUVVNc1NVRkJRVUVzV1VGQldTeERRVUZGUml4WlFVRkdMRU5CUVZvc1EwRk1NRU1zUTBGTFdEdEJRVVV2UWpzN1FVRkRRVUVzU1VGQlFVRXNXVUZCV1N4SFFVRkhSeXhWUVVGVkxFTkJRVVZRTEdkRVFVRm5SQ3hEUVVGRFVTeEpRVUZxUkN4RFFVRjNSQ3hKUVVGNFJDeEZRVUU0UkZBc1ZVRkJPVVFzUTBGQlJpeEZRVUU0UlVrc1YwRkJPVVVzUTBGQmVrSTdRVUZEUVN4SFFWUkVPMEZCVlVFc1EwRmthMFFzUlVGQmJrUTdRVUZwUWtRN1FVRkRRVHM3UVVGRlFUdEJRVU5CTzBGQlEwRTdRVUZEUVRzN08wRkJRMEVzVTBGQlUyNURMR2REUVVGVUxFZEJRVEpETzBGQlJURkRMRTFCUVVzc1pVRkJaU3hQUVVGUmRVTXNNRUpCUVRWQ0xFVkJRVEpFTzBGQlF6RkVRU3hKUVVGQlFTd3dRa0ZCTUVJc1EwRkJSU3d3UWtGQlJpeERRVUV4UWp0QlFVTkJPenRCUVVWRVF5eEZRVUZCUVN4dFEwRkJiVU03UVVGRGJrTkRMRVZCUVVGQkxHMURRVUZ0UXl4SFFWQlBMRU5CVXpGRE96dEJRVU5CTDBjc1JVRkJRVUVzVFVGQlRTeERRVUZGTEhOQ1FVRkdMRU5CUVU0c1EwRkJhVU5ETEVWQlFXcERMRU5CUVhGRExGRkJRWEpETEVWQlFTdERMRlZCUVZVclJ5eExRVUZXTEVWQlFXbENPMEZCUlM5RVppeEpRVUZCUVN4blJFRkJaMFFzUTBGQlJUdEJRVU42UXl3d1FrRkJjMEpxUnl4TlFVRk5MRU5CUVVVc1NVRkJSaXhEUVVGT0xFTkJRV1Z6Unl4SFFVRm1MRVZCUkcxQ08wRkJSWHBETEd0Q1FVRlpPMEZCUmpaQ0xFdEJRVVlzUTBGQmFFUTdRVUZKUVN4SFFVNUVMRVZCVmpCRExFTkJhMEl4UXpzN1FVRkRRWFJITEVWQlFVRkJMRTFCUVUwc1EwRkJSU3gxUWtGQlJpeERRVUZPTEVOQlFXdERReXhGUVVGc1F5eERRVUZ6UXl4UlFVRjBReXhGUVVGblJDeFZRVUZWSzBjc1MwRkJWaXhGUVVGcFFqdEJRVVZvUldZc1NVRkJRVUVzWjBSQlFXZEVMRU5CUVVVN1FVRkJReXh0UWtGQllXcEhMRTFCUVUwc1EwRkJSU3hKUVVGR0xFTkJRVTRzUTBGQlpYTkhMRWRCUVdZN1FVRkJaQ3hMUVVGR0xFTkJRV2hFTzBGQlEwRXNSMEZJUkR0QlFVbEJPMEZCUjBRN1FVRkRRVHM3UVVGRlFUdEJRVU5CTzBGQlEwRTdPenRCUVVOQkxGTkJRVk5YTEhORFFVRlVMRWRCUVdsRU8wRkJSV2hFYkVVc1JVRkJRVUVzYjBOQlFXOURMRWRCUmxrc1EwRkZUanRCUVVNeFF6dEJRVVZFTzBGQlEwRTdRVUZEUVRzN08wRkJRMEVzVTBGQlUzZENMSE5EUVVGVUxFZEJRV2xFTzBGQlEyaEVka1VzUlVGQlFVRXNUVUZCVFN4RFFVRkZMRzFDUVVGR0xFTkJRVTRzUTBGQk9FSlZMRWxCUVRsQ08wRkJRMEZXTEVWQlFVRkJMRTFCUVUwc1EwRkJSVmNzZDBKQlFYZENMRU5CUVVOdFF5eGxRVUY2UWl4RFFVRXdReXh0UWtGQk1VTXNRMEZCUml4RFFVRk9MRU5CUVRaRmFVSXNTVUZCTjBVc1EwRkJiVVlzUlVGQmJrWTdRVUZEUVM5RUxFVkJRVUZCTEUxQlFVMHNRMEZCUlZjc2QwSkJRWGRDTEVOQlFVTnRReXhsUVVGNlFpeERRVUV3UXl4elFrRkJNVU1zUTBGQlJpeERRVUZPTEVOQlFUWkZhVUlzU1VGQk4wVXNRMEZCYlVZc1JVRkJia1k3UVVGRFFUdEJRVWRFTzBGQlEwRTdPMEZCUlVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdPenRCUVVOQkxGTkJRVk50UkN4dFEwRkJWQ3hEUVVFNFEwTXNaVUZCT1VNc1JVRkJLMFJETEdWQlFTOUVMRVZCUVdkR08wRkJSUzlGUVN4RlFVRkJRU3hsUVVGbExFZEJRVWRCTEdWQlFXVXNRMEZCUTBNc1NVRkJhRUlzUjBGQmRVSkRMRmRCUVhaQ0xFVkJRV3hDT3p0QlFVTkJMRTFCUVVzc1MwRkJTMFlzWlVGQlpTeERRVUZEUnl4TlFVRXhRaXhGUVVGclF6dEJRVU5xUXl4WFFVRlBTaXhsUVVGUU8wRkJRMEVzUjBGTU9FVXNRMEZQTDBVN096dEJRVU5CTEUxQlFVbExMRmxCUVZrc1IwRkJSeXhKUVVGSlF5eE5RVUZLTEd0RFFVRnpRMHdzWlVGQmRFTXNZVUZCSzBRc1MwRkJMMFFzUTBGQmJrSXNRMEZTSzBVc1EwRlZMMFU3TzBGQlEwRXNUVUZCU1Uwc1QwRkJUeXhIUVVGSFVDeGxRVUZsTEVOQlFVTkhMRmRCUVdoQ0xFZEJRVGhDU3l4UlFVRTVRaXhEUVVGM1EwZ3NXVUZCZUVNc1EwRkJaRHRCUVVORFJTeEZRVUZCUVN4UFFVRlBMRWRCUVVkRkxFdEJRVXNzUTBGQlEwTXNTVUZCVGl4RFFVRlpTQ3hQUVVGYUxFTkJRVlk3UVVGRlJDeE5RVUZKU1N4WFFVRlhMRWRCUVVjc1JVRkJiRUk3UVVGRFFTeE5RVUZKUXl4WlFVRlpMRWRCUVVjc1EwRkJia0k3UVVGRFFTeE5RVUZKUXl4blFrRkJTanRCUVVOQkxFMUJRVWxETEdOQlFVbzdPMEZCYWtJclJTdzJRMEZ0UWpGRVVDeFBRVzVDTUVRN1FVRkJRVHM3UVVGQlFUdEJRVzFDTDBVc2QwUkJRVGhDTzBGQlFVRXNWVUZCYkVKUkxFdEJRV3RDTzBGQlJUZENSaXhOUVVGQlFTeG5Ra0ZCWjBJc1IwRkJSMFVzUzBGQlN5eERRVUZET1Vnc1MwRkJUaXhIUVVGak9FZ3NTMEZCU3l4RFFVRkZMRU5CUVVZc1EwRkJUQ3hEUVVGWFdpeFhRVUZZTEVkQlFYbENZU3hQUVVGNlFpeERRVUZyUXl4SFFVRnNReXhGUVVGMVF5eERRVUYyUXl4RFFVRmtMRWRCUVRKRUxFTkJRVGxGTzBGQlJVRk1MRTFCUVVGQkxGZEJRVmNzUTBGQlEwMHNTVUZCV2l4RFFVRnJRbXBDTEdWQlFXVXNRMEZCUTJ0Q0xFMUJRV2hDTEVOQlFYZENUaXhaUVVGNFFpeEZRVUYxUTBNc1owSkJRV2RDTEVkQlFVZEVMRmxCUVRGRUxFTkJRV3hDTzBGQlJVRkZMRTFCUVVGQkxHTkJRV01zUjBGQlIyUXNaVUZCWlN4RFFVRkRSeXhYUVVGb1FpeEhRVUU0UW1Fc1QwRkJPVUlzUTBGQmRVTXNSMEZCZGtNc1JVRkJORU5JTEdkQ1FVRTFReXhEUVVGcVFqdEJRVVZCUml4TlFVRkJRU3hYUVVGWExFTkJRVU5OTEVsQlFWb3NRMEZCYTBJc2IwUkJRVzlFYWtJc1pVRkJaU3hEUVVGRGEwSXNUVUZCYUVJc1EwRkJkMEpNTEdkQ1FVRjRRaXhGUVVFeVEwTXNZMEZCWXl4SFFVRkhSQ3huUWtGQk5VUXNRMEZCY0VRc1IwRkJjMGtzVTBGQmVFbzdRVUZGUVVRc1RVRkJRVUVzV1VGQldTeEhRVUZIUlN4alFVRm1PMEZCUTBFN1FVRTVRamhGTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN08wRkJaME12UlVnc1JVRkJRVUVzVjBGQlZ5eERRVUZEVFN4SlFVRmFMRU5CUVd0Q2FrSXNaVUZCWlN4RFFVRkRhMElzVFVGQmFFSXNRMEZCZDBKT0xGbEJRWGhDTEVWQlFYVkRXaXhsUVVGbExFTkJRVU5KTEUxQlFXaENMRWRCUVhsQ1VTeFpRVUZvUlN4RFFVRnNRanRCUVVWQkxGTkJRVTlFTEZkQlFWY3NRMEZCUTFFc1NVRkJXaXhEUVVGclFpeEZRVUZzUWl4RFFVRlFPMEZCUTBFN1FVRkZSRHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdPenRCUVVOQkxGTkJRVk5ETEhsQ1FVRlVMRU5CUVc5RFF5eEpRVUZ3UXl4RlFVRXdRenRCUVVONlF5eE5RVUZKUXl4UlFVRlJMRWRCUVVkRExGRkJRVkVzUTBGQlEwTXNZVUZCVkN4RFFVRjNRaXhWUVVGNFFpeERRVUZtTzBGQlEwRkdMRVZCUVVGQkxGRkJRVkVzUTBGQlEwY3NVMEZCVkN4SFFVRnhRa29zU1VGQmNrSTdRVUZEUVN4VFFVRlBReXhSUVVGUkxFTkJRVU5KTEV0QlFXaENPMEZCUTBFN1FVRkZSRHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdPenRCUVVOQkxGTkJRVk5ETEhsQ1FVRlVMRU5CUVcxRFRpeEpRVUZ1UXl4RlFVRjVRenRCUVVOMlF5eE5RVUZKUXl4UlFVRlJMRWRCUVVkRExGRkJRVkVzUTBGQlEwTXNZVUZCVkN4RFFVRjFRaXhWUVVGMlFpeERRVUZtTzBGQlEwRkdMRVZCUVVGQkxGRkJRVkVzUTBGQlEwMHNVMEZCVkN4SFFVRnhRbEFzU1VGQmNrSTdRVUZEUVN4VFFVRlBReXhSUVVGUkxFTkJRVU5ITEZOQlFXaENPMEZCUTBRN1FVRkhSRHRCUVVOQk96dEJRVVZCTzBGQlEwRTdRVUZEUVRzN08wRkJRMEVzVTBGQlUzcEdMRGhEUVVGVUxFZEJRWGxFTzBGQlEzaEVia1FzUlVGQlFVRXNUVUZCVFN4RFFVRkZMREJFUVVGR0xFTkJRVTRzUTBGQmIwVm5TaXhYUVVGd1JTeERRVUZwUml4elFrRkJha1k3UVVGRFFUdEJRVVZFTzBGQlEwRTdRVUZEUVRzN08wRkJRMEVzVTBGQlUzSkZMRGhEUVVGVUxFZEJRWGxFTzBGQlEzaEVNMFVzUlVGQlFVRXNUVUZCVFN4RFFVRkZMREJFUVVGR0xFTkJRVTRzUTBGQmNVVnBTaXhSUVVGeVJTeERRVUVyUlN4elFrRkJMMFU3UVVGRFFUdEJRVVZFTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN096dEJRVU5CTEZOQlFWTkRMREpEUVVGVUxFZEJRWE5FTzBGQlEyeEVMRTFCUVV0c1NpeE5RVUZOTEVOQlFVVXNNRVJCUVVZc1EwRkJUaXhEUVVGeFJXMUtMRkZCUVhKRkxFTkJRU3RGTEhOQ1FVRXZSU3hEUVVGTUxFVkJRVGhITzBGQlEyaElMRmRCUVU4c1NVRkJVRHRCUVVOQkxFZEJSa1VzVFVGRlNUdEJRVU5PTEZkQlFVOHNTMEZCVUR0QlFVTkJPMEZCUTBRaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SmNJblZ6WlNCemRISnBZM1JjSWp0Y2NseHVYSEpjYm1wUmRXVnllU2duWW05a2VTY3BMbTl1S0h0Y2NseHVJQ0FnSUNkMGIzVmphRzF2ZG1Vbk9pQm1kVzVqZEdsdmJpaGxLU0I3WEhKY2JseHlYRzVjZEZ4MGFsRjFaWEo1S0NBbkxuUnBiV1Z6Y0dGeWRHeDVKeUFwTG1WaFkyZ29JR1oxYm1OMGFXOXVJQ2dnYVc1a1pYZ2dLWHRjY2x4dVhISmNibHgwWEhSY2RIWmhjaUIwWkY5bGJDQTlJR3BSZFdWeWVTZ2dkR2hwY3lBcExtZGxkQ2dnTUNBcE8xeHlYRzVjY2x4dVhIUmNkRngwYVdZZ0tDQW9kVzVrWldacGJtVmtJQ0U5SUhSa1gyVnNMbDkwYVhCd2VTa2dLWHRjY2x4dVhISmNibHgwWEhSY2RGeDBkbUZ5SUdsdWMzUmhibU5sSUQwZ2RHUmZaV3d1WDNScGNIQjVPMXh5WEc1Y2RGeDBYSFJjZEdsdWMzUmhibU5sTG1ocFpHVW9LVHRjY2x4dVhIUmNkRngwZlZ4eVhHNWNkRngwZlNBcE8xeHlYRzVjZEgxY2NseHVmU2s3WEhKY2JseHlYRzR2S2lwY2NseHVJQ29nVW1WeGRXVnpkQ0JQWW1wbFkzUmNjbHh1SUNvZ1NHVnlaU0IzWlNCallXNGdJR1JsWm1sdVpTQlRaV0Z5WTJnZ2NHRnlZVzFsZEdWeWN5QmhibVFnVlhCa1lYUmxJR2wwSUd4aGRHVnlMQ0FnZDJobGJpQWdjMjl0WlNCd1lYSmhiV1YwWlhJZ2QyRnpJR05vWVc1blpXUmNjbHh1SUNwY2NseHVJQ292WEhKY2JuWmhjaUIzY0dKalgyRnFlRjlpYjI5cmFXNW5YMnhwYzNScGJtY2dQU0FvWm5WdVkzUnBiMjRnS0NCdlltb3NJQ1FwSUh0Y2NseHVYSEpjYmx4MEx5OGdVMlZqZFhKbElIQmhjbUZ0WlhSbGNuTWdabTl5SUVGcVlYaGNkQzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFZ4eVhHNWNkSFpoY2lCd1gzTmxZM1Z5WlNBOUlHOWlhaTV6WldOMWNtbDBlVjl2WW1vZ1BTQnZZbW91YzJWamRYSnBkSGxmYjJKcUlIeDhJSHRjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBkWE5sY2w5cFpEb2dNQ3hjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBibTl1WTJVZ0lEb2dKeWNzWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkR3h2WTJGc1pTQTZJQ2NuWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUWdJSDA3WEhKY2JseHlYRzVjZEc5aWFpNXpaWFJmYzJWamRYSmxYM0JoY21GdElEMGdablZ1WTNScGIyNGdLQ0J3WVhKaGJWOXJaWGtzSUhCaGNtRnRYM1poYkNBcElIdGNjbHh1WEhSY2RIQmZjMlZqZFhKbFd5QndZWEpoYlY5clpYa2dYU0E5SUhCaGNtRnRYM1poYkR0Y2NseHVYSFI5TzF4eVhHNWNjbHh1WEhSdlltb3VaMlYwWDNObFkzVnlaVjl3WVhKaGJTQTlJR1oxYm1OMGFXOXVJQ2dnY0dGeVlXMWZhMlY1SUNrZ2UxeHlYRzVjZEZ4MGNtVjBkWEp1SUhCZmMyVmpkWEpsV3lCd1lYSmhiVjlyWlhrZ1hUdGNjbHh1WEhSOU8xeHlYRzVjY2x4dVhISmNibHgwTHk4Z1RHbHpkR2x1WnlCVFpXRnlZMmdnY0dGeVlXMWxkR1Z5YzF4MExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRYSEpjYmx4MGRtRnlJSEJmYkdsemRHbHVaeUE5SUc5aWFpNXpaV0Z5WTJoZmNtVnhkV1Z6ZEY5dlltb2dQU0J2WW1vdWMyVmhjbU5vWDNKbGNYVmxjM1JmYjJKcUlIeDhJSHRjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MGMyOXlkQ0FnSUNBZ0lDQWdJQ0FnSURvZ1hDSmliMjlyYVc1blgybGtYQ0lzWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RITnZjblJmZEhsd1pTQWdJQ0FnSUNBNklGd2lSRVZUUTF3aUxGeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJ3WVdkbFgyNTFiU0FnSUNBZ0lDQWdPaUF4TEZ4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUndZV2RsWDJsMFpXMXpYMk52ZFc1ME9pQXhNQ3hjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFkzSmxZWFJsWDJSaGRHVWdJQ0FnSURvZ1hDSmNJaXhjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MGEyVjVkMjl5WkNBZ0lDQWdJQ0FnSURvZ1hDSmNJaXhjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MGMyOTFjbU5sSUNBZ0lDQWdJQ0FnSURvZ1hDSmNJbHh5WEc1Y2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwZlR0Y2NseHVYSEpjYmx4MGIySnFMbk5sWVhKamFGOXpaWFJmWVd4c1gzQmhjbUZ0Y3lBOUlHWjFibU4wYVc5dUlDZ2djbVZ4ZFdWemRGOXdZWEpoYlY5dlltb2dLU0I3WEhKY2JseDBYSFJ3WDJ4cGMzUnBibWNnUFNCeVpYRjFaWE4wWDNCaGNtRnRYMjlpYWp0Y2NseHVYSFI5TzF4eVhHNWNjbHh1WEhSdlltb3VjMlZoY21Ob1gyZGxkRjloYkd4ZmNHRnlZVzF6SUQwZ1puVnVZM1JwYjI0Z0tDa2dlMXh5WEc1Y2RGeDBjbVYwZFhKdUlIQmZiR2x6ZEdsdVp6dGNjbHh1WEhSOU8xeHlYRzVjY2x4dVhIUnZZbW91YzJWaGNtTm9YMmRsZEY5d1lYSmhiU0E5SUdaMWJtTjBhVzl1SUNnZ2NHRnlZVzFmYTJWNUlDa2dlMXh5WEc1Y2RGeDBjbVYwZFhKdUlIQmZiR2x6ZEdsdVoxc2djR0Z5WVcxZmEyVjVJRjA3WEhKY2JseDBmVHRjY2x4dVhISmNibHgwYjJKcUxuTmxZWEpqYUY5elpYUmZjR0Z5WVcwZ1BTQm1kVzVqZEdsdmJpQW9JSEJoY21GdFgydGxlU3dnY0dGeVlXMWZkbUZzSUNrZ2UxeHlYRzVjZEZ4MEx5OGdhV1lnS0NCQmNuSmhlUzVwYzBGeWNtRjVLQ0J3WVhKaGJWOTJZV3dnS1NBcGUxeHlYRzVjZEZ4MEx5OGdYSFJ3WVhKaGJWOTJZV3dnUFNCS1UwOU9Mbk4wY21sdVoybG1lU2dnY0dGeVlXMWZkbUZzSUNrN1hISmNibHgwWEhRdkx5QjlYSEpjYmx4MFhIUndYMnhwYzNScGJtZGJJSEJoY21GdFgydGxlU0JkSUQwZ2NHRnlZVzFmZG1Gc08xeHlYRzVjZEgwN1hISmNibHh5WEc1Y2RHOWlhaTV6WldGeVkyaGZjMlYwWDNCaGNtRnRjMTloY25JZ1BTQm1kVzVqZEdsdmJpZ2djR0Z5WVcxelgyRnljaUFwZTF4eVhHNWNkRngwWHk1bFlXTm9LQ0J3WVhKaGJYTmZZWEp5TENCbWRXNWpkR2x2YmlBb0lIQmZkbUZzTENCd1gydGxlU3dnY0Y5a1lYUmhJQ2w3WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEx5OGdSR1ZtYVc1bElHUnBabVpsY21WdWRDQlRaV0Z5WTJnZ0lIQmhjbUZ0WlhSbGNuTWdabTl5SUhKbGNYVmxjM1JjY2x4dVhIUmNkRngwZEdocGN5NXpaV0Z5WTJoZmMyVjBYM0JoY21GdEtDQndYMnRsZVN3Z2NGOTJZV3dnS1R0Y2NseHVYSFJjZEgwZ0tUdGNjbHh1WEhSOVhISmNibHh5WEc1Y2NseHVYSFF2THlCUGRHaGxjaUJ3WVhKaGJXVjBaWEp6SUZ4MFhIUmNkQzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFZ4eVhHNWNkSFpoY2lCd1gyOTBhR1Z5SUQwZ2IySnFMbTkwYUdWeVgyOWlhaUE5SUc5aWFpNXZkR2hsY2w5dlltb2dmSHdnZXlCOU8xeHlYRzVjY2x4dVhIUnZZbW91YzJWMFgyOTBhR1Z5WDNCaGNtRnRJRDBnWm5WdVkzUnBiMjRnS0NCd1lYSmhiVjlyWlhrc0lIQmhjbUZ0WDNaaGJDQXBJSHRjY2x4dVhIUmNkSEJmYjNSb1pYSmJJSEJoY21GdFgydGxlU0JkSUQwZ2NHRnlZVzFmZG1Gc08xeHlYRzVjZEgwN1hISmNibHh5WEc1Y2RHOWlhaTVuWlhSZmIzUm9aWEpmY0dGeVlXMGdQU0JtZFc1amRHbHZiaUFvSUhCaGNtRnRYMnRsZVNBcElIdGNjbHh1WEhSY2RISmxkSFZ5YmlCd1gyOTBhR1Z5V3lCd1lYSmhiVjlyWlhrZ1hUdGNjbHh1WEhSOU8xeHlYRzVjY2x4dVhISmNibHgwY21WMGRYSnVJRzlpYWp0Y2NseHVmU2dnZDNCaVkxOWhhbmhmWW05dmEybHVaMTlzYVhOMGFXNW5JSHg4SUh0OUxDQnFVWFZsY25rZ0tTazdYSEpjYmx4eVhHNWNjbHh1THlvcVhISmNiaUFxSUNBZ1FXcGhlQ0FnTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdElDb3ZYSEpjYmx4eVhHNHZLaXBjY2x4dUlDb2dVMlZ1WkNCQmFtRjRJSE5sWVhKamFDQnlaWEYxWlhOMFhISmNiaUFxSUdadmNpQnpaV0Z5WTJocGJtY2djM0JsWTJsbWFXTWdTMlY1ZDI5eVpDQmhibVFnYjNSb1pYSWdjR0Z5WVcxelhISmNiaUFxTDF4eVhHNW1kVzVqZEdsdmJpQjNjR0pqWDJGcWVGOWliMjlyYVc1blgyRnFZWGhmYzJWaGNtTm9YM0psY1hWbGMzUW9LWHRjY2x4dVhISmNibU52Ym5OdmJHVXVaM0p2ZFhCRGIyeHNZWEJ6WldRb0owRktXRjlDVDA5TFNVNUhYMHhKVTFSSlRrY25LVHNnWTI5dWMyOXNaUzVzYjJjb0lDY2dQVDBnUW1WbWIzSmxJRUZxWVhnZ1UyVnVaQ0F0SUhObFlYSmphRjluWlhSZllXeHNYM0JoY21GdGN5Z3BJRDA5SUNjZ0xDQjNjR0pqWDJGcWVGOWliMjlyYVc1blgyeHBjM1JwYm1jdWMyVmhjbU5vWDJkbGRGOWhiR3hmY0dGeVlXMXpLQ2tnS1R0Y2NseHVYSEpjYmx4MGQzQmlZMTlpYjI5cmFXNW5YMnhwYzNScGJtZGZjbVZzYjJGa1gySjFkSFJ2Ymw5ZmMzQnBibDl6ZEdGeWRDZ3BPMXh5WEc1Y2NseHVMeXBjY2x4dUx5OUdhWGhKYmpvZ1ptOXlWbWxrWlc5Y2NseHVhV1lnS0NBaElHbHpYM1JvYVhOZllXTjBhVzl1SUNsN1hISmNibHgwTHk5M2NHSmpYMkZxZUY5aWIyOXJhVzVuWDE5aFkzUjFZV3hmYkdsemRHbHVaMTlmYUdsa1pTZ3BPMXh5WEc1Y2RHcFJkV1Z5ZVNnZ2QzQmlZMTloYW5oZlltOXZhMmx1WjE5c2FYTjBhVzVuTG1kbGRGOXZkR2hsY2w5d1lYSmhiU2dnSjJ4cGMzUnBibWRmWTI5dWRHRnBibVZ5SnlBcElDa3VhSFJ0YkNoY2NseHVYSFJjZENjOFpHbDJJSE4wZVd4bFBWd2lkMmxrZEdnNk1UQXdKVHQwWlhoMExXRnNhV2R1T2lCalpXNTBaWEk3WENJZ2FXUTlYQ0ozY0dKalgyeHZZV1JwYm1kZmMyVmpkR2x2Ymx3aVBqeHpjR0Z1SUdOc1lYTnpQVndpZDNCaVkxOXBZMjVmWVhWMGIzSmxibVYzSUhkd1ltTmZjM0JwYmx3aVBqd3ZjM0JoYmo0OEwyUnBkajRuWEhKY2JseDBYSFFySUdwUmRXVnllU2dnZDNCaVkxOWhhbmhmWW05dmEybHVaMTlzYVhOMGFXNW5MbWRsZEY5dmRHaGxjbDl3WVhKaGJTZ2dKMnhwYzNScGJtZGZZMjl1ZEdGcGJtVnlKeUFwSUNrdWFIUnRiQ2dwWEhKY2JseDBLVHRjY2x4dVhIUnBaaUFvSUNkbWRXNWpkR2x2YmljZ1BUMDlJSFI1Y0dWdlppQW9hbEYxWlhKNUtDQW5JM2R3WW1OZmJHOWhaR2x1WjE5elpXTjBhVzl1SnlBcExuZHdZbU5mYlhsZmJXOWtZV3dwSUNsN1hIUmNkRngwTHk5R2FYaEpiam9nT1M0d0xqRXVOVnh5WEc1Y2RGeDBhbEYxWlhKNUtDQW5JM2R3WW1OZmJHOWhaR2x1WjE5elpXTjBhVzl1SnlBcExuZHdZbU5mYlhsZmJXOWtZV3dvSUNkemFHOTNKeUFwTzF4eVhHNWNkSDBnWld4elpTQjdYSEpjYmx4MFhIUmhiR1Z5ZENnZ0oxZGhjbTVwYm1jaElFSnZiMnRwYm1jZ1EyRnNaVzVrWVhJdUlFbDBjeUJ6WldWdGN5QjBhR0YwSUNCNWIzVWdhR0YyWlNCa1pXRmpkR2wyWVhSbFpDQnNiMkZrYVc1bklHOW1JRUp2YjNSemRISmhjQ0JLVXlCbWFXeGxjeUJoZENCQ2IyOXJhVzVuSUZObGRIUnBibWR6SUVkbGJtVnlZV3dnY0dGblpTQnBiaUJCWkhaaGJtTmxaQ0J6WldOMGFXOXVMaWNnS1Z4eVhHNWNkSDFjY2x4dWZWeHlYRzVwYzE5MGFHbHpYMkZqZEdsdmJpQTlJR1poYkhObE8xeHlYRzRxTDF4eVhHNWNkQzh2SUZOMFlYSjBJRUZxWVhoY2NseHVYSFJxVVhWbGNua3VjRzl6ZENnZ2QzQmlZMTluYkc5aVlXd3hMbmR3WW1OZllXcGhlSFZ5YkN4Y2NseHVYSFJjZEZ4MFhIUjdYSEpjYmx4MFhIUmNkRngwWEhSaFkzUnBiMjRnSUNBZ0lDQWdJQ0FnT2lBblYxQkNRMTlCU2xoZlFrOVBTMGxPUjE5TVNWTlVTVTVISnl4Y2NseHVYSFJjZEZ4MFhIUmNkSGR3WW1OZllXcDRYM1Z6WlhKZmFXUTZJSGR3WW1OZllXcDRYMkp2YjJ0cGJtZGZiR2x6ZEdsdVp5NW5aWFJmYzJWamRYSmxYM0JoY21GdEtDQW5kWE5sY2w5cFpDY2dLU3hjY2x4dVhIUmNkRngwWEhSY2RHNXZibU5sSUNBZ0lDQWdJQ0FnSUNBNklIZHdZbU5mWVdwNFgySnZiMnRwYm1kZmJHbHpkR2x1Wnk1blpYUmZjMlZqZFhKbFgzQmhjbUZ0S0NBbmJtOXVZMlVuSUNrc1hISmNibHgwWEhSY2RGeDBYSFIzY0dKalgyRnFlRjlzYjJOaGJHVWdPaUIzY0dKalgyRnFlRjlpYjI5cmFXNW5YMnhwYzNScGJtY3VaMlYwWDNObFkzVnlaVjl3WVhKaGJTZ2dKMnh2WTJGc1pTY2dLU3hjY2x4dVhISmNibHgwWEhSY2RGeDBYSFJ6WldGeVkyaGZjR0Z5WVcxelhIUTZJSGR3WW1OZllXcDRYMkp2YjJ0cGJtZGZiR2x6ZEdsdVp5NXpaV0Z5WTJoZloyVjBYMkZzYkY5d1lYSmhiWE1vS1Z4eVhHNWNkRngwWEhSY2RIMHNYSEpjYmx4MFhIUmNkRngwTHlvcVhISmNibHgwWEhSY2RGeDBJQ29nVXlCMUlHTWdZeUJsSUhNZ2MxeHlYRzVjZEZ4MFhIUmNkQ0FxWEhKY2JseDBYSFJjZEZ4MElDb2dRSEJoY21GdElISmxjM0J2Ym5ObFgyUmhkR0ZjZEZ4MExWeDBhWFJ6SUc5aWFtVmpkQ0J5WlhSMWNtNWxaQ0JtY205dElDQkJhbUY0SUMwZ1kyeGhjM010YkdsMlpTMXpaV0Z5WTJjdWNHaHdYSEpjYmx4MFhIUmNkRngwSUNvZ1FIQmhjbUZ0SUhSbGVIUlRkR0YwZFhOY2RGeDBMVngwSjNOMVkyTmxjM01uWEhKY2JseDBYSFJjZEZ4MElDb2dRSEJoY21GdElHcHhXRWhTWEhSY2RGeDBYSFF0WEhSUFltcGxZM1JjY2x4dVhIUmNkRngwWEhRZ0tpOWNjbHh1WEhSY2RGeDBYSFJtZFc1amRHbHZiaUFvSUhKbGMzQnZibk5sWDJSaGRHRXNJSFJsZUhSVGRHRjBkWE1zSUdweFdFaFNJQ2tnZTF4eVhHNHZMMFpwZUVsdU9pQm1iM0pXYVdSbGIxeHlYRzR2TDJwUmRXVnllU2dnSnlOM2NHSmpYMnh2WVdScGJtZGZjMlZqZEdsdmJpY2dLUzUzY0dKalgyMTVYMjF2WkdGc0tDQW5hR2xrWlNjZ0tUdGNjbHh1WEhKY2JtTnZibk52YkdVdWJHOW5LQ0FuSUQwOUlGSmxjM0J2Ym5ObElGZFFRa05mUVVwWVgwSlBUMHRKVGtkZlRFbFRWRWxPUnlBOVBTQW5MQ0J5WlhOd2IyNXpaVjlrWVhSaElDazdJR052Ym5OdmJHVXVaM0p2ZFhCRmJtUW9LVHRjY2x4dVhIUmNkRngwWEhSY2RDOHZJRkJ5YjJKaFlteDVJRVZ5Y205eVhISmNibHgwWEhSY2RGeDBYSFJwWmlBb0lDaDBlWEJsYjJZZ2NtVnpjRzl1YzJWZlpHRjBZU0FoUFQwZ0oyOWlhbVZqZENjcElIeDhJQ2h5WlhOd2IyNXpaVjlrWVhSaElEMDlQU0J1ZFd4c0tTQXBlMXh5WEc1Y2RGeDBYSFJjZEZ4MFhIUnFVWFZsY25rb0lDY2pkMmhmYzI5eWRGOXpaV3hsWTNSdmNpY2dLUzVvYVdSbEtDazdYSEpjYmx4MFhIUmNkRngwWEhSY2RHcFJkV1Z5ZVNnZ2QzQmlZMTloYW5oZlltOXZhMmx1WjE5c2FYTjBhVzVuTG1kbGRGOXZkR2hsY2w5d1lYSmhiU2dnSjJ4cGMzUnBibWRmWTI5dWRHRnBibVZ5SnlBcElDa3VhSFJ0YkNoY2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDYzhaR2wySUdOc1lYTnpQVndpZDNCaVl5MXpaWFIwYVc1bmN5MXViM1JwWTJVZ2JtOTBhV05sTFhkaGNtNXBibWRjSWlCemRIbHNaVDFjSW5SbGVIUXRZV3hwWjI0NmJHVm1kRndpUGljZ0sxeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJ5WlhOd2IyNXpaVjlrWVhSaElDdGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkQ2M4TDJScGRqNG5YSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDazdYSEpjYmx4MFhIUmNkRngwWEhSY2RISmxkSFZ5Ymp0Y2NseHVYSFJjZEZ4MFhIUmNkSDFjY2x4dVhISmNibHgwWEhSY2RGeDBYSFF2THlCU1pXeHZZV1FnY0dGblpTd2dZV1owWlhJZ1ptbHNkR1Z5SUhSdmIyeGlZWElnZDJGeklISmxjMlYwWldSY2NseHVYSFJjZEZ4MFhIUmNkR2xtSUNnZ0lDQWdJQ0FnS0NBZ0lDQWdkVzVrWldacGJtVmtJQ0U5SUhKbGMzQnZibk5sWDJSaGRHRmJJQ2RoYW5oZlkyeGxZVzVsWkY5d1lYSmhiWE1uSUYwcFhISmNibHgwWEhSY2RGeDBYSFJjZEZ4MEppWWdLQ0FuY21WelpYUmZaRzl1WlNjZ1BUMDlJSEpsYzNCdmJuTmxYMlJoZEdGYklDZGhhbmhmWTJ4bFlXNWxaRjl3WVhKaGJYTW5JRjFiSUNkMWFWOXlaWE5sZENjZ1hTbGNjbHh1WEhSY2RGeDBYSFJjZENsN1hISmNibHgwWEhSY2RGeDBYSFJjZEd4dlkyRjBhVzl1TG5KbGJHOWhaQ2dwTzF4eVhHNWNkRngwWEhSY2RGeDBYSFJ5WlhSMWNtNDdYSEpjYmx4MFhIUmNkRngwWEhSOVhISmNibHh5WEc1Y2RGeDBYSFJjZEZ4MEx5OGdVMmh2ZHlCc2FYTjBhVzVuWEhKY2JseDBYSFJjZEZ4MFhIUnBaaUFvSUhKbGMzQnZibk5sWDJSaGRHRmJJQ2RoYW5oZlkyOTFiblFuSUYwZ1BpQXdJQ2w3WEhKY2JseHlYRzVjZEZ4MFhIUmNkRngwWEhSM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDNOb2IzZGZiR2x6ZEdsdVp5Z2djbVZ6Y0c5dWMyVmZaR0YwWVZzZ0oyRnFlRjlwZEdWdGN5Y2dYU3dnY21WemNHOXVjMlZmWkdGMFlWc2dKMkZxZUY5elpXRnlZMmhmY0dGeVlXMXpKeUJkTENCeVpYTndiMjV6WlY5a1lYUmhXeUFuWVdwNFgySnZiMnRwYm1kZmNtVnpiM1Z5WTJWekp5QmRJQ2s3WEhKY2JseHlYRzVjZEZ4MFhIUmNkRngwWEhSM2NHSmpYM0JoWjJsdVlYUnBiMjVmWldOb2J5aGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUjNjR0pqWDJGcWVGOWliMjlyYVc1blgyeHBjM1JwYm1jdVoyVjBYMjkwYUdWeVgzQmhjbUZ0S0NBbmNHRm5hVzVoZEdsdmJsOWpiMjUwWVdsdVpYSW5JQ2tzWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwZTF4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MEozQmhaMlZmWVdOMGFYWmxKem9nY21WemNHOXVjMlZmWkdGMFlWc2dKMkZxZUY5elpXRnlZMmhmY0dGeVlXMXpKeUJkV3lBbmNHRm5aVjl1ZFcwbklGMHNYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFFuY0dGblpYTmZZMjkxYm5Rbk9pQk5ZWFJvTG1ObGFXd29JSEpsYzNCdmJuTmxYMlJoZEdGYklDZGhhbmhmWTI5MWJuUW5JRjBnTHlCeVpYTndiMjV6WlY5a1lYUmhXeUFuWVdwNFgzTmxZWEpqYUY5d1lYSmhiWE1uSUYxYklDZHdZV2RsWDJsMFpXMXpYMk52ZFc1MEp5QmRJQ2tzWEhKY2JseHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBKM0JoWjJWZmFYUmxiWE5mWTI5MWJuUW5PaUJ5WlhOd2IyNXpaVjlrWVhSaFd5QW5ZV3A0WDNObFlYSmphRjl3WVhKaGJYTW5JRjFiSUNkd1lXZGxYMmwwWlcxelgyTnZkVzUwSnlCZExGeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBKM052Y25SZmRIbHdaU2NnSUNBZ0lDQWdPaUJ5WlhOd2IyNXpaVjlrWVhSaFd5QW5ZV3A0WDNObFlYSmphRjl3WVhKaGJYTW5JRjFiSUNkemIzSjBYM1I1Y0dVbklGMWNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUjlYSEpjYmx4MFhIUmNkRngwWEhSY2RDazdYSEpjYmx4MFhIUmNkRngwWEhSY2RIZHdZbU5mWVdwNFgySnZiMnRwYm1kZlpHVm1hVzVsWDNWcFgyaHZiMnR6S0NrN1hIUmNkRngwWEhSY2RGeDBMeThnVW1Wa1pXWnBibVVnU0c5dmEzTXNJR0psWTJGMWMyVWdkMlVnYzJodmR5QnVaWGNnUkU5TklHVnNaVzFsYm5SelhISmNibHh5WEc1Y2RGeDBYSFJjZEZ4MGZTQmxiSE5sSUh0Y2NseHVYSEpjYmx4MFhIUmNkRngwWEhSY2RIZHdZbU5mWVdwNFgySnZiMnRwYm1kZlgyRmpkSFZoYkY5c2FYTjBhVzVuWDE5b2FXUmxLQ2s3WEhKY2JseDBYSFJjZEZ4MFhIUmNkR3BSZFdWeWVTZ2dkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOXNhWE4wYVc1bkxtZGxkRjl2ZEdobGNsOXdZWEpoYlNnZ0oyeHBjM1JwYm1kZlkyOXVkR0ZwYm1WeUp5QXBJQ2t1YUhSdGJDaGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDYzhaR2wySUdOc1lYTnpQVndpZDNCaVl5MXpaWFIwYVc1bmN5MXViM1JwWTJVd0lHNXZkR2xqWlMxM1lYSnVhVzVuTUZ3aUlITjBlV3hsUFZ3aWRHVjRkQzFoYkdsbmJqcGpaVzUwWlhJN2JXRnlaMmx1TFd4bFpuUTZMVFV3Y0hnN1hDSStKeUFyWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENjOGMzUnliMjVuUGljZ0t5QW5UbThnY21WemRXeDBjeUJtYjNWdVpDQm1iM0lnWTNWeWNtVnVkQ0JtYVd4MFpYSWdiM0IwYVc5dWN5NHVMaWNnS3lBblBDOXpkSEp2Ym1jK0p5QXJYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkQzh2Snp4emRISnZibWMrSnlBcklDZE9ieUJ5WlhOMWJIUnpJR1p2ZFc1a0xpNHVKeUFySUNjOEwzTjBjbTl1Wno0bklDdGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDYzhMMlJwZGo0blhISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkQ2s3WEhKY2JseDBYSFJjZEZ4MFhIUjlYSEpjYmx4eVhHNWNkRngwWEhSY2RGeDBMeThnVlhCa1lYUmxJRzVsZHlCaWIyOXJhVzVuSUdOdmRXNTBYSEpjYmx4MFhIUmNkRngwWEhScFppQW9JSFZ1WkdWbWFXNWxaQ0FoUFQwZ2NtVnpjRzl1YzJWZlpHRjBZVnNnSjJGcWVGOXVaWGRmWW05dmEybHVaM05mWTI5MWJuUW5JRjBnS1h0Y2NseHVYSFJjZEZ4MFhIUmNkRngwZG1GeUlHRnFlRjl1WlhkZlltOXZhMmx1WjNOZlkyOTFiblFnUFNCd1lYSnpaVWx1ZENnZ2NtVnpjRzl1YzJWZlpHRjBZVnNnSjJGcWVGOXVaWGRmWW05dmEybHVaM05mWTI5MWJuUW5JRjBnS1Z4eVhHNWNkRngwWEhSY2RGeDBYSFJwWmlBb1lXcDRYMjVsZDE5aWIyOXJhVzVuYzE5amIzVnVkRDR3S1h0Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhScVVYVmxjbmtvSUNjdWQzQmlZMTlpWVdSblpWOWpiM1Z1ZENjZ0tTNXphRzkzS0NrN1hISmNibHgwWEhSY2RGeDBYSFJjZEgxY2NseHVYSFJjZEZ4MFhIUmNkRngwYWxGMVpYSjVLQ0FuTG1KckxYVndaR0YwWlMxamIzVnVkQ2NnS1M1b2RHMXNLQ0JoYW5oZmJtVjNYMkp2YjJ0cGJtZHpYMk52ZFc1MElDazdYSEpjYmx4MFhIUmNkRngwWEhSOVhISmNibHh5WEc1Y2RGeDBYSFJjZEZ4MGQzQmlZMTlpYjI5cmFXNW5YMnhwYzNScGJtZGZjbVZzYjJGa1gySjFkSFJ2Ymw5ZmMzQnBibDl3WVhWelpTZ3BPMXh5WEc1Y2NseHVYSFJjZEZ4MFhIUmNkR3BSZFdWeWVTZ2dKeU5oYW1GNFgzSmxjM0J2Ym1RbklDa3VhSFJ0YkNnZ2NtVnpjRzl1YzJWZlpHRjBZU0FwTzF4MFhIUXZMeUJHYjNJZ1lXSnBiR2wwZVNCMGJ5QnphRzkzSUhKbGMzQnZibk5sTENCaFpHUWdjM1ZqYUNCRVNWWWdaV3hsYldWdWRDQjBieUJ3WVdkbFhISmNibHgwWEhSY2RGeDBmVnh5WEc1Y2RGeDBYSFFnSUNrdVptRnBiQ2dnWm5WdVkzUnBiMjRnS0NCcWNWaElVaXdnZEdWNGRGTjBZWFIxY3l3Z1pYSnliM0pVYUhKdmQyNGdLU0I3SUNBZ0lHbG1JQ2dnZDJsdVpHOTNMbU52Ym5OdmJHVWdKaVlnZDJsdVpHOTNMbU52Ym5OdmJHVXViRzluSUNsN0lHTnZibk52YkdVdWJHOW5LQ0FuUVdwaGVGOUZjbkp2Y2ljc0lHcHhXRWhTTENCMFpYaDBVM1JoZEhWekxDQmxjbkp2Y2xSb2NtOTNiaUFwT3lCOVhISmNibHgwWEhSY2RGeDBYSFJxVVhWbGNua29JQ2NqZDJoZmMyOXlkRjl6Wld4bFkzUnZjaWNnS1M1b2FXUmxLQ2s3WEhKY2JseDBYSFJjZEZ4MFhIUjJZWElnWlhKeWIzSmZiV1Z6YzJGblpTQTlJQ2M4YzNSeWIyNW5QaWNnS3lBblJYSnliM0loSnlBcklDYzhMM04wY205dVp6NGdKeUFySUdWeWNtOXlWR2h5YjNkdUlEdGNjbHh1WEhSY2RGeDBYSFJjZEdsbUlDZ2dhbkZZU0ZJdWNtVnpjRzl1YzJWVVpYaDBJQ2w3WEhKY2JseDBYSFJjZEZ4MFhIUmNkR1Z5Y205eVgyMWxjM05oWjJVZ0t6MGdhbkZZU0ZJdWNtVnpjRzl1YzJWVVpYaDBPMXh5WEc1Y2RGeDBYSFJjZEZ4MGZWeHlYRzVjZEZ4MFhIUmNkRngwWlhKeWIzSmZiV1Z6YzJGblpTQTlJR1Z5Y205eVgyMWxjM05oWjJVdWNtVndiR0ZqWlNnZ0wxeGNiaTluTENCY0lqeGljaUF2UGx3aUlDazdYSEpjYmx4eVhHNWNkRngwWEhSY2RGeDBkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOXphRzkzWDIxbGMzTmhaMlVvSUdWeWNtOXlYMjFsYzNOaFoyVWdLVHRjY2x4dVhIUmNkRngwSUNCOUtWeHlYRzVjZENBZ0lDQWdJQ0FnSUNBdkx5QXVaRzl1WlNnZ0lDQm1kVzVqZEdsdmJpQW9JR1JoZEdFc0lIUmxlSFJUZEdGMGRYTXNJR3B4V0VoU0lDa2dleUFnSUdsbUlDZ2dkMmx1Wkc5M0xtTnZibk52YkdVZ0ppWWdkMmx1Wkc5M0xtTnZibk52YkdVdWJHOW5JQ2w3SUdOdmJuTnZiR1V1Ykc5bktDQW5jMlZqYjI1a0lITjFZMk5sYzNNbkxDQmtZWFJoTENCMFpYaDBVM1JoZEhWekxDQnFjVmhJVWlBcE95QjlJQ0FnSUgwcFhISmNibHgwWEhSY2RDQWdMeThnTG1Gc2QyRjVjeWdnWm5WdVkzUnBiMjRnS0NCa1lYUmhYMnB4V0VoU0xDQjBaWGgwVTNSaGRIVnpMQ0JxY1ZoSVVsOWxjbkp2Y2xSb2NtOTNiaUFwSUhzZ0lDQnBaaUFvSUhkcGJtUnZkeTVqYjI1emIyeGxJQ1ltSUhkcGJtUnZkeTVqYjI1emIyeGxMbXh2WnlBcGV5QmpiMjV6YjJ4bExteHZaeWdnSjJGc2QyRjVjeUJtYVc1cGMyaGxaQ2NzSUdSaGRHRmZhbkZZU0ZJc0lIUmxlSFJUZEdGMGRYTXNJR3B4V0VoU1gyVnljbTl5VkdoeWIzZHVJQ2s3SUgwZ0lDQWdJSDBwWEhKY2JseDBYSFJjZENBZ095QWdMeThnUlc1a0lFRnFZWGhjY2x4dWZWeHlYRzVjY2x4dVhISmNiaThxS2x4eVhHNGdLaUFnSUZacFpYZHpJQ0F0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFNBcUwxeHlYRzVjY2x4dUx5b3FYSEpjYmlBcUlGTm9iM2NnVEdsemRHbHVaeUJVWVdKc1pTQmNkRngwWVc1a0lHUmxabWx1WlNCblRXRnBiQ0JqYUdWamEySnZlQ0JvYjI5cmMxeHlYRzRnS2x4eVhHNGdLaUJBY0dGeVlXMGdhbk52Ymw5cGRHVnRjMTloY25KY2RGeDBMU0JLVTA5T0lHOWlhbVZqZENCM2FYUm9JRWwwWlcxelhISmNiaUFxSUVCd1lYSmhiU0JxYzI5dVgzTmxZWEpqYUY5d1lYSmhiWE5jZEMwZ1NsTlBUaUJ2WW1wbFkzUWdkMmwwYUNCVFpXRnlZMmhjY2x4dUlDb3ZYSEpjYm1aMWJtTjBhVzl1SUhkd1ltTmZZV3A0WDJKdmIydHBibWRmYzJodmQxOXNhWE4wYVc1bktDQnFjMjl1WDJsMFpXMXpYMkZ5Y2l3Z2FuTnZibDl6WldGeVkyaGZjR0Z5WVcxekxDQnFjMjl1WDJKdmIydHBibWRmY21WemIzVnlZMlZ6SUNsN1hISmNibHh5WEc1Y2RIZHdZbU5mWVdwNFgyUmxabWx1WlY5MFpXMXdiR0YwWlhOZlgzSmxjMjkxY21ObFgyMWhibWx3ZFd4aGRHbHZiaWdnYW5OdmJsOXBkR1Z0YzE5aGNuSXNJR3B6YjI1ZmMyVmhjbU5vWDNCaGNtRnRjeXdnYW5OdmJsOWliMjlyYVc1blgzSmxjMjkxY21ObGN5QXBPMXh5WEc1Y2NseHVMeTlqYjI1emIyeGxMbXh2WnlnZ0oycHpiMjVmYVhSbGJYTmZZWEp5SnlBc0lHcHpiMjVmYVhSbGJYTmZZWEp5TENCcWMyOXVYM05sWVhKamFGOXdZWEpoYlhNZ0tUdGNjbHh1WEhScVVYVmxjbmtvSUNjamQyaGZjMjl5ZEY5elpXeGxZM1J2Y2ljZ0tTNWpjM01vSUZ3aVpHbHpjR3hoZVZ3aUxDQmNJbVpzWlhoY0lpQXBPMXh5WEc1Y2RIWmhjaUJzYVhOMFgyaGxZV1JsY2w5MGNHd2dQU0IzY0M1MFpXMXdiR0YwWlNnZ0ozZHdZbU5mWVdwNFgySnZiMnRwYm1kZmJHbHpkRjlvWldGa1pYSW5JQ2s3WEhKY2JseDBkbUZ5SUd4cGMzUmZjbTkzWDNSd2JDQWdJQ0E5SUhkd0xuUmxiWEJzWVhSbEtDQW5kM0JpWTE5aGFuaGZZbTl2YTJsdVoxOXNhWE4wWDNKdmR5Y2dLVHRjY2x4dVhISmNibHh5WEc1Y2RDOHZJRWhsWVdSbGNseHlYRzVjZEdwUmRXVnllU2dnZDNCaVkxOWhhbmhmWW05dmEybHVaMTlzYVhOMGFXNW5MbWRsZEY5dmRHaGxjbDl3WVhKaGJTZ2dKMnhwYzNScGJtZGZZMjl1ZEdGcGJtVnlKeUFwSUNrdWFIUnRiQ2dnYkdsemRGOW9aV0ZrWlhKZmRIQnNLQ2tnS1R0Y2NseHVYSEpjYmx4MEx5OGdRbTlrZVZ4eVhHNWNkR3BSZFdWeWVTZ2dkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOXNhWE4wYVc1bkxtZGxkRjl2ZEdobGNsOXdZWEpoYlNnZ0oyeHBjM1JwYm1kZlkyOXVkR0ZwYm1WeUp5QXBJQ2t1WVhCd1pXNWtLQ0FuUEdScGRpQmpiR0Z6Y3oxY0luZHdZbU5mYzJWc1pXTjBZV0pzWlY5aWIyUjVYQ0krUEM5a2FYWStKeUFwTzF4eVhHNWNjbHh1WEhRdkx5QlNJRzhnZHlCelhISmNibU52Ym5OdmJHVXVaM0p2ZFhCRGIyeHNZWEJ6WldRb0lDZE1TVk5VU1U1SFgxSlBWMU1uSUNrN1hIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkQzh2SUV4SlUxUkpUa2RmVWs5WFUxeHlYRzVjZEY4dVpXRmphQ2dnYW5OdmJsOXBkR1Z0YzE5aGNuSXNJR1oxYm1OMGFXOXVJQ2dnY0Y5MllXd3NJSEJmYTJWNUxDQndYMlJoZEdFZ0tYdGNjbHh1WEhSY2RHbG1JQ2dnSjNWdVpHVm1hVzVsWkNjZ0lUMDlJSFI1Y0dWdlppQnFjMjl1WDNObFlYSmphRjl3WVhKaGJYTmJJQ2RyWlhsM2IzSmtKeUJkSUNsN1hIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhRdkx5QlFZWEpoYldWMFpYSWdabTl5SUcxaGNtdHBibWNnYTJWNWQyOXlaQ0IzYVhSb0lHUnBabVpsY21WdWRDQmpiMnh2Y2lCcGJpQmhJR3hwYzNSY2NseHVYSFJjZEZ4MGNGOTJZV3hiSUNkZlgzTmxZWEpqYUY5eVpYRjFaWE4wWDJ0bGVYZHZjbVJmWHljZ1hTQTlJR3B6YjI1ZmMyVmhjbU5vWDNCaGNtRnRjMXNnSjJ0bGVYZHZjbVFuSUYwN1hISmNibHgwWEhSOUlHVnNjMlVnZTF4eVhHNWNkRngwWEhSd1gzWmhiRnNnSjE5ZmMyVmhjbU5vWDNKbGNYVmxjM1JmYTJWNWQyOXlaRjlmSnlCZElEMGdKeWM3WEhKY2JseDBYSFI5WEhKY2JseDBYSFJ3WDNaaGJGc2dKMkp2YjJ0cGJtZGZjbVZ6YjNWeVkyVnpKeUJkSUQwZ2FuTnZibDlpYjI5cmFXNW5YM0psYzI5MWNtTmxjenRjY2x4dVhIUmNkR3BSZFdWeWVTZ2dkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOXNhWE4wYVc1bkxtZGxkRjl2ZEdobGNsOXdZWEpoYlNnZ0oyeHBjM1JwYm1kZlkyOXVkR0ZwYm1WeUp5QXBJQ3NnSnlBdWQzQmlZMTl6Wld4bFkzUmhZbXhsWDJKdlpIa25JQ2t1WVhCd1pXNWtLQ0JzYVhOMFgzSnZkMTkwY0d3b0lIQmZkbUZzSUNrZ0tUdGNjbHh1WEhSOUlDazdYSEpjYm1OdmJuTnZiR1V1WjNKdmRYQkZibVFvS1RzZ1hIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFF2THlCTVNWTlVTVTVIWDFKUFYxTmNjbHh1WEhKY2JseDBkM0JpWTE5a1pXWnBibVZmWjIxaGFXeGZZMmhsWTJ0aWIzaGZjMlZzWldOMGFXOXVLQ0JxVVhWbGNua2dLVHRjZEZ4MFhIUmNkRngwWEhRdkx5QlNaV1JsWm1sdVpTQkliMjlyY3lCbWIzSWdZMnhwWTJ0cGJtY2dZWFFnUTJobFkydGliM2hsYzF4eVhHNTlYSEpjYmx4eVhHNWNjbHh1WEhRdktpcGNjbHh1WEhRZ0tpQkVaV1pwYm1VZ2RHVnRjR3hoZEdVZ1ptOXlJR05vWVc1bmFXNW5JR0p2YjJ0cGJtY2djbVZ6YjNWeVkyVnpJQ1lnSUhWd1pHRjBaU0JwZENCbFlXTm9JSFJwYldVc0lDQjNhR1Z1SUNCc2FYTjBhVzVuSUhWd1pHRjBhVzVuTENCMWMyVm1kV3dnSUdadmNpQnphRzkzYVc1bklHRmpkSFZoYkNBZ1ltOXZhMmx1WnlCeVpYTnZkWEpqWlhNdVhISmNibHgwSUNwY2NseHVYSFFnS2lCQWNHRnlZVzBnYW5OdmJsOXBkR1Z0YzE5aGNuSmNkRngwTFNCS1UwOU9JRzlpYW1WamRDQjNhWFJvSUVsMFpXMXpYSEpjYmx4MElDb2dRSEJoY21GdElHcHpiMjVmYzJWaGNtTm9YM0JoY21GdGMxeDBMU0JLVTA5T0lHOWlhbVZqZENCM2FYUm9JRk5sWVhKamFGeHlYRzVjZENBcUlFQndZWEpoYlNCcWMyOXVYMkp2YjJ0cGJtZGZjbVZ6YjNWeVkyVnpYSFF0SUVwVFQwNGdiMkpxWldOMElIZHBkR2dnVW1WemIzVnlZMlZ6WEhKY2JseDBJQ292WEhKY2JseDBablZ1WTNScGIyNGdkM0JpWTE5aGFuaGZaR1ZtYVc1bFgzUmxiWEJzWVhSbGMxOWZjbVZ6YjNWeVkyVmZiV0Z1YVhCMWJHRjBhVzl1S0NCcWMyOXVYMmwwWlcxelgyRnljaXdnYW5OdmJsOXpaV0Z5WTJoZmNHRnlZVzF6TENCcWMyOXVYMkp2YjJ0cGJtZGZjbVZ6YjNWeVkyVnpJQ2w3WEhKY2JseHlYRzVjZEZ4MEx5OGdRMmhoYm1kbElHSnZiMnRwYm1jZ2NtVnpiM1Z5WTJWY2NseHVYSFJjZEhaaGNpQmphR0Z1WjJWZlltOXZhMmx1WjE5eVpYTnZkWEpqWlY5MGNHd2dQU0IzY0M1MFpXMXdiR0YwWlNnZ0ozZHdZbU5mWVdwNFgyTm9ZVzVuWlY5aWIyOXJhVzVuWDNKbGMyOTFjbU5sSnlBcE8xeHlYRzVjY2x4dVhIUmNkR3BSZFdWeWVTZ2dKeU4zY0dKalgyaHBaR1JsYmw5MFpXMXdiR0YwWlY5ZlkyaGhibWRsWDJKdmIydHBibWRmY21WemIzVnlZMlVuSUNrdWFIUnRiQ2hjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmphR0Z1WjJWZlltOXZhMmx1WjE5eVpYTnZkWEpqWlY5MGNHd29JSHRjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDZGhhbmhmYzJWaGNtTm9YM0JoY21GdGN5Y2dJQ0FnT2lCcWMyOXVYM05sWVhKamFGOXdZWEpoYlhNc1hISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFFuWVdwNFgySnZiMnRwYm1kZmNtVnpiM1Z5WTJWekp6b2dhbk52Ymw5aWIyOXJhVzVuWDNKbGMyOTFjbU5sYzF4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkSDBnS1Z4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEtUdGNjbHh1WEhKY2JseDBYSFF2THlCRWRYQnNhV05oZEdVZ1ltOXZhMmx1WnlCeVpYTnZkWEpqWlZ4eVhHNWNkRngwZG1GeUlHUjFjR3hwWTJGMFpWOWliMjlyYVc1blgzUnZYMjkwYUdWeVgzSmxjMjkxY21ObFgzUndiQ0E5SUhkd0xuUmxiWEJzWVhSbEtDQW5kM0JpWTE5aGFuaGZaSFZ3YkdsallYUmxYMkp2YjJ0cGJtZGZkRzlmYjNSb1pYSmZjbVZ6YjNWeVkyVW5JQ2s3WEhKY2JseHlYRzVjZEZ4MGFsRjFaWEo1S0NBbkkzZHdZbU5mYUdsa1pHVnVYM1JsYlhCc1lYUmxYMTlrZFhCc2FXTmhkR1ZmWW05dmEybHVaMTkwYjE5dmRHaGxjbDl5WlhOdmRYSmpaU2NnS1M1b2RHMXNLRnh5WEc1Y2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RHUjFjR3hwWTJGMFpWOWliMjlyYVc1blgzUnZYMjkwYUdWeVgzSmxjMjkxY21ObFgzUndiQ2dnZTF4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBKMkZxZUY5elpXRnlZMmhmY0dGeVlXMXpKeUFnSUNBNklHcHpiMjVmYzJWaGNtTm9YM0JoY21GdGN5eGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENkaGFuaGZZbTl2YTJsdVoxOXlaWE52ZFhKalpYTW5PaUJxYzI5dVgySnZiMnRwYm1kZmNtVnpiM1Z5WTJWelhISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwZlNBcFhISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUXBPMXh5WEc1Y2RIMWNjbHh1WEhKY2JseHlYRzR2S2lwY2NseHVJQ29nVTJodmR5QnFkWE4wSUcxbGMzTmhaMlVnYVc1emRHVmhaQ0J2WmlCc2FYTjBhVzVuSUdGdVpDQm9hV1JsSUhCaFoybHVZWFJwYjI1Y2NseHVJQ292WEhKY2JtWjFibU4wYVc5dUlIZHdZbU5mWVdwNFgySnZiMnRwYm1kZmMyaHZkMTl0WlhOellXZGxLQ0J0WlhOellXZGxJQ2w3WEhKY2JseHlYRzVjZEhkd1ltTmZZV3A0WDJKdmIydHBibWRmWDJGamRIVmhiRjlzYVhOMGFXNW5YMTlvYVdSbEtDazdYSEpjYmx4eVhHNWNkR3BSZFdWeWVTZ2dkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOXNhWE4wYVc1bkxtZGxkRjl2ZEdobGNsOXdZWEpoYlNnZ0oyeHBjM1JwYm1kZlkyOXVkR0ZwYm1WeUp5QXBJQ2t1YUhSdGJDaGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBKenhrYVhZZ1kyeGhjM005WENKM2NHSmpMWE5sZEhScGJtZHpMVzV2ZEdsalpTQnViM1JwWTJVdGQyRnlibWx1WjF3aUlITjBlV3hsUFZ3aWRHVjRkQzFoYkdsbmJqcHNaV1owWENJK0p5QXJYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwYldWemMyRm5aU0FyWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENjOEwyUnBkajRuWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBLVHRjY2x4dWZWeHlYRzVjY2x4dVhISmNiaThxS2x4eVhHNGdLaUFnSUVnZ2J5QnZJR3NnY3lBZ0xTQWdhWFJ6SUVGamRHbHZiaTlVYVcxbGN5QjNhR1Z1SUc1bFpXUWdkRzhnY21VdFVtVnVaR1Z5SUZacFpYZHpJQ0F0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFNBcUwxeHlYRzVjY2x4dUx5b3FYSEpjYmlBcUlGTmxibVFnUVdwaGVDQlRaV0Z5WTJnZ1VtVnhkV1Z6ZENCaFpuUmxjaUJWY0dSaGRHbHVaeUJ6WldGeVkyZ2djbVZ4ZFdWemRDQndZWEpoYldWMFpYSnpYSEpjYmlBcVhISmNiaUFxSUVCd1lYSmhiU0J3WVhKaGJYTmZZWEp5WEhKY2JpQXFMMXh5WEc1bWRXNWpkR2x2YmlCM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDNObGJtUmZjMlZoY21Ob1gzSmxjWFZsYzNSZmQybDBhRjl3WVhKaGJYTWdLQ0J3WVhKaGJYTmZZWEp5SUNsN1hISmNibHh5WEc1Y2RDOHZJRVJsWm1sdVpTQmthV1ptWlhKbGJuUWdVMlZoY21Ob0lDQndZWEpoYldWMFpYSnpJR1p2Y2lCeVpYRjFaWE4wWEhKY2JseDBYeTVsWVdOb0tDQndZWEpoYlhOZllYSnlMQ0JtZFc1amRHbHZiaUFvSUhCZmRtRnNMQ0J3WDJ0bGVTd2djRjlrWVhSaElDa2dlMXh5WEc1Y2RGeDBMeTlqYjI1emIyeGxMbXh2WnlnZ0oxSmxjWFZsYzNRZ1ptOXlPaUFuTENCd1gydGxlU3dnY0Y5MllXd2dLVHRjY2x4dVhIUmNkSGR3WW1OZllXcDRYMkp2YjJ0cGJtZGZiR2x6ZEdsdVp5NXpaV0Z5WTJoZmMyVjBYM0JoY21GdEtDQndYMnRsZVN3Z2NGOTJZV3dnS1R0Y2NseHVYSFI5S1R0Y2NseHVYSEpjYmx4MEx5OGdVMlZ1WkNCQmFtRjRJRkpsY1hWbGMzUmNjbHh1WEhSM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDJGcVlYaGZjMlZoY21Ob1gzSmxjWFZsYzNRb0tUdGNjbHh1ZlZ4eVhHNWNjbHh1THlvcVhISmNiaUFxSUZObFlYSmphQ0J5WlhGMVpYTjBJR1p2Y2lCY0lsQmhaMlVnVG5WdFltVnlYQ0pjY2x4dUlDb2dRSEJoY21GdElIQmhaMlZmYm5WdFltVnlYSFJwYm5SY2NseHVJQ292WEhKY2JtWjFibU4wYVc5dUlIZHdZbU5mWVdwNFgySnZiMnRwYm1kZmNHRm5hVzVoZEdsdmJsOWpiR2xqYXlnZ2NHRm5aVjl1ZFcxaVpYSWdLWHRjY2x4dVhISmNibHgwZDNCaVkxOWhhbmhmWW05dmEybHVaMTl6Wlc1a1gzTmxZWEpqYUY5eVpYRjFaWE4wWDNkcGRHaGZjR0Z5WVcxektDQjdYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEozQmhaMlZmYm5WdEp6b2djR0ZuWlY5dWRXMWlaWEpjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MGZTQXBPMXh5WEc1OVhISmNibHh5WEc1Y2NseHVMeW9xWEhKY2JpQXFJQ0FnUzJWNWQyOXlaQ0JUWldGeVkyaHBibWNnSUMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0SUNvdlhISmNibHh5WEc0dktpcGNjbHh1SUNvZ1UyVmhjbU5vSUhKbGNYVmxjM1FnWm05eUlGd2lTMlY1ZDI5eVpGd2lMQ0JoYkhOdklITmxkQ0JqZFhKeVpXNTBJSEJoWjJVZ2RHOGdJREZjY2x4dUlDcGNjbHh1SUNvZ1FIQmhjbUZ0SUdWc1pXMWxiblJmYVdSY2RDMWNkRWhVVFV3Z1NVUWdJRzltSUdWc1pXMWxiblFzSUNCM2FHVnlaU0IzWVhNZ1pXNTBaWEpsWkNCclpYbDNiM0prWEhKY2JpQXFMMXh5WEc1bWRXNWpkR2x2YmlCM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDNObGJtUmZjMlZoY21Ob1gzSmxjWFZsYzNSZlptOXlYMnRsZVhkdmNtUW9JR1ZzWlcxbGJuUmZhV1FnS1NCN1hISmNibHh5WEc1Y2RDOHZJRmRsSUc1bFpXUWdkRzhnVW1WelpYUWdjR0ZuWlY5dWRXMGdkRzhnTVNCM2FYUm9JR1ZoWTJnZ2JtVjNJSE5sWVhKamFDd2dZbVZqWVhWelpTQjNaU0JqWVc0Z1ltVWdZWFFnY0dGblpTQWpOQ3dnSUdKMWRDQmhablJsY2lBZ2JtVjNJSE5sWVhKamFDQWdkMlVnWTJGdUlDQm9ZWFpsSUhSdmRHRnNiSGtnSUc5dWJIa2dJREVnY0dGblpWeHlYRzVjZEhkd1ltTmZZV3A0WDJKdmIydHBibWRmYzJWdVpGOXpaV0Z5WTJoZmNtVnhkV1Z6ZEY5M2FYUm9YM0JoY21GdGN5Z2dlMXh5WEc1Y2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBKMnRsZVhkdmNtUW5JQ0E2SUdwUmRXVnllU2dnWld4bGJXVnVkRjlwWkNBcExuWmhiQ2dwTEZ4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwSjNCaFoyVmZiblZ0SnpvZ01WeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEgwZ0tUdGNjbHh1ZlZ4eVhHNWNjbHh1WEhRdktpcGNjbHh1WEhRZ0tpQlRaVzVrSUhObFlYSmphQ0J5WlhGMVpYTjBJR0ZtZEdWeUlHWmxkeUJ6WldOdmJtUnpJQ2gxYzNWaGJHeDVJR0ZtZEdWeUlERXNOU0J6WldNcFhISmNibHgwSUNvZ1EyeHZjM1Z5WlNCbWRXNWpkR2x2Ymk0Z1NYUnpJSFZ6WldaMWJDd2dJR1p2Y2lCa2J5QWdibTkwSUhObGJtUWdkRzl2SUcxaGJua2dRV3BoZUNCeVpYRjFaWE4wY3l3Z2QyaGxiaUJ6YjIxbGIyNWxJRzFoYTJVZ1ptRnpkQ0IwZVhCcGJtY3VYSEpjYmx4MElDb3ZYSEpjYmx4MGRtRnlJSGR3WW1OZllXcDRYMkp2YjJ0cGJtZGZjMlZoY21Ob2FXNW5YMkZtZEdWeVgyWmxkMTl6WldOdmJtUnpJRDBnWm5WdVkzUnBiMjRnS0NsN1hISmNibHh5WEc1Y2RGeDBkbUZ5SUdOc2IzTmxaRjkwYVcxbGNpQTlJREE3WEhKY2JseHlYRzVjZEZ4MGNtVjBkWEp1SUdaMWJtTjBhVzl1SUNnZ1pXeGxiV1Z1ZEY5cFpDd2dkR2x0WlhKZlpHVnNZWGtnS1h0Y2NseHVYSEpjYmx4MFhIUmNkQzh2SUVkbGRDQmtaV1poZFd4MElIWmhiSFZsSUc5bUlGd2lkR2x0WlhKZlpHVnNZWGxjSWl3Z0lHbG1JSEJoY21GdFpYUmxjaUIzWVhNZ2JtOTBJSEJoYzNObFpDQnBiblJ2SUhSb1pTQm1kVzVqZEdsdmJpNWNjbHh1WEhSY2RGeDBkR2x0WlhKZlpHVnNZWGtnUFNCMGVYQmxiMllnZEdsdFpYSmZaR1ZzWVhrZ0lUMDlJQ2QxYm1SbFptbHVaV1FuSUQ4Z2RHbHRaWEpmWkdWc1lYa2dPaUF4TlRBd08xeHlYRzVjY2x4dVhIUmNkRngwWTJ4bFlYSlVhVzFsYjNWMEtDQmpiRzl6WldSZmRHbHRaWElnS1R0Y2RGeDBMeThnUTJ4bFlYSWdjSEpsZG1sdmRYTWdkR2x0WlhKY2NseHVYSEpjYmx4MFhIUmNkQzh2SUZOMFlYSjBJRzVsZHlCVWFXMWxjbHh5WEc1Y2RGeDBYSFJqYkc5elpXUmZkR2x0WlhJZ1BTQnpaWFJVYVcxbGIzVjBLQ0IzY0dKalgyRnFlRjlpYjI5cmFXNW5YM05sYm1SZmMyVmhjbU5vWDNKbGNYVmxjM1JmWm05eVgydGxlWGR2Y21RdVltbHVaQ2dnSUc1MWJHd3NJR1ZzWlcxbGJuUmZhV1FnS1N3Z2RHbHRaWEpmWkdWc1lYa2dLVHRjY2x4dVhIUmNkSDFjY2x4dVhIUjlLQ2s3WEhKY2JseHlYRzVjY2x4dUx5b3FYSEpjYmlBcUlDQWdSR1ZtYVc1bElFUjVibUZ0YVdNZ1NHOXZhM01nSUNoc2FXdGxJSEJoWjJsdVlYUnBiMjRnWTJ4cFkyc3NJSGRvYVdOb0lISmxibVYzSUdWaFkyZ2dkR2x0WlNCM2FYUm9JRzVsZHlCc2FYTjBhVzVuSUhOb2IzZHBibWNwSUNBdExTMHRMUzB0TFMwdExTMHRJQ292WEhKY2JseHlYRzR2S2lwY2NseHVJQ29nUkdWbWFXNWxJRWhVVFV3Z2RXa2dTRzl2YTNNNklHOXVJRXRsZVZWd0lId2dRMmhoYm1kbElId2dMVDRnVTI5eWRDQlBjbVJsY2lBbUlFNTFiV0psY2lCSmRHVnRjeUF2SUZCaFoyVmNjbHh1SUNvZ1YyVWdZWEpsSUdoamJtRm5aV1FnYVhRZ1pXRmphQ0FnZEdsdFpTd2dkMmhsYmlCemFHOTNhVzVuSUc1bGR5QnNhWE4wYVc1bkxDQmlaV05oZFhObElFUlBUU0JsYkdWdFpXNTBjeUJqYUc1aFoyVmtYSEpjYmlBcUwxeHlYRzVtZFc1amRHbHZiaUIzY0dKalgyRnFlRjlpYjI5cmFXNW5YMlJsWm1sdVpWOTFhVjlvYjI5cmN5Z3BlMXh5WEc1Y2NseHVYSFJwWmlBb0lDZG1kVzVqZEdsdmJpY2dQVDA5SUhSNWNHVnZaaWdnZDNCaVkxOWtaV1pwYm1WZmRHbHdjSGxmZEc5dmJIUnBjSE1nS1NBcElIdGNjbHh1WEhSY2RIZHdZbU5mWkdWbWFXNWxYM1JwY0hCNVgzUnZiMngwYVhCektDQW5MbmR3WW1OZmJHbHpkR2x1WjE5amIyNTBZV2x1WlhJZ0p5QXBPMXh5WEc1Y2RIMWNjbHh1WEhKY2JseDBkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOWZkV2xmWkdWbWFXNWxYMTlzYjJOaGJHVW9LVHRjY2x4dVhIUjNjR0pqWDJGcWVGOWliMjlyYVc1blgxOTFhVjlrWldacGJtVmZYM0psYldGeWF5Z3BPMXh5WEc1Y2NseHVYSFF2THlCSmRHVnRjeUJRWlhJZ1VHRm5aVnh5WEc1Y2RHcFJkV1Z5ZVNnZ0p5NTNjR0pqWDJsMFpXMXpYM0JsY2w5d1lXZGxKeUFwTG05dUtDQW5ZMmhoYm1kbEp5d2dablZ1WTNScGIyNG9JR1YyWlc1MElDbDdYSEpjYmx4eVhHNWNkRngwZDNCaVkxOWhhbmhmWW05dmEybHVaMTl6Wlc1a1gzTmxZWEpqYUY5eVpYRjFaWE4wWDNkcGRHaGZjR0Z5WVcxektDQjdYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUW5jR0ZuWlY5cGRHVnRjMTlqYjNWdWRDY2dJRG9nYWxGMVpYSjVLQ0IwYUdseklDa3VkbUZzS0Nrc1hISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhRbmNHRm5aVjl1ZFcwbk9pQXhYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MGZTQXBPMXh5WEc1Y2RIMGdLVHRjY2x4dVhISmNibHgwTHk4Z1UyOXlkR2x1WjF4eVhHNWNkR3BSZFdWeWVTZ2dKeTUzY0dKalgybDBaVzF6WDNOdmNuUmZkSGx3WlNjZ0tTNXZiaWdnSjJOb1lXNW5aU2NzSUdaMWJtTjBhVzl1S0NCbGRtVnVkQ0FwZTF4eVhHNWNjbHh1WEhSY2RIZHdZbU5mWVdwNFgySnZiMnRwYm1kZmMyVnVaRjl6WldGeVkyaGZjbVZ4ZFdWemRGOTNhWFJvWDNCaGNtRnRjeWdnZXlkemIzSjBYM1I1Y0dVbk9pQnFVWFZsY25rb0lIUm9hWE1nS1M1MllXd29LWDBnS1R0Y2NseHVYSFI5SUNrN1hISmNibjFjY2x4dVhISmNibHh5WEc0dktpcGNjbHh1SUNvZ0lDQlRhRzkzSUM4Z1NHbGtaU0JNYVhOMGFXNW5JQ0F0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMGdLaTljY2x4dVhISmNiaThxS2x4eVhHNGdLaUFnVTJodmR5Qk1hWE4wYVc1bklGUmhZbXhsSUZ4MExTQmNkRk5sYm1ScGJtY2dRV3BoZUNCU1pYRjFaWE4wWEhRdFhIUjNhWFJvSUhCaGNtRnRaWFJsY25NZ2RHaGhkQ0FnZDJVZ1pXRnliSGtnSUdSbFptbHVaV1FnYVc0Z1hDSjNjR0pqWDJGcWVGOWliMjlyYVc1blgyeHBjM1JwYm1kY0lpQlBZbW91WEhKY2JpQXFMMXh5WEc1bWRXNWpkR2x2YmlCM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDE5aFkzUjFZV3hmYkdsemRHbHVaMTlmYzJodmR5Z3BlMXh5WEc1Y2NseHVYSFIzY0dKalgyRnFlRjlpYjI5cmFXNW5YMkZxWVhoZmMyVmhjbU5vWDNKbGNYVmxjM1FvS1R0Y2RGeDBYSFF2THlCVFpXNWtJRUZxWVhnZ1VtVnhkV1Z6ZEZ4MExWeDBkMmwwYUNCd1lYSmhiV1YwWlhKeklIUm9ZWFFnSUhkbElHVmhjbXg1SUNCa1pXWnBibVZrSUdsdUlGd2lkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOXNhWE4wYVc1blhDSWdUMkpxTGx4eVhHNTlYSEpjYmx4eVhHNHZLaXBjY2x4dUlDb2dTR2xrWlNCTWFYTjBhVzVuSUZSaFlteGxJQ2dnWVc1a0lGQmhaMmx1WVhScGIyNGdLVnh5WEc0Z0tpOWNjbHh1Wm5WdVkzUnBiMjRnZDNCaVkxOWhhbmhmWW05dmEybHVaMTlmWVdOMGRXRnNYMnhwYzNScGJtZGZYMmhwWkdVb0tYdGNjbHh1WEhScVVYVmxjbmtvSUNjamQyaGZjMjl5ZEY5elpXeGxZM1J2Y2ljZ0tTNW9hV1JsS0NrN1hISmNibHgwYWxGMVpYSjVLQ0IzY0dKalgyRnFlRjlpYjI5cmFXNW5YMnhwYzNScGJtY3VaMlYwWDI5MGFHVnlYM0JoY21GdEtDQW5iR2x6ZEdsdVoxOWpiMjUwWVdsdVpYSW5JQ2tnSUNBZ0tTNW9kRzFzS0NBbkp5QXBPMXh5WEc1Y2RHcFJkV1Z5ZVNnZ2QzQmlZMTloYW5oZlltOXZhMmx1WjE5c2FYTjBhVzVuTG1kbGRGOXZkR2hsY2w5d1lYSmhiU2dnSjNCaFoybHVZWFJwYjI1ZlkyOXVkR0ZwYm1WeUp5QXBJQ2t1YUhSdGJDZ2dKeWNnS1R0Y2NseHVmVnh5WEc1Y2NseHVYSEpjYmk4cUtseHlYRzRnS2lBZ0lGTjFjSEJ2Y25RZ1puVnVZM1JwYjI1eklHWnZjaUJEYjI1MFpXNTBJRlJsYlhCc1lYUmxJR1JoZEdFZ0lDMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTQXFMMXh5WEc1Y2NseHVMeW9xWEhKY2JpQXFJRWhwWjJoc2FXZG9kQ0J6ZEhKcGJtZHpMRnh5WEc0Z0tpQmllU0JwYm5ObGNuUnBibWNnUEhOd1lXNGdZMnhoYzNNOVhDSm1hV1ZzWkhaaGJIVmxJRzVoYldVZ1ptbGxiR1J6WldGeVkyaDJZV3gxWlZ3aVBpNHVMand2YzNCaGJqNGdhSFJ0YkNBZ1pXeGxiV1Z1ZEhNZ2FXNTBieUIwYUdVZ2MzUnlhVzVuTGx4eVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdZbTl2YTJsdVoxOWtaWFJoYVd4eklGeDBMU0JUYjNWeVkyVWdjM1J5YVc1blhISmNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JpYjI5cmFXNW5YMnRsZVhkdmNtUmNkQzBnUzJWNWQyOXlaQ0IwYnlCb2FXZG9iR2xuYUhSY2NseHVJQ29nUUhKbGRIVnlibk1nZTNOMGNtbHVaMzFjY2x4dUlDb3ZYSEpjYm1aMWJtTjBhVzl1SUhkd1ltTmZaMlYwWDJocFoyaHNhV2RvZEdWa1gzTmxZWEpqYUY5clpYbDNiM0prS0NCaWIyOXJhVzVuWDJSbGRHRnBiSE1zSUdKdmIydHBibWRmYTJWNWQyOXlaQ0FwZTF4eVhHNWNjbHh1WEhSaWIyOXJhVzVuWDJ0bGVYZHZjbVFnUFNCaWIyOXJhVzVuWDJ0bGVYZHZjbVF1ZEhKcGJTZ3BMblJ2VEc5M1pYSkRZWE5sS0NrN1hISmNibHgwYVdZZ0tDQXdJRDA5SUdKdmIydHBibWRmYTJWNWQyOXlaQzVzWlc1bmRHZ2dLWHRjY2x4dVhIUmNkSEpsZEhWeWJpQmliMjlyYVc1blgyUmxkR0ZwYkhNN1hISmNibHgwZlZ4eVhHNWNjbHh1WEhRdkx5QklhV2RvYkdsbmFIUWdjM1ZpYzNSeWFXNW5JSGRwZEdocGJtY2dTRlJOVENCMFlXZHpJR2x1SUZ3aVEyOXVkR1Z1ZENCdlppQmliMjlyYVc1bklHWnBaV3hrY3lCa1lYUmhYQ0lnTFMwZ1pTNW5MaUJ6ZEdGeWRHbHVaeUJtY205dElDQStJQ0JoYm1RZ1pXNWthVzVuSUhkcGRHZ2dQRnh5WEc1Y2RHeGxkQ0JyWlhsM2IzSmtVbVZuWlhnZ1BTQnVaWGNnVW1WblJYaHdLQ0JnWm1sbGJHUjJZV3gxWlZ0ZVBENWRLajRvVzE0OFhTb2tlMkp2YjJ0cGJtZGZhMlY1ZDI5eVpIMWJYanhkS2lsZ0xDQW5aMmx0SnlBcE8xeHlYRzVjY2x4dVhIUXZMMnhsZENCdFlYUmphR1Z6SUQwZ1d5NHVMbUp2YjJ0cGJtZGZaR1YwWVdsc2N5NTBiMHh2ZDJWeVEyRnpaU2dwTG0xaGRHTm9RV3hzS0NCclpYbDNiM0prVW1WblpYZ2dLVjA3WEhKY2JseDBiR1YwSUcxaGRHTm9aWE1nUFNCaWIyOXJhVzVuWDJSbGRHRnBiSE11ZEc5TWIzZGxja05oYzJVb0tTNXRZWFJqYUVGc2JDZ2dhMlY1ZDI5eVpGSmxaMlY0SUNrN1hISmNibHgwWEhSdFlYUmphR1Z6SUQwZ1FYSnlZWGt1Wm5KdmJTZ2diV0YwWTJobGN5QXBPMXh5WEc1Y2NseHVYSFJzWlhRZ2MzUnlhVzVuYzE5aGNuSWdQU0JiWFR0Y2NseHVYSFJzWlhRZ2NHOXpYM0J5WlhacGIzVnpJRDBnTUR0Y2NseHVYSFJzWlhRZ2MyVmhjbU5vWDNCdmMxOXpkR0Z5ZER0Y2NseHVYSFJzWlhRZ2MyVmhjbU5vWDNCdmMxOWxibVE3WEhKY2JseHlYRzVjZEdadmNpQW9JR052Ym5OMElHMWhkR05vSUc5bUlHMWhkR05vWlhNZ0tYdGNjbHh1WEhKY2JseDBYSFJ6WldGeVkyaGZjRzl6WDNOMFlYSjBJRDBnYldGMFkyZ3VhVzVrWlhnZ0t5QnRZWFJqYUZzZ01DQmRMblJ2VEc5M1pYSkRZWE5sS0NrdWFXNWtaWGhQWmlnZ0p6NG5MQ0F3SUNrZ0t5QXhJRHRjY2x4dVhISmNibHgwWEhSemRISnBibWR6WDJGeWNpNXdkWE5vS0NCaWIyOXJhVzVuWDJSbGRHRnBiSE11YzNWaWMzUnlLQ0J3YjNOZmNISmxkbWx2ZFhNc0lDaHpaV0Z5WTJoZmNHOXpYM04wWVhKMElDMGdjRzl6WDNCeVpYWnBiM1Z6S1NBcElDazdYSEpjYmx4eVhHNWNkRngwYzJWaGNtTm9YM0J2YzE5bGJtUWdQU0JpYjI5cmFXNW5YMlJsZEdGcGJITXVkRzlNYjNkbGNrTmhjMlVvS1M1cGJtUmxlRTltS0NBblBDY3NJSE5sWVhKamFGOXdiM05mYzNSaGNuUWdLVHRjY2x4dVhISmNibHgwWEhSemRISnBibWR6WDJGeWNpNXdkWE5vS0NBblBITndZVzRnWTJ4aGMzTTlYQ0ptYVdWc1pIWmhiSFZsSUc1aGJXVWdabWxsYkdSelpXRnlZMmgyWVd4MVpWd2lQaWNnS3lCaWIyOXJhVzVuWDJSbGRHRnBiSE11YzNWaWMzUnlLQ0J6WldGeVkyaGZjRzl6WDNOMFlYSjBMQ0FvYzJWaGNtTm9YM0J2YzE5bGJtUWdMU0J6WldGeVkyaGZjRzl6WDNOMFlYSjBLU0FwSUNzZ0p6d3ZjM0JoYmo0bklDazdYSEpjYmx4eVhHNWNkRngwY0c5elgzQnlaWFpwYjNWeklEMGdjMlZoY21Ob1gzQnZjMTlsYm1RN1hISmNibHgwZlZ4eVhHNWNjbHh1WEhSemRISnBibWR6WDJGeWNpNXdkWE5vS0NCaWIyOXJhVzVuWDJSbGRHRnBiSE11YzNWaWMzUnlLQ0J3YjNOZmNISmxkbWx2ZFhNc0lDaGliMjlyYVc1blgyUmxkR0ZwYkhNdWJHVnVaM1JvSUMwZ2NHOXpYM0J5WlhacGIzVnpLU0FwSUNrN1hISmNibHh5WEc1Y2RISmxkSFZ5YmlCemRISnBibWR6WDJGeWNpNXFiMmx1S0NBbkp5QXBPMXh5WEc1OVhISmNibHh5WEc0dktpcGNjbHh1SUNvZ1EyOXVkbVZ5ZENCemNHVmphV0ZzSUVoVVRVd2dZMmhoY21GamRHVnljeUFnSUdaeWIyMDZYSFFnSm1GdGNEc2dYSFF0UGlCY2RDWmNjbHh1SUNwY2NseHVJQ29nUUhCaGNtRnRJSFJsZUhSY2NseHVJQ29nUUhKbGRIVnlibk1nZXlwOVhISmNiaUFxTDF4eVhHNW1kVzVqZEdsdmJpQjNjR0pqWDJSbFkyOWtaVjlJVkUxTVgyVnVkR2wwYVdWektDQjBaWGgwSUNsN1hISmNibHgwZG1GeUlIUmxlSFJCY21WaElEMGdaRzlqZFcxbGJuUXVZM0psWVhSbFJXeGxiV1Z1ZENnZ0ozUmxlSFJoY21WaEp5QXBPMXh5WEc1Y2RIUmxlSFJCY21WaExtbHVibVZ5U0ZSTlRDQTlJSFJsZUhRN1hISmNibHgwY21WMGRYSnVJSFJsZUhSQmNtVmhMblpoYkhWbE8xeHlYRzU5WEhKY2JseHlYRzR2S2lwY2NseHVJQ29nUTI5dWRtVnlkQ0JVVHlCemNHVmphV0ZzSUVoVVRVd2dZMmhoY21GamRHVnljeUFnSUdaeWIyMDZYSFFnSmlCY2RDMCtJRngwSm1GdGNEdGNjbHh1SUNwY2NseHVJQ29nUUhCaGNtRnRJSFJsZUhSY2NseHVJQ29nUUhKbGRIVnlibk1nZXlwOVhISmNiaUFxTDF4eVhHNW1kVzVqZEdsdmJpQjNjR0pqWDJWdVkyOWtaVjlJVkUxTVgyVnVkR2wwYVdWektIUmxlSFFwSUh0Y2NseHVJQ0IyWVhJZ2RHVjRkRUZ5WldFZ1BTQmtiMk4xYldWdWRDNWpjbVZoZEdWRmJHVnRaVzUwS0NkMFpYaDBZWEpsWVNjcE8xeHlYRzRnSUhSbGVIUkJjbVZoTG1sdWJtVnlWR1Y0ZENBOUlIUmxlSFE3WEhKY2JpQWdjbVYwZFhKdUlIUmxlSFJCY21WaExtbHVibVZ5U0ZSTlREdGNjbHh1ZlZ4eVhHNWNjbHh1WEhKY2JpOHFLbHh5WEc0Z0tpQWdJRk4xY0hCdmNuUWdSblZ1WTNScGIyNXpJQzBnVTNCcGJpQkpZMjl1SUdsdUlFSjFkSFJ2Ym5NZ0lDMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMU0FxTDF4eVhHNWNjbHh1THlvcVhISmNiaUFxSUZOd2FXNGdZblYwZEc5dUlHbHVJRVpwYkhSbGNpQjBiMjlzWW1GeUlDQXRJQ0JUZEdGeWRGeHlYRzRnS2k5Y2NseHVablZ1WTNScGIyNGdkM0JpWTE5aWIyOXJhVzVuWDJ4cGMzUnBibWRmY21Wc2IyRmtYMkoxZEhSdmJsOWZjM0JwYmw5emRHRnlkQ2dwZTF4eVhHNWNkR3BSZFdWeWVTZ2dKeU4zY0dKalgySnZiMnRwYm1kZmJHbHpkR2x1WjE5eVpXeHZZV1JmWW5WMGRHOXVJQzV0Wlc1MVgybGpiMjR1ZDNCaVkxOXpjR2x1SnlrdWNtVnRiM1psUTJ4aGMzTW9JQ2QzY0dKalgyRnVhVzFoZEdsdmJsOXdZWFZ6WlNjZ0tUdGNjbHh1ZlZ4eVhHNWNjbHh1THlvcVhISmNiaUFxSUZOd2FXNGdZblYwZEc5dUlHbHVJRVpwYkhSbGNpQjBiMjlzWW1GeUlDQXRJQ0JRWVhWelpWeHlYRzRnS2k5Y2NseHVablZ1WTNScGIyNGdkM0JpWTE5aWIyOXJhVzVuWDJ4cGMzUnBibWRmY21Wc2IyRmtYMkoxZEhSdmJsOWZjM0JwYmw5d1lYVnpaU2dwZTF4eVhHNWNkR3BSZFdWeWVTZ2dKeU4zY0dKalgySnZiMnRwYm1kZmJHbHpkR2x1WjE5eVpXeHZZV1JmWW5WMGRHOXVJQzV0Wlc1MVgybGpiMjR1ZDNCaVkxOXpjR2x1SnlBcExtRmtaRU5zWVhOektDQW5kM0JpWTE5aGJtbHRZWFJwYjI1ZmNHRjFjMlVuSUNrN1hISmNibjFjY2x4dVhISmNiaThxS2x4eVhHNGdLaUJUY0dsdUlHSjFkSFJ2YmlCcGJpQkdhV3gwWlhJZ2RHOXZiR0poY2lBZ0xTQWdhWE1nVTNCcGJtNXBibWNnUDF4eVhHNGdLbHh5WEc0Z0tpQkFjbVYwZFhKdWN5QjdZbTl2YkdWaGJuMWNjbHh1SUNvdlhISmNibVoxYm1OMGFXOXVJSGR3WW1OZlltOXZhMmx1WjE5c2FYTjBhVzVuWDNKbGJHOWhaRjlpZFhSMGIyNWZYMmx6WDNOd2FXNG9LWHRjY2x4dUlDQWdJR2xtSUNnZ2FsRjFaWEo1S0NBbkkzZHdZbU5mWW05dmEybHVaMTlzYVhOMGFXNW5YM0psYkc5aFpGOWlkWFIwYjI0Z0xtMWxiblZmYVdOdmJpNTNjR0pqWDNOd2FXNG5JQ2t1YUdGelEyeGhjM01vSUNkM2NHSmpYMkZ1YVcxaGRHbHZibDl3WVhWelpTY2dLU0FwZTF4eVhHNWNkRngwY21WMGRYSnVJSFJ5ZFdVN1hISmNibHgwZlNCbGJITmxJSHRjY2x4dVhIUmNkSEpsZEhWeWJpQm1ZV3h6WlR0Y2NseHVYSFI5WEhKY2JuMGlYU3dpWm1sc1pTSTZJbWx1WTJ4MVpHVnpMM0JoWjJVdFltOXZhMmx1WjNNdlgyOTFkQzlpYjI5cmFXNW5jMTlmYkdsemRHbHVaeTVxY3lKOVxuIl0sIm5hbWVzIjpbIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwibyIsImFsbG93QXJyYXlMaWtlIiwiaXQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsImkiLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJlIiwiX2UiLCJmIiwiVHlwZUVycm9yIiwiZXJyIiwibm9ybWFsQ29tcGxldGlvbiIsImRpZEVyciIsImNhbGwiLCJzdGVwIiwibmV4dCIsIl9lMiIsIm1pbkxlbiIsIl9hcnJheUxpa2VUb0FycmF5IiwiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiYXJyIiwibGVuIiwiYXJyMiIsIl90eXBlb2YiLCJvYmoiLCJqUXVlcnkiLCJvbiIsInRvdWNobW92ZSIsImVhY2giLCJpbmRleCIsInRkX2VsIiwidGhpcyIsImdldCIsInVuZGVmaW5lZCIsIl90aXBweSIsImhpZGUiLCJ3cGJjX2FqeF9ib29raW5nX2xpc3RpbmciLCJwX3NlY3VyZSIsInNlY3VyaXR5X29iaiIsInVzZXJfaWQiLCJub25jZSIsImxvY2FsZSIsInNldF9zZWN1cmVfcGFyYW0iLCJwYXJhbV9rZXkiLCJwYXJhbV92YWwiLCJnZXRfc2VjdXJlX3BhcmFtIiwicF9saXN0aW5nIiwic2VhcmNoX3JlcXVlc3Rfb2JqIiwic29ydCIsInNvcnRfdHlwZSIsInBhZ2VfbnVtIiwicGFnZV9pdGVtc19jb3VudCIsImNyZWF0ZV9kYXRlIiwia2V5d29yZCIsInNvdXJjZSIsInNlYXJjaF9zZXRfYWxsX3BhcmFtcyIsInJlcXVlc3RfcGFyYW1fb2JqIiwic2VhcmNoX2dldF9hbGxfcGFyYW1zIiwic2VhcmNoX2dldF9wYXJhbSIsInNlYXJjaF9zZXRfcGFyYW0iLCJzZWFyY2hfc2V0X3BhcmFtc19hcnIiLCJwYXJhbXNfYXJyIiwiXyIsInBfdmFsIiwicF9rZXkiLCJwX2RhdGEiLCJwX290aGVyIiwib3RoZXJfb2JqIiwic2V0X290aGVyX3BhcmFtIiwiZ2V0X290aGVyX3BhcmFtIiwid3BiY19hanhfYm9va2luZ19hamF4X3NlYXJjaF9yZXF1ZXN0IiwiY29uc29sZSIsImdyb3VwQ29sbGFwc2VkIiwibG9nIiwid3BiY19ib29raW5nX2xpc3RpbmdfcmVsb2FkX2J1dHRvbl9fc3Bpbl9zdGFydCIsInBvc3QiLCJ3cGJjX2dsb2JhbDEiLCJ3cGJjX2FqYXh1cmwiLCJhY3Rpb24iLCJ3cGJjX2FqeF91c2VyX2lkIiwid3BiY19hanhfbG9jYWxlIiwic2VhcmNoX3BhcmFtcyIsInJlc3BvbnNlX2RhdGEiLCJ0ZXh0U3RhdHVzIiwianFYSFIiLCJncm91cEVuZCIsImh0bWwiLCJ3cGJjX2FqeF9ib29raW5nX3Nob3dfbGlzdGluZyIsIndwYmNfcGFnaW5hdGlvbl9lY2hvIiwicGFnZV9hY3RpdmUiLCJwYWdlc19jb3VudCIsIk1hdGgiLCJjZWlsIiwid3BiY19hanhfYm9va2luZ19kZWZpbmVfdWlfaG9va3MiLCJ3cGJjX2FqeF9ib29raW5nX19hY3R1YWxfbGlzdGluZ19faGlkZSIsImFqeF9uZXdfYm9va2luZ3NfY291bnQiLCJwYXJzZUludCIsInNob3ciLCJ3cGJjX2Jvb2tpbmdfbGlzdGluZ19yZWxvYWRfYnV0dG9uX19zcGluX3BhdXNlIiwibG9jYXRpb24iLCJyZWxvYWQiLCJmYWlsIiwiZXJyb3JUaHJvd24iLCJ3aW5kb3ciLCJlcnJvcl9tZXNzYWdlIiwicmVzcG9uc2VUZXh0Iiwid3BiY19hanhfYm9va2luZ19zaG93X21lc3NhZ2UiLCJyZXBsYWNlIiwianNvbl9pdGVtc19hcnIiLCJqc29uX3NlYXJjaF9wYXJhbXMiLCJqc29uX2Jvb2tpbmdfcmVzb3VyY2VzIiwid3BiY19hanhfZGVmaW5lX3RlbXBsYXRlc19fcmVzb3VyY2VfbWFuaXB1bGF0aW9uIiwiY3NzIiwibGlzdF9oZWFkZXJfdHBsIiwid3AiLCJ0ZW1wbGF0ZSIsImxpc3Rfcm93X3RwbCIsImFwcGVuZCIsIndwYmNfZGVmaW5lX2dtYWlsX2NoZWNrYm94X3NlbGVjdGlvbiIsImNoYW5nZV9ib29raW5nX3Jlc291cmNlX3RwbCIsImFqeF9zZWFyY2hfcGFyYW1zIiwiYWp4X2Jvb2tpbmdfcmVzb3VyY2VzIiwiZHVwbGljYXRlX2Jvb2tpbmdfdG9fb3RoZXJfcmVzb3VyY2VfdHBsIiwibWVzc2FnZSIsIndwYmNfYWp4X2Jvb2tpbmdfc2VuZF9zZWFyY2hfcmVxdWVzdF93aXRoX3BhcmFtcyIsIndwYmNfYWp4X2Jvb2tpbmdfcGFnaW5hdGlvbl9jbGljayIsInBhZ2VfbnVtYmVyIiwid3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X2Zvcl9rZXl3b3JkIiwiZWxlbWVudF9pZCIsInZhbCIsIndwYmNfYWp4X2Jvb2tpbmdfc2VhcmNoaW5nX2FmdGVyX2Zld19zZWNvbmRzIiwiY2xvc2VkX3RpbWVyIiwidGltZXJfZGVsYXkiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiYmluZCIsIndwYmNfZGVmaW5lX3RpcHB5X3Rvb2x0aXBzIiwid3BiY19hanhfYm9va2luZ19fdWlfZGVmaW5lX19sb2NhbGUiLCJ3cGJjX2FqeF9ib29raW5nX191aV9kZWZpbmVfX3JlbWFyayIsImV2ZW50Iiwid3BiY19hanhfYm9va2luZ19fYWN0dWFsX2xpc3RpbmdfX3Nob3ciLCJ3cGJjX2dldF9oaWdobGlnaHRlZF9zZWFyY2hfa2V5d29yZCIsImJvb2tpbmdfZGV0YWlscyIsImJvb2tpbmdfa2V5d29yZCIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsInNlYXJjaF9wb3NfZW5kIiwiX3N0ZXAiLCJrZXl3b3JkUmVnZXgiLCJSZWdFeHAiLCJjb25jYXQiLCJtYXRjaGVzIiwibWF0Y2hBbGwiLCJzdHJpbmdzX2FyciIsInBvc19wcmV2aW91cyIsIl9pdGVyYXRvciIsIm1hdGNoIiwic2VhcmNoX3Bvc19zdGFydCIsImluZGV4T2YiLCJwdXNoIiwic3Vic3RyIiwiam9pbiIsIndwYmNfZGVjb2RlX0hUTUxfZW50aXRpZXMiLCJ0ZXh0IiwidGV4dEFyZWEiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJpbm5lckhUTUwiLCJ3cGJjX2VuY29kZV9IVE1MX2VudGl0aWVzIiwiaW5uZXJUZXh0IiwicmVtb3ZlQ2xhc3MiLCJhZGRDbGFzcyIsIndwYmNfYm9va2luZ19saXN0aW5nX3JlbG9hZF9idXR0b25fX2lzX3NwaW4iLCJoYXNDbGFzcyJdLCJtYXBwaW5ncyI6ImFBRUEsU0FBU0EsMkJBQTJCQyxFQUFHQyxHQUFrQixJQUFJQyxFQUF1QixvQkFBWEMsUUFBMEJILEVBQUVHLE9BQU9DLFdBQWFKLEVBQUUsY0FBZSxJQUFLRSxFQUFJLENBQUUsR0FBSUcsTUFBTUMsUUFBUU4sS0FBT0UsRUFBS0ssNEJBQTRCUCxLQUFPQyxHQUFrQkQsR0FBeUIsaUJBQWJBLEVBQUVRLE9BQXFCLENBQU1OLElBQUlGLEVBQUlFLEdBQUksSUFBSU8sRUFBSSxFQUFPQyxFQUFJLGFBQWlCLE1BQU8sQ0FBRUMsRUFBR0QsRUFBR0UsRUFBRyxXQUFlLE9BQUlILEdBQUtULEVBQUVRLE9BQWUsQ0FBRUssTUFBTSxHQUFlLENBQUVBLE1BQU0sRUFBT0MsTUFBT2QsRUFBRVMsT0FBV00sRUFBRyxTQUFXQyxHQUFNLE1BQU1BLEdBQU9DLEVBQUdQLEdBQU8sTUFBTSxJQUFJUSxVQUFVLHlJQUE0SSxJQUE2Q0MsRUFBekNDLEdBQW1CLEVBQU1DLEdBQVMsRUFBWSxNQUFPLENBQUVWLEVBQUcsV0FBZVQsRUFBS0EsRUFBR29CLEtBQUt0QixJQUFPWSxFQUFHLFdBQWUsSUFBSVcsRUFBT3JCLEVBQUdzQixPQUFzQyxP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
|
includes/page-bookings/_src/bookings__actions.js
ADDED
@@ -0,0 +1,589 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
"use strict";
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Ajax ----------------------------------------------------------------------------------------------------- */
|
5 |
+
//var is_this_action = false;
|
6 |
+
/**
|
7 |
+
* Send Ajax action request, like approving or cancellation
|
8 |
+
*
|
9 |
+
* @param action_param
|
10 |
+
*/
|
11 |
+
function wpbc_ajx_booking_ajax_action_request( action_param = {} ){
|
12 |
+
|
13 |
+
console.groupCollapsed( 'WPBC_AJX_BOOKING_ACTIONS' ); console.log( ' == Ajax Actions :: Params == ', action_param );
|
14 |
+
//is_this_action = true;
|
15 |
+
|
16 |
+
wpbc_booking_listing_reload_button__spin_start();
|
17 |
+
|
18 |
+
// Get redefined Locale, if action on single booking !
|
19 |
+
if ( ( undefined != action_param[ 'booking_id' ] ) && ( ! Array.isArray( action_param[ 'booking_id' ] ) ) ){ // Not array
|
20 |
+
|
21 |
+
action_param[ 'locale' ] = wpbc_get_selected_locale( action_param[ 'booking_id' ], wpbc_ajx_booking_listing.get_secure_param( 'locale' ) );
|
22 |
+
}
|
23 |
+
|
24 |
+
var action_post_params = {
|
25 |
+
action : 'WPBC_AJX_BOOKING_ACTIONS',
|
26 |
+
nonce : wpbc_ajx_booking_listing.get_secure_param( 'nonce' ),
|
27 |
+
wpbc_ajx_user_id: ( ( undefined == action_param[ 'user_id' ] ) ? wpbc_ajx_booking_listing.get_secure_param( 'user_id' ) : action_param[ 'user_id' ] ),
|
28 |
+
wpbc_ajx_locale: ( ( undefined == action_param[ 'locale' ] ) ? wpbc_ajx_booking_listing.get_secure_param( 'locale' ) : action_param[ 'locale' ] ),
|
29 |
+
|
30 |
+
action_params : action_param
|
31 |
+
};
|
32 |
+
|
33 |
+
// It's required for CSV export - getting the same list of bookings
|
34 |
+
if ( typeof action_param.search_params !== 'undefined' ){
|
35 |
+
action_post_params[ 'search_params' ] = action_param.search_params;
|
36 |
+
delete action_post_params.action_params.search_params;
|
37 |
+
}
|
38 |
+
|
39 |
+
// Start Ajax
|
40 |
+
jQuery.post( wpbc_global1.wpbc_ajaxurl ,
|
41 |
+
|
42 |
+
action_post_params ,
|
43 |
+
|
44 |
+
/**
|
45 |
+
* S u c c e s s
|
46 |
+
*
|
47 |
+
* @param response_data - its object returned from Ajax - class-live-searcg.php
|
48 |
+
* @param textStatus - 'success'
|
49 |
+
* @param jqXHR - Object
|
50 |
+
*/
|
51 |
+
function ( response_data, textStatus, jqXHR ) {
|
52 |
+
|
53 |
+
console.log( ' == Ajax Actions :: Response WPBC_AJX_BOOKING_ACTIONS == ', response_data ); console.groupEnd();
|
54 |
+
|
55 |
+
// Probably Error
|
56 |
+
if ( (typeof response_data !== 'object') || (response_data === null) ){
|
57 |
+
jQuery( '#wh_sort_selector' ).hide();
|
58 |
+
jQuery( wpbc_ajx_booking_listing.get_other_param( 'listing_container' ) ).html(
|
59 |
+
'<div class="wpbc-settings-notice notice-warning" style="text-align:left">' +
|
60 |
+
response_data +
|
61 |
+
'</div>'
|
62 |
+
);
|
63 |
+
return;
|
64 |
+
}
|
65 |
+
|
66 |
+
wpbc_booking_listing_reload_button__spin_pause();
|
67 |
+
|
68 |
+
wpbc_admin_show_message(
|
69 |
+
response_data[ 'ajx_after_action_message' ].replace( /\n/g, "<br />" )
|
70 |
+
, ( '1' == response_data[ 'ajx_after_action_result' ] ) ? 'success' : 'error'
|
71 |
+
, 10000
|
72 |
+
);
|
73 |
+
|
74 |
+
// Success response
|
75 |
+
if ( '1' == response_data[ 'ajx_after_action_result' ] ){
|
76 |
+
|
77 |
+
var is_reload_ajax_listing = true;
|
78 |
+
|
79 |
+
// After Google Calendar import show imported bookings and reload the page for toolbar parameters update
|
80 |
+
if ( false !== response_data[ 'ajx_after_action_result_all_params_arr' ][ 'new_listing_params' ] ){
|
81 |
+
|
82 |
+
wpbc_ajx_booking_send_search_request_with_params( response_data[ 'ajx_after_action_result_all_params_arr' ][ 'new_listing_params' ] );
|
83 |
+
|
84 |
+
var closed_timer = setTimeout( function (){
|
85 |
+
|
86 |
+
if ( wpbc_booking_listing_reload_button__is_spin() ){
|
87 |
+
if ( undefined != response_data[ 'ajx_after_action_result_all_params_arr' ][ 'new_listing_params' ][ 'reload_url_params' ] ){
|
88 |
+
document.location.href = response_data[ 'ajx_after_action_result_all_params_arr' ][ 'new_listing_params' ][ 'reload_url_params' ];
|
89 |
+
} else {
|
90 |
+
document.location.reload();
|
91 |
+
}
|
92 |
+
}
|
93 |
+
}
|
94 |
+
, 2000 );
|
95 |
+
is_reload_ajax_listing = false;
|
96 |
+
}
|
97 |
+
|
98 |
+
// Start download exported CSV file
|
99 |
+
if ( undefined != response_data[ 'ajx_after_action_result_all_params_arr' ][ 'export_csv_url' ] ){
|
100 |
+
wpbc_ajx_booking__export_csv_url__download( response_data[ 'ajx_after_action_result_all_params_arr' ][ 'export_csv_url' ] );
|
101 |
+
is_reload_ajax_listing = false;
|
102 |
+
}
|
103 |
+
|
104 |
+
if ( is_reload_ajax_listing ){
|
105 |
+
wpbc_ajx_booking__actual_listing__show(); // Sending Ajax Request - with parameters that we early defined in "wpbc_ajx_booking_listing" Obj.
|
106 |
+
}
|
107 |
+
|
108 |
+
}
|
109 |
+
|
110 |
+
// Remove spin icon from button and Enable this button.
|
111 |
+
wpbc_button__remove_spin( response_data[ 'ajx_cleaned_params' ][ 'ui_clicked_element_id' ] )
|
112 |
+
|
113 |
+
// Hide modals
|
114 |
+
wpbc_popup_modals__hide();
|
115 |
+
|
116 |
+
jQuery( '#ajax_respond' ).html( response_data ); // For ability to show response, add such DIV element to page
|
117 |
+
}
|
118 |
+
).fail( function ( jqXHR, textStatus, errorThrown ) { if ( window.console && window.console.log ){ console.log( 'Ajax_Error', jqXHR, textStatus, errorThrown ); }
|
119 |
+
jQuery( '#wh_sort_selector' ).hide();
|
120 |
+
var error_message = '<strong>' + 'Error!' + '</strong> ' + errorThrown ;
|
121 |
+
if ( jqXHR.responseText ){
|
122 |
+
error_message += jqXHR.responseText;
|
123 |
+
}
|
124 |
+
error_message = error_message.replace( /\n/g, "<br />" );
|
125 |
+
|
126 |
+
wpbc_ajx_booking_show_message( error_message );
|
127 |
+
})
|
128 |
+
// .done( function ( data, textStatus, jqXHR ) { if ( window.console && window.console.log ){ console.log( 'second success', data, textStatus, jqXHR ); } })
|
129 |
+
// .always( function ( data_jqXHR, textStatus, jqXHR_errorThrown ) { if ( window.console && window.console.log ){ console.log( 'always finished', data_jqXHR, textStatus, jqXHR_errorThrown ); } })
|
130 |
+
; // End Ajax
|
131 |
+
}
|
132 |
+
|
133 |
+
|
134 |
+
/**
|
135 |
+
* Support Functions - Spin Icon in Buttons ------------------------------------------------------------------ */
|
136 |
+
|
137 |
+
/**
|
138 |
+
* Remove spin icon from button and Enable this button.
|
139 |
+
*
|
140 |
+
* @param button_clicked_element_id - HTML ID attribute of this button
|
141 |
+
* @return string - CSS classes that was previously in button icon
|
142 |
+
*/
|
143 |
+
function wpbc_button__remove_spin( button_clicked_element_id ){
|
144 |
+
|
145 |
+
var previos_classes = '';
|
146 |
+
if ( undefined != button_clicked_element_id ){
|
147 |
+
var jElement = jQuery( '#' + button_clicked_element_id );
|
148 |
+
if ( jElement.length ){
|
149 |
+
previos_classes = wpbc_button_disable_loading_icon( jElement.get( 0 ) );
|
150 |
+
}
|
151 |
+
}
|
152 |
+
|
153 |
+
return previos_classes;
|
154 |
+
}
|
155 |
+
|
156 |
+
|
157 |
+
/**
|
158 |
+
* Show Loading (rotating arrow) icon for button that has been clicked
|
159 |
+
*
|
160 |
+
* @param this_button - this object of specific button
|
161 |
+
* @return string - CSS classes that was previously in button icon
|
162 |
+
*/
|
163 |
+
function wpbc_button_enable_loading_icon( this_button ){
|
164 |
+
|
165 |
+
var jButton = jQuery( this_button );
|
166 |
+
var jIcon = jButton.find( 'i' );
|
167 |
+
var previos_classes = jIcon.attr( 'class' );
|
168 |
+
|
169 |
+
jIcon.removeClass().addClass( 'menu_icon icon-1x wpbc_icn_rotate_right wpbc_spin' ); // Set Rotate icon
|
170 |
+
//jIcon.addClass( 'wpbc_animation_pause' ); // Pause animation
|
171 |
+
//jIcon.addClass( 'wpbc_ui_red' ); // Set icon color red
|
172 |
+
|
173 |
+
jIcon.attr( 'wpbc_previous_class', previos_classes )
|
174 |
+
|
175 |
+
jButton.addClass( 'disabled' ); // Disable button
|
176 |
+
//jButton.prop( "disabled", true );
|
177 |
+
// We need to set here attr instead of prop, because for A elements, attribute 'disabled' do not added with jButton.prop( "disabled", true );
|
178 |
+
|
179 |
+
jButton.attr( 'wpbc_previous_onclick', jButton.attr( 'onclick' ) ); //Save this value
|
180 |
+
jButton.attr( 'onclick', '' ); // Disable actions "on click"
|
181 |
+
|
182 |
+
return previos_classes;
|
183 |
+
}
|
184 |
+
|
185 |
+
|
186 |
+
/**
|
187 |
+
* Hide Loading (rotating arrow) icon for button that was clicked and show previous icon and enable button
|
188 |
+
*
|
189 |
+
* @param this_button - this object of specific button
|
190 |
+
* @return string - CSS classes that was previously in button icon
|
191 |
+
*/
|
192 |
+
function wpbc_button_disable_loading_icon( this_button ){
|
193 |
+
|
194 |
+
var jButton = jQuery( this_button );
|
195 |
+
var jIcon = jButton.find( 'i' );
|
196 |
+
|
197 |
+
var previos_classes = jIcon.attr( 'wpbc_previous_class' );
|
198 |
+
if ( '' != previos_classes ){
|
199 |
+
jIcon.removeClass().addClass( previos_classes );
|
200 |
+
}
|
201 |
+
|
202 |
+
jButton.removeClass( 'disabled' ); // Remove Disable button
|
203 |
+
|
204 |
+
var previous_onclick = jButton.attr( 'wpbc_previous_onclick' )
|
205 |
+
if ( '' != previous_onclick ){
|
206 |
+
jButton.attr( 'onclick', previous_onclick );
|
207 |
+
}
|
208 |
+
|
209 |
+
return previos_classes;
|
210 |
+
}
|
211 |
+
|
212 |
+
|
213 |
+
/**
|
214 |
+
* Hide all open modal popups windows
|
215 |
+
*/
|
216 |
+
function wpbc_popup_modals__hide(){
|
217 |
+
|
218 |
+
// Hide modals
|
219 |
+
if ( 'function' === typeof (jQuery( '.wpbc_popup_modal' ).wpbc_my_modal) ){
|
220 |
+
jQuery( '.wpbc_popup_modal' ).wpbc_my_modal( 'hide' );
|
221 |
+
}
|
222 |
+
}
|
223 |
+
|
224 |
+
|
225 |
+
/**
|
226 |
+
* Dates Short <-> Wide ----------------------------------------------------------------------------------- */
|
227 |
+
|
228 |
+
function wpbc_ajx_click_on_dates_short(){
|
229 |
+
jQuery( '#booking_dates_small,.booking_dates_full' ).hide();
|
230 |
+
jQuery( '#booking_dates_full,.booking_dates_small' ).show();
|
231 |
+
wpbc_ajx_booking_send_search_request_with_params( {'ui_usr__dates_short_wide': 'short'} );
|
232 |
+
}
|
233 |
+
|
234 |
+
function wpbc_ajx_click_on_dates_wide(){
|
235 |
+
jQuery( '#booking_dates_full,.booking_dates_small' ).hide();
|
236 |
+
jQuery( '#booking_dates_small,.booking_dates_full' ).show();
|
237 |
+
wpbc_ajx_booking_send_search_request_with_params( {'ui_usr__dates_short_wide': 'wide'} );
|
238 |
+
}
|
239 |
+
|
240 |
+
function wpbc_ajx_click_on_dates_toggle(this_date){
|
241 |
+
|
242 |
+
jQuery( this_date ).parents( '.wpbc_col_dates' ).find( '.booking_dates_small' ).toggle();
|
243 |
+
jQuery( this_date ).parents( '.wpbc_col_dates' ).find( '.booking_dates_full' ).toggle();
|
244 |
+
|
245 |
+
/*
|
246 |
+
var visible_section = jQuery( this_date ).parents( '.booking_dates_expand_section' );
|
247 |
+
visible_section.hide();
|
248 |
+
if ( visible_section.hasClass( 'booking_dates_full' ) ){
|
249 |
+
visible_section.parents( '.wpbc_col_dates' ).find( '.booking_dates_small' ).show();
|
250 |
+
} else {
|
251 |
+
visible_section.parents( '.wpbc_col_dates' ).find( '.booking_dates_full' ).show();
|
252 |
+
}*/
|
253 |
+
console.log( 'wpbc_ajx_click_on_dates_toggle', this_date );
|
254 |
+
}
|
255 |
+
|
256 |
+
/**
|
257 |
+
* Locale --------------------------------------------------------------------------------------------------- */
|
258 |
+
|
259 |
+
/**
|
260 |
+
* Select options in select boxes based on attribute "value_of_selected_option" and RED color and hint for LOCALE button -- It's called from wpbc_ajx_booking_define_ui_hooks() each time after Listing loading.
|
261 |
+
*/
|
262 |
+
function wpbc_ajx_booking__ui_define__locale(){
|
263 |
+
|
264 |
+
jQuery( '.wpbc_listing_container select' ).each( function ( index ){
|
265 |
+
|
266 |
+
var selection = jQuery( this ).attr( "value_of_selected_option" ); // Define selected select boxes
|
267 |
+
|
268 |
+
if ( undefined !== selection ){
|
269 |
+
jQuery( this ).find( 'option[value="' + selection + '"]' ).prop( 'selected', true );
|
270 |
+
|
271 |
+
if ( ('' != selection) && (jQuery( this ).hasClass( 'set_booking_locale_selectbox' )) ){ // Locale
|
272 |
+
|
273 |
+
var booking_locale_button = jQuery( this ).parents( '.ui_element_locale' ).find( '.set_booking_locale_button' )
|
274 |
+
|
275 |
+
//booking_locale_button.css( 'color', '#db4800' ); // Set button red
|
276 |
+
booking_locale_button.addClass( 'wpbc_ui_red' ); // Set button red
|
277 |
+
if ( 'function' === typeof( wpbc_tippy ) ){
|
278 |
+
booking_locale_button.get(0)._tippy.setContent( selection );
|
279 |
+
}
|
280 |
+
}
|
281 |
+
}
|
282 |
+
} );
|
283 |
+
}
|
284 |
+
|
285 |
+
/**
|
286 |
+
* Remark --------------------------------------------------------------------------------------------------- */
|
287 |
+
|
288 |
+
/**
|
289 |
+
* Define content of remark "booking note" button and textarea. -- It's called from wpbc_ajx_booking_define_ui_hooks() each time after Listing loading.
|
290 |
+
*/
|
291 |
+
function wpbc_ajx_booking__ui_define__remark(){
|
292 |
+
|
293 |
+
jQuery( '.wpbc_listing_container .ui_remark_section textarea' ).each( function ( index ){
|
294 |
+
var text_val = jQuery( this ).val();
|
295 |
+
if ( (undefined !== text_val) && ('' != text_val) ){
|
296 |
+
|
297 |
+
var remark_button = jQuery( this ).parents( '.ui_group' ).find( '.set_booking_note_button' );
|
298 |
+
|
299 |
+
if ( remark_button.length > 0 ){
|
300 |
+
|
301 |
+
remark_button.addClass( 'wpbc_ui_red' ); // Set button red
|
302 |
+
if ( 'function' === typeof (wpbc_tippy) ){
|
303 |
+
//remark_button.get( 0 )._tippy.allowHTML = true;
|
304 |
+
//remark_button.get( 0 )._tippy.setContent( text_val.replace(/[\n\r]/g, '<br>') );
|
305 |
+
|
306 |
+
remark_button.get( 0 )._tippy.setProps( {
|
307 |
+
allowHTML: true,
|
308 |
+
content : text_val.replace( /[\n\r]/g, '<br>' )
|
309 |
+
} );
|
310 |
+
}
|
311 |
+
}
|
312 |
+
}
|
313 |
+
} );
|
314 |
+
}
|
315 |
+
|
316 |
+
/**
|
317 |
+
* Actions ,when we click on "Remark" button.
|
318 |
+
*
|
319 |
+
* @param jq_button - this jQuery button object
|
320 |
+
*/
|
321 |
+
function wpbc_ajx_booking__ui_click__remark( jq_button ){
|
322 |
+
|
323 |
+
jq_button.parents('.ui_group').find('.ui_remark_section').toggle();
|
324 |
+
}
|
325 |
+
|
326 |
+
|
327 |
+
/**
|
328 |
+
* Change booking resource ---------------------------------------------------------------------------------- */
|
329 |
+
|
330 |
+
function wpbc_ajx_booking__ui_click_show__change_resource( booking_id, resource_id ){
|
331 |
+
|
332 |
+
// Define ID of booking to hidden input
|
333 |
+
jQuery( '#change_booking_resource__booking_id' ).val( booking_id );
|
334 |
+
|
335 |
+
// Select booking resource that belong to booking
|
336 |
+
jQuery( '#change_booking_resource__resource_select' ).val( resource_id ).trigger( 'change' );
|
337 |
+
var cbr;
|
338 |
+
|
339 |
+
// Get Resource section
|
340 |
+
cbr = jQuery( "#change_booking_resource__section" ).detach();
|
341 |
+
|
342 |
+
// Append it to booking ROW
|
343 |
+
cbr.appendTo( jQuery( "#ui__change_booking_resource__section_in_booking_" + booking_id ) );
|
344 |
+
cbr = null;
|
345 |
+
|
346 |
+
// Hide sections of "Change booking resource" in all other bookings ROWs
|
347 |
+
//jQuery( ".ui__change_booking_resource__section_in_booking" ).hide();
|
348 |
+
if ( ! jQuery( "#ui__change_booking_resource__section_in_booking_" + booking_id ).is(':visible') ){
|
349 |
+
jQuery( ".ui__under_actions_row__section_in_booking" ).hide();
|
350 |
+
}
|
351 |
+
|
352 |
+
// Show only "change booking resource" section for current booking
|
353 |
+
jQuery( "#ui__change_booking_resource__section_in_booking_" + booking_id ).toggle();
|
354 |
+
}
|
355 |
+
|
356 |
+
function wpbc_ajx_booking__ui_click_save__change_resource( this_el, booking_action, el_id ){
|
357 |
+
|
358 |
+
wpbc_ajx_booking_ajax_action_request( {
|
359 |
+
'booking_action' : booking_action,
|
360 |
+
'booking_id' : jQuery( '#change_booking_resource__booking_id' ).val(),
|
361 |
+
'selected_resource_id' : jQuery( '#change_booking_resource__resource_select' ).val(),
|
362 |
+
'ui_clicked_element_id': el_id
|
363 |
+
} );
|
364 |
+
|
365 |
+
wpbc_button_enable_loading_icon( this_el );
|
366 |
+
|
367 |
+
// wpbc_ajx_booking__ui_click_close__change_resource();
|
368 |
+
}
|
369 |
+
|
370 |
+
function wpbc_ajx_booking__ui_click_close__change_resource(){
|
371 |
+
|
372 |
+
var cbrce;
|
373 |
+
|
374 |
+
// Get Resource section
|
375 |
+
cbrce = jQuery("#change_booking_resource__section").detach();
|
376 |
+
|
377 |
+
// Append it to hidden HTML template section at the bottom of the page
|
378 |
+
cbrce.appendTo(jQuery("#wpbc_hidden_template__change_booking_resource"));
|
379 |
+
cbrce = null;
|
380 |
+
|
381 |
+
// Hide all change booking resources sections
|
382 |
+
jQuery(".ui__change_booking_resource__section_in_booking").hide();
|
383 |
+
}
|
384 |
+
|
385 |
+
/**
|
386 |
+
* Duplicate booking in other resource ---------------------------------------------------------------------- */
|
387 |
+
|
388 |
+
function wpbc_ajx_booking__ui_click_show__duplicate_booking( booking_id, resource_id ){
|
389 |
+
|
390 |
+
// Define ID of booking to hidden input
|
391 |
+
jQuery( '#duplicate_booking_to_other_resource__booking_id' ).val( booking_id );
|
392 |
+
|
393 |
+
// Select booking resource that belong to booking
|
394 |
+
jQuery( '#duplicate_booking_to_other_resource__resource_select' ).val( resource_id ).trigger( 'change' );
|
395 |
+
var cbr;
|
396 |
+
|
397 |
+
// Get Resource section
|
398 |
+
cbr = jQuery( "#duplicate_booking_to_other_resource__section" ).detach();
|
399 |
+
|
400 |
+
// Append it to booking ROW
|
401 |
+
cbr.appendTo( jQuery( "#ui__duplicate_booking_to_other_resource__section_in_booking_" + booking_id ) );
|
402 |
+
cbr = null;
|
403 |
+
|
404 |
+
// Hide sections of "Duplicate booking" in all other bookings ROWs
|
405 |
+
if ( ! jQuery( "#ui__duplicate_booking_to_other_resource__section_in_booking_" + booking_id ).is(':visible') ){
|
406 |
+
jQuery( ".ui__under_actions_row__section_in_booking" ).hide();
|
407 |
+
}
|
408 |
+
|
409 |
+
// Show only "Duplicate booking" section for current booking ROW
|
410 |
+
jQuery( "#ui__duplicate_booking_to_other_resource__section_in_booking_" + booking_id ).toggle();
|
411 |
+
}
|
412 |
+
|
413 |
+
function wpbc_ajx_booking__ui_click_save__duplicate_booking( this_el, booking_action, el_id ){
|
414 |
+
|
415 |
+
wpbc_ajx_booking_ajax_action_request( {
|
416 |
+
'booking_action' : booking_action,
|
417 |
+
'booking_id' : jQuery( '#duplicate_booking_to_other_resource__booking_id' ).val(),
|
418 |
+
'selected_resource_id' : jQuery( '#duplicate_booking_to_other_resource__resource_select' ).val(),
|
419 |
+
'ui_clicked_element_id': el_id
|
420 |
+
} );
|
421 |
+
|
422 |
+
wpbc_button_enable_loading_icon( this_el );
|
423 |
+
|
424 |
+
// wpbc_ajx_booking__ui_click_close__change_resource();
|
425 |
+
}
|
426 |
+
|
427 |
+
function wpbc_ajx_booking__ui_click_close__duplicate_booking(){
|
428 |
+
|
429 |
+
var cbrce;
|
430 |
+
|
431 |
+
// Get Resource section
|
432 |
+
cbrce = jQuery("#duplicate_booking_to_other_resource__section").detach();
|
433 |
+
|
434 |
+
// Append it to hidden HTML template section at the bottom of the page
|
435 |
+
cbrce.appendTo(jQuery("#wpbc_hidden_template__duplicate_booking_to_other_resource"));
|
436 |
+
cbrce = null;
|
437 |
+
|
438 |
+
// Hide all change booking resources sections
|
439 |
+
jQuery(".ui__duplicate_booking_to_other_resource__section_in_booking").hide();
|
440 |
+
}
|
441 |
+
|
442 |
+
/**
|
443 |
+
* Change payment status ------------------------------------------------------------------------------------ */
|
444 |
+
|
445 |
+
function wpbc_ajx_booking__ui_click_show__set_payment_status( booking_id ){
|
446 |
+
|
447 |
+
var jSelect = jQuery( '#ui__set_payment_status__section_in_booking_' + booking_id ).find( 'select' )
|
448 |
+
|
449 |
+
var selected_pay_status = jSelect.attr( "ajx-selected-value" );
|
450 |
+
|
451 |
+
// Is it float - then it's unknown
|
452 |
+
if ( !isNaN( parseFloat( selected_pay_status ) ) ){
|
453 |
+
jSelect.find( 'option[value="1"]' ).prop( 'selected', true ); // Unknown value is '1' in select box
|
454 |
+
} else {
|
455 |
+
jSelect.find( 'option[value="' + selected_pay_status + '"]' ).prop( 'selected', true ); // Otherwise known payment status
|
456 |
+
}
|
457 |
+
|
458 |
+
// Hide sections of "Change booking resource" in all other bookings ROWs
|
459 |
+
if ( ! jQuery( "#ui__set_payment_status__section_in_booking_" + booking_id ).is(':visible') ){
|
460 |
+
jQuery( ".ui__under_actions_row__section_in_booking" ).hide();
|
461 |
+
}
|
462 |
+
|
463 |
+
// Show only "change booking resource" section for current booking
|
464 |
+
jQuery( "#ui__set_payment_status__section_in_booking_" + booking_id ).toggle();
|
465 |
+
}
|
466 |
+
|
467 |
+
function wpbc_ajx_booking__ui_click_save__set_payment_status( booking_id, this_el, booking_action, el_id ){
|
468 |
+
|
469 |
+
wpbc_ajx_booking_ajax_action_request( {
|
470 |
+
'booking_action' : booking_action,
|
471 |
+
'booking_id' : booking_id,
|
472 |
+
'selected_payment_status' : jQuery( '#ui_btn_set_payment_status' + booking_id ).val(),
|
473 |
+
'ui_clicked_element_id': el_id + '_save'
|
474 |
+
} );
|
475 |
+
|
476 |
+
wpbc_button_enable_loading_icon( this_el );
|
477 |
+
|
478 |
+
jQuery( '#' + el_id + '_cancel').hide();
|
479 |
+
//wpbc_button_enable_loading_icon( jQuery( '#' + el_id + '_cancel').get(0) );
|
480 |
+
|
481 |
+
}
|
482 |
+
|
483 |
+
function wpbc_ajx_booking__ui_click_close__set_payment_status(){
|
484 |
+
// Hide all change payment status for booking
|
485 |
+
jQuery(".ui__set_payment_status__section_in_booking").hide();
|
486 |
+
}
|
487 |
+
|
488 |
+
|
489 |
+
/**
|
490 |
+
* Change booking cost -------------------------------------------------------------------------------------- */
|
491 |
+
|
492 |
+
function wpbc_ajx_booking__ui_click_save__set_booking_cost( booking_id, this_el, booking_action, el_id ){
|
493 |
+
|
494 |
+
wpbc_ajx_booking_ajax_action_request( {
|
495 |
+
'booking_action' : booking_action,
|
496 |
+
'booking_id' : booking_id,
|
497 |
+
'booking_cost' : jQuery( '#ui_btn_set_booking_cost' + booking_id + '_cost').val(),
|
498 |
+
'ui_clicked_element_id': el_id + '_save'
|
499 |
+
} );
|
500 |
+
|
501 |
+
wpbc_button_enable_loading_icon( this_el );
|
502 |
+
|
503 |
+
jQuery( '#' + el_id + '_cancel').hide();
|
504 |
+
//wpbc_button_enable_loading_icon( jQuery( '#' + el_id + '_cancel').get(0) );
|
505 |
+
|
506 |
+
}
|
507 |
+
|
508 |
+
function wpbc_ajx_booking__ui_click_close__set_booking_cost(){
|
509 |
+
// Hide all change payment status for booking
|
510 |
+
jQuery(".ui__set_booking_cost__section_in_booking").hide();
|
511 |
+
}
|
512 |
+
|
513 |
+
|
514 |
+
/**
|
515 |
+
* Send Payment request -------------------------------------------------------------------------------------- */
|
516 |
+
|
517 |
+
function wpbc_ajx_booking__ui_click__send_payment_request(){
|
518 |
+
|
519 |
+
wpbc_ajx_booking_ajax_action_request( {
|
520 |
+
'booking_action' : 'send_payment_request',
|
521 |
+
'booking_id' : jQuery( '#wpbc_modal__payment_request__booking_id').val(),
|
522 |
+
'reason_of_action' : jQuery( '#wpbc_modal__payment_request__reason_of_action').val(),
|
523 |
+
'ui_clicked_element_id': 'wpbc_modal__payment_request__button_send'
|
524 |
+
} );
|
525 |
+
wpbc_button_enable_loading_icon( jQuery( '#wpbc_modal__payment_request__button_send' ).get( 0 ) );
|
526 |
+
}
|
527 |
+
|
528 |
+
|
529 |
+
/**
|
530 |
+
* Import Google Calendar ------------------------------------------------------------------------------------ */
|
531 |
+
|
532 |
+
function wpbc_ajx_booking__ui_click__import_google_calendar(){
|
533 |
+
|
534 |
+
wpbc_ajx_booking_ajax_action_request( {
|
535 |
+
'booking_action' : 'import_google_calendar',
|
536 |
+
'ui_clicked_element_id': 'wpbc_modal__import_google_calendar__button_send'
|
537 |
+
|
538 |
+
, 'booking_gcal_events_from' : jQuery( '#wpbc_modal__import_google_calendar__section #booking_gcal_events_from option:selected').val()
|
539 |
+
, 'booking_gcal_events_from_offset' : jQuery( '#wpbc_modal__import_google_calendar__section #booking_gcal_events_from_offset' ).val()
|
540 |
+
, 'booking_gcal_events_from_offset_type' : jQuery( '#wpbc_modal__import_google_calendar__section #booking_gcal_events_from_offset_type option:selected').val()
|
541 |
+
|
542 |
+
, 'booking_gcal_events_until' : jQuery( '#wpbc_modal__import_google_calendar__section #booking_gcal_events_until option:selected').val()
|
543 |
+
, 'booking_gcal_events_until_offset' : jQuery( '#wpbc_modal__import_google_calendar__section #booking_gcal_events_until_offset' ).val()
|
544 |
+
, 'booking_gcal_events_until_offset_type' : jQuery( '#wpbc_modal__import_google_calendar__section #booking_gcal_events_until_offset_type option:selected').val()
|
545 |
+
|
546 |
+
, 'booking_gcal_events_max' : jQuery( '#wpbc_modal__import_google_calendar__section #booking_gcal_events_max' ).val()
|
547 |
+
, 'booking_gcal_resource' : jQuery( '#wpbc_modal__import_google_calendar__section #wpbc_booking_resource option:selected').val()
|
548 |
+
} );
|
549 |
+
wpbc_button_enable_loading_icon( jQuery( '#wpbc_modal__import_google_calendar__section #wpbc_modal__import_google_calendar__button_send' ).get( 0 ) );
|
550 |
+
}
|
551 |
+
|
552 |
+
|
553 |
+
/**
|
554 |
+
* Export bookings to CSV ------------------------------------------------------------------------------------ */
|
555 |
+
function wpbc_ajx_booking__ui_click__export_csv( params ){
|
556 |
+
|
557 |
+
var selected_booking_id_arr = wpbc_get_selected_row_id();
|
558 |
+
|
559 |
+
wpbc_ajx_booking_ajax_action_request( {
|
560 |
+
'booking_action' : params[ 'booking_action' ],
|
561 |
+
'ui_clicked_element_id' : params[ 'ui_clicked_element_id' ],
|
562 |
+
|
563 |
+
'export_type' : params[ 'export_type' ],
|
564 |
+
'csv_export_separator' : params[ 'csv_export_separator' ],
|
565 |
+
'csv_export_skip_fields': params[ 'csv_export_skip_fields' ],
|
566 |
+
|
567 |
+
'booking_id' : selected_booking_id_arr.join(','),
|
568 |
+
'search_params' : wpbc_ajx_booking_listing.search_get_all_params()
|
569 |
+
} );
|
570 |
+
|
571 |
+
var this_el = jQuery( '#' + params[ 'ui_clicked_element_id' ] ).get( 0 )
|
572 |
+
|
573 |
+
wpbc_button_enable_loading_icon( this_el );
|
574 |
+
}
|
575 |
+
|
576 |
+
/**
|
577 |
+
* Open URL in new tab - mainly it's used for open CSV link for downloaded exported bookings as CSV
|
578 |
+
*
|
579 |
+
* @param export_csv_url
|
580 |
+
*/
|
581 |
+
function wpbc_ajx_booking__export_csv_url__download( export_csv_url ){
|
582 |
+
|
583 |
+
//var selected_booking_id_arr = wpbc_get_selected_row_id();
|
584 |
+
|
585 |
+
document.location.href = export_csv_url;// + '&selected_id=' + selected_booking_id_arr.join(',');
|
586 |
+
|
587 |
+
// It's open additional dialog for asking opening ulr in new tab
|
588 |
+
// window.open( export_csv_url, '_blank').focus();
|
589 |
+
}
|
includes/page-bookings/_src/bookings__hooks.js
ADDED
@@ -0,0 +1,179 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
"use strict";
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Define HTML ui Hooks: on KeyUp | Change | -> Sort Order & Number Items / Page
|
5 |
+
* * We are chnaged it once, because such elements always the same
|
6 |
+
*/
|
7 |
+
function wpbc_ajx_booking_define_ui_hooks_once(){
|
8 |
+
|
9 |
+
//------------------------------------------------------------------------------------------------------------------
|
10 |
+
// Booked dates
|
11 |
+
//------------------------------------------------------------------------------------------------------------------
|
12 |
+
jQuery( '#wh_booking_date' ).on( 'change', function( event ){
|
13 |
+
|
14 |
+
var changed_value = JSON.parse( jQuery( '#wh_booking_date' ).val() );
|
15 |
+
|
16 |
+
wpbc_ajx_booking_send_search_request_with_params( {
|
17 |
+
'wh_booking_date': changed_value,
|
18 |
+
'page_num' : 1,
|
19 |
+
// Frontend selected elements (saving for future use, after F5)
|
20 |
+
'ui_wh_booking_date_radio' : jQuery( 'input[name="ui_wh_booking_date_radio"]:checked' ).val(),
|
21 |
+
'ui_wh_booking_date_next' : jQuery( '#ui_wh_booking_date_next' ).val(),
|
22 |
+
'ui_wh_booking_date_prior' : jQuery( '#ui_wh_booking_date_prior' ).val(),
|
23 |
+
'ui_wh_booking_date_checkin' : jQuery( '#ui_wh_booking_date_checkin' ).val(),
|
24 |
+
'ui_wh_booking_date_checkout': jQuery( '#ui_wh_booking_date_checkout' ).val()
|
25 |
+
} );
|
26 |
+
} );
|
27 |
+
|
28 |
+
//------------------------------------------------------------------------------------------------------------------
|
29 |
+
// Approved | Pending | All
|
30 |
+
//------------------------------------------------------------------------------------------------------------------
|
31 |
+
jQuery( '#wh_approved' ).on( 'change', function( event ){
|
32 |
+
|
33 |
+
var changed_value = jQuery( '#wh_approved' ).val();
|
34 |
+
|
35 |
+
changed_value = JSON.parse( changed_value );
|
36 |
+
|
37 |
+
wpbc_ajx_booking_send_search_request_with_params( {
|
38 |
+
'wh_approved': changed_value[ 0 ],
|
39 |
+
'page_num' : 1
|
40 |
+
} );
|
41 |
+
} );
|
42 |
+
|
43 |
+
//------------------------------------------------------------------------------------------------------------------
|
44 |
+
// Keywords
|
45 |
+
//------------------------------------------------------------------------------------------------------------------
|
46 |
+
jQuery( '#wpbc_search_field' ).on( "keyup", function ( event ){
|
47 |
+
if ( 13 !== event.which ){
|
48 |
+
wpbc_ajx_booking_searching_after_few_seconds( '#wpbc_search_field' ); // Searching after 1.5 seconds after Key Up
|
49 |
+
} else {
|
50 |
+
wpbc_ajx_booking_searching_after_few_seconds( '#wpbc_search_field', 0 ); // Immediate search
|
51 |
+
}
|
52 |
+
} );
|
53 |
+
|
54 |
+
//------------------------------------------------------------------------------------------------------------------
|
55 |
+
// Existing | Trash | Any
|
56 |
+
//------------------------------------------------------------------------------------------------------------------
|
57 |
+
jQuery( '#wh_trash' ).on( 'change', function( event ){
|
58 |
+
|
59 |
+
var changed_value = JSON.parse( jQuery( '#wh_trash' ).val() );
|
60 |
+
|
61 |
+
wpbc_ajx_booking_send_search_request_with_params( {
|
62 |
+
'wh_trash': changed_value[ 0 ],
|
63 |
+
'page_num': 1
|
64 |
+
} );
|
65 |
+
} );
|
66 |
+
|
67 |
+
//------------------------------------------------------------------------------------------------------------------
|
68 |
+
// All bookings | New bookings
|
69 |
+
//------------------------------------------------------------------------------------------------------------------
|
70 |
+
jQuery( '#wh_what_bookings' ).on( 'change', function( event ){
|
71 |
+
|
72 |
+
var changed_value = JSON.parse( jQuery( '#wh_what_bookings' ).val() );
|
73 |
+
|
74 |
+
wpbc_ajx_booking_send_search_request_with_params( {
|
75 |
+
'wh_what_bookings': changed_value[ 0 ],
|
76 |
+
'page_num': 1
|
77 |
+
} );
|
78 |
+
} );
|
79 |
+
|
80 |
+
//------------------------------------------------------------------------------------------------------------------
|
81 |
+
// "Creation Date" of bookings
|
82 |
+
//------------------------------------------------------------------------------------------------------------------
|
83 |
+
jQuery( '#wh_modification_date' ).on( 'change', function( event ){
|
84 |
+
|
85 |
+
var changed_value = JSON.parse( jQuery( '#wh_modification_date' ).val() );
|
86 |
+
|
87 |
+
wpbc_ajx_booking_send_search_request_with_params( {
|
88 |
+
'wh_modification_date': changed_value,
|
89 |
+
'page_num' : 1,
|
90 |
+
// Frontend selected elements (saving for future use, after F5)
|
91 |
+
'ui_wh_modification_date_radio' : jQuery( 'input[name="ui_wh_modification_date_radio"]:checked' ).val(),
|
92 |
+
'ui_wh_modification_date_prior' : jQuery( '#ui_wh_modification_date_prior' ).val(),
|
93 |
+
'ui_wh_modification_date_checkin' : jQuery( '#ui_wh_modification_date_checkin' ).val(),
|
94 |
+
'ui_wh_modification_date_checkout': jQuery( '#ui_wh_modification_date_checkout' ).val()
|
95 |
+
} );
|
96 |
+
} );
|
97 |
+
|
98 |
+
//------------------------------------------------------------------------------------------------------------------
|
99 |
+
// Payment Status
|
100 |
+
//------------------------------------------------------------------------------------------------------------------
|
101 |
+
jQuery( '#wh_pay_status' ).on( 'change', function( event ){
|
102 |
+
|
103 |
+
var changed_value = JSON.parse( jQuery( '#wh_pay_status' ).val() );
|
104 |
+
|
105 |
+
wpbc_ajx_booking_send_search_request_with_params( {
|
106 |
+
'wh_pay_status': changed_value,
|
107 |
+
'page_num' : 1,
|
108 |
+
// Frontend selected elements (saving for future use, after F5)
|
109 |
+
'ui_wh_pay_status_radio' : ( ( undefined === jQuery( 'input[name="ui_wh_pay_status_radio"]:checked' ).val() )
|
110 |
+
? ''
|
111 |
+
: jQuery( 'input[name="ui_wh_pay_status_radio"]:checked' ).val()
|
112 |
+
),
|
113 |
+
'ui_wh_pay_status_custom': jQuery( '#ui_wh_pay_status_custom' ).val()
|
114 |
+
} );
|
115 |
+
|
116 |
+
|
117 |
+
} );
|
118 |
+
|
119 |
+
//------------------------------------------------------------------------------------------------------------------
|
120 |
+
// Min Cost
|
121 |
+
//------------------------------------------------------------------------------------------------------------------
|
122 |
+
jQuery( '#wh_cost' ).on( 'change', function( event ){
|
123 |
+
|
124 |
+
var changed_value = jQuery( '#wh_cost' ).val();
|
125 |
+
|
126 |
+
wpbc_ajx_booking_send_search_request_with_params( {
|
127 |
+
'wh_cost' : changed_value,
|
128 |
+
'page_num': 1
|
129 |
+
} );
|
130 |
+
} );
|
131 |
+
|
132 |
+
//------------------------------------------------------------------------------------------------------------------
|
133 |
+
// Max Cost
|
134 |
+
//------------------------------------------------------------------------------------------------------------------
|
135 |
+
jQuery( '#wh_cost2' ).on( 'change', function( event ){
|
136 |
+
|
137 |
+
var changed_value = jQuery( '#wh_cost2' ).val();
|
138 |
+
|
139 |
+
wpbc_ajx_booking_send_search_request_with_params( {
|
140 |
+
'wh_cost2' : changed_value,
|
141 |
+
'page_num': 1
|
142 |
+
} );
|
143 |
+
} );
|
144 |
+
|
145 |
+
//------------------------------------------------------------------------------------------------------------------
|
146 |
+
// Booking resources
|
147 |
+
//------------------------------------------------------------------------------------------------------------------
|
148 |
+
jQuery( '#wh_booking_type' ).on( 'change', function( event ){
|
149 |
+
|
150 |
+
var changed_value = jQuery( '#wh_booking_type' ).val(); // it's get as array
|
151 |
+
if ( ( Array.isArray( changed_value ) ) && ( 0 === changed_value.length ) ){
|
152 |
+
changed_value = ['-1'];
|
153 |
+
}
|
154 |
+
wpbc_ajx_booking_send_search_request_with_params( {
|
155 |
+
'wh_booking_type' : changed_value,
|
156 |
+
'page_num': 1
|
157 |
+
} );
|
158 |
+
} );
|
159 |
+
|
160 |
+
|
161 |
+
//------------------------------------------------------------------------------------------------------------------
|
162 |
+
// Sorting
|
163 |
+
//------------------------------------------------------------------------------------------------------------------
|
164 |
+
jQuery( '#wh_sort' ).on( 'change', function( event ){
|
165 |
+
|
166 |
+
var changed_value = jQuery( '#wh_sort' ).val();
|
167 |
+
|
168 |
+
changed_value = JSON.parse( changed_value );
|
169 |
+
|
170 |
+
wpbc_ajx_booking_send_search_request_with_params( {
|
171 |
+
'wh_sort': changed_value[ 0 ]
|
172 |
+
} );
|
173 |
+
} );
|
174 |
+
|
175 |
+
}
|
176 |
+
|
177 |
+
jQuery(document).ready(function(){
|
178 |
+
wpbc_ajx_booking_define_ui_hooks_once();
|
179 |
+
});
|
includes/page-bookings/_src/bookings__listing.js
ADDED
@@ -0,0 +1,534 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
"use strict";
|
2 |
+
|
3 |
+
jQuery('body').on({
|
4 |
+
'touchmove': function(e) {
|
5 |
+
|
6 |
+
jQuery( '.timespartly' ).each( function ( index ){
|
7 |
+
|
8 |
+
var td_el = jQuery( this ).get( 0 );
|
9 |
+
|
10 |
+
if ( (undefined != td_el._tippy) ){
|
11 |
+
|
12 |
+
var instance = td_el._tippy;
|
13 |
+
instance.hide();
|
14 |
+
}
|
15 |
+
} );
|
16 |
+
}
|
17 |
+
});
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Request Object
|
21 |
+
* Here we can define Search parameters and Update it later, when some parameter was changed
|
22 |
+
*
|
23 |
+
*/
|
24 |
+
var wpbc_ajx_booking_listing = (function ( obj, $) {
|
25 |
+
|
26 |
+
// Secure parameters for Ajax ------------------------------------------------------------------------------------
|
27 |
+
var p_secure = obj.security_obj = obj.security_obj || {
|
28 |
+
user_id: 0,
|
29 |
+
nonce : '',
|
30 |
+
locale : ''
|
31 |
+
};
|
32 |
+
|
33 |
+
obj.set_secure_param = function ( param_key, param_val ) {
|
34 |
+
p_secure[ param_key ] = param_val;
|
35 |
+
};
|
36 |
+
|
37 |
+
obj.get_secure_param = function ( param_key ) {
|
38 |
+
return p_secure[ param_key ];
|
39 |
+
};
|
40 |
+
|
41 |
+
|
42 |
+
// Listing Search parameters ------------------------------------------------------------------------------------
|
43 |
+
var p_listing = obj.search_request_obj = obj.search_request_obj || {
|
44 |
+
sort : "booking_id",
|
45 |
+
sort_type : "DESC",
|
46 |
+
page_num : 1,
|
47 |
+
page_items_count: 10,
|
48 |
+
create_date : "",
|
49 |
+
keyword : "",
|
50 |
+
source : ""
|
51 |
+
};
|
52 |
+
|
53 |
+
obj.search_set_all_params = function ( request_param_obj ) {
|
54 |
+
p_listing = request_param_obj;
|
55 |
+
};
|
56 |
+
|
57 |
+
obj.search_get_all_params = function () {
|
58 |
+
return p_listing;
|
59 |
+
};
|
60 |
+
|
61 |
+
obj.search_get_param = function ( param_key ) {
|
62 |
+
return p_listing[ param_key ];
|
63 |
+
};
|
64 |
+
|
65 |
+
obj.search_set_param = function ( param_key, param_val ) {
|
66 |
+
// if ( Array.isArray( param_val ) ){
|
67 |
+
// param_val = JSON.stringify( param_val );
|
68 |
+
// }
|
69 |
+
p_listing[ param_key ] = param_val;
|
70 |
+
};
|
71 |
+
|
72 |
+
obj.search_set_params_arr = function( params_arr ){
|
73 |
+
_.each( params_arr, function ( p_val, p_key, p_data ){ // Define different Search parameters for request
|
74 |
+
this.search_set_param( p_key, p_val );
|
75 |
+
} );
|
76 |
+
}
|
77 |
+
|
78 |
+
|
79 |
+
// Other parameters ------------------------------------------------------------------------------------
|
80 |
+
var p_other = obj.other_obj = obj.other_obj || { };
|
81 |
+
|
82 |
+
obj.set_other_param = function ( param_key, param_val ) {
|
83 |
+
p_other[ param_key ] = param_val;
|
84 |
+
};
|
85 |
+
|
86 |
+
obj.get_other_param = function ( param_key ) {
|
87 |
+
return p_other[ param_key ];
|
88 |
+
};
|
89 |
+
|
90 |
+
|
91 |
+
return obj;
|
92 |
+
}( wpbc_ajx_booking_listing || {}, jQuery ));
|
93 |
+
|
94 |
+
|
95 |
+
/**
|
96 |
+
* Ajax ------------------------------------------------------------------------------------------------------ */
|
97 |
+
|
98 |
+
/**
|
99 |
+
* Send Ajax search request
|
100 |
+
* for searching specific Keyword and other params
|
101 |
+
*/
|
102 |
+
function wpbc_ajx_booking_ajax_search_request(){
|
103 |
+
|
104 |
+
console.groupCollapsed('AJX_BOOKING_LISTING'); console.log( ' == Before Ajax Send - search_get_all_params() == ' , wpbc_ajx_booking_listing.search_get_all_params() );
|
105 |
+
|
106 |
+
wpbc_booking_listing_reload_button__spin_start();
|
107 |
+
|
108 |
+
/*
|
109 |
+
//FixIn: forVideo
|
110 |
+
if ( ! is_this_action ){
|
111 |
+
//wpbc_ajx_booking__actual_listing__hide();
|
112 |
+
jQuery( wpbc_ajx_booking_listing.get_other_param( 'listing_container' ) ).html(
|
113 |
+
'<div style="width:100%;text-align: center;" id="wpbc_loading_section"><span class="wpbc_icn_autorenew wpbc_spin"></span></div>'
|
114 |
+
+ jQuery( wpbc_ajx_booking_listing.get_other_param( 'listing_container' ) ).html()
|
115 |
+
);
|
116 |
+
if ( 'function' === typeof (jQuery( '#wpbc_loading_section' ).wpbc_my_modal) ){ //FixIn: 9.0.1.5
|
117 |
+
jQuery( '#wpbc_loading_section' ).wpbc_my_modal( 'show' );
|
118 |
+
} else {
|
119 |
+
alert( 'Warning! Booking Calendar. Its seems that you have deactivated loading of Bootstrap JS files at Booking Settings General page in Advanced section.' )
|
120 |
+
}
|
121 |
+
}
|
122 |
+
is_this_action = false;
|
123 |
+
*/
|
124 |
+
// Start Ajax
|
125 |
+
jQuery.post( wpbc_global1.wpbc_ajaxurl,
|
126 |
+
{
|
127 |
+
action : 'WPBC_AJX_BOOKING_LISTING',
|
128 |
+
wpbc_ajx_user_id: wpbc_ajx_booking_listing.get_secure_param( 'user_id' ),
|
129 |
+
nonce : wpbc_ajx_booking_listing.get_secure_param( 'nonce' ),
|
130 |
+
wpbc_ajx_locale : wpbc_ajx_booking_listing.get_secure_param( 'locale' ),
|
131 |
+
|
132 |
+
search_params : wpbc_ajx_booking_listing.search_get_all_params()
|
133 |
+
},
|
134 |
+
/**
|
135 |
+
* S u c c e s s
|
136 |
+
*
|
137 |
+
* @param response_data - its object returned from Ajax - class-live-searcg.php
|
138 |
+
* @param textStatus - 'success'
|
139 |
+
* @param jqXHR - Object
|
140 |
+
*/
|
141 |
+
function ( response_data, textStatus, jqXHR ) {
|
142 |
+
//FixIn: forVideo
|
143 |
+
//jQuery( '#wpbc_loading_section' ).wpbc_my_modal( 'hide' );
|
144 |
+
|
145 |
+
console.log( ' == Response WPBC_AJX_BOOKING_LISTING == ', response_data ); console.groupEnd();
|
146 |
+
// Probably Error
|
147 |
+
if ( (typeof response_data !== 'object') || (response_data === null) ){
|
148 |
+
jQuery( '#wh_sort_selector' ).hide();
|
149 |
+
jQuery( wpbc_ajx_booking_listing.get_other_param( 'listing_container' ) ).html(
|
150 |
+
'<div class="wpbc-settings-notice notice-warning" style="text-align:left">' +
|
151 |
+
response_data +
|
152 |
+
'</div>'
|
153 |
+
);
|
154 |
+
return;
|
155 |
+
}
|
156 |
+
|
157 |
+
// Reload page, after filter toolbar was reseted
|
158 |
+
if ( ( undefined != response_data[ 'ajx_cleaned_params' ])
|
159 |
+
&& ( 'reset_done' === response_data[ 'ajx_cleaned_params' ][ 'ui_reset' ])
|
160 |
+
){
|
161 |
+
location.reload();
|
162 |
+
return;
|
163 |
+
}
|
164 |
+
|
165 |
+
// Show listing
|
166 |
+
if ( response_data[ 'ajx_count' ] > 0 ){
|
167 |
+
|
168 |
+
wpbc_ajx_booking_show_listing( response_data[ 'ajx_items' ], response_data[ 'ajx_search_params' ], response_data[ 'ajx_booking_resources' ] );
|
169 |
+
|
170 |
+
wpbc_pagination_echo(
|
171 |
+
wpbc_ajx_booking_listing.get_other_param( 'pagination_container' ),
|
172 |
+
{
|
173 |
+
'page_active': response_data[ 'ajx_search_params' ][ 'page_num' ],
|
174 |
+
'pages_count': Math.ceil( response_data[ 'ajx_count' ] / response_data[ 'ajx_search_params' ][ 'page_items_count' ] ),
|
175 |
+
|
176 |
+
'page_items_count': response_data[ 'ajx_search_params' ][ 'page_items_count' ],
|
177 |
+
'sort_type' : response_data[ 'ajx_search_params' ][ 'sort_type' ]
|
178 |
+
}
|
179 |
+
);
|
180 |
+
wpbc_ajx_booking_define_ui_hooks(); // Redefine Hooks, because we show new DOM elements
|
181 |
+
|
182 |
+
} else {
|
183 |
+
|
184 |
+
wpbc_ajx_booking__actual_listing__hide();
|
185 |
+
jQuery( wpbc_ajx_booking_listing.get_other_param( 'listing_container' ) ).html(
|
186 |
+
'<div class="wpbc-settings-notice0 notice-warning0" style="text-align:center;margin-left:-50px;">' +
|
187 |
+
'<strong>' + 'No results found for current filter options...' + '</strong>' +
|
188 |
+
//'<strong>' + 'No results found...' + '</strong>' +
|
189 |
+
'</div>'
|
190 |
+
);
|
191 |
+
}
|
192 |
+
|
193 |
+
// Update new booking count
|
194 |
+
if ( undefined !== response_data[ 'ajx_new_bookings_count' ] ){
|
195 |
+
var ajx_new_bookings_count = parseInt( response_data[ 'ajx_new_bookings_count' ] )
|
196 |
+
if (ajx_new_bookings_count>0){
|
197 |
+
jQuery( '.wpbc_badge_count' ).show();
|
198 |
+
}
|
199 |
+
jQuery( '.bk-update-count' ).html( ajx_new_bookings_count );
|
200 |
+
}
|
201 |
+
|
202 |
+
wpbc_booking_listing_reload_button__spin_pause();
|
203 |
+
|
204 |
+
jQuery( '#ajax_respond' ).html( response_data ); // For ability to show response, add such DIV element to page
|
205 |
+
}
|
206 |
+
).fail( function ( jqXHR, textStatus, errorThrown ) { if ( window.console && window.console.log ){ console.log( 'Ajax_Error', jqXHR, textStatus, errorThrown ); }
|
207 |
+
jQuery( '#wh_sort_selector' ).hide();
|
208 |
+
var error_message = '<strong>' + 'Error!' + '</strong> ' + errorThrown ;
|
209 |
+
if ( jqXHR.responseText ){
|
210 |
+
error_message += jqXHR.responseText;
|
211 |
+
}
|
212 |
+
error_message = error_message.replace( /\n/g, "<br />" );
|
213 |
+
|
214 |
+
wpbc_ajx_booking_show_message( error_message );
|
215 |
+
})
|
216 |
+
// .done( function ( data, textStatus, jqXHR ) { if ( window.console && window.console.log ){ console.log( 'second success', data, textStatus, jqXHR ); } })
|
217 |
+
// .always( function ( data_jqXHR, textStatus, jqXHR_errorThrown ) { if ( window.console && window.console.log ){ console.log( 'always finished', data_jqXHR, textStatus, jqXHR_errorThrown ); } })
|
218 |
+
; // End Ajax
|
219 |
+
}
|
220 |
+
|
221 |
+
|
222 |
+
/**
|
223 |
+
* Views ----------------------------------------------------------------------------------------------------- */
|
224 |
+
|
225 |
+
/**
|
226 |
+
* Show Listing Table and define gMail checkbox hooks
|
227 |
+
*
|
228 |
+
* @param json_items_arr - JSON object with Items
|
229 |
+
* @param json_search_params - JSON object with Search
|
230 |
+
*/
|
231 |
+
function wpbc_ajx_booking_show_listing( json_items_arr, json_search_params, json_booking_resources ){
|
232 |
+
|
233 |
+
wpbc_ajx_define_templates__resource_manipulation( json_items_arr, json_search_params, json_booking_resources );
|
234 |
+
|
235 |
+
//console.log( 'json_items_arr' , json_items_arr, json_search_params );
|
236 |
+
jQuery( '#wh_sort_selector' ).css( "display", "flex" );
|
237 |
+
var list_header_tpl = wp.template( 'wpbc_ajx_booking_list_header' );
|
238 |
+
var list_row_tpl = wp.template( 'wpbc_ajx_booking_list_row' );
|
239 |
+
|
240 |
+
|
241 |
+
// Header
|
242 |
+
jQuery( wpbc_ajx_booking_listing.get_other_param( 'listing_container' ) ).html( list_header_tpl() );
|
243 |
+
|
244 |
+
// Body
|
245 |
+
jQuery( wpbc_ajx_booking_listing.get_other_param( 'listing_container' ) ).append( '<div class="wpbc_selectable_body"></div>' );
|
246 |
+
|
247 |
+
// R o w s
|
248 |
+
console.groupCollapsed( 'LISTING_ROWS' ); // LISTING_ROWS
|
249 |
+
_.each( json_items_arr, function ( p_val, p_key, p_data ){
|
250 |
+
if ( 'undefined' !== typeof json_search_params[ 'keyword' ] ){ // Parameter for marking keyword with different color in a list
|
251 |
+
p_val[ '__search_request_keyword__' ] = json_search_params[ 'keyword' ];
|
252 |
+
} else {
|
253 |
+
p_val[ '__search_request_keyword__' ] = '';
|
254 |
+
}
|
255 |
+
p_val[ 'booking_resources' ] = json_booking_resources;
|
256 |
+
jQuery( wpbc_ajx_booking_listing.get_other_param( 'listing_container' ) + ' .wpbc_selectable_body' ).append( list_row_tpl( p_val ) );
|
257 |
+
} );
|
258 |
+
console.groupEnd(); // LISTING_ROWS
|
259 |
+
|
260 |
+
wpbc_define_gmail_checkbox_selection( jQuery ); // Redefine Hooks for clicking at Checkboxes
|
261 |
+
}
|
262 |
+
|
263 |
+
|
264 |
+
/**
|
265 |
+
* Define template for changing booking resources & update it each time, when listing updating, useful for showing actual booking resources.
|
266 |
+
*
|
267 |
+
* @param json_items_arr - JSON object with Items
|
268 |
+
* @param json_search_params - JSON object with Search
|
269 |
+
* @param json_booking_resources - JSON object with Resources
|
270 |
+
*/
|
271 |
+
function wpbc_ajx_define_templates__resource_manipulation( json_items_arr, json_search_params, json_booking_resources ){
|
272 |
+
|
273 |
+
// Change booking resource
|
274 |
+
var change_booking_resource_tpl = wp.template( 'wpbc_ajx_change_booking_resource' );
|
275 |
+
|
276 |
+
jQuery( '#wpbc_hidden_template__change_booking_resource' ).html(
|
277 |
+
change_booking_resource_tpl( {
|
278 |
+
'ajx_search_params' : json_search_params,
|
279 |
+
'ajx_booking_resources': json_booking_resources
|
280 |
+
} )
|
281 |
+
);
|
282 |
+
|
283 |
+
// Duplicate booking resource
|
284 |
+
var duplicate_booking_to_other_resource_tpl = wp.template( 'wpbc_ajx_duplicate_booking_to_other_resource' );
|
285 |
+
|
286 |
+
jQuery( '#wpbc_hidden_template__duplicate_booking_to_other_resource' ).html(
|
287 |
+
duplicate_booking_to_other_resource_tpl( {
|
288 |
+
'ajx_search_params' : json_search_params,
|
289 |
+
'ajx_booking_resources': json_booking_resources
|
290 |
+
} )
|
291 |
+
);
|
292 |
+
}
|
293 |
+
|
294 |
+
|
295 |
+
/**
|
296 |
+
* Show just message instead of listing and hide pagination
|
297 |
+
*/
|
298 |
+
function wpbc_ajx_booking_show_message( message ){
|
299 |
+
|
300 |
+
wpbc_ajx_booking__actual_listing__hide();
|
301 |
+
|
302 |
+
jQuery( wpbc_ajx_booking_listing.get_other_param( 'listing_container' ) ).html(
|
303 |
+
'<div class="wpbc-settings-notice notice-warning" style="text-align:left">' +
|
304 |
+
message +
|
305 |
+
'</div>'
|
306 |
+
);
|
307 |
+
}
|
308 |
+
|
309 |
+
|
310 |
+
/**
|
311 |
+
* H o o k s - its Action/Times when need to re-Render Views ----------------------------------------------- */
|
312 |
+
|
313 |
+
/**
|
314 |
+
* Send Ajax Search Request after Updating search request parameters
|
315 |
+
*
|
316 |
+
* @param params_arr
|
317 |
+
*/
|
318 |
+
function wpbc_ajx_booking_send_search_request_with_params ( params_arr ){
|
319 |
+
|
320 |
+
// Define different Search parameters for request
|
321 |
+
_.each( params_arr, function ( p_val, p_key, p_data ) {
|
322 |
+
//console.log( 'Request for: ', p_key, p_val );
|
323 |
+
wpbc_ajx_booking_listing.search_set_param( p_key, p_val );
|
324 |
+
});
|
325 |
+
|
326 |
+
// Send Ajax Request
|
327 |
+
wpbc_ajx_booking_ajax_search_request();
|
328 |
+
}
|
329 |
+
|
330 |
+
/**
|
331 |
+
* Search request for "Page Number"
|
332 |
+
* @param page_number int
|
333 |
+
*/
|
334 |
+
function wpbc_ajx_booking_pagination_click( page_number ){
|
335 |
+
|
336 |
+
wpbc_ajx_booking_send_search_request_with_params( {
|
337 |
+
'page_num': page_number
|
338 |
+
} );
|
339 |
+
}
|
340 |
+
|
341 |
+
|
342 |
+
/**
|
343 |
+
* Keyword Searching ----------------------------------------------------------------------------------------- */
|
344 |
+
|
345 |
+
/**
|
346 |
+
* Search request for "Keyword", also set current page to 1
|
347 |
+
*
|
348 |
+
* @param element_id - HTML ID of element, where was entered keyword
|
349 |
+
*/
|
350 |
+
function wpbc_ajx_booking_send_search_request_for_keyword( element_id ) {
|
351 |
+
|
352 |
+
// We need to Reset page_num to 1 with each new search, because we can be at page #4, but after new search we can have totally only 1 page
|
353 |
+
wpbc_ajx_booking_send_search_request_with_params( {
|
354 |
+
'keyword' : jQuery( element_id ).val(),
|
355 |
+
'page_num': 1
|
356 |
+
} );
|
357 |
+
}
|
358 |
+
|
359 |
+
/**
|
360 |
+
* Send search request after few seconds (usually after 1,5 sec)
|
361 |
+
* Closure function. Its useful, for do not send too many Ajax requests, when someone make fast typing.
|
362 |
+
*/
|
363 |
+
var wpbc_ajx_booking_searching_after_few_seconds = function (){
|
364 |
+
|
365 |
+
var closed_timer = 0;
|
366 |
+
|
367 |
+
return function ( element_id, timer_delay ){
|
368 |
+
|
369 |
+
// Get default value of "timer_delay", if parameter was not passed into the function.
|
370 |
+
timer_delay = typeof timer_delay !== 'undefined' ? timer_delay : 1500;
|
371 |
+
|
372 |
+
clearTimeout( closed_timer ); // Clear previous timer
|
373 |
+
|
374 |
+
// Start new Timer
|
375 |
+
closed_timer = setTimeout( wpbc_ajx_booking_send_search_request_for_keyword.bind( null, element_id ), timer_delay );
|
376 |
+
}
|
377 |
+
}();
|
378 |
+
|
379 |
+
|
380 |
+
/**
|
381 |
+
* Define Dynamic Hooks (like pagination click, which renew each time with new listing showing) ------------- */
|
382 |
+
|
383 |
+
/**
|
384 |
+
* Define HTML ui Hooks: on KeyUp | Change | -> Sort Order & Number Items / Page
|
385 |
+
* We are hcnaged it each time, when showing new listing, because DOM elements chnaged
|
386 |
+
*/
|
387 |
+
function wpbc_ajx_booking_define_ui_hooks(){
|
388 |
+
|
389 |
+
if ( 'function' === typeof( wpbc_define_tippy_tooltips ) ) {
|
390 |
+
wpbc_define_tippy_tooltips( '.wpbc_listing_container ' );
|
391 |
+
}
|
392 |
+
|
393 |
+
wpbc_ajx_booking__ui_define__locale();
|
394 |
+
wpbc_ajx_booking__ui_define__remark();
|
395 |
+
|
396 |
+
// Items Per Page
|
397 |
+
jQuery( '.wpbc_items_per_page' ).on( 'change', function( event ){
|
398 |
+
|
399 |
+
wpbc_ajx_booking_send_search_request_with_params( {
|
400 |
+
'page_items_count' : jQuery( this ).val(),
|
401 |
+
'page_num': 1
|
402 |
+
} );
|
403 |
+
} );
|
404 |
+
|
405 |
+
// Sorting
|
406 |
+
jQuery( '.wpbc_items_sort_type' ).on( 'change', function( event ){
|
407 |
+
|
408 |
+
wpbc_ajx_booking_send_search_request_with_params( {'sort_type': jQuery( this ).val()} );
|
409 |
+
} );
|
410 |
+
}
|
411 |
+
|
412 |
+
|
413 |
+
/**
|
414 |
+
* Show / Hide Listing --------------------------------------------------------------------------------------- */
|
415 |
+
|
416 |
+
/**
|
417 |
+
* Show Listing Table - Sending Ajax Request - with parameters that we early defined in "wpbc_ajx_booking_listing" Obj.
|
418 |
+
*/
|
419 |
+
function wpbc_ajx_booking__actual_listing__show(){
|
420 |
+
|
421 |
+
wpbc_ajx_booking_ajax_search_request(); // Send Ajax Request - with parameters that we early defined in "wpbc_ajx_booking_listing" Obj.
|
422 |
+
}
|
423 |
+
|
424 |
+
/**
|
425 |
+
* Hide Listing Table ( and Pagination )
|
426 |
+
*/
|
427 |
+
function wpbc_ajx_booking__actual_listing__hide(){
|
428 |
+
jQuery( '#wh_sort_selector' ).hide();
|
429 |
+
jQuery( wpbc_ajx_booking_listing.get_other_param( 'listing_container' ) ).html( '' );
|
430 |
+
jQuery( wpbc_ajx_booking_listing.get_other_param( 'pagination_container' ) ).html( '' );
|
431 |
+
}
|
432 |
+
|
433 |
+
|
434 |
+
/**
|
435 |
+
* Support functions for Content Template data --------------------------------------------------------------- */
|
436 |
+
|
437 |
+
/**
|
438 |
+
* Highlight strings,
|
439 |
+
* by inserting <span class="fieldvalue name fieldsearchvalue">...</span> html elements into the string.
|
440 |
+
* @param {string} booking_details - Source string
|
441 |
+
* @param {string} booking_keyword - Keyword to highlight
|
442 |
+
* @returns {string}
|
443 |
+
*/
|
444 |
+
function wpbc_get_highlighted_search_keyword( booking_details, booking_keyword ){
|
445 |
+
|
446 |
+
booking_keyword = booking_keyword.trim().toLowerCase();
|
447 |
+
if ( 0 == booking_keyword.length ){
|
448 |
+
return booking_details;
|
449 |
+
}
|
450 |
+
|
451 |
+
// Highlight substring withing HTML tags in "Content of booking fields data" -- e.g. starting from > and ending with <
|
452 |
+
let keywordRegex = new RegExp( `fieldvalue[^<>]*>([^<]*${booking_keyword}[^<]*)`, 'gim' );
|
453 |
+
|
454 |
+
//let matches = [...booking_details.toLowerCase().matchAll( keywordRegex )];
|
455 |
+
let matches = booking_details.toLowerCase().matchAll( keywordRegex );
|
456 |
+
matches = Array.from( matches );
|
457 |
+
|
458 |
+
let strings_arr = [];
|
459 |
+
let pos_previous = 0;
|
460 |
+
let search_pos_start;
|
461 |
+
let search_pos_end;
|
462 |
+
|
463 |
+
for ( const match of matches ){
|
464 |
+
|
465 |
+
search_pos_start = match.index + match[ 0 ].toLowerCase().indexOf( '>', 0 ) + 1 ;
|
466 |
+
|
467 |
+
strings_arr.push( booking_details.substr( pos_previous, (search_pos_start - pos_previous) ) );
|
468 |
+
|
469 |
+
search_pos_end = booking_details.toLowerCase().indexOf( '<', search_pos_start );
|
470 |
+
|
471 |
+
strings_arr.push( '<span class="fieldvalue name fieldsearchvalue">' + booking_details.substr( search_pos_start, (search_pos_end - search_pos_start) ) + '</span>' );
|
472 |
+
|
473 |
+
pos_previous = search_pos_end;
|
474 |
+
}
|
475 |
+
|
476 |
+
strings_arr.push( booking_details.substr( pos_previous, (booking_details.length - pos_previous) ) );
|
477 |
+
|
478 |
+
return strings_arr.join( '' );
|
479 |
+
}
|
480 |
+
|
481 |
+
/**
|
482 |
+
* Convert special HTML characters from: & -> &
|
483 |
+
*
|
484 |
+
* @param text
|
485 |
+
* @returns {*}
|
486 |
+
*/
|
487 |
+
function wpbc_decode_HTML_entities( text ){
|
488 |
+
var textArea = document.createElement( 'textarea' );
|
489 |
+
textArea.innerHTML = text;
|
490 |
+
return textArea.value;
|
491 |
+
}
|
492 |
+
|
493 |
+
/**
|
494 |
+
* Convert TO special HTML characters from: & -> &
|
495 |
+
*
|
496 |
+
* @param text
|
497 |
+
* @returns {*}
|
498 |
+
*/
|
499 |
+
function wpbc_encode_HTML_entities(text) {
|
500 |
+
var textArea = document.createElement('textarea');
|
501 |
+
textArea.innerText = text;
|
502 |
+
return textArea.innerHTML;
|
503 |
+
}
|
504 |
+
|
505 |
+
|
506 |
+
/**
|
507 |
+
* Support Functions - Spin Icon in Buttons ------------------------------------------------------------------ */
|
508 |
+
|
509 |
+
/**
|
510 |
+
* Spin button in Filter toolbar - Start
|
511 |
+
*/
|
512 |
+
function wpbc_booking_listing_reload_button__spin_start(){
|
513 |
+
jQuery( '#wpbc_booking_listing_reload_button .menu_icon.wpbc_spin').removeClass( 'wpbc_animation_pause' );
|
514 |
+
}
|
515 |
+
|
516 |
+
/**
|
517 |
+
* Spin button in Filter toolbar - Pause
|
518 |
+
*/
|
519 |
+
function wpbc_booking_listing_reload_button__spin_pause(){
|
520 |
+
jQuery( '#wpbc_booking_listing_reload_button .menu_icon.wpbc_spin' ).addClass( 'wpbc_animation_pause' );
|
521 |
+
}
|
522 |
+
|
523 |
+
/**
|
524 |
+
* Spin button in Filter toolbar - is Spinning ?
|
525 |
+
*
|
526 |
+
* @returns {boolean}
|
527 |
+
*/
|
528 |
+
function wpbc_booking_listing_reload_button__is_spin(){
|
529 |
+
if ( jQuery( '#wpbc_booking_listing_reload_button .menu_icon.wpbc_spin' ).hasClass( 'wpbc_animation_pause' ) ){
|
530 |
+
return true;
|
531 |
+
} else {
|
532 |
+
return false;
|
533 |
+
}
|
534 |
+
}
|
includes/page-bookings/bookings__actions.php
ADDED
@@ -0,0 +1,3688 @@
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
|
Â
|
1 |
+
<?php /**
|
2 |
+
* @version 1.0
|
3 |
+
* @description AJX_Bookings
|
4 |
+
* @category AJX_Bookings Actions
|
5 |
+
* @author wpdevelop
|
6 |
+
*
|
7 |
+
* @web-site http://oplugins.com/
|
8 |
+
* @email info@oplugins.com
|
9 |
+
*
|
10 |
+
* @modified 2022-06-10
|
11 |
+
*/
|
12 |
+
|
13 |
+
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
14 |
+
|
15 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
16 |
+
// Main Ajax handler
|
17 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Ajax Actions - Get Listing Data and Response to JS script
|
21 |
+
*/
|
22 |
+
function wpbc_ajax_WPBC_AJX_BOOKING_ACTIONS() {
|
23 |
+
|
24 |
+
if ( ! isset( $_POST['action_params'] ) || empty( $_POST['action_params'] ) ) {
|
25 |
+
exit;
|
26 |
+
}
|
27 |
+
|
28 |
+
$ajax_errors = new WPBC_AJAX_ERROR_CATCHING();
|
29 |
+
|
30 |
+
// Security ----------------------------------------------------------------------------------------------- // in Ajax Post: 'nonce': wpbc_ajx_booking_listing.get_secure_param( 'nonce' ),
|
31 |
+
$action_name = 'wpbc_ajx_booking_listing_ajx' . '_wpbcnonce';
|
32 |
+
$nonce_post_key = 'nonce';
|
33 |
+
$result_check = check_ajax_referer( $action_name, $nonce_post_key );
|
34 |
+
|
35 |
+
$user_id = ( isset( $_REQUEST['wpbc_ajx_user_id'] ) ) ? intval( $_REQUEST['wpbc_ajx_user_id'] ) : get_current_user_id();
|
36 |
+
|
37 |
+
// Get clean Parameters for SQL ---------------------------------------------------------------------------
|
38 |
+
$request_prefix = 'action_params';
|
39 |
+
|
40 |
+
$request_params = wpbc_esc_get__value_or_default__in_request(
|
41 |
+
array(
|
42 |
+
'booking_action' => array( 'validate' => array(
|
43 |
+
'set_booking_locale',
|
44 |
+
'set_booking_pending' ,
|
45 |
+
'set_booking_approved',
|
46 |
+
'move_booking_to_trash',
|
47 |
+
'restore_booking_from_trash',
|
48 |
+
'delete_booking_completely',
|
49 |
+
'set_booking_as_read',
|
50 |
+
'set_booking_as_unread',
|
51 |
+
'empty_trash',
|
52 |
+
'set_booking_note',
|
53 |
+
'change_booking_resource',
|
54 |
+
'duplicate_booking_to_other_resource',
|
55 |
+
'set_payment_status',
|
56 |
+
'set_booking_cost',
|
57 |
+
'send_payment_request',
|
58 |
+
'import_google_calendar',
|
59 |
+
'export_csv'
|
60 |
+
|
61 |
+
), 'default' => '' ),
|
62 |
+
'booking_id' => array( 'validate' => 'digit_or_csd', 'default' => 0 ),
|
63 |
+
'selected_resource_id' => array( 'validate' => 'd', 'default' => 0 ),
|
64 |
+
'booking_meta_locale' => array( 'validate' => 's', 'default' => '' ),
|
65 |
+
'reason_of_action' => array( 'validate' => 's', 'default' => '' ),
|
66 |
+
'remark' => array( 'validate' => 's', 'default' => '' ),
|
67 |
+
'ui_clicked_element_id' => array( 'validate' => 's', 'default' => '' ),
|
68 |
+
'selected_payment_status' => array( 'validate' => 's', 'default' => '' ),
|
69 |
+
'booking_cost' => array( 'validate' => 's', 'default' => '' ),
|
70 |
+
|
71 |
+
'export_type' => array( 'validate' => array( 'csv_all', 'csv_page' ), 'default' => 'csv_page' ),
|
72 |
+
'csv_export_separator' => array( 'validate' => array( 'semicolon', 'comma' ), 'default' => ';' ),
|
73 |
+
'csv_export_skip_fields' => array( 'validate' => 's', 'default' => '' ),
|
74 |
+
|
75 |
+
'booking_gcal_events_from' => array( 'validate' => 's', 'default' => '' ),
|
76 |
+
'booking_gcal_events_from_offset' => array( 'validate' => 's', 'default' => '' ),
|
77 |
+
'booking_gcal_events_from_offset_type' => array( 'validate' => 's', 'default' => '' ),
|
78 |
+
'booking_gcal_events_until' => array( 'validate' => 's', 'default' => '' ),
|
79 |
+
'booking_gcal_events_until_offset' => array( 'validate' => 's', 'default' => '' ),
|
80 |
+
'booking_gcal_events_until_offset_type' => array( 'validate' => 's', 'default' => '' ),
|
81 |
+
'booking_gcal_events_max' => array( 'validate' => 'd', 'default' => 25 ),
|
82 |
+
'booking_gcal_resource' => array( 'validate' => 's', 'default' => '' )
|
83 |
+
|
84 |
+
), $request_prefix
|
85 |
+
);
|
86 |
+
|
87 |
+
$action_result = array();
|
88 |
+
|
89 |
+
switch ( $request_params['booking_action'] ) {
|
90 |
+
|
91 |
+
case 'set_booking_locale':
|
92 |
+
$action_result = wpbc_booking_do_action__set_booking_locale( $request_params['booking_id']
|
93 |
+
, array(
|
94 |
+
'user_id' => $user_id,
|
95 |
+
'booking_locale' => $request_params['booking_meta_locale']
|
96 |
+
)
|
97 |
+
);
|
98 |
+
break;
|
99 |
+
|
100 |
+
case 'set_booking_pending': // Pending
|
101 |
+
$action_result = wpbc_booking_do_action__set_booking_approved_or_pending( $request_params['booking_id']
|
102 |
+
, array(
|
103 |
+
'user_id' => $user_id,
|
104 |
+
'reason_of_action' => $request_params['reason_of_action'],
|
105 |
+
'is_approve' => '0'
|
106 |
+
)
|
107 |
+
);
|
108 |
+
break;
|
109 |
+
|
110 |
+
case 'set_booking_approved': // Approve
|
111 |
+
$action_result = wpbc_booking_do_action__set_booking_approved_or_pending( $request_params['booking_id']
|
112 |
+
, array(
|
113 |
+
'user_id' => $user_id,
|
114 |
+
'reason_of_action' => $request_params['reason_of_action'],
|
115 |
+
'is_approve' => '1'
|
116 |
+
)
|
117 |
+
);
|
118 |
+
break;
|
119 |
+
|
120 |
+
case 'move_booking_to_trash': // Approve
|
121 |
+
$action_result = wpbc_booking_do_action__trash_booking_or_restore( $request_params['booking_id']
|
122 |
+
, array(
|
123 |
+
'user_id' => $user_id,
|
124 |
+
'reason_of_action' => $request_params['reason_of_action'],
|
125 |
+
'is_trash' => '1'
|
126 |
+
)
|
127 |
+
);
|
128 |
+
break;
|
129 |
+
|
130 |
+
case 'restore_booking_from_trash':
|
131 |
+
$action_result = wpbc_booking_do_action__trash_booking_or_restore( $request_params['booking_id']
|
132 |
+
, array(
|
133 |
+
'user_id' => $user_id,
|
134 |
+
'reason_of_action' => $request_params['reason_of_action'],
|
135 |
+
'is_trash' => '0'
|
136 |
+
)
|
137 |
+
);
|
138 |
+
break;
|
139 |
+
|
140 |
+
case 'delete_booking_completely':
|
141 |
+
$action_result = wpbc_booking_do_action__delete_booking_completely( $request_params['booking_id']
|
142 |
+
, array(
|
143 |
+
'user_id' => $user_id,
|
144 |
+
'reason_of_action' => $request_params['reason_of_action'],
|
145 |
+
)
|
146 |
+
);
|
147 |
+
break;
|
148 |
+
|
149 |
+
case 'set_booking_as_read':
|
150 |
+
$action_result = wpbc_booking_do_action__set_booking_as_read_unread( $request_params['booking_id']
|
151 |
+
, array(
|
152 |
+
'user_id' => $user_id,
|
153 |
+
'is_new' => '0'
|
154 |
+
)
|
155 |
+
);
|
156 |
+
break;
|
157 |
+
|
158 |
+
case 'set_booking_as_unread':
|
159 |
+
$action_result = wpbc_booking_do_action__set_booking_as_read_unread( $request_params['booking_id']
|
160 |
+
, array(
|
161 |
+
'user_id' => $user_id,
|
162 |
+
'is_new' => '1'
|
163 |
+
)
|
164 |
+
);
|
165 |
+
break;
|
166 |
+
|
167 |
+
case 'empty_trash':
|
168 |
+
$action_result = wpbc_booking_do_action__empty_trash( array(
|
169 |
+
'user_id' => $user_id
|
170 |
+
) );
|
171 |
+
break;
|
172 |
+
|
173 |
+
case 'set_booking_note':
|
174 |
+
$action_result = wpbc_booking_do_action__set_booking_note( $request_params['booking_id']
|
175 |
+
, array(
|
176 |
+
'user_id' => $user_id,
|
177 |
+
'remark' => $request_params['remark'],
|
178 |
+
)
|
179 |
+
);
|
180 |
+
break;
|
181 |
+
|
182 |
+
case 'change_booking_resource': // Pending
|
183 |
+
$action_result = wpbc_booking_do_action__change_booking_resource( $request_params['booking_id']
|
184 |
+
, $request_params['selected_resource_id']
|
185 |
+
, array(
|
186 |
+
'user_id' => $user_id
|
187 |
+
)
|
188 |
+
);
|
189 |
+
break;
|
190 |
+
case 'duplicate_booking_to_other_resource':
|
191 |
+
$action_result = wpbc_booking_do_action__duplicate_booking_to_other_resource( $request_params['booking_id']
|
192 |
+
, $request_params['selected_resource_id']
|
193 |
+
, array(
|
194 |
+
'user_id' => $user_id
|
195 |
+
)
|
196 |
+
);
|
197 |
+
break;
|
198 |
+
case 'set_payment_status':
|
199 |
+
$action_result = wpbc_booking_do_action__set_payment_status( $request_params['booking_id']
|
200 |
+
, $request_params['selected_payment_status']
|
201 |
+
, array(
|
202 |
+
'user_id' => $user_id
|
203 |
+
)
|
204 |
+
);
|
205 |
+
break;
|
206 |
+
case 'set_booking_cost':
|
207 |
+
$action_result = wpbc_booking_do_action__set_booking_cost( $request_params['booking_id']
|
208 |
+
, $request_params['booking_cost']
|
209 |
+
, array(
|
210 |
+
'user_id' => $user_id
|
211 |
+
)
|
212 |
+
);
|
213 |
+
break;
|
214 |
+
case 'send_payment_request':
|
215 |
+
$action_result = wpbc_booking_do_action__send_payment_request( $request_params['booking_id']
|
216 |
+
, $request_params['reason_of_action']
|
217 |
+
, array(
|
218 |
+
'user_id' => $user_id
|
219 |
+
)
|
220 |
+
);
|
221 |
+
break;
|
222 |
+
|
223 |
+
case 'import_google_calendar':
|
224 |
+
$action_result = wpbc_booking_do_action__import_google_calendar( $request_params
|
225 |
+
, array(
|
226 |
+
'user_id' => $user_id
|
227 |
+
)
|
228 |
+
);
|
229 |
+
break;
|
230 |
+
|
231 |
+
case 'export_csv':
|
232 |
+
|
233 |
+
$action_result = wpbc_booking_do_action__export_csv( $request_params
|
234 |
+
, array(
|
235 |
+
'user_id' => $user_id
|
236 |
+
)
|
237 |
+
);
|
238 |
+
break;
|
239 |
+
|
240 |
+
default:
|
241 |
+
}
|
242 |
+
|
243 |
+
|
244 |
+
$defaults = array(
|
245 |
+
'new_listing_params' => false // required for Import Google Calendar bookings
|
246 |
+
, 'after_action_result' => false
|
247 |
+
, 'after_action_message' => sprintf( __('No actions %s has been processed.', 'booking')
|
248 |
+
, ' <strong>' . $request_params['booking_action'] . '</strong> ' )
|
249 |
+
);
|
250 |
+
$action_result = wp_parse_args( $action_result, $defaults );
|
251 |
+
|
252 |
+
// Check if there were some errors --------------------------------------------------------------------------------
|
253 |
+
$error_messages = $ajax_errors->get_error_messages();
|
254 |
+
if ( ! empty( $error_messages ) ) {
|
255 |
+
$action_result['after_action_message'] .= $error_messages;
|
256 |
+
}
|
257 |
+
|
258 |
+
//------------------------------------------------------------------------------------------------------------------
|
259 |
+
// Send JSON. Its will make "wp_json_encode" - so pass only array, and This function call wp_die( '', '', array( 'response' => null, ) ) Pass JS OBJ: response_data in "jQuery.post( " function on success.
|
260 |
+
wp_send_json( array(
|
261 |
+
'ajx_action_params' => $_REQUEST['action_params'], // Do not clean input parameters
|
262 |
+
'ajx_cleaned_params' => $request_params, // Cleaned input parameters
|
263 |
+
'ajx_after_action_message' => $action_result['after_action_message'], // Message to show
|
264 |
+
'ajx_after_action_result' => (int) $action_result['after_action_result'], // Result key 0 | 1
|
265 |
+
'ajx_after_action_result_all_params_arr' => $action_result // All result parameters
|
266 |
+
) );
|
267 |
+
}
|
268 |
+
|
269 |
+
|
270 |
+
// <editor-fold defaultstate="collapsed" desc=" == Ajax Actions for bookings == " >
|
271 |
+
|
272 |
+
/**
|
273 |
+
* Action: set booking as Locale
|
274 |
+
*
|
275 |
+
* @param int $booking_id ID of booking 10
|
276 |
+
* @param $params
|
277 |
+
*
|
278 |
+
* @return array
|
279 |
+
*/
|
280 |
+
function wpbc_booking_do_action__set_booking_locale( $booking_id, $params ){
|
281 |
+
|
282 |
+
$booking_locale = $params['booking_locale'];
|
283 |
+
|
284 |
+
// LOG ---------------------------------------------------------------------------------------------------------
|
285 |
+
$curr_user = get_user_by( 'id', (int) $params['user_id'] );
|
286 |
+
wpbc_add_log_info( $booking_id,
|
287 |
+
sprintf( __( 'Booking locale changed to %s by:', 'booking' ), $booking_locale )
|
288 |
+
. ' ' . $curr_user->first_name . ' ' . $curr_user->last_name . ' (' . $curr_user->user_email . ')'
|
289 |
+
);
|
290 |
+
|
291 |
+
// Action ---------------------------------------------------------------------------------------------------------
|
292 |
+
$option_arr = array( 'booking_meta_locale' => $booking_locale );
|
293 |
+
|
294 |
+
$result = wpbc_save_booking_meta_option( $booking_id, $option_arr );
|
295 |
+
|
296 |
+
if ( $result ) {
|
297 |
+
$after_action_result = true;
|
298 |
+
$after_action_message = ( ( false === strpos( $booking_id, ',' ) )
|
299 |
+
? sprintf( __( 'Booking has been changed locale to %s', 'booking' ), "<strong>{$booking_locale}</strong>" )
|
300 |
+
: sprintf( __( 'Bookings have been changed locale to %s', 'booking' ), "<strong>{$booking_locale}</strong>" )
|
301 |
+
)
|
302 |
+
. ' <span style="font-size:0.9em;">( ID = <strong>' . $booking_id . '</strong> )</span>';
|
303 |
+
} else {
|
304 |
+
$after_action_result = false;
|
305 |
+
$after_action_message = ( ( false === strpos( $booking_id, ',' ) )
|
306 |
+
? sprintf( __( 'Booking has NOT been changed locale to %s', 'booking' ), "<strong>{$booking_locale}</strong>" )
|
307 |
+
: sprintf( __( 'Bookings have NOT been changed locale to %s', 'booking' ), "<strong>{$booking_locale}</strong>" )
|
308 |
+
)
|
309 |
+
. ' <span style="font-size:0.9em;">( ID = <strong>' . $booking_id . '</strong> )</span>';
|
310 |
+
}
|
311 |
+
|
312 |
+
return array(
|
313 |
+
'after_action_result' => $after_action_result,
|
314 |
+
'after_action_message' => $after_action_message
|
315 |
+
);
|
316 |
+
}
|
317 |
+
|
318 |
+
/**
|
319 |
+
* Action: Get Google Calendar Link
|
320 |
+
*
|
321 |
+
* @param $booking_data array(
|
322 |
+
'form_data' => array( ... )
|
323 |
+
'form_show' => ....
|
324 |
+
'dates_short' => array( ... )
|
325 |
+
)
|
326 |
+
*
|
327 |
+
* @return string URL of encoded link for adding to Google Calendar
|
328 |
+
*/
|
329 |
+
function wpbc_booking_do_action__get_google_calendar_link( $booking_data ){
|
330 |
+
|
331 |
+
$params = array();
|
332 |
+
$params['timezone'] = get_bk_option('booking_gcal_timezone');
|
333 |
+
|
334 |
+
$booking_gcal_events_form_fields = maybe_unserialize( get_bk_option( 'booking_gcal_events_form_fields') ); // array( [title]=>text^name, [description]=>textarea^details, [where]=>text^ )
|
335 |
+
|
336 |
+
// Fields ----------------------------------------------------------------------------------------------------------
|
337 |
+
$fields = array( 'title' => '', 'description' => '', 'where' => '' );
|
338 |
+
|
339 |
+
foreach ( $fields as $key_name => $field_value ) {
|
340 |
+
|
341 |
+
if ( ! empty( $booking_gcal_events_form_fields[ $key_name ] ) ) {
|
342 |
+
|
343 |
+
$field_name = explode( '^', $booking_gcal_events_form_fields[ $key_name ] );
|
344 |
+
|
345 |
+
$field_name = $field_name[ ( count( $field_name ) - 1 ) ]; //FixIn: 8.7.7.6
|
346 |
+
|
347 |
+
if ( 'description' === $key_name ) { //FixIn: 8.1.3.2
|
348 |
+
|
349 |
+
if ( isset( $booking_data['form_show'] ) ) { //FixIn: 8.7.3.14
|
350 |
+
//FixIn: 8.7.11.4
|
351 |
+
$fields[ $key_name ] = $booking_data['form_show'];
|
352 |
+
$fields[ $key_name ] = htmlspecialchars_decode($fields[ $key_name ], ENT_QUOTES );
|
353 |
+
$fields[ $key_name ] = urlencode($fields[ $key_name ]);
|
354 |
+
$fields[ $key_name ] = htmlentities($fields[ $key_name ] );
|
355 |
+
$fields[ $key_name ] = htmlspecialchars_decode ( $fields[ $key_name ], ENT_NOQUOTES );
|
356 |
+
}
|
357 |
+
|
358 |
+
} else if ( ( ! empty( $field_name ) )
|
359 |
+
&& ( ! empty( $booking_data['form_data'] ) )
|
360 |
+
&& ( ! empty( $booking_data['form_data'][ $field_name ] ) )
|
361 |
+
) {
|
362 |
+
//FixIn: 8.7.11.4
|
363 |
+
$fields[ $key_name ] = $booking_data['form_data'][ $field_name ];
|
364 |
+
$fields[ $key_name ] = htmlspecialchars_decode($fields[ $key_name ], ENT_QUOTES );
|
365 |
+
/**
|
366 |
+
* // Convert here from usual symbols to URL symbols https://www.url-encode-decode.com/
|
367 |
+
$fields[ $key_name ] = str_replace( array( '%','#', '+', '&' )
|
368 |
+
, array( '%25','%23', '%2B', '%26')
|
369 |
+
, $fields[ $key_name ]
|
370 |
+
);
|
371 |
+
*/
|
372 |
+
$fields[ $key_name ] = urlencode($fields[ $key_name ]);
|
373 |
+
$fields[ $key_name ] = htmlentities($fields[ $key_name ] );
|
374 |
+
$fields[ $key_name ] = htmlspecialchars_decode ( $fields[ $key_name ], ENT_NOQUOTES );
|
375 |
+
}
|
376 |
+
}
|
377 |
+
}
|
378 |
+
|
379 |
+
// Dates -----------------------------------------------------------------------------------------------------------
|
380 |
+
$check_in_timestamp = $check_out_timestamp = '';
|
381 |
+
if ( ! empty( $booking_data[ 'dates_short' ] ) ) {
|
382 |
+
|
383 |
+
/**
|
384 |
+
* All day events, you can use 20161208/20161209 - note that the old google documentation gets it wrong.
|
385 |
+
* You must use the following date as the end date for a one day all day event,
|
386 |
+
* or +1 day to whatever you want the end date to be.
|
387 |
+
*/
|
388 |
+
|
389 |
+
$check_in_timestamp = strtotime( $booking_data[ 'dates_short' ][ 0 ], current_time( 'timestamp' ) );
|
390 |
+
if ( trim( substr( $booking_data[ 'dates_short' ][ 0 ], 11 ) ) == '00:00:00' ) {
|
391 |
+
$check_in_timestamp = date( "Ymd", $check_in_timestamp ); // All day
|
392 |
+
} else {
|
393 |
+
$check_in_timestamp = date( "Ymd\THis", $check_in_timestamp ); //$check_in_timestamp = date( "Ymd\THis\Z", $check_in_timestamp );
|
394 |
+
}
|
395 |
+
|
396 |
+
$check_out_timestamp = strtotime( $booking_data[ 'dates_short' ][ ( count( $booking_data[ 'dates_short' ] ) - 1 ) ], current_time( 'timestamp' ) );
|
397 |
+
if ( trim( substr( $booking_data[ 'dates_short' ][ ( count( $booking_data[ 'dates_short' ] ) - 1 ) ], 11 ) ) == '00:00:00' ) {
|
398 |
+
$check_out_timestamp = strtotime( '+1 day', $check_out_timestamp );
|
399 |
+
$check_out_timestamp = date( "Ymd", $check_out_timestamp ); // All day
|
400 |
+
} else {
|
401 |
+
$check_out_timestamp = date( "Ymd\THis", $check_out_timestamp ); //$check_out_timestamp = date( "Ymd\THis\Z", $check_out_timestamp );
|
402 |
+
}
|
403 |
+
}
|
404 |
+
|
405 |
+
// Link -----------------------------------------------------------------------------------------------------------
|
406 |
+
/**
|
407 |
+
* Convert an ISO date/time to a UNIX timestamp
|
408 |
+
function iso_to_ts( $iso ) {
|
409 |
+
sscanf( $iso, "%u-%u-%uT%u:%u:%uZ", $year, $month, $day, $hour, $minute, $second );
|
410 |
+
return mktime( $hour, $minute, $second, $month, $day, $year );
|
411 |
+
20140127T224000Z
|
412 |
+
date("Ymd\THis\Z", time());
|
413 |
+
*/
|
414 |
+
|
415 |
+
/**
|
416 |
+
* action: action=TEMPLATE
|
417 |
+
A default required parameter.
|
418 |
+
|
419 |
+
src:
|
420 |
+
Example: src=default%40gmail.com
|
421 |
+
Format: src=text
|
422 |
+
This is not covered by Google help but is an optional parameter in order to add an event to a shared calendar rather than a user's default.
|
423 |
+
|
424 |
+
text:
|
425 |
+
Example: text=Garden%20Waste%20Collection
|
426 |
+
Format: text=text
|
427 |
+
This is a required parameter giving the event title.
|
428 |
+
|
429 |
+
dates:
|
430 |
+
Example: dates=20090621T063000Z/20090621T080000Z (i.e. an event on 21 June 2009 from 7.30am to 9.0am British Summer Time (=GMT+1)).
|
431 |
+
Format: dates=YYYYMMDDToHHMMSSZ/YYYYMMDDToHHMMSSZ
|
432 |
+
This required parameter gives the start and end dates and times (in Greenwich Mean Time) for the event.
|
433 |
+
|
434 |
+
location:
|
435 |
+
Example: location=Home
|
436 |
+
Format: location=text
|
437 |
+
The obvious location field.
|
438 |
+
|
439 |
+
trp:
|
440 |
+
Example: trp=false
|
441 |
+
Format: trp=true/false
|
442 |
+
Show event as busy (true) or available (false)
|
443 |
+
|
444 |
+
sprop:
|
445 |
+
Example: sprop=http%3A%2F%2Fwww.me.org
|
446 |
+
Example: sprop=name:Home%20Page
|
447 |
+
Format: sprop=website and/or sprop=name:website_name
|
448 |
+
*/
|
449 |
+
|
450 |
+
//$link_add2gcal = 'http://www.google.com/calendar/event?action=TEMPLATE';
|
451 |
+
//$link_add2gcal .= '&text=' . $fields['title'];
|
452 |
+
$link_add2gcal = 'https://calendar.google.com/calendar/r/eventedit?'; //FixIn: 8.7.3.10
|
453 |
+
$link_add2gcal .= 'text=' . $fields['title']; //FixIn: 8.7.11.4
|
454 |
+
$link_add2gcal .= '&dates=' . $check_in_timestamp . '/' . $check_out_timestamp; //$link_add2gcal .= '&dates=[start-custom format='Ymd\\THi00\\Z']/[end-custom format='Ymd\\THi00\\Z']';
|
455 |
+
$link_add2gcal .= '&details=' . $fields['description']; //FixIn: 8.7.11.4
|
456 |
+
$link_add2gcal .= '&location=' . $fields['where']; //FixIn: 8.7.11.4
|
457 |
+
$link_add2gcal .= '&trp=false';
|
458 |
+
if ( ! empty( $params['timezone'] ) ) {
|
459 |
+
$link_add2gcal .= '&ctz=' . str_replace( '%', '%25', $params['timezone'] ); //FixIn: 8.7.3.10 //TimeZone
|
460 |
+
}
|
461 |
+
//$link_add2gcal .= '&sprop=';
|
462 |
+
//$link_add2gcal .= '&sprop=name:';
|
463 |
+
|
464 |
+
return $link_add2gcal;
|
465 |
+
}
|
466 |
+
|
467 |
+
/**
|
468 |
+
* Action: move booking to Trash | Restore
|
469 |
+
*
|
470 |
+
* @param $booking_id_arr array or int of booking ID
|
471 |
+
* @param $params array array of parameters: array( 'user_id' => 1, 'reason_of_action' => 'Because...', 'is_trash' => '1' )
|
472 |
+
*
|
473 |
+
* @return array
|
474 |
+
*
|
475 |
+
* Example:
|
476 |
+
*/
|
477 |
+
function wpbc_booking_do_action__trash_booking_or_restore( $booking_id_arr, $params ){
|
478 |
+
|
479 |
+
make_bk_action('check_multiuser_params_for_client_side_by_user_id', $params['user_id'] );
|
480 |
+
|
481 |
+
// Get ID list of bookings, like '1' or '3,7,9' ----------------------------------------------------------------
|
482 |
+
if ( ! is_array( $booking_id_arr ) ) {
|
483 |
+
$booking_id_arr = array( $booking_id_arr );
|
484 |
+
}
|
485 |
+
$booking_is_csd = join( ',', $booking_id_arr );
|
486 |
+
$booking_is_csd = wpbc_clean_digit_or_csd( $booking_is_csd );
|
487 |
+
|
488 |
+
|
489 |
+
// Get reason of action --------------------------------------------------------------------------------------------
|
490 |
+
$action_reason = $params['reason_of_action']; // stripslashes( $params['reason_of_action'] ); // translate words like don\'t to don't
|
491 |
+
|
492 |
+
// Get reason of action --------------------------------------------------------------------------------------------
|
493 |
+
$is_trash_or_restore = $params['is_trash'];
|
494 |
+
|
495 |
+
// Is send email for this action ----------------------------------------------------------------------------------
|
496 |
+
$is_send_emeils = wpbc_ajx__user_request_option__is_send_emails( $params['user_id'] );
|
497 |
+
|
498 |
+
|
499 |
+
// -----------------------------------------------------------------------------------------------------------------
|
500 |
+
|
501 |
+
if ( empty( $booking_is_csd ) ) {
|
502 |
+
$after_action_result = false;
|
503 |
+
$after_action_message = __( 'No bookings have been selected. Please select one or more bookings.', 'booking' );
|
504 |
+
|
505 |
+
} else {
|
506 |
+
$after_action_result = true;
|
507 |
+
if ( $is_trash_or_restore == '1' ) {
|
508 |
+
$after_action_message = ( ( false === strpos( $booking_is_csd, ',' ) )
|
509 |
+
? sprintf( __( 'Booking has been %s trashed %s', 'booking' ), '<strong>', '</strong>' )
|
510 |
+
: sprintf( __( 'Bookings have been %s trashed %s', 'booking' ) , '<strong>', '</strong>' )
|
511 |
+
)
|
512 |
+
. ' <span style="font-size:0.9em;">( ID = <strong>' . $booking_is_csd . '</strong> )</span>';
|
513 |
+
} else {
|
514 |
+
$after_action_message = ( ( false === strpos( $booking_is_csd, ',' ) )
|
515 |
+
? sprintf( __( 'Booking has been set as %s restored %s', 'booking' ), '<strong>', '</strong>' )
|
516 |
+
: sprintf( __( 'Bookings have been set as %s restored %s', 'booking' ), '<strong>', '</strong>' )
|
517 |
+
)
|
518 |
+
. ' <span style="font-size:0.9em;">( ID = <strong>' . $booking_is_csd . '</strong> )</span>';
|
519 |
+
}
|
520 |
+
// SQL ---------------------------------------------------------------------------------------------------
|
521 |
+
global $wpdb;
|
522 |
+
$prepared_sql = $wpdb->prepare( "UPDATE {$wpdb->prefix}booking AS bk SET bk.trash = %s WHERE booking_id IN ({$booking_is_csd})", $is_trash_or_restore );
|
523 |
+
$after_action_result = $wpdb->query( $prepared_sql );
|
524 |
+
if ( false === $after_action_result ) {
|
525 |
+
$after_action_message = 'Error during updating to DB. File:' . __FILE__ . ' on line: ' . __LINE__;
|
526 |
+
} else {
|
527 |
+
$after_action_result = true;
|
528 |
+
}
|
529 |
+
|
530 |
+
// Update the Hash and Cost of the booking
|
531 |
+
$bk_id_arr = explode(',', $booking_is_csd ); //FixIn: 8.6.1.11
|
532 |
+
foreach ( $bk_id_arr as $bk_id ) {
|
533 |
+
make_bk_action('wpbc_update_booking_hash', $bk_id );
|
534 |
+
}
|
535 |
+
|
536 |
+
// LOG ---------------------------------------------------------------------------------------------------------
|
537 |
+
$curr_user = get_user_by( 'id', (int) $params['user_id'] );
|
538 |
+
wpbc_add_log_info( explode( ',', $booking_is_csd ),
|
539 |
+
( ( $is_trash_or_restore == '1' ) ? __( 'Trashed by:', 'booking' ) : __( 'Restored by:', 'booking' ) )
|
540 |
+
. ' ' . $curr_user->first_name . ' ' . $curr_user->last_name . ' (' . $curr_user->user_email . ')'
|
541 |
+
);
|
542 |
+
|
543 |
+
// :: ? :: Update 'is_new' status of bookings in Database
|
544 |
+
// wpbc_update_number_new_bookings( explode( ',', $booking_is_csd ), '0', $params['user_id'] );
|
545 |
+
|
546 |
+
// Just action hook for some other addons
|
547 |
+
do_action( 'wpbc_booking_action__trash', $booking_is_csd, $is_trash_or_restore ); //FixIn: 8.7.6.2
|
548 |
+
|
549 |
+
// Emails ------------------------------------------------------------------------------------------------------
|
550 |
+
if ( ! empty( $is_send_emeils ) ) {
|
551 |
+
|
552 |
+
if ( $is_trash_or_restore == '1' ) {
|
553 |
+
wpbc_send_email_trash( $booking_is_csd, $is_send_emeils, $action_reason );
|
554 |
+
} else {
|
555 |
+
//wpbc_send_email_approved( $booking_is_csd, $is_send_emeils, $action_reason );
|
556 |
+
//wpbc_send_email_deny( $booking_is_csd, $is_send_emeils, $action_reason );
|
557 |
+
}
|
558 |
+
}
|
559 |
+
}
|
560 |
+
|
561 |
+
return array(
|
562 |
+
'after_action_result' => $after_action_result,
|
563 |
+
'after_action_message' => $after_action_message
|
564 |
+
);
|
565 |
+
}
|
566 |
+
|
567 |
+
/**
|
568 |
+
* Action: set booking as Approved | Pending
|
569 |
+
*
|
570 |
+
* @param $booking_id_arr array or int of booking ID
|
571 |
+
* @param $params array array of parameters: array( 'user_id' => 1, 'reason_of_action' => 'Because...', 'is_approve' => '1' )
|
572 |
+
*
|
573 |
+
* @return array
|
574 |
+
*
|
575 |
+
* Example:
|
576 |
+
* Approved:
|
577 |
+
$action_result = wpbc_booking_do_action__set_booking_approved_or_pending( $request_params['booking_id']
|
578 |
+
, array(
|
579 |
+
'user_id' => $user_id,
|
580 |
+
'reason_of_action' => $request_params['reason_of_action'],
|
581 |
+
'is_approve' => '1'
|
582 |
+
)
|
583 |
+
);
|
584 |
+
* Pending:
|
585 |
+
$action_result = wpbc_booking_do_action__set_booking_approved_or_pending( $request_params['booking_id']
|
586 |
+
, array(
|
587 |
+
'user_id' => $user_id,
|
588 |
+
'reason_of_action' => $request_params['reason_of_action'],
|
589 |
+
'is_approve' => '0'
|
590 |
+
)
|
591 |
+
);
|
592 |
+
*/
|
593 |
+
function wpbc_booking_do_action__set_booking_approved_or_pending( $booking_id_arr, $params ){
|
594 |
+
|
595 |
+
/**
|
596 |
+
*
|
597 |
+
* For creation of new bookings or editing use something like this:
|
598 |
+
*
|
599 |
+
// Be sure to make load in Booking Listing this: wp_enqueue_script( 'wpbc-main-client', wpbc_plugin_url( '/js/client.js' ), array( 'wpbc-datepick' ), WP_BK_VERSION_NUM );
|
600 |
+
new wpdev_booking(); // Define ability to work with shortcodes
|
601 |
+
$return_sh = do_shortcode('[booking type=1 nummonths=2]');
|
602 |
+
wp_send_json($return_sh); // Send calendar
|
603 |
+
*/
|
604 |
+
|
605 |
+
make_bk_action('check_multiuser_params_for_client_side_by_user_id', $params['user_id'] );
|
606 |
+
|
607 |
+
// Get ID list of bookings, like '1' or '3,7,9' ----------------------------------------------------------------
|
608 |
+
if ( ! is_array( $booking_id_arr ) ) {
|
609 |
+
$booking_id_arr = array( $booking_id_arr );
|
610 |
+
}
|
611 |
+
$booking_id_csd = join( ',', $booking_id_arr );
|
612 |
+
$booking_id_csd = wpbc_clean_digit_or_csd( $booking_id_csd );
|
613 |
+
|
614 |
+
|
615 |
+
// Get reason of action --------------------------------------------------------------------------------------------
|
616 |
+
$action_reason = $params['reason_of_action']; // stripslashes( $params['reason_of_action'] ); // translate words like don\'t to don't
|
617 |
+
|
618 |
+
// Get reason of action --------------------------------------------------------------------------------------------
|
619 |
+
$is_approve_or_pending = $params['is_approve'];
|
620 |
+
|
621 |
+
// Is send email for this action ----------------------------------------------------------------------------------
|
622 |
+
$is_send_emeils = wpbc_ajx__user_request_option__is_send_emails( $params['user_id'] );
|
623 |
+
|
624 |
+
|
625 |
+
// -----------------------------------------------------------------------------------------------------------------
|
626 |
+
|
627 |
+
if ( empty( $booking_id_csd ) ) {
|
628 |
+
$after_action_result = false;
|
629 |
+
$after_action_message = __( 'No bookings have been selected. Please select one or more bookings.', 'booking' );
|
630 |
+
|
631 |
+
} else {
|
632 |
+
$after_action_result = true;
|
633 |
+
if ( $is_approve_or_pending == '1' ) {
|
634 |
+
$after_action_message = ( ( false === strpos( $booking_id_csd, ',' ) )
|
635 |
+
? sprintf( __( 'Booking has been %s approved %s', 'booking' ), '<strong>', '</strong>' )
|
636 |
+
: sprintf( __( 'Bookings have been %s approved %s', 'booking' ) , '<strong>', '</strong>' )
|
637 |
+
)
|
638 |
+
. ' <span style="font-size:0.9em;">( ID = <strong>' . $booking_id_csd . '</strong> )</span>';
|
639 |
+
} else {
|
640 |
+
$after_action_message = ( ( false === strpos( $booking_id_csd, ',' ) )
|
641 |
+
? sprintf( __( 'Booking has been set as %s pending %s', 'booking' ), '<strong>', '</strong>' )
|
642 |
+
: sprintf( __( 'Bookings have been set as %s pending %s', 'booking' ), '<strong>', '</strong>' )
|
643 |
+
)
|
644 |
+
. ' <span style="font-size:0.9em;">( ID = <strong>' . $booking_id_csd . '</strong> )</span>';
|
645 |
+
}
|
646 |
+
// SQL ---------------------------------------------------------------------------------------------------
|
647 |
+
global $wpdb;
|
648 |
+
$prepared_sql = $wpdb->prepare( "UPDATE {$wpdb->prefix}bookingdates SET approved = %s WHERE booking_id IN ({$booking_id_csd})", $is_approve_or_pending );
|
649 |
+
$after_action_result = $wpdb->query( $prepared_sql );
|
650 |
+
if ( false === $after_action_result ) {
|
651 |
+
$after_action_message = 'Error during updating to DB. File:' . __FILE__ . ' on line: ' . __LINE__;
|
652 |
+
} else {
|
653 |
+
$after_action_result = true;
|
654 |
+
}
|
655 |
+
|
656 |
+
// LOG ---------------------------------------------------------------------------------------------------------
|
657 |
+
$curr_user = get_user_by( 'id', (int) $params['user_id'] );
|
658 |
+
wpbc_add_log_info( explode( ',', $booking_id_csd ),
|
659 |
+
( ( $is_approve_or_pending == '1' ) ? __( 'Approved by:', 'booking' ) : __( 'Declined by:', 'booking' ) )
|
660 |
+
. ' ' . $curr_user->first_name . ' ' . $curr_user->last_name . ' (' . $curr_user->user_email . ')'
|
661 |
+
);
|
662 |
+
|
663 |
+
// Update 'is_new' status of bookings in Database
|
664 |
+
wpbc_update_number_new_bookings( explode( ',', $booking_id_csd ), '0', $params['user_id'] );
|
665 |
+
|
666 |
+
// Just action hook for some other addons
|
667 |
+
do_action( 'wpbc_booking_action__approved', $booking_id_csd, $is_approve_or_pending ); //FixIn: 8.7.6.1
|
668 |
+
|
669 |
+
// Emails ------------------------------------------------------------------------------------------------------
|
670 |
+
if ( ! empty( $is_send_emeils ) ) {
|
671 |
+
|
672 |
+
if ( $is_approve_or_pending == '1' ) {
|
673 |
+
wpbc_send_email_approved( $booking_id_csd, $is_send_emeils, $action_reason );
|
674 |
+
} else {
|
675 |
+
wpbc_send_email_deny( $booking_id_csd, $is_send_emeils, $action_reason );
|
676 |
+
}
|
677 |
+
}
|
678 |
+
|
679 |
+
// Cancel other pending bookings for the same date ------------------------------------------------------------
|
680 |
+
if ( $is_approve_or_pending == '1' ) {
|
681 |
+
$all_bk_id_what_canceled = apply_bk_filter( 'cancel_pending_same_resource_bookings_for_specific_dates', false, $booking_id_csd );
|
682 |
+
}
|
683 |
+
}
|
684 |
+
|
685 |
+
return array(
|
686 |
+
'after_action_result' => $after_action_result,
|
687 |
+
'after_action_message' => $after_action_message
|
688 |
+
);
|
689 |
+
}
|
690 |
+
|
691 |
+
/**
|
692 |
+
* Action: booking Completely Delete
|
693 |
+
*
|
694 |
+
* @param $booking_id_arr array or int of booking ID
|
695 |
+
* @param $params array array of parameters: array( 'user_id' => 1, 'reason_of_action' => 'Because...' )
|
696 |
+
*
|
697 |
+
* @return array
|
698 |
+
*
|
699 |
+
* Example:
|
700 |
+
*/
|
701 |
+
function wpbc_booking_do_action__delete_booking_completely( $booking_id_arr, $params ){
|
702 |
+
|
703 |
+
make_bk_action('check_multiuser_params_for_client_side_by_user_id', $params['user_id'] );
|
704 |
+
|
705 |
+
// Get ID list of bookings, like '1' or '3,7,9' ----------------------------------------------------------------
|
706 |
+
if ( ! is_array( $booking_id_arr ) ) {
|
707 |
+
$booking_id_arr = array( $booking_id_arr );
|
708 |
+
}
|
709 |
+
$booking_is_csd = join( ',', $booking_id_arr );
|
710 |
+
$booking_is_csd = wpbc_clean_digit_or_csd( $booking_is_csd );
|
711 |
+
|
712 |
+
|
713 |
+
// Get reason of action --------------------------------------------------------------------------------------------
|
714 |
+
$action_reason = $params['reason_of_action']; // stripslashes( $params['reason_of_action'] ); // translate words like don\'t to don't
|
715 |
+
|
716 |
+
// Is send email for this action ----------------------------------------------------------------------------------
|
717 |
+
$is_send_emeils = wpbc_ajx__user_request_option__is_send_emails( $params['user_id'] );
|
718 |
+
|
719 |
+
|
720 |
+
// -----------------------------------------------------------------------------------------------------------------
|
721 |
+
|
722 |
+
if ( empty( $booking_is_csd ) ) {
|
723 |
+
$after_action_result = false;
|
724 |
+
$after_action_message = __( 'No bookings have been selected. Please select one or more bookings.', 'booking' );
|
725 |
+
|
726 |
+
} else {
|
727 |
+
$after_action_result = true;
|
728 |
+
$after_action_message = ( ( false === strpos( $booking_is_csd, ',' ) )
|
729 |
+
? sprintf( __( 'Booking has been %s deleted %s', 'booking' ), '<strong>', '</strong>' )
|
730 |
+
: sprintf( __( 'Bookings have been %s deleted %s', 'booking' ) , '<strong>', '</strong>' )
|
731 |
+
)
|
732 |
+
. ' <span style="font-size:0.9em;">( ID = <strong>' . $booking_is_csd . '</strong> )</span>';
|
733 |
+
|
734 |
+
// LOG ---------------------------------------------------------------------------------------------------------
|
735 |
+
$curr_user = get_user_by( 'id', (int) $params['user_id'] );
|
736 |
+
wpbc_add_log_info( explode( ',', $booking_is_csd ),
|
737 |
+
__( 'Deleted by:', 'booking' )
|
738 |
+
. ' ' . $curr_user->first_name . ' ' . $curr_user->last_name . ' (' . $curr_user->user_email . ')'
|
739 |
+
);
|
740 |
+
|
741 |
+
// Just action hook for some other addons
|
742 |
+
do_action( 'wpbc_booking_action__delete', $booking_is_csd ); //FixIn: 8.7.6.3
|
743 |
+
|
744 |
+
// Emails ------------------------------------------------------------------------------------------------------
|
745 |
+
if ( ! empty( $is_send_emeils ) ) {
|
746 |
+
|
747 |
+
wpbc_send_email_deleted( $booking_is_csd, $is_send_emeils, $action_reason );
|
748 |
+
}
|
749 |
+
|
750 |
+
// SQL ---------------------------------------------------------------------------------------------------
|
751 |
+
global $wpdb;
|
752 |
+
|
753 |
+
// Dates
|
754 |
+
$prepared_sql = "DELETE FROM {$wpdb->prefix}bookingdates WHERE booking_id IN ({$booking_is_csd})";
|
755 |
+
$after_action_result = $wpdb->query( $prepared_sql );
|
756 |
+
if ( false === $after_action_result ) {
|
757 |
+
$after_action_message = 'Error during deleting dates in DB. File:' . __FILE__ . ' on line: ' . __LINE__;
|
758 |
+
} else {
|
759 |
+
$after_action_result = true;
|
760 |
+
}
|
761 |
+
// Bookings
|
762 |
+
$prepared_sql = "DELETE FROM {$wpdb->prefix}booking WHERE booking_id IN ({$booking_is_csd})";
|
763 |
+
$after_action_result = $wpdb->query( $prepared_sql );
|
764 |
+
if ( false === $after_action_result ) {
|
765 |
+
$after_action_message = 'Error during deleting bookings in DB. File:' . __FILE__ . ' on line: ' . __LINE__;
|
766 |
+
} else {
|
767 |
+
$after_action_result = true;
|
768 |
+
}
|
769 |
+
|
770 |
+
}
|
771 |
+
|
772 |
+
return array(
|
773 |
+
'after_action_result' => $after_action_result,
|
774 |
+
'after_action_message' => $after_action_message
|
775 |
+
);
|
776 |
+
}
|
777 |
+
|
778 |
+
/**
|
779 |
+
* Action: set booking as Read (Old) | Unread (New)
|
780 |
+
*
|
781 |
+
* @param $booking_id_arr array or int of booking ID
|
782 |
+
* @param $params array array of parameters: array( 'user_id' => 1, 'is_new' => '1' )
|
783 |
+
*
|
784 |
+
* @return array
|
785 |
+
*
|
786 |
+
* Example:
|
787 |
+
$action_result = wpbc_booking_do_action__set_booking_as_read_unread( $request_params['booking_id']
|
788 |
+
, array(
|
789 |
+
'user_id' => $user_id,
|
790 |
+
'is_new' => '0'
|
791 |
+
)
|
792 |
+
);
|
793 |
+
|
794 |
+
*/
|
795 |
+
function wpbc_booking_do_action__set_booking_as_read_unread( $booking_id_arr, $params ){
|
796 |
+
|
797 |
+
make_bk_action('check_multiuser_params_for_client_side_by_user_id', $params['user_id'] );
|
798 |
+
|
799 |
+
// Get ID list of bookings, like '1' or '3,7,9' ----------------------------------------------------------------
|
800 |
+
if ( ! is_array( $booking_id_arr ) ) {
|
801 |
+
$booking_id_arr = array( $booking_id_arr );
|
802 |
+
}
|
803 |
+
$booking_id_csd = join( ',', $booking_id_arr );
|
804 |
+
$booking_id_csd = wpbc_clean_digit_or_csd( $booking_id_csd );
|
805 |
+
|
806 |
+
// Get reason of action --------------------------------------------------------------------------------------------
|
807 |
+
$is_new = $params['is_new'];
|
808 |
+
|
809 |
+
// Is send email for this action ----------------------------------------------------------------------------------
|
810 |
+
$is_send_emeils = wpbc_ajx__user_request_option__is_send_emails( $params['user_id'] );
|
811 |
+
|
812 |
+
// -----------------------------------------------------------------------------------------------------------------
|
813 |
+
|
814 |
+
if ( empty( $booking_id_csd ) ) {
|
815 |
+
$after_action_result = false;
|
816 |
+
$after_action_message = __( 'No bookings have been selected. Please select one or more bookings.', 'booking' );
|
817 |
+
|
818 |
+
} else {
|
819 |
+
$after_action_result = true;
|
820 |
+
if ( $is_new == '1' ) {
|
821 |
+
$after_action_message = ( ( false === strpos( $booking_id_csd, ',' ) )
|
822 |
+
? sprintf( __( 'Booking has been set as %s new %s', 'booking' ), '<strong>', '</strong>' )
|
823 |
+
: sprintf( __( 'Bookings have been set as %s new %s', 'booking' ) , '<strong>', '</strong>' )
|
824 |
+
)
|
825 |
+
. ' <span style="font-size:0.9em;">( ID = <strong>' . (( '-1' == $booking_id_csd ) ? __( 'all', 'booking' ) : $booking_id_csd) . '</strong> )</span>';
|
826 |
+
} else {
|
827 |
+
$after_action_message = ( ( false === strpos( $booking_id_csd, ',' ) )
|
828 |
+
? sprintf( __( 'Booking has been set as set as %s read %s', 'booking' ), '<strong>', '</strong>' )
|
829 |
+
: sprintf( __( 'Bookings have been set as set as %s read %s', 'booking' ), '<strong>', '</strong>' )
|
830 |
+
)
|
831 |
+
. ' <span style="font-size:0.9em;">( ID = <strong>' . (( '-1' == $booking_id_csd ) ? __( 'all', 'booking' ) : $booking_id_csd) . '</strong> )</span>';
|
832 |
+
}
|
833 |
+
// SQL ---------------------------------------------------------------------------------------------------
|
834 |
+
global $wpdb;
|
835 |
+
if ('-1' == $booking_id_csd ){
|
836 |
+
$prepared_sql = $wpdb->prepare( "UPDATE {$wpdb->prefix}booking AS bk SET bk.is_new = %s", $is_new );
|
837 |
+
|
838 |
+
$prepared_sql .= " WHERE ( 1 = 1 ) ";
|
839 |
+
$prepared_sql = apply_bk_filter('update_where_sql_for_getting_bookings_in_multiuser', $prepared_sql );
|
840 |
+
} else {
|
841 |
+
$prepared_sql = $wpdb->prepare( "UPDATE {$wpdb->prefix}booking AS bk SET bk.is_new = %s WHERE booking_id IN ({$booking_id_csd})", $is_new );
|
842 |
+
}
|
843 |
+
$after_action_result = $wpdb->query( $prepared_sql );
|
844 |
+
if ( false === $after_action_result ) {
|
845 |
+
$after_action_message = 'Error during updating to DB. File:' . __FILE__ . ' on line: ' . __LINE__;
|
846 |
+
} else {
|
847 |
+
$after_action_result = true;
|
848 |
+
}
|
849 |
+
|
850 |
+
// LOG ---------------------------------------------------------------------------------------------------------
|
851 |
+
$curr_user = get_user_by( 'id', (int) $params['user_id'] );
|
852 |
+
wpbc_add_log_info( explode( ',', $booking_id_csd ),
|
853 |
+
( ( $is_new == '1' ) ? __( 'Set as unread by:', 'booking' ) : __( 'Set as read by:', 'booking' ) )
|
854 |
+
. ' ' . $curr_user->first_name . ' ' . $curr_user->last_name . ' (' . $curr_user->user_email . ')'
|
855 |
+
);
|
856 |
+
|
857 |
+
// Just action hook for some other addons
|
858 |
+
do_action( 'wpbc_booking_action__changed_new_status', $booking_id_csd, $is_new ); //FixIn: 8.7.6.1
|
859 |
+
|
860 |
+
// Emails ------------------------------------------------------------------------------------------------------
|
861 |
+
if ( ! empty( $is_send_emeils ) ) {
|
862 |
+
|
863 |
+
if ( $is_new == '1' ) {
|
864 |
+
//wpbc_send_email_approved( $booking_id_csd, $is_send_emeils, $action_reason );
|
865 |
+
} else {
|
866 |
+
//wpbc_send_email_deny( $booking_id_csd, $is_send_emeils, $action_reason );
|
867 |
+
}
|
868 |
+
}
|
869 |
+
}
|
870 |
+
|
871 |
+
return array(
|
872 |
+
'after_action_result' => $after_action_result,
|
873 |
+
'after_action_message' => $after_action_message
|
874 |
+
);
|
875 |
+
}
|
876 |
+
|
877 |
+
/**
|
878 |
+
* Action: Emty Trash
|
879 |
+
*
|
880 |
+
* @param $params array array of parameters: array( 'user_id' => 1 )
|
881 |
+
*
|
882 |
+
* @return array
|
883 |
+
*
|
884 |
+
* Example:
|
885 |
+
*/
|
886 |
+
function wpbc_booking_do_action__empty_trash( $params ){
|
887 |
+
|
888 |
+
make_bk_action('check_multiuser_params_for_client_side_by_user_id', $params['user_id'] );
|
889 |
+
|
890 |
+
// Is send email for this action ----------------------------------------------------------------------------------
|
891 |
+
$is_send_emeils = wpbc_ajx__user_request_option__is_send_emails( $params['user_id'] );
|
892 |
+
|
893 |
+
// Get bookings ID to delete -------------------------------------------------------------------------------
|
894 |
+
global $wpdb;
|
895 |
+
|
896 |
+
$sql = "SELECT * FROM {$wpdb->prefix}booking as bk WHERE bk.trash = 1";
|
897 |
+
|
898 |
+
$sql = apply_bk_filter( 'update_where_sql_for_getting_bookings_in_multiuser', $sql, $params['user_id'] ); // Get booking resources of this user only: $user_id
|
899 |
+
|
900 |
+
$max_bookings_to_erase = 1000;
|
901 |
+
$sql .= " LIMIT 0, " . $max_bookings_to_erase;
|
902 |
+
|
903 |
+
$bookings_in_trash = $wpdb->get_results( $sql ); //Get ID of all bookings in a trash.
|
904 |
+
|
905 |
+
$bookings_id_in_trash_arr = array();
|
906 |
+
|
907 |
+
foreach ( $bookings_in_trash as $booking_obj ) {
|
908 |
+
$bookings_id_in_trash_arr[] = $booking_obj->booking_id;
|
909 |
+
}
|
910 |
+
$booking_is_csd = implode( ',', $bookings_id_in_trash_arr );
|
911 |
+
|
912 |
+
// Empty trash ------------------------------------------------------------------------------------------------
|
913 |
+
|
914 |
+
if ( empty( $booking_is_csd ) ) {
|
915 |
+
$after_action_result = false;
|
916 |
+
$after_action_message = __( 'No bookings in trash to erase.', 'booking' );
|
917 |
+
|
918 |
+
} else {
|
919 |
+
$after_action_result = true;
|
920 |
+
if ( count( $bookings_id_in_trash_arr ) < $max_bookings_to_erase ) {
|
921 |
+
$after_action_message = sprintf( __( 'Trash has been erased.', 'booking' ) , '<strong>', '</strong>' )
|
922 |
+
. ' <span style="font-size:0.9em;">( ID = <strong>' . substr( $booking_is_csd, 0 , 500 ) . '</strong> )</span>';
|
923 |
+
} else {
|
924 |
+
$after_action_message = sprintf( __( 'From trash has been erased %s bookings.', 'booking' ) , '<strong> ' . count( $bookings_id_in_trash_arr ) . ' </strong> ' ) ;
|
925 |
+
}
|
926 |
+
|
927 |
+
// LOG -----------------------------------------------------------------------------------------------------
|
928 |
+
// $curr_user = get_user_by( 'id', (int) $params['user_id'] );
|
929 |
+
// wpbc_add_log_info( explode( ',', $booking_is_csd ),
|
930 |
+
// __( 'Deleted by:', 'booking' )
|
931 |
+
// . ' ' . $curr_user->first_name . ' ' . $curr_user->last_name . ' (' . $curr_user->user_email . ')'
|
932 |
+
// );
|
933 |
+
|
934 |
+
// Just action hook for some other addons
|
935 |
+
do_action( 'wpbc_booking_action__empty_trash' ); //FixIn: 8.7.6.3
|
936 |
+
|
937 |
+
// Emails ------------------------------------------------------------------------------------------------------
|
938 |
+
if ( ! empty( $is_send_emeils ) ) {
|
939 |
+
|
940 |
+
// wpbc_send_email_deleted( $booking_is_csd, $is_send_emeils, __( 'Empty Trash', 'booking' ) );
|
941 |
+
}
|
942 |
+
|
943 |
+
// SQL ---------------------------------------------------------------------------------------------------
|
944 |
+
|
945 |
+
// Dates
|
946 |
+
$prepared_sql = "DELETE FROM {$wpdb->prefix}bookingdates WHERE booking_id IN ({$booking_is_csd})";
|
947 |
+
$after_action_result = $wpdb->query( $prepared_sql );
|
948 |
+
if ( false === $after_action_result ) {
|
949 |
+
$after_action_message = 'Error during deleting dates in DB. File:' . __FILE__ . ' on line: ' . __LINE__;
|
950 |
+
} else {
|
951 |
+
$after_action_result = true;
|
952 |
+
}
|
953 |
+
// Bookings
|
954 |
+
$prepared_sql = "DELETE FROM {$wpdb->prefix}booking WHERE booking_id IN ({$booking_is_csd})";
|
955 |
+
$after_action_result = $wpdb->query( $prepared_sql );
|
956 |
+
if ( false === $after_action_result ) {
|
957 |
+
$after_action_message = 'Error during deleting bookings in DB. File:' . __FILE__ . ' on line: ' . __LINE__;
|
958 |
+
} else {
|
959 |
+
$after_action_result = true;
|
960 |
+
}
|
961 |
+
|
962 |
+
}
|
963 |
+
|
964 |
+
return array(
|
965 |
+
'after_action_result' => $after_action_result,
|
966 |
+
'after_action_message' => $after_action_message
|
967 |
+
);
|
968 |
+
}
|
969 |
+
|
970 |
+
/**
|
971 |
+
* Action: save booking Remark
|
972 |
+
*
|
973 |
+
* @param $booking_id_arr array or int of booking ID
|
974 |
+
* @param $params array array of parameters: array( 'user_id' => 1, 'remark' => 'Because...')
|
975 |
+
*
|
976 |
+
* @return array
|
977 |
+
*
|
978 |
+
* Example:
|
979 |
+
*/
|
980 |
+
function wpbc_booking_do_action__set_booking_note( $booking_id_arr, $params ){
|
981 |
+
|
982 |
+
make_bk_action('check_multiuser_params_for_client_side_by_user_id', $params['user_id'] );
|
983 |
+
|
984 |
+
// Get ID list of bookings, like '1' or '3,7,9' ------------------------------------------------------------
|
985 |
+
if ( ! is_array( $booking_id_arr ) ) {
|
986 |
+
$booking_id_arr = array( $booking_id_arr );
|
987 |
+
}
|
988 |
+
$booking_id_csd = join( ',', $booking_id_arr );
|
989 |
+
$booking_id_csd = wpbc_clean_digit_or_csd( $booking_id_csd );
|
990 |
+
|
991 |
+
// Get remark --------------------------------------------------------------------------------------------------
|
992 |
+
$remark_text = $params['remark']; // stripslashes( $params['reason_of_action'] ); // translate words like don\'t to don't
|
993 |
+
|
994 |
+
// Is send email for this action ------------------------------------------------------------------------------
|
995 |
+
// $is_send_emeils = wpbc_ajx__user_request_option__is_send_emails( $params['user_id'] );
|
996 |
+
|
997 |
+
|
998 |
+
// -----------------------------------------------------------------------------------------------------------------
|
999 |
+
|
1000 |
+
if ( empty( $booking_id_csd ) ) {
|
1001 |
+
$after_action_result = false;
|
1002 |
+
$after_action_message = __( 'No bookings have been selected. Please select one or more bookings.', 'booking' );
|
1003 |
+
|
1004 |
+
} else {
|
1005 |
+
$after_action_result = true;
|
1006 |
+
$after_action_message = __( 'Note has been saved', 'booking' )
|
1007 |
+
. ' <span style="font-size:0.9em;">( ID = <strong>' . $booking_id_csd . '</strong> )</span>';
|
1008 |
+
// SQL ---------------------------------------------------------------------------------------------------
|
1009 |
+
global $wpdb;
|
1010 |
+
$prepared_sql = $wpdb->prepare( "UPDATE {$wpdb->prefix}booking SET remark = %s WHERE booking_id IN ({$booking_id_csd})", $remark_text );
|
1011 |
+
$after_action_result = $wpdb->query( $prepared_sql );
|
1012 |
+
if ( false === $after_action_result ) {
|
1013 |
+
$after_action_message = 'Error during updating to DB. File:' . __FILE__ . ' on line: ' . __LINE__;
|
1014 |
+
} else {
|
1015 |
+
$after_action_result = true;
|
1016 |
+
}
|
1017 |
+
|
1018 |
+
// LOG ---------------------------------------------------------------------------------------------------------
|
1019 |
+
if (0) {
|
1020 |
+
$curr_user = get_user_by( 'id', (int) $params['user_id'] );
|
1021 |
+
wpbc_add_log_info( explode( ',', $booking_id_csd ),
|
1022 |
+
__( 'Note saved by:', 'booking' )
|
1023 |
+
. ' ' . $curr_user->first_name . ' ' . $curr_user->last_name . ' (' . $curr_user->user_email . ')'
|
1024 |
+
);
|
1025 |
+
}
|
1026 |
+
|
1027 |
+
// Just action hook for some other addons
|
1028 |
+
do_action( 'wpbc_booking_action__note_saved', $booking_id_csd, $remark_text );
|
1029 |
+
|
1030 |
+
// Emails ------------------------------------------------------------------------------------------------------
|
1031 |
+
if ( 0 ) {
|
1032 |
+
if ( ! empty( $is_send_emeils ) ) {
|
1033 |
+
wpbc_send_email_approved( $booking_id_csd, $is_send_emeils, $remark_text );
|
1034 |
+
}
|
1035 |
+
}
|
1036 |
+
}
|
1037 |
+
|
1038 |
+
return array(
|
1039 |
+
'after_action_result' => $after_action_result,
|
1040 |
+
'after_action_message' => $after_action_message
|
1041 |
+
);
|
1042 |
+
}
|
1043 |
+
|
1044 |
+
/**
|
1045 |
+
* Action: change Booking Resource
|
1046 |
+
*
|
1047 |
+
* @param $booking_id_arr array or int of booking ID
|
1048 |
+
* @param $selected_resource_id int of booking resource
|
1049 |
+
* @param $params array array of parameters: array( 'user_id' => 1 )
|
1050 |
+
*
|
1051 |
+
* @return array
|
1052 |
+
*
|
1053 |
+
* Example:
|
1054 |
+
*/
|
1055 |
+
function wpbc_booking_do_action__change_booking_resource( $booking_id_arr, $selected_resource_id, $params ) {
|
1056 |
+
|
1057 |
+
make_bk_action('check_multiuser_params_for_client_side_by_user_id', $params['user_id'] );
|
1058 |
+
|
1059 |
+
// Get ID list of bookings, like '1' or '3,7,9' ----------------------------------------------------------------
|
1060 |
+
if ( ! is_array( $booking_id_arr ) ) {
|
1061 |
+
$booking_id_arr = array( $booking_id_arr );
|
1062 |
+
}
|
1063 |
+
$booking_id_csd = join( ',', $booking_id_arr );
|
1064 |
+
$booking_id_csd = wpbc_clean_digit_or_csd( $booking_id_csd );
|
1065 |
+
|
1066 |
+
// ID of booking resource ------------------------------------------------------------------------------------------
|
1067 |
+
$selected_resource_id = intval($selected_resource_id);
|
1068 |
+
|
1069 |
+
// Is send email for this action ----------------------------------------------------------------------------------
|
1070 |
+
$is_send_emeils = wpbc_ajx__user_request_option__is_send_emails( $params['user_id'] );
|
1071 |
+
|
1072 |
+
// -----------------------------------------------------------------------------------------------------------------
|
1073 |
+
|
1074 |
+
if ( empty( $booking_id_csd ) ) {
|
1075 |
+
$after_action_result = false;
|
1076 |
+
$after_action_message = __( 'No bookings have been selected. Please select one or more bookings.', 'booking' );
|
1077 |
+
|
1078 |
+
} else {
|
1079 |
+
$after_action_result = true;
|
1080 |
+
|
1081 |
+
$after_action_message = ( ( false === strpos( $booking_id_csd, ',' ) )
|
1082 |
+
? sprintf( __( 'Booking has been changed %s booking resource %s', 'booking' ), '<strong>', '</strong>' )
|
1083 |
+
: sprintf( __( 'Bookings have been changed %s booking resource %s', 'booking' ), '<strong>', '</strong>' )
|
1084 |
+
)
|
1085 |
+
. ' <span style="font-size:0.9em;">( ID = <strong>' . $booking_id_csd . '</strong> )</span>';
|
1086 |
+
|
1087 |
+
|
1088 |
+
$work_booking_id_arr = explode( ',', $booking_id_csd );
|
1089 |
+
|
1090 |
+
foreach ( $work_booking_id_arr as $selected_booking_id ) {
|
1091 |
+
|
1092 |
+
// SQL ---------------------------------------------------------------------------------------------------
|
1093 |
+
list( $after_action_result, $after_action_message, $formdata_new ) = wpbc__sql__change_booking_resource_for_booking( $selected_booking_id, $selected_resource_id );
|
1094 |
+
|
1095 |
+
if ( $after_action_result ) {
|
1096 |
+
// LOG ---------------------------------------------------------------------------------------------------------
|
1097 |
+
$curr_user = get_user_by( 'id', (int) $params['user_id'] );
|
1098 |
+
wpbc_add_log_info( explode( ',', $selected_booking_id ),
|
1099 |
+
__( 'Booking resource changed by:', 'booking' )
|
1100 |
+
. ' ' . $curr_user->first_name . ' ' . $curr_user->last_name . ' (' . $curr_user->user_email . ')'
|
1101 |
+
);
|
1102 |
+
|
1103 |
+
// Just action hook for some other addons
|
1104 |
+
do_action( 'wpbc_booking_action__change_booking_resource', $selected_booking_id, $selected_resource_id );
|
1105 |
+
|
1106 |
+
// Emails ------------------------------------------------------------------------------------------------------
|
1107 |
+
if ( ! empty( $is_send_emeils ) ) {
|
1108 |
+
wpbc_send_email_modified( $selected_booking_id, $selected_resource_id, $formdata_new );
|
1109 |
+
}
|
1110 |
+
}
|
1111 |
+
}
|
1112 |
+
}
|
1113 |
+
|
1114 |
+
return array(
|
1115 |
+
'after_action_result' => $after_action_result,
|
1116 |
+
'after_action_message' => $after_action_message
|
1117 |
+
);
|
1118 |
+
|
1119 |
+
}
|
1120 |
+
|
1121 |
+
/**
|
1122 |
+
* Change booking resource for specific booking -- SQL manipulation
|
1123 |
+
* @param $selected_booking_id
|
1124 |
+
* @param $selected_resource_id
|
1125 |
+
*
|
1126 |
+
* @return array
|
1127 |
+
*/
|
1128 |
+
function wpbc__sql__change_booking_resource_for_booking( $selected_booking_id, $selected_resource_id ){
|
1129 |
+
|
1130 |
+
global $wpdb;
|
1131 |
+
|
1132 |
+
$booking_id = intval( $selected_booking_id );
|
1133 |
+
$resource_id = intval( $selected_resource_id );
|
1134 |
+
$db_form_data_new = '';
|
1135 |
+
|
1136 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
1137 |
+
// 1.Get dates of SOURCE booking
|
1138 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
1139 |
+
if ( 1 ) {
|
1140 |
+
// 1.1.Get booking data of SOURCE booking
|
1141 |
+
$sql = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}booking as bk WHERE booking_id = %d ", $booking_id );
|
1142 |
+
$res = $wpdb->get_row( $sql );
|
1143 |
+
$db_form_data_old = $res->form;
|
1144 |
+
$resource_id_old = $res->booking_type;
|
1145 |
+
|
1146 |
+
// 1.2. Get dates of SOURCE booking
|
1147 |
+
$sql = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}bookingdates as dt WHERE booking_id = %d ORDER BY booking_date ASC ", $booking_id );
|
1148 |
+
$old_resource_dates_array = $wpdb->get_results( $sql );
|
1149 |
+
}
|
1150 |
+
|
1151 |
+
|
1152 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
1153 |
+
// 2. Get bookings of selected booking resource - checking if some dates there is booked or not
|
1154 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
1155 |
+
$exist_dates_results = wpbc_get_booking_dates_in_resource_for_folowing_dates( $old_resource_dates_array , $resource_id );
|
1156 |
+
|
1157 |
+
|
1158 |
+
if ( ( count( $exist_dates_results ) == 3 ) && ( false === $exist_dates_results[0] ) ){
|
1159 |
+
// // ERROR :: number of check in/dates does not equal to number of check out dates.
|
1160 |
+
return $exist_dates_results;
|
1161 |
+
}
|
1162 |
+
|
1163 |
+
if ( get_bk_option('booking_change_resource_skip_checking') === 'On' ) { //FixIn: 8.4.5.4
|
1164 |
+
$is_date_time_booked = false;
|
1165 |
+
} else {
|
1166 |
+
$is_date_time_booked = wpbc_check_dates_intersections( $old_resource_dates_array, $exist_dates_results );
|
1167 |
+
}
|
1168 |
+
|
1169 |
+
if ( $is_date_time_booked ) {
|
1170 |
+
|
1171 |
+
$after_action_result = false;
|
1172 |
+
$after_action_message = __( 'Warning! The resource was not changed. Current dates are already booked there.', 'booking' );
|
1173 |
+
|
1174 |
+
} else { // Possible to change
|
1175 |
+
|
1176 |
+
$db_form_data_new = wpbc_update_resource_id_in_dbformatted_booking_data( $db_form_data_old, $resource_id_old, $resource_id );
|
1177 |
+
|
1178 |
+
// Update
|
1179 |
+
$update_sql = $wpdb->prepare( "UPDATE {$wpdb->prefix}booking AS bk SET bk.form=%s, bk.booking_type=%d WHERE bk.booking_id=%d;"
|
1180 |
+
, $db_form_data_new, $resource_id, $booking_id );
|
1181 |
+
if ( false === $wpdb->query( $update_sql ) ) {
|
1182 |
+
$after_action_result = false;
|
1183 |
+
$after_action_message = get_debuge_error( 'Error during updating booking reource type in BD', __FILE__, __LINE__ );
|
1184 |
+
|
1185 |
+
return array( $after_action_result, $after_action_message, $db_form_data_new );
|
1186 |
+
}
|
1187 |
+
|
1188 |
+
|
1189 |
+
if ( class_exists( 'wpdev_bk_biz_l' ) ) {
|
1190 |
+
$update_sql = $wpdb->prepare( "UPDATE {$wpdb->prefix}bookingdates SET type_id=NULL WHERE booking_id=%d ", $booking_id );
|
1191 |
+
if ( false === $wpdb->query( $update_sql ) ) {
|
1192 |
+
$after_action_result = false;
|
1193 |
+
$after_action_message = get_debuge_error( 'Error during updating dates type in BD', __FILE__, __LINE__ );
|
1194 |
+
|
1195 |
+
return array( $after_action_result, $after_action_message, $db_form_data_new );
|
1196 |
+
}
|
1197 |
+
}
|
1198 |
+
|
1199 |
+
$booking_resources_arr = wpbc_ajx_get_all_booking_resources_arr();
|
1200 |
+
$after_action_result = true;
|
1201 |
+
$after_action_message = sprintf( __( 'Booking %s has been changed booking resource from %s to %s' )
|
1202 |
+
, '<strong>[ID=' . $booking_id . ']</strong>'
|
1203 |
+
, '<strong>' . apply_bk_filter( 'wpdev_check_for_active_language', $booking_resources_arr[ $resource_id_old ]['title'] ) . '</strong>'
|
1204 |
+
, '<strong>' . apply_bk_filter( 'wpdev_check_for_active_language', $booking_resources_arr[ $resource_id ]['title'] ) . '</strong>'
|
1205 |
+
);
|
1206 |
+
|
1207 |
+
// Everything Cool :) - booking resource changed
|
1208 |
+
}
|
1209 |
+
|
1210 |
+
return array( $after_action_result, $after_action_message , $db_form_data_new );
|
1211 |
+
}
|
1212 |
+
|
1213 |
+
/**
|
1214 |
+
* Get booking dates (bookings obj) of selected booking resource - checking if some dates there is booked or not
|
1215 |
+
*
|
1216 |
+
* @param $old_resource_dates_array array of OBJ with ..->booking_date
|
1217 |
+
* @param int $resource_id Resource ID, where we get dates.
|
1218 |
+
*
|
1219 |
+
* @return array array of booking OBJ with ..->booking_date
|
1220 |
+
*/
|
1221 |
+
function wpbc_get_booking_dates_in_resource_for_folowing_dates( $old_resource_dates_array , $resource_id ){
|
1222 |
+
|
1223 |
+
global $wpdb;
|
1224 |
+
|
1225 |
+
$dates_sql_between = '';
|
1226 |
+
$check_in_dates_arr = array();
|
1227 |
+
$check_out_dates_arr = array();
|
1228 |
+
|
1229 |
+
if ( 'On' === get_bk_option( 'booking_recurrent_time' ) ) { // If we are using recurrent time slots ?
|
1230 |
+
|
1231 |
+
foreach ( $old_resource_dates_array as $k => $v ) {
|
1232 |
+
|
1233 |
+
if ( ':02' == substr( $v->booking_date, - 3 ) ) {
|
1234 |
+
$check_out_dates_arr[] = $v->booking_date;
|
1235 |
+
}
|
1236 |
+
if ( ':01' == substr( $v->booking_date, - 3 ) ) {
|
1237 |
+
$check_in_dates_arr[] = $v->booking_date;
|
1238 |
+
}
|
1239 |
+
}
|
1240 |
+
|
1241 |
+
if ( count( $check_out_dates_arr ) == count( $check_in_dates_arr ) ) {
|
1242 |
+
$dates_sql_between_arr = array();
|
1243 |
+
foreach ( $check_in_dates_arr as $k => $v ) {
|
1244 |
+
|
1245 |
+
$dates_sql_between_arr [] = ' ( dt.booking_date BETWEEN "' . $check_in_dates_arr[ $k ] . '" AND "' . $check_out_dates_arr[ $k ] . '" ) ';
|
1246 |
+
}
|
1247 |
+
$dates_sql_between = implode( 'OR', $dates_sql_between_arr );
|
1248 |
+
|
1249 |
+
//TODO: remove (), if only 1 element in array
|
1250 |
+
|
1251 |
+
} else {
|
1252 |
+
// ERROR :: number of check in/dates does not equal to number of check out dates.
|
1253 |
+
$after_action_result = false;
|
1254 |
+
$after_action_message = '<strong>Error</strong>. Number of check in times of booking dates does not equal to number of check out days.'
|
1255 |
+
. '<br>Check in dates: ' . implode( ', ', $check_in_dates_arr )
|
1256 |
+
. '<br>Check out dates: ' . implode( ', ', $check_out_dates_arr );
|
1257 |
+
|
1258 |
+
return array( $after_action_result, $after_action_message, '' );
|
1259 |
+
}
|
1260 |
+
}
|
1261 |
+
|
1262 |
+
if ( '' == $dates_sql_between ) {
|
1263 |
+
|
1264 |
+
$temp_check_in = $old_resource_dates_array[0]->booking_date;
|
1265 |
+
$temp_check_out = $old_resource_dates_array[ ( count( $old_resource_dates_array ) - 1 ) ]->booking_date;
|
1266 |
+
|
1267 |
+
if ( ':02' != substr( $temp_check_out, - 3 ) ) {
|
1268 |
+
$temp_check_out = date( 'Y-m-d H:i:s', strtotime( '+1 day -1 second', strtotime( $temp_check_out ) ) );
|
1269 |
+
}
|
1270 |
+
|
1271 |
+
$dates_sql_between .= ' dt.booking_date BETWEEN "' . $temp_check_in . '" AND "' . $temp_check_out . '" ';
|
1272 |
+
}
|
1273 |
+
|
1274 |
+
|
1275 |
+
$sql = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}booking as bk
|
1276 |
+
INNER JOIN {$wpdb->prefix}bookingdates as dt
|
1277 |
+
ON bk.booking_id = dt.booking_id
|
1278 |
+
WHERE bk.trash != 1 AND bk.booking_type = %d", $resource_id );
|
1279 |
+
$sql .= " AND ( {$dates_sql_between} ) ";
|
1280 |
+
|
1281 |
+
// In BL version its does not check for booking belonging to several booking resources
|
1282 |
+
if ( class_exists( 'wpdev_bk_biz_l' ) ) {
|
1283 |
+
$sql .= " OR bk.booking_id IN ( "
|
1284 |
+
. " SELECT DISTINCT booking_id FROM {$wpdb->prefix}bookingdates as dtt
|
1285 |
+
WHERE dtt.type_id = {$resource_id} "
|
1286 |
+
//."AND DATE(dt.booking_date) IN ( {$dates_string} )"
|
1287 |
+
. " AND ( " . str_replace( 'dt.', 'dtt.', $dates_sql_between ) . " ) "
|
1288 |
+
. ") ";
|
1289 |
+
}
|
1290 |
+
$sql .= " ORDER BY bk.booking_id DESC, dt.booking_date ASC ";
|
1291 |
+
|
1292 |
+
$exist_dates_results = $wpdb->get_results( $sql );
|
1293 |
+
|
1294 |
+
// We have found only intersected dates. Now we need to get all dates from such bookings, for having correct "Start and end time times for the booking"
|
1295 |
+
// and does not add some "start time at the begining of the day inside of wpbc_check_dates_intersections( ) function
|
1296 |
+
if ( count( $exist_dates_results ) > 0 ) {
|
1297 |
+
|
1298 |
+
// Get ID of all bookings that inside of this interval
|
1299 |
+
$my_booking_id_arr = [];
|
1300 |
+
foreach ( $exist_dates_results as $key => $booking_obj ) {
|
1301 |
+
$my_booking_id_arr[] = $booking_obj->booking_id;
|
1302 |
+
}
|
1303 |
+
// Get all dates of such bookings (not only intersected!
|
1304 |
+
$sql = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}booking as bk
|
1305 |
+
INNER JOIN {$wpdb->prefix}bookingdates as dt
|
1306 |
+
ON bk.booking_id = dt.booking_id
|
1307 |
+
WHERE bk.booking_id IN (" . implode( ',', $my_booking_id_arr ) . ") AND bk.trash != 1 AND bk.booking_type = %d", $resource_id );
|
1308 |
+
$sql .= " ORDER BY bk.booking_id DESC, dt.booking_date ASC ";
|
1309 |
+
|
1310 |
+
$exist_dates_results = $wpdb->get_results( $sql );
|
1311 |
+
}
|
1312 |
+
|
1313 |
+
return $exist_dates_results;
|
1314 |
+
}
|
1315 |
+
|
1316 |
+
/**
|
1317 |
+
* Update "Content of booking fields data" from old booking resource id SUFFIX to new booking Resource ID
|
1318 |
+
*
|
1319 |
+
* @param string $db_form_data_old
|
1320 |
+
* @param int $resource_id_old
|
1321 |
+
* @param int $resource_id_new
|
1322 |
+
*
|
1323 |
+
* @return void
|
1324 |
+
*/
|
1325 |
+
function wpbc_update_resource_id_in_dbformatted_booking_data( $db_form_data_old, $resource_id_old, $resource_id_new ) {
|
1326 |
+
|
1327 |
+
$db_form_data_new = array();
|
1328 |
+
|
1329 |
+
$form_data_arr = explode( '~', $db_form_data_old );
|
1330 |
+
$fields_count = count( $form_data_arr );
|
1331 |
+
|
1332 |
+
for ( $i = 0; $i < $fields_count; $i ++ ) {
|
1333 |
+
|
1334 |
+
list( $type, $element_name, $value ) = explode( '^', $form_data_arr[ $i ] );
|
1335 |
+
|
1336 |
+
if ( substr( $element_name, - 2 ) == '[]' ) {
|
1337 |
+
$element_name = str_replace( '[]', '', $element_name );
|
1338 |
+
}
|
1339 |
+
|
1340 |
+
$element_name = substr( $element_name, 0, - 1 * strlen( $resource_id_old ) ) . $resource_id_new; // Change resource ID in field
|
1341 |
+
|
1342 |
+
$db_form_data_new[] = $type . '^' . $element_name . '^' . $value;
|
1343 |
+
}
|
1344 |
+
|
1345 |
+
return implode( '~', $db_form_data_new );
|
1346 |
+
}
|
1347 |
+
|
1348 |
+
/**
|
1349 |
+
* Action: Duplicate Booking into other Resource
|
1350 |
+
*
|
1351 |
+
* @param $booking_id_arr array or int of booking ID
|
1352 |
+
* @param $selected_resource_id int of booking resource
|
1353 |
+
* @param $params array array of parameters: array( 'user_id' => 1 )
|
1354 |
+
*
|
1355 |
+
* @return array
|
1356 |
+
*
|
1357 |
+
* Example:
|
1358 |
+
*/
|
1359 |
+
function wpbc_booking_do_action__duplicate_booking_to_other_resource( $booking_id_arr, $selected_resource_id, $params ) {
|
1360 |
+
|
1361 |
+
make_bk_action('check_multiuser_params_for_client_side_by_user_id', $params['user_id'] );
|
1362 |
+
|
1363 |
+
// Get ID list of bookings, like '1' or '3,7,9' ----------------------------------------------------------------
|
1364 |
+
if ( ! is_array( $booking_id_arr ) ) {
|
1365 |
+
$booking_id_arr = array( $booking_id_arr );
|
1366 |
+
}
|
1367 |
+
$booking_id_csd = join( ',', $booking_id_arr );
|
1368 |
+
$booking_id_csd = wpbc_clean_digit_or_csd( $booking_id_csd );
|
1369 |
+
|
1370 |
+
// ID of booking resource ------------------------------------------------------------------------------------------
|
1371 |
+
$selected_resource_id = intval($selected_resource_id);
|
1372 |
+
|
1373 |
+
// Is send email for this action ----------------------------------------------------------------------------------
|
1374 |
+
$is_send_emeils = wpbc_ajx__user_request_option__is_send_emails( $params['user_id'] );
|
1375 |
+
|
1376 |
+
// -----------------------------------------------------------------------------------------------------------------
|
1377 |
+
|
1378 |
+
if ( empty( $booking_id_csd ) ) {
|
1379 |
+
$after_action_result = false;
|
1380 |
+
$after_action_message = __( 'No bookings have been selected. Please select one or more bookings.', 'booking' );
|
1381 |
+
|
1382 |
+
} else {
|
1383 |
+
$after_action_result = true;
|
1384 |
+
|
1385 |
+
$after_action_message = ( ( false === strpos( $booking_id_csd, ',' ) )
|
1386 |
+
? sprintf( __( 'Booking has been %s duplicated %s', 'booking' ), '<strong>', '</strong>' )
|
1387 |
+
: sprintf( __( 'Bookings have been %s duplicated %s', 'booking' ), '<strong>', '</strong>' )
|
1388 |
+
)
|
1389 |
+
. ' <span style="font-size:0.9em;">( ID = <strong>' . $booking_id_csd . '</strong> )</span>';
|
1390 |
+
|
1391 |
+
|
1392 |
+
$work_booking_id_arr = explode( ',', $booking_id_csd );
|
1393 |
+
|
1394 |
+
foreach ( $work_booking_id_arr as $selected_booking_id ) {
|
1395 |
+
|
1396 |
+
// SQL ---------------------------------------------------------------------------------------------------
|
1397 |
+
list( $after_action_result, $after_action_message, $formdata_new ) = wpbc__sql__duplicate_booking_to_other_resource_for_booking( $selected_booking_id, $selected_resource_id, $params );
|
1398 |
+
|
1399 |
+
if ( $after_action_result ) {
|
1400 |
+
// LOG ---------------------------------------------------------------------------------------------------------
|
1401 |
+
$curr_user = get_user_by( 'id', (int) $params['user_id'] );
|
1402 |
+
wpbc_add_log_info( explode( ',', $selected_booking_id ),
|
1403 |
+
__( 'Booking resource changed by:', 'booking' )
|
1404 |
+
. ' ' . $curr_user->first_name . ' ' . $curr_user->last_name . ' (' . $curr_user->user_email . ')'
|
1405 |
+
);
|
1406 |
+
|
1407 |
+
// Just action hook for some other addons
|
1408 |
+
do_action( 'wpbc_booking_action__duplicate_booking_to_other_resource', $selected_booking_id, $selected_resource_id );
|
1409 |
+
|
1410 |
+
// Emails ------------------------------------------------------------------------------------------------------
|
1411 |
+
if ( ! empty( $is_send_emeils ) ) {
|
1412 |
+
// We are sending emails about the new booking, if we have created it.
|
1413 |
+
// wpbc_send_email_modified( $selected_booking_id, $selected_resource_id, $formdata_new );
|
1414 |
+
}
|
1415 |
+
}
|
1416 |
+
}
|
1417 |
+
}
|
1418 |
+
|
1419 |
+
return array(
|
1420 |
+
'after_action_result' => $after_action_result,
|
1421 |
+
'after_action_message' => $after_action_message
|
1422 |
+
);
|
1423 |
+
|
1424 |
+
}
|
1425 |
+
|
1426 |
+
/**
|
1427 |
+
* Duplicate booking in another resource -- SQL manipulation
|
1428 |
+
* @param $selected_booking_id
|
1429 |
+
* @param $selected_resource_id
|
1430 |
+
*
|
1431 |
+
* @return array
|
1432 |
+
*/
|
1433 |
+
function wpbc__sql__duplicate_booking_to_other_resource_for_booking( $selected_booking_id, $selected_resource_id, $params ){
|
1434 |
+
global $wpdb;
|
1435 |
+
|
1436 |
+
$booking_id = intval( $selected_booking_id );
|
1437 |
+
$resource_id = intval( $selected_resource_id );
|
1438 |
+
$db_form_data_new = '';
|
1439 |
+
$booking_resources_arr = wpbc_ajx_get_all_booking_resources_arr();
|
1440 |
+
|
1441 |
+
$is_send_emails = wpbc_ajx__user_request_option__is_send_emails( $params['user_id'] );
|
1442 |
+
|
1443 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
1444 |
+
// 1.Get dates of SOURCE booking
|
1445 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
1446 |
+
if ( 1 ) {
|
1447 |
+
// 1.1.Get booking data of SOURCE booking
|
1448 |
+
$sql = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}booking as bk WHERE booking_id = %d ", $booking_id );
|
1449 |
+
$res = $wpdb->get_row( $sql );
|
1450 |
+
$db_form_data_old = $res->form;
|
1451 |
+
$resource_id_old = $res->booking_type;
|
1452 |
+
|
1453 |
+
// 1.2. Get dates of SOURCE booking
|
1454 |
+
$sql = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}bookingdates as dt WHERE booking_id = %d ORDER BY booking_date ASC ", $booking_id );
|
1455 |
+
$old_resource_dates_array = $wpdb->get_results( $sql );
|
1456 |
+
}
|
1457 |
+
|
1458 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
1459 |
+
// 2. Get bookings of selected booking resource - checking if some dates there is booked or not
|
1460 |
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
1461 |
+
$exist_dates_results = wpbc_get_booking_dates_in_resource_for_folowing_dates( $old_resource_dates_array , $resource_id );
|
1462 |
+
|
1463 |
+
if ( ( count( $exist_dates_results ) == 3 ) && ( false === $exist_dates_results[0] ) ){
|
1464 |
+
// // ERROR :: number of check in/dates does not equal to number of check out dates.
|
1465 |
+
return $exist_dates_results;
|
1466 |
+
}
|
1467 |
+
|
1468 |
+
if ( get_bk_option('booking_change_resource_skip_checking') === 'On' ) { //FixIn: 8.4.5.4
|
1469 |
+
$is_date_time_booked = false;
|
1470 |
+
} else {
|
1471 |
+
$is_date_time_booked = wpbc_check_dates_intersections( $old_resource_dates_array, $exist_dates_results );
|
1472 |
+
}
|
1473 |
+
|
1474 |
+
if ( $is_date_time_booked ) {
|
1475 |
+
|
1476 |
+
$after_action_result = false;
|
1477 |
+
$after_action_message = '<strong>' . __( 'Warning', 'booking' ) . '!</strong> '
|
1478 |
+
. sprintf( __( 'Booking %s has not been duplicated in booking resource %s. Current dates are already booked there.' )
|
1479 |
+
, '<strong style="font-size:0.9em;">[ID=' . $booking_id . ']</strong>'
|
1480 |
+
, '<strong>' . apply_bk_filter( 'wpdev_check_for_active_language', $booking_resources_arr[ $resource_id ]['title'] ) . '</strong>'
|
1481 |
+
);
|
1482 |
+
|
1483 |
+
} else { // Possible to change
|
1484 |
+
|
1485 |
+
$db_form_data_new = wpbc_update_resource_id_in_dbformatted_booking_data( $db_form_data_old, $resource_id_old, $resource_id );
|
1486 |
+
|
1487 |
+
$wpdev_active_locale = isset( $_REQUEST['wpbc_ajx_locale'] ) ? esc_js( $_REQUEST['wpbc_ajx_locale'] ) : 'en_US';
|
1488 |
+
|
1489 |
+
|
1490 |
+
// Change dates from DateObj( $selected_date->booking_date = '2015-10-17' ) to array ( '17.10.2015' )
|
1491 |
+
$my_dates_for_sql = array();
|
1492 |
+
foreach ($old_resource_dates_array as $selected_date) {
|
1493 |
+
$selected_date = explode( '-', $selected_date->booking_date );
|
1494 |
+
$my_dates_for_sql[] = sprintf( "%02d.%02d.%04d", $selected_date[2], $selected_date[1], $selected_date[0] );
|
1495 |
+
}
|
1496 |
+
$my_dates_for_sql = implode( ', ', $my_dates_for_sql );
|
1497 |
+
|
1498 |
+
/*
|
1499 |
+
$params = array(
|
1500 |
+
["bktype"] => 4
|
1501 |
+
["dates"] => 24.09.2014, 25.09.2014, 26.09.2014
|
1502 |
+
["form"] => select-one^rangetime4^14:00 - 16:00~text^name4^Costa~text^secondname4^Rika~email^email4^rika@cost.com~text^phone4^2423432~text^address4^Ferrari~text^city4^Rome~text^postcode4^2343~select-one^country4^IT~select-one^visitors4^1~select-one^children4^0~textarea^details4^dhfjksdhfkdhjs~checkbox^term_and_condition4[]^I Accept term and conditions
|
1503 |
+
["is_send_emeils"] => 1
|
1504 |
+
["booking_form_type"] =>
|
1505 |
+
[wpdev_active_locale] => en_US
|
1506 |
+
|
1507 |
+
// Paramters for adding booking in the HTML:
|
1508 |
+
["skip_page_checking_for_updating"] = 0;
|
1509 |
+
["is_show_payment_form"] = 1;
|
1510 |
+
); */
|
1511 |
+
// Params for creation new booking
|
1512 |
+
$params = array(
|
1513 |
+
'bktype' => $resource_id
|
1514 |
+
, 'dates' => $my_dates_for_sql // '27.08.2014, 28.08.2014, 29.08.2014'
|
1515 |
+
, 'form' => $db_form_data_new
|
1516 |
+
, 'is_send_emeils' => $is_send_emails
|
1517 |
+
, 'booking_form_type' => ''
|
1518 |
+
, 'wpdev_active_locale' => $wpdev_active_locale
|
1519 |
+
);
|
1520 |
+
$booking_id_new = apply_bk_filter('wpbc_add_new_booking_filter' , $params );
|
1521 |
+
|
1522 |
+
$after_action_result = true;
|
1523 |
+
$after_action_message = sprintf( __( 'Booking %s has been duplicated in booking resource %s. New booking %s.' )
|
1524 |
+
, '<strong style="font-size:0.9em;">[ID=' . $booking_id . ']</strong>'
|
1525 |
+
, '<strong>' . apply_bk_filter( 'wpdev_check_for_active_language', $booking_resources_arr[ $resource_id ]['title'] ) . '</strong>'
|
1526 |
+
, '<strong style="font-size:0.9em;">[ID=' . $booking_id_new . ']</strong>'
|
1527 |
+
);
|
1528 |
+
// Everything Cool :) - booking has been duplicated
|
1529 |
+
}
|
1530 |
+
|
1531 |
+
return array( $after_action_result, $after_action_message , $db_form_data_new );
|
1532 |
+
}
|
1533 |
+
|
1534 |
+
/**
|
1535 |
+
* Action: Set payment status for the booking
|
1536 |
+
*
|
1537 |
+
* @param $booking_id_arr array or int of booking ID
|
1538 |
+
* @param $selected_payment_status string payment status of booking
|
1539 |
+
* @param $params array array of parameters: array( 'user_id' => 1 )
|
1540 |
+
*
|
1541 |
+
* @return array
|
1542 |
+
*
|
1543 |
+
* Example:
|
1544 |
+
*/
|
1545 |
+
function wpbc_booking_do_action__set_payment_status( $booking_id_arr, $selected_payment_status, $params ) {
|
1546 |
+
|
1547 |
+
global $wpdb;
|
1548 |
+
|
1549 |
+
make_bk_action('check_multiuser_params_for_client_side_by_user_id', $params['user_id'] );
|
1550 |
+
|
1551 |
+
// Get ID list of bookings, like '1' or '3,7,9' ----------------------------------------------------------------
|
1552 |
+
if ( ! is_array( $booking_id_arr ) ) {
|
1553 |
+
$booking_id_arr = array( $booking_id_arr );
|
1554 |
+
}
|
1555 |
+
$booking_id_csd = join( ',', $booking_id_arr );
|
1556 |
+
$booking_id_csd = wpbc_clean_digit_or_csd( $booking_id_csd );
|
1557 |
+
|
1558 |
+
|
1559 |
+
// Is send email for this action ----------------------------------------------------------------------------------
|
1560 |
+
$is_send_emeils = wpbc_ajx__user_request_option__is_send_emails( $params['user_id'] );
|
1561 |
+
|
1562 |
+
// -----------------------------------------------------------------------------------------------------------------
|
1563 |
+
|
1564 |
+
if ( empty( $booking_id_csd ) ) {
|
1565 |
+
$after_action_result = false;
|
1566 |
+
$after_action_message = __( 'No bookings have been selected. Please select one or more bookings.', 'booking' );
|
1567 |
+
|
1568 |
+
} else {
|
1569 |
+
$after_action_result = true;
|
1570 |
+
$after_action_message = '';
|
1571 |
+
|
1572 |
+
$work_booking_id_arr = explode( ',', $booking_id_csd );
|
1573 |
+
|
1574 |
+
foreach ( $work_booking_id_arr as $selected_booking_id ) {
|
1575 |
+
|
1576 |
+
// SQL ---------------------------------------------------------------------------------------------------
|
1577 |
+
$sql = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}booking as bk WHERE bk.booking_id= %d ", $selected_booking_id );
|
1578 |
+
$result_bk = $wpdb->get_results( $sql );
|
1579 |
+
|
1580 |
+
$old_pay_status = '';
|
1581 |
+
|
1582 |
+
if ( ( 0 == count( $result_bk ) ) ) {
|
1583 |
+
// Error
|
1584 |
+
$after_action_result = false;
|
1585 |
+
$after_action_message .= sprintf( __( 'There is no booking %s', 'booking' )
|
1586 |
+
, ' <span style="font-size:0.9em;">( ID = <strong>' . $booking_id_csd . '</strong> )</span>'
|
1587 |
+
);
|
1588 |
+
} else {
|
1589 |
+
$old_pay_status = $result_bk[0]->pay_status;
|
1590 |
+
}
|
1591 |
+
|
1592 |
+
$update_sql = $wpdb->prepare( "UPDATE {$wpdb->prefix}booking AS bk SET bk.pay_status= %s WHERE bk.booking_id= %d ", $selected_payment_status, $selected_booking_id );
|
1593 |
+
if ( false === $wpdb->query( $update_sql ) ) {
|
1594 |
+
// Error
|
1595 |
+
$after_action_result = false;
|
1596 |
+
$after_action_message .= 'Error during updating to DB. File:' . __FILE__ . ' on line: ' . __LINE__;
|
1597 |
+
} else {
|
1598 |
+
// Success
|
1599 |
+
$after_action_message .= sprintf( __( 'Payment status for Booking %s has been updated from %s to %s', 'booking' )
|
1600 |
+
, ' <span style="font-size:0.9em;">( ID = <strong>' . $selected_booking_id . '</strong> )</span>'
|
1601 |
+
, '<strong>"' . wpbc__format__get_payment_status_title( $old_pay_status ) . '"</strong>'
|
1602 |
+
, '<strong>"' . wpbc__format__get_payment_status_title( $selected_payment_status ) . '"</strong>'
|
1603 |
+
) . '<br/>';
|
1604 |
+
}
|
1605 |
+
|
1606 |
+
|
1607 |
+
if ( $after_action_result ) {
|
1608 |
+
// LOG ---------------------------------------------------------------------------------------------------------
|
1609 |
+
$curr_user = get_user_by( 'id', (int) $params['user_id'] );
|
1610 |
+
wpbc_add_log_info( explode( ',', $selected_booking_id ),
|
1611 |
+
$after_action_message
|
1612 |
+
. '. ' . __( 'Changed by:', 'booking' )
|
1613 |
+
. ' ' . $curr_user->first_name . ' ' . $curr_user->last_name . ' (' . $curr_user->user_email . ')'
|
1614 |
+
);
|
1615 |
+
|
1616 |
+
// Just action hook for some other addons
|
1617 |
+
do_action( 'wpbc_booking_action__set_payment_status', $selected_booking_id, $selected_payment_status , $old_pay_status );
|
1618 |
+
|
1619 |
+
// Emails ------------------------------------------------------------------------------------------------------
|
1620 |
+
if ( ! empty( $is_send_emeils ) ) {
|
1621 |
+
// We are sending emails about the new booking, if we have created it.
|
1622 |
+
// wpbc_send_email_modified( $selected_booking_id, $selected_resource_id, $formdata_new );
|
1623 |
+
}
|
1624 |
+
}
|
1625 |
+
}
|
1626 |
+
}
|
1627 |
+
|
1628 |
+
return array(
|
1629 |
+
'after_action_result' => $after_action_result,
|
1630 |
+
'after_action_message' => $after_action_message
|
1631 |
+
);
|
1632 |
+
|
1633 |
+
}
|
1634 |
+
|
1635 |
+
/**
|
1636 |
+
* Get title of the payment status
|
1637 |
+
*
|
1638 |
+
* @param $payment_status_key
|
1639 |
+
*
|
1640 |
+
* @return string
|
1641 |
+
*/
|
1642 |
+
function wpbc__format__get_payment_status_title( $payment_status_key ){
|
1643 |
+
|
1644 |
+
$selected_payment_status_text = $payment_status_key;
|
1645 |
+
|
1646 |
+
$select_box_options = get_payment_status_titles();
|
1647 |
+
$select_box_options = array_flip( $select_box_options );
|
1648 |
+
|
1649 |
+
if ( ! empty( $select_box_options[ $payment_status_key ] ) ) {
|
1650 |
+
$selected_payment_status_text = $select_box_options[ $payment_status_key ];
|
1651 |
+
}
|
1652 |
+
|
1653 |
+
return $selected_payment_status_text;
|
1654 |
+
}
|
1655 |
+
|
1656 |
+
|
1657 |
+
/**
|
1658 |
+
* Action: Set Booking Cost
|
1659 |
+
*
|
1660 |
+
* @param $booking_id_arr array or int of booking ID
|
1661 |
+
* @param $booking_cost string booking cost
|
1662 |
+
* @param $params array array of parameters: array( 'user_id' => 1 )
|
1663 |
+
*
|
1664 |
+
* @return array
|
1665 |
+
*
|
1666 |
+
* Example:
|
1667 |
+
*/
|
1668 |
+
function wpbc_booking_do_action__set_booking_cost( $booking_id_arr, $booking_cost, $params ) {
|
1669 |
+
|
1670 |
+
global $wpdb;
|
1671 |
+
|
1672 |
+
make_bk_action('check_multiuser_params_for_client_side_by_user_id', $params['user_id'] );
|
1673 |
+
|
1674 |
+
// Get ID list of bookings, like '1' or '3,7,9' ----------------------------------------------------------------
|
1675 |
+
if ( ! is_array( $booking_id_arr ) ) {
|
1676 |
+
$booking_id_arr = array( $booking_id_arr );
|
1677 |
+
}
|
1678 |
+
$booking_id_csd = join( ',', $booking_id_arr );
|
1679 |
+
$booking_id_csd = wpbc_clean_digit_or_csd( $booking_id_csd );
|
1680 |
+
|
1681 |
+
|
1682 |
+
// Is send email for this action ----------------------------------------------------------------------------------
|
1683 |
+
$is_send_emeils = wpbc_ajx__user_request_option__is_send_emails( $params['user_id'] );
|
1684 |
+
|
1685 |
+
// -----------------------------------------------------------------------------------------------------------------
|
1686 |
+
|
1687 |
+
$booking_cost = str_replace(',', '.', $booking_cost);
|
1688 |
+
$booking_cost = floatval( $booking_cost );
|
1689 |
+
|
1690 |
+
|
1691 |
+
if ( empty( $booking_id_csd ) ) {
|
1692 |
+
$after_action_result = false;
|
1693 |
+
$after_action_message = __( 'No bookings have been selected. Please select one or more bookings.', 'booking' );
|
1694 |
+
|
1695 |
+
} else {
|
1696 |
+
$after_action_result = true;
|
1697 |
+
$after_action_message = '';
|
1698 |
+
|
1699 |
+
$work_booking_id_arr = explode( ',', $booking_id_csd );
|
1700 |
+
|
1701 |
+
foreach ( $work_booking_id_arr as $selected_booking_id ) {
|
1702 |
+
|
1703 |
+
// SQL ---------------------------------------------------------------------------------------------------
|
1704 |
+
$sql = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}booking as bk WHERE bk.booking_id= %d ", $selected_booking_id );
|
1705 |
+
$result_bk = $wpdb->get_results( $sql );
|
1706 |
+
|
1707 |
+
$old_booking_cost = '';
|
1708 |
+
|
1709 |
+
if ( ( 0 == count( $result_bk ) ) ) {
|
1710 |
+
// Error
|
1711 |
+
$after_action_result = false;
|
1712 |
+
$after_action_message .= sprintf( __( 'There is no booking %s', 'booking' )
|
1713 |
+
, ' <span style="font-size:0.9em;">( ID = <strong>' . $booking_id_csd . '</strong> )</span>'
|
1714 |
+
);
|
1715 |
+
} else {
|
1716 |
+
$old_booking_cost = $result_bk[0]->cost;
|
1717 |
+
}
|
1718 |
+
|
1719 |
+
$update_sql = $wpdb->prepare( "UPDATE {$wpdb->prefix}booking AS bk SET bk.cost = %f WHERE bk.booking_id = %d ", $booking_cost, $selected_booking_id );
|
1720 |
+
if ( false === $wpdb->query( $update_sql ) ) {
|
1721 |
+
// Error
|
1722 |
+
$after_action_result = false;
|
1723 |
+
$after_action_message .= 'Error during updating to DB. File:' . __FILE__ . ' on line: ' . __LINE__;
|
1724 |
+
} else {
|
1725 |
+
// Success
|
1726 |
+
$after_action_message .= sprintf( __( 'Cost for Booking %s has been updated from %s to %s', 'booking' )
|
1727 |
+
, ' <span style="font-size:0.9em;">( ID = <strong>' . $selected_booking_id . '</strong> )</span>'
|
1728 |
+
, '<strong>"' . wpbc__format__get_payment_status_title( $old_booking_cost ) . '"</strong>'
|
1729 |
+
, '<strong>"' . wpbc__format__get_payment_status_title( $booking_cost ) . '"</strong>'
|
1730 |
+
) . '<br/>';
|
1731 |
+
}
|
1732 |
+
|
1733 |
+
|
1734 |
+
if ( $after_action_result ) {
|
1735 |
+
// LOG ---------------------------------------------------------------------------------------------------------
|
1736 |
+
$curr_user = get_user_by( 'id', (int) $params['user_id'] );
|
1737 |
+
wpbc_add_log_info( explode( ',', $selected_booking_id ),
|
1738 |
+
$after_action_message
|
1739 |
+
. '. ' . __( 'Changed by:', 'booking' )
|
1740 |
+
. ' ' . $curr_user->first_name . ' ' . $curr_user->last_name . ' (' . $curr_user->user_email . ')'
|
1741 |
+
);
|
1742 |
+
|
1743 |
+
// Just action hook for some other addons
|
1744 |
+
do_action( 'wpbc_booking_action__set_booking_cost', $selected_booking_id, $booking_cost , $old_booking_cost );
|
1745 |
+
|
1746 |
+
// Emails ------------------------------------------------------------------------------------------------------
|
1747 |
+
if ( ! empty( $is_send_emeils ) ) {
|
1748 |
+
|
1749 |
+
if ( get_bk_option( 'booking_send_email_on_cost_change' ) == 'On' ) { //FixIn: 8.1.3.30
|
1750 |
+
$booking_data = apply_bk_filter( 'wpbc_get_booking_data', $selected_booking_id );
|
1751 |
+
wpbc_send_email_modified( $selected_booking_id, $booking_data['type'], $booking_data['form'] );
|
1752 |
+
}
|
1753 |
+
}
|
1754 |
+
|
1755 |
+
}
|
1756 |
+
}
|
1757 |
+
}
|
1758 |
+
|
1759 |
+
return array(
|
1760 |
+
'after_action_result' => $after_action_result,
|
1761 |
+
'after_action_message' => $after_action_message
|
1762 |
+
);
|
1763 |
+
}
|
1764 |
+
|
1765 |
+
|
1766 |
+
/**
|
1767 |
+
* Action: Send Payment request
|
1768 |
+
*
|
1769 |
+
* @param $booking_id_arr array or int of booking ID
|
1770 |
+
* @param $booking_cost string booking cost
|
1771 |
+
* @param $params array array of parameters: array( 'user_id' => 1 )
|
1772 |
+
*
|
1773 |
+
* @return array
|
1774 |
+
*/
|
1775 |
+
function wpbc_booking_do_action__send_payment_request($booking_id_arr, $reason_of_action, $params ) {
|
1776 |
+
global $wpdb;
|
1777 |
+
|
1778 |
+
make_bk_action('check_multiuser_params_for_client_side_by_user_id', $params['user_id'] );
|
1779 |
+
|
1780 |
+
// Get ID list of bookings, like '1' or '3,7,9' ----------------------------------------------------------------
|
1781 |
+
if ( ! is_array( $booking_id_arr ) ) {
|
1782 |
+
$booking_id_arr = array( $booking_id_arr );
|
1783 |
+
}
|
1784 |
+
$booking_id_csd = join( ',', $booking_id_arr );
|
1785 |
+
$booking_id_csd = wpbc_clean_digit_or_csd( $booking_id_csd );
|
1786 |
+
|
1787 |
+
|
1788 |
+
// Is send email for this action ----------------------------------------------------------------------------------
|
1789 |
+
$is_send_emeils = wpbc_ajx__user_request_option__is_send_emails( $params['user_id'] );
|
1790 |
+
|
1791 |
+
// -----------------------------------------------------------------------------------------------------------------
|
1792 |
+
|
1793 |
+
if ( empty( $booking_id_csd ) ) {
|
1794 |
+
$after_action_result = false;
|
1795 |
+
$after_action_message = __( 'No bookings have been selected. Please select one or more bookings.', 'booking' );
|
1796 |
+
|
1797 |
+
} else {
|
1798 |
+
$after_action_result = true;
|
1799 |
+
$after_action_message = '';
|
1800 |
+
|
1801 |
+
$work_booking_id_arr = explode( ',', $booking_id_csd );
|
1802 |
+
|
1803 |
+
foreach ( $work_booking_id_arr as $selected_booking_id ) {
|
1804 |
+
|
1805 |
+
// SQL ---------------------------------------------------------------------------------------------------
|
1806 |
+
$sql = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}booking as bk WHERE bk.booking_id= %d ", $selected_booking_id );
|
1807 |
+
$result_bk = $wpdb->get_results( $sql );
|
1808 |
+
|
1809 |
+
$old_booking_cost = '';
|
1810 |
+
|
1811 |
+
if ( ( 0 == count( $result_bk ) ) ) {
|
1812 |
+
// Error
|
1813 |
+
$after_action_result = false;
|
1814 |
+
$after_action_message .= sprintf( __( 'There is no booking %s', 'booking' )
|
1815 |
+
, ' <span style="font-size:0.9em;">( ID = <strong>' . $booking_id_csd . '</strong> )</span>'
|
1816 |
+
);
|
1817 |
+
} else {
|
1818 |
+
$old_booking_cost = $result_bk[0]->cost;
|
1819 |
+
|
1820 |
+
$is_email_payment_request_adress = get_bk_option( 'booking_is_email_payment_request_adress' );
|
1821 |
+
if ( 'Off' != $is_email_payment_request_adress ) {
|
1822 |
+
|
1823 |
+
$reason_of_action = htmlspecialchars( str_replace( '\"', '"', $reason_of_action ) );
|
1824 |
+
$reason_of_action = str_replace( "\'", "'", $reason_of_action );
|
1825 |
+
|
1826 |
+
foreach ( $result_bk as $res ) {
|
1827 |
+
|
1828 |
+
$is_send = wpbc_send_email_payment_request( $res->booking_id, $res->booking_type, $res->form, $reason_of_action );
|
1829 |
+
|
1830 |
+
if ( $is_send ) {
|
1831 |
+
// Update Payment request number
|
1832 |
+
$pay_request_numer = $res->pay_request + 1;
|
1833 |
+
$update_sql = $wpdb->prepare( "UPDATE {$wpdb->prefix}booking AS bk SET bk.pay_request= %d WHERE bk.booking_id= %d ", $pay_request_numer, $res->booking_id );
|
1834 |
+
if ( false === $wpdb->query( $update_sql ) ) {
|
1835 |
+
// Error
|
1836 |
+
$after_action_result = false;
|
1837 |
+
$after_action_message .= 'Error during updating to DB. File:' . __FILE__ . ' on line: ' . __LINE__;
|
1838 |
+
} else {
|
1839 |
+
// Success
|
1840 |
+
$after_action_message .= sprintf( __( 'Payment request for Booking %s has been sent. Cost for payment: %s', 'booking' )
|
1841 |
+
, ' <span style="font-size:0.9em;">( ID = <strong>' . $selected_booking_id . '</strong> )</span>'
|
1842 |
+
, '<strong>"' . wpbc__format__get_payment_status_title( $old_booking_cost ) . '"</strong>'
|
1843 |
+
) . '<br/>';
|
1844 |
+
}
|
1845 |
+
}
|
1846 |
+
}
|
1847 |
+
}
|
1848 |
+
}
|
1849 |
+
|
1850 |
+
if ( $after_action_result ) {
|
1851 |
+
// LOG ---------------------------------------------------------------------------------------------------------
|
1852 |
+
$curr_user = get_user_by( 'id', (int) $params['user_id'] );
|
1853 |
+
wpbc_add_log_info( explode( ',', $selected_booking_id ),
|
1854 |
+
$after_action_message
|
1855 |
+
. '. ' . __( 'Send by:', 'booking' )
|
1856 |
+
. ' ' . $curr_user->first_name . ' ' . $curr_user->last_name . ' (' . $curr_user->user_email . ')'
|
1857 |
+
);
|
1858 |
+
|
1859 |
+
// Just action hook for some other addons
|
1860 |
+
do_action( 'wpbc_booking_action__send_payment_request', $selected_booking_id, $reason_of_action , $old_booking_cost );
|
1861 |
+
|
1862 |
+
// Emails ------------------------------------------------------------------------------------------------------
|
1863 |
+
/*
|
1864 |
+
if ( ! empty( $is_send_emeils ) ) {
|
1865 |
+
|
1866 |
+
if ( get_bk_option( 'booking_send_email_on_cost_change' ) == 'On' ) {
|
1867 |
+
$booking_data = apply_bk_filter( 'wpbc_get_booking_data', $selected_booking_id );
|
1868 |
+
wpbc_send_email_modified( $selected_booking_id, $booking_data['type'], $booking_data['form'] );
|
1869 |
+
}
|
1870 |
+
}
|
1871 |
+
*/
|
1872 |
+
}
|
1873 |
+
}
|
1874 |
+
|
1875 |
+
}
|
1876 |
+
|
1877 |
+
return array(
|
1878 |
+
'after_action_result' => $after_action_result,
|
1879 |
+
'after_action_message' => $after_action_message
|
1880 |
+
);
|
1881 |
+
}
|
1882 |
+
|
1883 |
+
|
1884 |
+
function wpbc_booking_do_action__import_google_calendar( $request_params, $params ) {
|
1885 |
+
|
1886 |
+
$user_bk_id = (int) $params['user_id'];
|
1887 |
+
|
1888 |
+
global $wpdb;
|
1889 |
+
|
1890 |
+
$wpbc_Google_Calendar = new WPBC_Google_Calendar();
|
1891 |
+
|
1892 |
+
$wpbc_Google_Calendar->setSilent();
|
1893 |
+
|
1894 |
+
$wpbc_Google_Calendar->set_timezone( get_bk_option('booking_gcal_timezone') );
|
1895 |
+
|
1896 |
+
$wpbc_Google_Calendar->set_events_from_with_array( array(
|
1897 |
+
$request_params['booking_gcal_events_from'],
|
1898 |
+
$request_params['booking_gcal_events_from_offset'],
|
1899 |
+
$request_params['booking_gcal_events_from_offset_type']
|
1900 |
+
) );
|
1901 |
+
|
1902 |
+
$wpbc_Google_Calendar->set_events_until_with_array( array(
|
1903 |
+
$request_params['booking_gcal_events_until'],
|
1904 |
+
$request_params['booking_gcal_events_until_offset'],
|
1905 |
+
$request_params['booking_gcal_events_until_offset_type']
|
1906 |
+
) );
|
1907 |
+
|
1908 |
+
$wpbc_Google_Calendar->set_events_max( $request_params['booking_gcal_events_max'] );
|
1909 |
+
|
1910 |
+
if ( ( isset( $request_params['booking_gcal_resource'] ) ) && ( empty( $request_params['booking_gcal_resource'] ) ) ) {
|
1911 |
+
|
1912 |
+
$wpbc_Google_Calendar->setUrl( get_bk_option( 'booking_gcal_feed') );
|
1913 |
+
$import_result = $wpbc_Google_Calendar->run();
|
1914 |
+
|
1915 |
+
} else {
|
1916 |
+
|
1917 |
+
if ( $request_params['booking_gcal_resource'] != 'all' ) { // One resource
|
1918 |
+
|
1919 |
+
$wpbc_booking_resource_id = intval( $request_params['booking_gcal_resource'] );
|
1920 |
+
|
1921 |
+
$wpbc_Google_Calendar->setResource( $wpbc_booking_resource_id );
|
1922 |
+
|
1923 |
+
$wpbc_booking_resource_feed = get_booking_resource_attr( $wpbc_booking_resource_id );
|
1924 |
+
$wpbc_booking_resource_feed = $wpbc_booking_resource_feed->import;
|
1925 |
+
$wpbc_Google_Calendar->setUrl( $wpbc_booking_resource_feed );
|
1926 |
+
|
1927 |
+
$import_result = $wpbc_Google_Calendar->run();
|
1928 |
+
} else { // All resources
|
1929 |
+
|
1930 |
+
$where = ''; // Where for the different situation: BL and MU
|
1931 |
+
|
1932 |
+
if ( class_exists( 'wpdev_bk_multiuser' ) ) { // MultiUser - only specific booking resources for specific Regular User in Admin panel.
|
1933 |
+
|
1934 |
+
$is_user_super_admin = apply_bk_filter( 'is_user_super_admin', $user_bk_id );
|
1935 |
+
|
1936 |
+
if ( ! $is_user_super_admin ) {
|
1937 |
+
$where .= ' WHERE users = ' . intval( $user_bk_id ) . ' ';
|
1938 |
+
}
|
1939 |
+
}
|
1940 |
+
|
1941 |
+
$my_sql = "SELECT booking_type_id, import FROM {$wpdb->prefix}bookingtypes {$where}";
|
1942 |
+
|
1943 |
+
$types_list = $wpdb->get_results( $my_sql );
|
1944 |
+
|
1945 |
+
foreach ($types_list as $wpbc_booking_resource) {
|
1946 |
+
$wpbc_booking_resource_id = $wpbc_booking_resource->booking_type_id;
|
1947 |
+
$wpbc_booking_resource_feed = $wpbc_booking_resource->import;
|
1948 |
+
if ( ( ! empty( $wpbc_booking_resource_feed ) ) && ( $wpbc_booking_resource_feed != null ) && ( $wpbc_booking_resource_feed != '/' ) ) {
|
1949 |
+
|
1950 |
+
$wpbc_Google_Calendar->setUrl( $wpbc_booking_resource_feed );
|
1951 |
+
$wpbc_Google_Calendar->setResource( $wpbc_booking_resource_id );
|
1952 |
+
$import_result = $wpbc_Google_Calendar->run();
|
1953 |
+
}
|
1954 |
+
}
|
1955 |
+
}
|
1956 |
+
}
|
1957 |
+
|
1958 |
+
|
1959 |
+
if ( ( isset( $import_result ) ) && ( false != $import_result ) ) {
|
1960 |
+
$after_action_result = true;
|
1961 |
+
$after_action_message = sprintf( __( '%s new bookings have been imported', 'booking' )
|
1962 |
+
, ' <span style="font-size:1em;"> <strong>' . count( $wpbc_Google_Calendar->events ) . '</strong> </span>'
|
1963 |
+
) ;
|
1964 |
+
if ( 0 != count( $wpbc_Google_Calendar->events ) ) {
|
1965 |
+
$after_action_message .= '<br/><br/>' . __( 'The filter settings have been updated to reflect these imported bookings. The page will be reloaded.', 'booking' );
|
1966 |
+
}
|
1967 |
+
} else {
|
1968 |
+
$after_action_result = false;
|
1969 |
+
$after_action_message = __( 'No bookings have been imported.', 'booking' )
|
1970 |
+
. '<br/><br/>'
|
1971 |
+
. sprintf( __( 'Please configure settings for import Google Calendar events', 'booking' ), '<b>', ',</b>' )
|
1972 |
+
. ' <a href="' . wpbc_get_settings_url() . '&tab=sync&subtab=gcal' . '">' . __('here' ,'booking') . '.</a>'
|
1973 |
+
. '<br/><br/>'
|
1974 |
+
. $wpbc_Google_Calendar->getErrorMessage();
|
1975 |
+
}
|
1976 |
+
|
1977 |
+
|
1978 |
+
if ( 0 == count( $wpbc_Google_Calendar->events ) ) {
|
1979 |
+
$new_listing_params = false;
|
1980 |
+
} else {
|
1981 |
+
$new_listing_params = array(
|
1982 |
+
"sort" => "booking_id",
|
1983 |
+
"sort_type" => "DESC",
|
1984 |
+
"page_num" => 1,
|
1985 |
+
"page_items_count" => "50
|