Version Description
- SAFE UPDATE: No data loss for those upgrading from version 1.0 or higher
- Bug fix on update
Download this release
Release Info
Developer | spwebguy |
Plugin | ![]() |
Version | 2.0.1 |
Comparing to | |
See all releases |
Code changes from version 1.3.1 to 2.0.1
- cmb2/bootstrap.php +61 -0
- cmb2/css/cmb2.css +2928 -0
- cmb2/css/cmb2.css.map +7 -0
- cmb2/css/cmb2.min.css +1 -0
- cmb2/css/index.php +0 -0
- cmb2/css/sass/cmb2.scss +14 -0
- cmb2/css/sass/index.php +0 -0
- cmb2/css/sass/partials/_collapsible_ui.scss +52 -0
- cmb2/css/sass/partials/_jquery_ui.scss +289 -0
- cmb2/css/sass/partials/_main_wrap.scss +438 -0
- cmb2/css/sass/partials/_misc.scss +20 -0
- cmb2/css/sass/partials/_mixins.scss +40 -0
- cmb2/css/sass/partials/_post_metaboxes.scss +114 -0
- cmb2/css/sass/partials/_sidebar_placements.scss +153 -0
- cmb2/css/sass/partials/_timepicker.scss +40 -0
- cmb2/css/sass/partials/_variables.scss +22 -0
- cmb2/css/sass/partials/index.php +0 -0
- cmb2/images/ico-delete.png +0 -0
- cmb2/images/index.php +0 -0
- cmb2/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- cmb2/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- cmb2/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- cmb2/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- cmb2/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- cmb2/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- cmb2/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- cmb2/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- cmb2/images/ui-icons_222222_256x240.png +0 -0
- cmb2/images/ui-icons_2e83ff_256x240.png +0 -0
- cmb2/images/ui-icons_454545_256x240.png +0 -0
- cmb2/images/ui-icons_888888_256x240.png +0 -0
- cmb2/images/ui-icons_cd0a0a_256x240.png +0 -0
- cmb2/includes/CMB2.php +859 -0
- cmb2/includes/CMB2_Ajax.php +209 -0
- cmb2/includes/CMB2_Boxes.php +36 -0
- cmb2/includes/CMB2_Field.php +892 -0
- cmb2/includes/CMB2_Options.php +178 -0
- cmb2/includes/CMB2_Sanitize.php +376 -0
- cmb2/includes/CMB2_Show_Filters.php +168 -0
- cmb2/includes/CMB2_Types.php +962 -0
- cmb2/includes/CMB2_Utils.php +181 -0
- cmb2/includes/CMB2_hookup.php +395 -0
- cmb2/includes/helper-functions.php +283 -0
- cmb2/includes/index.php +0 -0
- cmb2/index.php +0 -0
- cmb2/init.php +78 -0
- cmb2/js/cmb2.js +891 -0
- cmb2/js/cmb2.min.js +1 -0
- cmb2/js/index.php +0 -0
- cmb2/js/jquery.timePicker.min.js +13 -0
- css/admin_de_style.css +88 -0
- css/admin_de_style.min.css +1 -0
- css/tmm_custom_style.css +4 -1
- css/tmm_custom_style.min.css +1 -1
- drkfr/Gruntfile.js +0 -39
- drkfr/class.drkfr-meta-box.php +0 -379
- drkfr/classes.fields.php +0 -1675
- drkfr/css/dist/drkfr.css +0 -63
- drkfr/css/dist/drkfr.min.css +0 -63
- drkfr/css/legacy.css +0 -319
- drkfr/css/src/file.css +0 -166
- drkfr/css/src/generic.css +0 -55
- drkfr/css/src/group.css +0 -82
- drkfr/css/src/layout.css +0 -57
- drkfr/css/src/misc-fields.css +0 -71
- drkfr/css/src/repeatable.css +0 -88
- drkfr/css/src/sortable.css +0 -40
- drkfr/css/vendor/jquery-ui/images/animated-overlay.gif +0 -0
- drkfr/css/vendor/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- drkfr/css/vendor/jquery-ui/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- drkfr/css/vendor/jquery-ui/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- drkfr/css/vendor/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- drkfr/css/vendor/jquery-ui/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- drkfr/css/vendor/jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- drkfr/css/vendor/jquery-ui/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- drkfr/css/vendor/jquery-ui/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- drkfr/css/vendor/jquery-ui/images/ui-icons_222222_256x240.png +0 -0
- drkfr/css/vendor/jquery-ui/images/ui-icons_2e83ff_256x240.png +0 -0
- drkfr/css/vendor/jquery-ui/images/ui-icons_454545_256x240.png +0 -0
- drkfr/css/vendor/jquery-ui/images/ui-icons_888888_256x240.png +0 -0
- drkfr/css/vendor/jquery-ui/images/ui-icons_cd0a0a_256x240.png +0 -0
- drkfr/css/vendor/jquery-ui/jquery-ui.css +0 -1175
- drkfr/css/vendor/jquery-ui/jquery-ui.min.css +0 -5
- drkfr/css/vendor/jquery-ui/jquery.ui.theme.css +0 -406
- drkfr/custom-meta-boxes.php +0 -136
- drkfr/fields-anywhere.php +0 -92
- drkfr/images/drkfr-icon-remove.png +0 -0
- drkfr/images/drkfr-icon-remove@2x.png +0 -0
- drkfr/images/wpspin-2x.gif +0 -0
- drkfr/images/wpspin.gif +0 -0
- drkfr/js/drkfr.js +0 -315
- drkfr/js/field-gmap.js +0 -93
- drkfr/js/field-wysiwyg.js +0 -106
- drkfr/js/field.colorpicker.js +0 -18
- drkfr/js/field.datetime.js +0 -47
- drkfr/js/field.select.js +0 -29
- drkfr/js/file-upload.js +0 -129
- drkfr/js/jquery.timePicker.min.js +0 -20
- drkfr/js/vendor/select2/.bower.json +0 -25
- drkfr/js/vendor/select2/.gitignore +0 -2
- drkfr/js/vendor/select2/LICENSE +0 -18
- drkfr/js/vendor/select2/README.md +0 -99
- drkfr/js/vendor/select2/bower.json +0 -8
- drkfr/js/vendor/select2/component.json +0 -66
- drkfr/js/vendor/select2/composer.json +0 -29
- drkfr/js/vendor/select2/package.json +0 -20
- drkfr/js/vendor/select2/release.sh +0 -79
- drkfr/js/vendor/select2/select2-bootstrap.css +0 -87
- drkfr/js/vendor/select2/select2-spinner.gif +0 -0
- drkfr/js/vendor/select2/select2.css +0 -704
- drkfr/js/vendor/select2/select2.jquery.json +0 -36
- drkfr/js/vendor/select2/select2.js +0 -3508
- drkfr/js/vendor/select2/select2.min.js +0 -23
- drkfr/js/vendor/select2/select2.png +0 -0
- drkfr/js/vendor/select2/select2_locale_ar.js +0 -19
- drkfr/js/vendor/select2/select2_locale_az.js +0 -20
- drkfr/js/vendor/select2/select2_locale_bg.js +0 -20
- drkfr/js/vendor/select2/select2_locale_ca.js +0 -19
- drkfr/js/vendor/select2/select2_locale_cs.js +0 -51
- drkfr/js/vendor/select2/select2_locale_da.js +0 -19
- drkfr/js/vendor/select2/select2_locale_de.js +0 -18
- drkfr/js/vendor/select2/select2_locale_el.js +0 -19
- drkfr/js/vendor/select2/select2_locale_en.js.template +0 -20
- drkfr/js/vendor/select2/select2_locale_es.js +0 -17
- drkfr/js/vendor/select2/select2_locale_et.js +0 -19
- drkfr/js/vendor/select2/select2_locale_eu.js +0 -45
- drkfr/js/vendor/select2/select2_locale_fa.js +0 -21
- drkfr/js/vendor/select2/select2_locale_fi.js +0 -30
- drkfr/js/vendor/select2/select2_locale_fr.js +0 -18
- drkfr/js/vendor/select2/select2_locale_gl.js +0 -45
- drkfr/js/vendor/select2/select2_locale_he.js +0 -19
- drkfr/js/vendor/select2/select2_locale_hr.js +0 -24
- drkfr/js/vendor/select2/select2_locale_hu.js +0 -17
- drkfr/js/vendor/select2/select2_locale_id.js +0 -19
- drkfr/js/vendor/select2/select2_locale_is.js +0 -17
- drkfr/js/vendor/select2/select2_locale_it.js +0 -17
- drkfr/js/vendor/select2/select2_locale_ja.js +0 -17
- drkfr/js/vendor/select2/select2_locale_ka.js +0 -19
- drkfr/js/vendor/select2/select2_locale_ko.js +0 -19
- drkfr/js/vendor/select2/select2_locale_lt.js +0 -26
- drkfr/js/vendor/select2/select2_locale_lv.js +0 -19
- drkfr/js/vendor/select2/select2_locale_mk.js +0 -19
- drkfr/js/vendor/select2/select2_locale_ms.js +0 -19
- drkfr/js/vendor/select2/select2_locale_nl.js +0 -17
- drkfr/js/vendor/select2/select2_locale_no.js +0 -20
- drkfr/js/vendor/select2/select2_locale_pl.js +0 -25
- drkfr/js/vendor/select2/select2_locale_pt-BR.js +0 -17
- drkfr/js/vendor/select2/select2_locale_pt-PT.js +0 -17
- drkfr/js/vendor/select2/select2_locale_ro.js +0 -17
- drkfr/js/vendor/select2/select2_locale_rs.js +0 -19
- drkfr/js/vendor/select2/select2_locale_ru.js +0 -23
- drkfr/js/vendor/select2/select2_locale_sk.js +0 -50
- drkfr/js/vendor/select2/select2_locale_sv.js +0 -19
- drkfr/js/vendor/select2/select2_locale_th.js +0 -19
- drkfr/js/vendor/select2/select2_locale_tr.js +0 -19
- drkfr/js/vendor/select2/select2_locale_ug-CN.js +0 -16
- drkfr/js/vendor/select2/select2_locale_uk.js +0 -25
- drkfr/js/vendor/select2/select2_locale_vi.js +0 -20
- drkfr/js/vendor/select2/select2_locale_zh-CN.js +0 -16
- drkfr/js/vendor/select2/select2_locale_zh-TW.js +0 -16
- drkfr/js/vendor/select2/select2x2.png +0 -0
- drkfr/phpunit.xml +0 -14
- readme.txt +14 -1
- tmm.php +498 -177
cmb2/bootstrap.php
ADDED
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Helper function to provide directory path to CMB
|
5 |
+
* @since 2.0.0
|
6 |
+
* @param string $path Path to append
|
7 |
+
* @return string Directory with optional path appended
|
8 |
+
*/
|
9 |
+
function cmb2_dir( $path = '' ) {
|
10 |
+
static $cmb2_dir = null;
|
11 |
+
if ( is_null( $cmb2_dir ) ) {
|
12 |
+
$cmb2_dir = trailingslashit( dirname( __FILE__ ) );
|
13 |
+
}
|
14 |
+
return $cmb2_dir . $path;
|
15 |
+
}
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Include helper functions,
|
19 |
+
* and more importantly, the class/file autoloader
|
20 |
+
*/
|
21 |
+
require_once cmb2_dir( 'includes/helper-functions.php' );
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Fires when CMB2 is included/loaded
|
25 |
+
*
|
26 |
+
* Should be used to to add metaboxes. See example-functions.php
|
27 |
+
*/
|
28 |
+
do_action( 'cmb2_init' );
|
29 |
+
|
30 |
+
/**
|
31 |
+
* For back-compat. Does the dirtywork of instantiatiating all the
|
32 |
+
* CMB2 instances for the cmb2_meta_boxes filter
|
33 |
+
* @since 2.0.2
|
34 |
+
*/
|
35 |
+
$all_meta_boxes_config = apply_filters( 'cmb2_meta_boxes', array() );
|
36 |
+
foreach ( (array) $all_meta_boxes_config as $meta_box_config ) {
|
37 |
+
new CMB2( $meta_box_config );
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Fires after all CMB2 instances are created
|
42 |
+
*/
|
43 |
+
do_action( 'cmb2_init_before_hookup' );
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Get all created metaboxes, and instantiate CMB2_hookup
|
47 |
+
* on metaboxes which require it.
|
48 |
+
* @since 2.0.2
|
49 |
+
*/
|
50 |
+
foreach ( CMB2_Boxes::get_all() as $cmb ) {
|
51 |
+
if ( $cmb->prop( 'hookup' ) ) {
|
52 |
+
$hookup = new CMB2_hookup( $cmb );
|
53 |
+
}
|
54 |
+
}
|
55 |
+
|
56 |
+
/**
|
57 |
+
* Fires after CMB2 initiation process has been completed
|
58 |
+
*/
|
59 |
+
do_action( 'cmb2_after_init' );
|
60 |
+
|
61 |
+
// End. That's it, folks! //
|
cmb2/css/cmb2.css
ADDED
@@ -0,0 +1,2928 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|