Version Description
- New: Theme API for custom theme integration of AdSense ads supports margin and alignment options now
- New: Create WP QUADS admin menue logo
- Fix: Admin warning if no adsense spots are activated is not working properly
Download this release
Release Info
Developer | ReneHermi |
Plugin | AdSense Plugin WP QUADS |
Version | 1.4.6 |
Comparing to | |
See all releases |
Code changes from version 1.4.5 to 1.4.6
- includes/admin/admin-notices.php +71 -63
- includes/admin/admin-pages.php +3 -1
- includes/api.php +1 -1
- includes/template-functions.php +50 -14
- quick-adsense-reloaded.php +2 -2
- readme.txt +6 -1
includes/admin/admin-notices.php
CHANGED
@@ -22,39 +22,39 @@ if( !defined( 'ABSPATH' ) )
|
|
22 |
function quads_admin_messages() {
|
23 |
global $quads_options;
|
24 |
|
25 |
-
if( !current_user_can( 'update_plugins' ) ){
|
26 |
return;
|
27 |
}
|
28 |
-
|
29 |
quads_theme_notice();
|
30 |
-
|
31 |
quads_update_notice();
|
32 |
-
|
33 |
-
if
|
34 |
-
echo '<div class="notice notice-warning">'.sprintf(__('<strong>No ads are activated!</strong> You need to assign at least 1 ad to an ad spot. Fix this in <a href="%s">General Settings</a>! Alternatively you need to use a shortcode in your posts or no ads are shown at all.', 'quick-adsense-reloaded'), admin_url().'admin.php?page=quads-settings#quads_settingsgeneral_header').'</div>';
|
35 |
}
|
36 |
-
|
37 |
-
if
|
38 |
-
echo '<div class="notice notice-warning">'.sprintf(__('<strong>No ads defined!</strong> You need to create at least one ad code. Fix this in <a href="%s">ADSENSE CODE</a>.', 'quick-adsense-reloaded'), admin_url().'admin.php?page=quads-settings#quads_settingsadsense_header').'</div>';
|
39 |
}
|
40 |
-
|
41 |
-
if
|
42 |
-
echo '<div class="notice notice-warning">'.sprintf(__('<strong>No ads are shown - No post types selected</strong> You need to select at least 1 post type like <i>blog</i> or <i>page</i>. Fix this in <a href="%s">General Settings</a> or no ads are shown at all.', 'quick-adsense-reloaded'), admin_url().'admin.php?page=quads-settings#quads_settingsgeneral_header').'</div>';
|
43 |
}
|
44 |
-
|
45 |
-
if
|
46 |
-
echo '<div class="notice notice-success">' . sprintf(__('<strong>No errors detected in WP QUADS settings.</strong> If ads are still not shown read the <a href="%s" target="_blank">troubleshooting guide</a>'), 'http://wpquads.com/docs/adsense-ads-are-not-showing/?utm_source=plugin&utm_campaign=wpquads-settings&utm_medium=website&utm_term=toplink') . '</div>';
|
47 |
}
|
48 |
|
49 |
//quads_plugin_deactivated_notice();
|
50 |
-
|
51 |
$install_date = get_option( 'quads_install_date' );
|
52 |
$display_date = date( 'Y-m-d h:i:s' );
|
53 |
$datetime1 = new DateTime( $install_date );
|
54 |
$datetime2 = new DateTime( $display_date );
|
55 |
$diff_intrval = round( ($datetime2->format( 'U' ) - $datetime1->format( 'U' )) / (60 * 60 * 24) );
|
56 |
-
|
57 |
-
|
58 |
if( $diff_intrval >= 7 && get_option( 'quads_rating_div' ) == "no" || false === get_option( 'quads_rating_div' ) || quads_rate_again() ) {
|
59 |
echo '<div class="quads_fivestar updated " style="box-shadow: 0 1px 1px 0 rgba(0,0,0,.1);background-color:white;">
|
60 |
<p>Awesome, you\'ve been using <strong>WP QUADS</strong> for more than 1 week. <br> May i ask you to give it a <strong>5-star rating</strong> on Wordpress? </br>
|
@@ -139,6 +139,7 @@ function quads_hide_rating_div() {
|
|
139 |
echo json_encode( array("success") );
|
140 |
exit;
|
141 |
}
|
|
|
142 |
add_action( 'wp_ajax_quads_hide_rating', 'quads_hide_rating_div' );
|
143 |
|
144 |
/**
|
@@ -147,22 +148,23 @@ add_action( 'wp_ajax_quads_hide_rating', 'quads_hide_rating_div' );
|
|
147 |
function quads_hide_rating_notice_week() {
|
148 |
$nextweek = time() + (7 * 24 * 60 * 60);
|
149 |
$human_date = date( 'Y-m-d h:i:s', $nextweek );
|
150 |
-
update_option( 'quads_date_next_notice', $human_date
|
151 |
-
update_option( 'quads_rating_div', 'yes'
|
152 |
echo json_encode( array("success") );
|
153 |
exit;
|
154 |
}
|
|
|
155 |
add_action( 'wp_ajax_quads_hide_rating_week', 'quads_hide_rating_notice_week' );
|
156 |
|
157 |
/**
|
158 |
* Check if admin notice will open again after one week of closing
|
159 |
* @return boolean
|
160 |
*/
|
161 |
-
function quads_rate_again(){
|
162 |
-
|
163 |
$rate_again_date = get_option( 'quads_date_next_notice' );
|
164 |
|
165 |
-
if
|
166 |
return false;
|
167 |
}
|
168 |
|
@@ -171,12 +173,11 @@ function quads_rate_again(){
|
|
171 |
$datetime2 = new DateTime( $current_date );
|
172 |
$diff_intrval = round( ($datetime2->format( 'U' ) - $datetime1->format( 'U' )) / (60 * 60 * 24) );
|
173 |
|
174 |
-
if
|
175 |
return true;
|
176 |
}
|
177 |
}
|
178 |
|
179 |
-
|
180 |
/**
|
181 |
* Show a message when pro or free plugin gets disabled
|
182 |
*
|
@@ -203,12 +204,12 @@ function quads_plugin_deactivated_notice() {
|
|
203 |
*
|
204 |
* Not used at the moment
|
205 |
*/
|
206 |
-
function quads_theme_notice(){
|
207 |
-
|
208 |
-
$show_notice = get_option('quads_show_theme_notice');
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
?>
|
213 |
<div class="updated notice" style="border-left: 4px solid #ffba00;">
|
214 |
<p><?php echo $message; ?></p>
|
@@ -233,29 +234,31 @@ function quads_update_notice() {
|
|
233 |
if( (version_compare( QUADS_VERSION, '1.3.9', '>=' ) ) && quads_is_advanced() && (version_compare( QUADS_PRO_VERSION, '1.3.0', '<' ) ) ) {
|
234 |
$message = sprintf( __( '<strong>WP QUADS ' . QUADS_VERSION . ': </strong> Update WP QUADS PRO to get custom post type support from <a href="%s">General Settings</a>.', 'quick-adsense-reloaded' ), admin_url() . 'admin.php?page=quads-settings' );
|
235 |
$message .= '<br><br><a href="' . admin_url() . 'admin.php?page=quads-settings&quads-action=hide_update_notice" class="button-primary thankyou" target="_self" title="Close Notice" style="font-weight:bold;">Close Notice</a>';
|
236 |
-
?>
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
//update_option ('quads_show_update_notice', 'no');
|
241 |
} else
|
242 |
-
|
243 |
$message = sprintf( __( '<strong>WP QUADS ' . QUADS_VERSION . ': </strong> Install <a href="%1s" target="_blank">WP QUADS PRO</a> to get custom post type support in <a href="%2s">General Settings</a>.', 'quick-adsense-reloaded' ), 'http://wpquads.com?utm_campaign=admin_notice&utm_source=admin_notice&utm_medium=admin&utm_content=custom_post_type', admin_url() . 'admin.php?page=quads-settings' );
|
244 |
$message .= '<br><br><a href="' . admin_url() . 'admin.php?page=quads-settings&quads-action=hide_update_notice" class="button-primary thankyou" target="_self" title="Close Notice" style="font-weight:bold;">Close Notice</a>';
|
245 |
-
?>
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
<?php
|
250 |
}
|
251 |
}
|
|
|
252 |
/**
|
253 |
* Hide Notice and update db option quads_hide_notice
|
254 |
*/
|
255 |
-
function quads_hide_notice(){
|
256 |
-
update_option
|
257 |
}
|
258 |
-
|
|
|
259 |
|
260 |
/**
|
261 |
* Check if any ad is activated and assigned in general settings
|
@@ -275,21 +278,26 @@ function quads_is_any_ad_activated() {
|
|
275 |
}
|
276 |
}
|
277 |
}
|
278 |
-
|
279 |
-
|
280 |
-
if( count( $check )
|
281 |
-
|
282 |
-
!isset( $quads_options['pos2']['MiddAds'] ) &&
|
283 |
-
!isset( $quads_options['pos3']['EndiAds'] ) &&
|
284 |
-
!isset( $quads_options['pos4']['MoreAds'] ) &&
|
285 |
-
!isset( $quads_options['pos5']['LapaAds'] ) &&
|
286 |
-
!isset( $quads_options['pos6']['Par1Ads'] ) &&
|
287 |
-
!isset( $quads_options['pos7']['Par2Ads'] ) &&
|
288 |
-
!isset( $quads_options['pos8']['Par3Ads'] ) &&
|
289 |
-
!isset( $quads_options['pos9']['Img1Ads'] ) ) {
|
290 |
-
return false;
|
291 |
}
|
292 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
293 |
}
|
294 |
|
295 |
/**
|
@@ -298,13 +306,13 @@ function quads_is_any_ad_activated() {
|
|
298 |
* @global array $quads_options
|
299 |
* @return boolean
|
300 |
*/
|
301 |
-
function quads_is_post_type_activated(){
|
302 |
-
|
303 |
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
}
|
309 |
|
310 |
/**
|
22 |
function quads_admin_messages() {
|
23 |
global $quads_options;
|
24 |
|
25 |
+
if( !current_user_can( 'update_plugins' ) ) {
|
26 |
return;
|
27 |
}
|
28 |
+
|
29 |
quads_theme_notice();
|
30 |
+
|
31 |
quads_update_notice();
|
32 |
+
|
33 |
+
if( !quads_is_any_ad_activated() && quads_is_admin_page() ) {
|
34 |
+
echo '<div class="notice notice-warning">' . sprintf( __( '<strong>No ads are activated!</strong> You need to assign at least 1 ad to an ad spot. Fix this in <a href="%s">General Settings</a>! Alternatively you need to use a shortcode in your posts or no ads are shown at all.', 'quick-adsense-reloaded' ), admin_url() . 'admin.php?page=quads-settings#quads_settingsgeneral_header' ) . '</div>';
|
35 |
}
|
36 |
+
|
37 |
+
if( quads_get_active_ads() === 0 && quads_is_admin_page() ) {
|
38 |
+
echo '<div class="notice notice-warning">' . sprintf( __( '<strong>No ads defined!</strong> You need to create at least one ad code. Fix this in <a href="%s">ADSENSE CODE</a>.', 'quick-adsense-reloaded' ), admin_url() . 'admin.php?page=quads-settings#quads_settingsadsense_header' ) . '</div>';
|
39 |
}
|
40 |
+
|
41 |
+
if( !quads_is_post_type_activated() && quads_is_admin_page() ) {
|
42 |
+
echo '<div class="notice notice-warning">' . sprintf( __( '<strong>No ads are shown - No post types selected</strong> You need to select at least 1 post type like <i>blog</i> or <i>page</i>. Fix this in <a href="%s">General Settings</a> or no ads are shown at all.', 'quick-adsense-reloaded' ), admin_url() . 'admin.php?page=quads-settings#quads_settingsgeneral_header' ) . '</div>';
|
43 |
}
|
44 |
+
|
45 |
+
if( isset( $_GET['quads-action'] ) && $_GET['quads-action'] === 'validate' && quads_is_admin_page() && quads_is_any_ad_activated() && quads_is_post_type_activated() && quads_get_active_ads() > 0 ) {
|
46 |
+
echo '<div class="notice notice-success">' . sprintf( __( '<strong>No errors detected in WP QUADS settings.</strong> If ads are still not shown read the <a href="%s" target="_blank">troubleshooting guide</a>' ), 'http://wpquads.com/docs/adsense-ads-are-not-showing/?utm_source=plugin&utm_campaign=wpquads-settings&utm_medium=website&utm_term=toplink' ) . '</div>';
|
47 |
}
|
48 |
|
49 |
//quads_plugin_deactivated_notice();
|
50 |
+
|
51 |
$install_date = get_option( 'quads_install_date' );
|
52 |
$display_date = date( 'Y-m-d h:i:s' );
|
53 |
$datetime1 = new DateTime( $install_date );
|
54 |
$datetime2 = new DateTime( $display_date );
|
55 |
$diff_intrval = round( ($datetime2->format( 'U' ) - $datetime1->format( 'U' )) / (60 * 60 * 24) );
|
56 |
+
|
57 |
+
|
58 |
if( $diff_intrval >= 7 && get_option( 'quads_rating_div' ) == "no" || false === get_option( 'quads_rating_div' ) || quads_rate_again() ) {
|
59 |
echo '<div class="quads_fivestar updated " style="box-shadow: 0 1px 1px 0 rgba(0,0,0,.1);background-color:white;">
|
60 |
<p>Awesome, you\'ve been using <strong>WP QUADS</strong> for more than 1 week. <br> May i ask you to give it a <strong>5-star rating</strong> on Wordpress? </br>
|
139 |
echo json_encode( array("success") );
|
140 |
exit;
|
141 |
}
|
142 |
+
|
143 |
add_action( 'wp_ajax_quads_hide_rating', 'quads_hide_rating_div' );
|
144 |
|
145 |
/**
|
148 |
function quads_hide_rating_notice_week() {
|
149 |
$nextweek = time() + (7 * 24 * 60 * 60);
|
150 |
$human_date = date( 'Y-m-d h:i:s', $nextweek );
|
151 |
+
update_option( 'quads_date_next_notice', $human_date );
|
152 |
+
update_option( 'quads_rating_div', 'yes' );
|
153 |
echo json_encode( array("success") );
|
154 |
exit;
|
155 |
}
|
156 |
+
|
157 |
add_action( 'wp_ajax_quads_hide_rating_week', 'quads_hide_rating_notice_week' );
|
158 |
|
159 |
/**
|
160 |
* Check if admin notice will open again after one week of closing
|
161 |
* @return boolean
|
162 |
*/
|
163 |
+
function quads_rate_again() {
|
164 |
+
|
165 |
$rate_again_date = get_option( 'quads_date_next_notice' );
|
166 |
|
167 |
+
if( false === $rate_again_date ) {
|
168 |
return false;
|
169 |
}
|
170 |
|
173 |
$datetime2 = new DateTime( $current_date );
|
174 |
$diff_intrval = round( ($datetime2->format( 'U' ) - $datetime1->format( 'U' )) / (60 * 60 * 24) );
|
175 |
|
176 |
+
if( $diff_intrval >= 0 ) {
|
177 |
return true;
|
178 |
}
|
179 |
}
|
180 |
|
|
|
181 |
/**
|
182 |
* Show a message when pro or free plugin gets disabled
|
183 |
*
|
204 |
*
|
205 |
* Not used at the moment
|
206 |
*/
|
207 |
+
function quads_theme_notice() {
|
208 |
+
|
209 |
+
$show_notice = get_option( 'quads_show_theme_notice' );
|
210 |
+
|
211 |
+
if( false !== $show_notice && 'no' !== $show_notice && quads_is_commercial_theme() ) {
|
212 |
+
$message = __( '<strong>Extend the' . quads_is_commercial_theme() . '</strong> theme with <strong>WP QUADS PRO!</strong><br>Save time and earn more - Bring your AdSense earnings to next level. <a href="http://wpquads.com?utm_campaign=adminnotice&utm_source=admin_notice&utm_medium=admin&utm_content=bimber_upgrade_notice" target="_blank"> Purchase Now</a> or <a href="http://wpquads.com?utm_campaign=free_plugin&utm_source=admin_notice&utm_medium=admin&utm_content=bimber_upgrade_notice" target="_blank">Get Details</a> <p> <a href="' . admin_url() . 'admin.php?page=quads-settings&quads-action=close_upgrade_notice" class="button">Close Notice</a>', 'quick-adsense-reloaded' );
|
213 |
?>
|
214 |
<div class="updated notice" style="border-left: 4px solid #ffba00;">
|
215 |
<p><?php echo $message; ?></p>
|
234 |
if( (version_compare( QUADS_VERSION, '1.3.9', '>=' ) ) && quads_is_advanced() && (version_compare( QUADS_PRO_VERSION, '1.3.0', '<' ) ) ) {
|
235 |
$message = sprintf( __( '<strong>WP QUADS ' . QUADS_VERSION . ': </strong> Update WP QUADS PRO to get custom post type support from <a href="%s">General Settings</a>.', 'quick-adsense-reloaded' ), admin_url() . 'admin.php?page=quads-settings' );
|
236 |
$message .= '<br><br><a href="' . admin_url() . 'admin.php?page=quads-settings&quads-action=hide_update_notice" class="button-primary thankyou" target="_self" title="Close Notice" style="font-weight:bold;">Close Notice</a>';
|
237 |
+
?>
|
238 |
+
<div class="updated notice" style="border-left: 4px solid #ffba00;">
|
239 |
+
<p><?php echo $message; ?></p>
|
240 |
+
</div> <?php
|
241 |
//update_option ('quads_show_update_notice', 'no');
|
242 |
} else
|
243 |
+
if( !quads_is_advanced() ) {
|
244 |
$message = sprintf( __( '<strong>WP QUADS ' . QUADS_VERSION . ': </strong> Install <a href="%1s" target="_blank">WP QUADS PRO</a> to get custom post type support in <a href="%2s">General Settings</a>.', 'quick-adsense-reloaded' ), 'http://wpquads.com?utm_campaign=admin_notice&utm_source=admin_notice&utm_medium=admin&utm_content=custom_post_type', admin_url() . 'admin.php?page=quads-settings' );
|
245 |
$message .= '<br><br><a href="' . admin_url() . 'admin.php?page=quads-settings&quads-action=hide_update_notice" class="button-primary thankyou" target="_self" title="Close Notice" style="font-weight:bold;">Close Notice</a>';
|
246 |
+
?>
|
247 |
+
<div class="updated notice" style="border-left: 4px solid #ffba00;">
|
248 |
+
<p><?php echo $message; ?></p>
|
249 |
+
</div>
|
250 |
<?php
|
251 |
}
|
252 |
}
|
253 |
+
|
254 |
/**
|
255 |
* Hide Notice and update db option quads_hide_notice
|
256 |
*/
|
257 |
+
function quads_hide_notice() {
|
258 |
+
update_option( 'quads_show_update_notice', 'no' );
|
259 |
}
|
260 |
+
|
261 |
+
add_action( 'quads_hide_update_notice', 'quads_hide_notice', 10 );
|
262 |
|
263 |
/**
|
264 |
* Check if any ad is activated and assigned in general settings
|
278 |
}
|
279 |
}
|
280 |
}
|
281 |
+
|
282 |
+
// ad activated with api (custom position)
|
283 |
+
if( count( $check ) > 0 ) {
|
284 |
+
return true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
285 |
}
|
286 |
+
// check if any other ad is assigned and activated
|
287 |
+
if( isset( $quads_options['pos1']['BegnAds'] ) ||
|
288 |
+
isset( $quads_options['pos2']['MiddAds'] ) ||
|
289 |
+
isset( $quads_options['pos3']['EndiAds'] ) ||
|
290 |
+
isset( $quads_options['pos4']['MoreAds'] ) ||
|
291 |
+
isset( $quads_options['pos5']['LapaAds'] ) ||
|
292 |
+
isset( $quads_options['pos6']['Par1Ads'] ) ||
|
293 |
+
isset( $quads_options['pos7']['Par2Ads'] ) ||
|
294 |
+
isset( $quads_options['pos8']['Par3Ads'] ) ||
|
295 |
+
isset( $quads_options['pos9']['Img1Ads'] )
|
296 |
+
) {
|
297 |
+
return true;
|
298 |
+
}
|
299 |
+
// no ad is activated
|
300 |
+
return false;
|
301 |
}
|
302 |
|
303 |
/**
|
306 |
* @global array $quads_options
|
307 |
* @return boolean
|
308 |
*/
|
309 |
+
function quads_is_post_type_activated() {
|
310 |
+
global $quads_options;
|
311 |
|
312 |
+
if( empty( $quads_options['post_types'] ) ) {
|
313 |
+
return false;
|
314 |
+
}
|
315 |
+
return true;
|
316 |
}
|
317 |
|
318 |
/**
|
includes/admin/admin-pages.php
CHANGED
@@ -30,7 +30,9 @@ function quads_add_options_link() {
|
|
30 |
if ($create_settings){
|
31 |
$quads_settings_page = add_submenu_page( 'options-general.php', __( 'WP QUADS Settings', 'quick-adsense-reloaded' ), __( 'WPQUADS', 'quick-adsense-reloaded' ), 'manage_options', 'quads-settings', 'quads_options_page' );
|
32 |
}else{
|
33 |
-
$quads_parent_page = add_menu_page( 'Quick AdSense Reloaded Settings', $label, 'manage_options', 'quads-settings', 'quads_options_page' );
|
|
|
|
|
34 |
//if (quads_is_installed_clickfraud() ){
|
35 |
//$quads_add_ons_page = add_submenu_page('quads-settings', __('Click Fraud Monitor'), __('Click Fraud Monitor'), 'manage_options', 'cfmonitor-config', 'cfmonitor_conf');
|
36 |
//} else {
|
30 |
if ($create_settings){
|
31 |
$quads_settings_page = add_submenu_page( 'options-general.php', __( 'WP QUADS Settings', 'quick-adsense-reloaded' ), __( 'WPQUADS', 'quick-adsense-reloaded' ), 'manage_options', 'quads-settings', 'quads_options_page' );
|
32 |
}else{
|
33 |
+
$wpquads_logo ="PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjYxMS42OHB4IiBoZWlnaHQ9IjU0NXB4IiB2aWV3Qm94PSIwIDAgNjExLjY4IDU0NSIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgNjExLjY4IDU0NSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQoJIDxzdHlsZT4uc3R5bGUwe2ZpbGw6I2ZmZjt9PC9zdHlsZT4NCjxnIGlkPSJFYmVuZV8wX3hBMF9JbWFnZV8xXyI+DQo8L2c+DQo8ZyBpZD0iV1BRVUFEUyI+DQoJPGc+DQoJCTxwYXRoIGNsYXNzPSJzdHlsZTAiIGQ9Ik0yNS43MDksNTM1LjQyTDMuMzIsNDUxLjA0NGgxMS40NTRsMTIuODM0LDU1LjMxMWMxLjM4MSw1Ljc5NCwyLjU3LDExLjU1LDMuNTY4LDE3LjI2Nw0KCQkJYzIuMTQ4LTkuMDE3LDMuNDE1LTE0LjIxNiwzLjc5OS0xNS41OThsMTYuMDU4LTU2Ljk3OWgxMy40NjhsMTIuMDg2LDQyLjcwNmMzLjAzMSwxMC41OSw1LjIxOCwyMC41NDcsNi41NjIsMjkuODcxDQoJCQljMS4wNzQtNS4zMzMsMi40NzUtMTEuNDUzLDQuMjAyLTE4LjM2bDEzLjIzNy01NC4yMTdoMTEuMjI0TDg4LjY3NSw1MzUuNDJINzcuOTEybC0xNy43ODQtNjQuMjg5DQoJCQljLTEuNDk3LTUuMzcyLTIuMzgtOC42NzEtMi42NDgtOS44OTljLTAuODgzLDMuODc2LTEuNzA4LDcuMTc1LTIuNDc1LDkuODk5bC0xNy45LDY0LjI4OUgyNS43MDl6Ii8+DQoJCTxwYXRoIGNsYXNzPSJzdHlsZTAiIGQ9Ik0xMjIuMjI5LDUzNS40MnYtODQuMzc2aDMxLjgyOGM1LjYwMiwwLDkuODc5LDAuMjY5LDEyLjgzNSwwLjgwNmM0LjE0NCwwLjY5LDcuNjE2LDIuMDA2LDEwLjQxNywzLjk0Mg0KCQkJYzIuOCwxLjkzOCw1LjA1NSw0LjY1Myw2Ljc2Myw4LjE0NWMxLjcwNywzLjQ5MiwyLjU2MSw3LjMyOSwyLjU2MSwxMS41MTFjMCw3LjE3Ni0yLjI4MywxMy4yNDgtNi44NDksMTguMjE3DQoJCQljLTQuNTY2LDQuOTY5LTEyLjgxNiw3LjQ1My0yNC43NDksNy40NTNoLTIxLjY0MXYzNC4zMDNIMTIyLjIyOXogTTEzMy4zOTUsNDkxLjE2aDIxLjgxM2M3LjIxMywwLDEyLjMzNi0xLjM0MywxNS4zNjctNC4wMjkNCgkJCWMzLjAzMS0yLjY4Niw0LjU0Ny02LjQ2NSw0LjU0Ny0xMS4zMzhjMC0zLjUzLTAuODkyLTYuNTUyLTIuNjc2LTkuMDY1Yy0xLjc4NC0yLjUxMy00LjEzNS00LjE3My03LjA1LTQuOTc5DQoJCQljLTEuODgtMC40OTgtNS4zNTMtMC43NDgtMTAuNDE3LTAuNzQ4aC0yMS41ODNWNDkxLjE2eiIvPg0KCQk8cGF0aCBjbGFzcz0ic3R5bGUwIiBkPSJNMjY4LjI0Nyw1MjQuNzE1YzQuMTgyLDIuOTkyLDguNzI5LDUuMzcyLDEzLjY0MSw3LjEzN2wtNi4yNzMsMTIuMDI5DQoJCQljLTIuNTcxLTAuNzY5LTUuMDg0LTEuODIzLTcuNTQtMy4xNjZjLTAuNTM4LTAuMjY5LTQuMzE3LTIuNzYzLTExLjMzOC03LjQ4MmMtNS41MjUsMi40MTgtMTEuNjQ2LDMuNjI2LTE4LjM2LDMuNjI2DQoJCQljLTEyLjk3LDAtMjMuMTI4LTMuODE3LTMwLjQ3Ni0xMS40NTNjLTcuMzQ4LTcuNjM1LTExLjAyMS0xOC4zNi0xMS4wMjEtMzIuMTc0YzAtMTMuNzc0LDMuNjg0LTI0LjQ4OSwxMS4wNS0zMi4xNDUNCgkJCWM3LjM2Ny03LjY1NCwxNy4zNjItMTEuNDgxLDI5Ljk4Ni0xMS40ODFjMTIuNTA4LDAsMjIuNDI3LDMuODI3LDI5Ljc1NiwxMS40ODFjNy4zMjgsNy42NTUsMTAuOTkzLDE4LjM3LDEwLjk5MywzMi4xNDUNCgkJCWMwLDcuMjkxLTEuMDE3LDEzLjY5OC0zLjA1LDE5LjIyNEMyNzQuMDc5LDUxNi42NzcsMjcxLjYyMyw1MjAuNzYzLDI2OC4yNDcsNTI0LjcxNXogTTI1NC41NDksNTE1LjEwMw0KCQkJYzIuMTg3LTIuNTY5LDMuODI3LTUuNjc4LDQuOTIxLTkuMzIzYzEuMDkzLTMuNjQ2LDEuNjQtNy44MjgsMS42NC0xMi41NDhjMC05Ljc0NS0yLjE0OS0xNy4wMjYtNi40NDYtMjEuODQyDQoJCQljLTQuMjk3LTQuODE0LTkuOTE5LTcuMjIzLTE2Ljg2My03LjIyM2MtNi45NDUsMC0xMi41NzYsMi40MTctMTYuODkzLDcuMjUyYy00LjMxNyw0LjgzNC02LjQ3NSwxMi4xMDUtNi40NzUsMjEuODEzDQoJCQljMCw5Ljg2MiwyLjE1OCwxNy4yMzgsNi40NzUsMjIuMTMxYzQuMzE2LDQuODkyLDkuNzc0LDcuMzM4LDE2LjM3NSw3LjMzOGMyLjQ1NSwwLDQuNzc3LTAuNDAzLDYuOTY0LTEuMjA5DQoJCQljLTMuNDUzLTIuMjY0LTYuOTY0LTQuMDI4LTEwLjUzMi01LjI5NWw0Ljc3Ny05LjcyN0MyNDQuMDkyLDUwOC4zODksMjQ5LjQ0NSw1MTEuMjY3LDI1NC41NDksNTE1LjEwM3oiLz4NCgkJPHBhdGggY2xhc3M9InN0eWxlMCIgZD0iTTI5MS45MDIsNDUxLjA0NGgxNy4wMzd2NDUuNjk5YzAsNy4yNTIsMC4yMSwxMS45NTIsMC42MzMsMTQuMTAxYzAuNzI5LDMuNDUzLDIuNDY2LDYuMjI2LDUuMjA5LDguMzE2DQoJCQljMi43NDMsMi4wOTIsNi40OTQsMy4xMzcsMTEuMjUzLDMuMTM3YzQuODM0LDAsOC40NzktMC45ODcsMTAuOTM2LTIuOTY0YzIuNDU1LTEuOTc2LDMuOTMzLTQuNDAyLDQuNDMyLTcuMjgNCgkJCWMwLjQ5OC0yLjg3OCwwLjc0OC03LjY1NSwwLjc0OC0xNC4zMzF2LTQ2LjY3OGgxNy4wMzZ2NDQuMzE3YzAsMTAuMTMtMC40NiwxNy4yODYtMS4zODEsMjEuNDY4DQoJCQljLTAuOTIxLDQuMTg0LTIuNjE5LDcuNzEzLTUuMDk0LDEwLjU5MWMtMi40NzYsMi44NzgtNS43ODQsNS4xNzEtOS45MjksNi44NzhjLTQuMTQ0LDEuNzA3LTkuNTU0LDIuNTYxLTE2LjIzLDIuNTYxDQoJCQljLTguMDU4LDAtMTQuMTY5LTAuOTMxLTE4LjMzMi0yLjc5MWMtNC4xNjQtMS44Ni03LjQ1My00LjI3OC05Ljg3MS03LjI1MmMtMi40MTctMi45NzMtNC4wMS02LjA5MS00Ljc3Ny05LjM1Mw0KCQkJYy0xLjExMy00LjgzNS0xLjY2OS0xMS45NzItMS42NjktMjEuNDExVjQ1MS4wNDR6Ii8+DQoJCTxwYXRoIGNsYXNzPSJzdHlsZTAiIGQ9Ik00NTMuMjMsNTM1LjQyaC0xOC41MzNsLTcuMzY3LTE5LjE2NmgtMzMuNzI4bC02Ljk2NCwxOS4xNjZoLTE4LjA3MmwzMi44NjQtODQuMzc2aDE4LjAxNUw0NTMuMjMsNTM1LjQyeg0KCQkJIE00MjEuODYyLDUwMi4wMzhsLTExLjYyNi0zMS4zMTFsLTExLjM5NiwzMS4zMTFINDIxLjg2MnoiLz4NCgkJPHBhdGggY2xhc3M9InN0eWxlMCIgZD0iTTQ2Mi4yMDksNDUxLjA0NGgzMS4xMzdjNy4wMjIsMCwxMi4zNzUsMC41MzgsMTYuMDU5LDEuNjExYzQuOTQ5LDEuNDU5LDkuMTg4LDQuMDQ5LDEyLjcyLDcuNzcxDQoJCQljMy41MjksMy43MjIsNi4yMTYsOC4yNzgsOC4wNTgsMTMuNjY5YzEuODQyLDUuMzkyLDIuNzYzLDEyLjAzOSwyLjc2MywxOS45NDNjMCw2Ljk0NS0wLjg2MywxMi45MzEtMi41OSwxNy45NTcNCgkJCWMtMi4xMTEsNi4xNC01LjEyMywxMS4xMDgtOS4wMzcsMTQuOTA2Yy0yLjk1NSwyLjg3OC02Ljk0NSw1LjEyMy0xMS45NzEsNi43MzRjLTMuNzYxLDEuMTg5LTguNzg3LDEuNzg0LTE1LjA4LDEuNzg0aC0zMi4wNTgNCgkJCVY0NTEuMDQ0eiBNNDc5LjI0NSw0NjUuMzE3djU1Ljg4N2gxMi43MmM0Ljc1NywwLDguMTkxLTAuMjY5LDEwLjMwMi0wLjgwNmMyLjc2My0wLjY5MSw1LjA1Ni0xLjg2MSw2Ljg3OC0zLjUxMg0KCQkJYzEuODIyLTEuNjQ4LDMuMzEtNC4zNjQsNC40NjEtOC4xNDRzMS43MjctOC45MywxLjcyNy0xNS40NTRjMC02LjUyMi0wLjU3NS0xMS41MjktMS43MjctMTUuMDIxDQoJCQljLTEuMTUxLTMuNDkxLTIuNzYzLTYuMjE2LTQuODM1LTguMTczYy0yLjA3MS0xLjk1Ny00LjctMy4yOC03Ljg4NS0zLjk3MmMtMi4zOC0wLjUzNi03LjA0Mi0wLjgwNi0xMy45ODYtMC44MDZINDc5LjI0NXoiLz4NCgkJPHBhdGggY2xhc3M9InN0eWxlMCIgZD0iTTU0My4wNzMsNTA3Ljk2NmwxNi41NzYtMS42MTFjMC45OTcsNS41NjQsMy4wMjEsOS42NSw2LjA3MiwxMi4yNmMzLjA1LDIuNjA5LDcuMTY1LDMuOTEzLDEyLjM0NiwzLjkxMw0KCQkJYzUuNDg2LDAsOS42Mi0xLjE2LDEyLjQwMy0zLjQ4MWMyLjc4MS0yLjMyMSw0LjE3Mi01LjAzNiw0LjE3Mi04LjE0NWMwLTEuOTk0LTAuNTg1LTMuNjkyLTEuNzU1LTUuMDk0DQoJCQljLTEuMTcxLTEuNC0zLjIxNC0yLjYxOC02LjEzLTMuNjU0Yy0xLjk5NS0wLjY5MS02LjU0Mi0xLjkxOS0xMy42NDEtMy42ODRjLTkuMTMyLTIuMjY0LTE1LjU0LTUuMDQ1LTE5LjIyNC04LjM0Ng0KCQkJYy01LjE4LTQuNjQzLTcuNzctMTAuMzAzLTcuNzctMTYuOTc5YzAtNC4yOTcsMS4yMTgtOC4zMTcsMy42NTQtMTIuMDU5YzIuNDM3LTMuNzQsNS45NDctNi41OSwxMC41MzMtOC41NDcNCgkJCWM0LjU4NC0xLjk1NywxMC4xMi0yLjkzNSwxNi42MDQtMi45MzVjMTAuNTksMCwxOC41NjIsMi4zMjEsMjMuOTE0LDYuOTY0czguMTYzLDEwLjg0LDguNDMyLDE4LjU5bC0xNy4wMzYsMC43NDkNCgkJCWMtMC43MjktNC4zMzYtMi4yOTMtNy40NTQtNC42OS05LjM1NGMtMi4zOTgtMS44OTktNS45OTYtMi44NDktMTAuNzkyLTIuODQ5Yy00Ljk0OSwwLTguODI1LDEuMDE4LTExLjYyNiwzLjA1MQ0KCQkJYy0xLjgwNCwxLjMwNS0yLjcwNSwzLjA1LTIuNzA1LDUuMjM3YzAsMS45OTUsMC44NDQsMy43MDMsMi41MzIsNS4xMjJjMi4xNDgsMS44MDUsNy4zNjcsMy42ODQsMTUuNjU1LDUuNjQxDQoJCQlzMTQuNDE4LDMuOTgxLDE4LjM4OSw2LjA3MmMzLjk3MiwyLjA5Miw3LjA3OSw0Ljk0OSw5LjMyNCw4LjU3NWMyLjI0NCwzLjYyNiwzLjM2Nyw4LjEwNiwzLjM2NywxMy40MzkNCgkJCWMwLDQuODM1LTEuMzQ0LDkuMzYyLTQuMDI5LDEzLjU4M2MtMi42ODcsNC4yMjItNi40ODQsNy4zNTgtMTEuMzk2LDkuNDFjLTQuOTEyLDIuMDUzLTExLjAzMiwzLjA3OS0xOC4zNiwzLjA3OQ0KCQkJYy0xMC42NjgsMC0xOC44NTktMi40NjUtMjQuNTc2LTcuMzk2QzU0Ny42MDEsNTI0LjU5MSw1NDQuMTg2LDUxNy40MDUsNTQzLjA3Myw1MDcuOTY2eiIvPg0KCTwvZz4NCjwvZz4NCjxnIGlkPSJFYmVuZV80X0tvcGllX3hBMF9JbWFnZV8xXyI+DQoJDQoJCTxpbWFnZSBvdmVyZmxvdz0idmlzaWJsZSIgd2lkdGg9IjcyIiBoZWlnaHQ9IjI4IiBpZD0iRWJlbmVfNF9Lb3BpZV94QTBfSW1hZ2UiIHhsaW5rOmhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRWdBQUFBY0NBSUFBQUJOa0c3eEFBQUFDWEJJV1hNQUFBc1NBQUFMRWdIUzNYNzhBQUFBCkdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUFEWkpSRUZVZU5yc3p3RU5BQUFJQXlEZlAvVE4Kb1lNR3BPMThGREV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TWJHYlZnQUJCZ0J1WTFQSkhBbElWd0FBQUFCSlJVNUVya0pnZ2c9PSIgdHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgMSA0IDM5MikiPg0KCTwvaW1hZ2U+DQo8L2c+DQo8ZyBpZD0iRWJlbmVfM19Lb3BpZV82X3hBMF9JbWFnZV8xXyI+DQoJDQoJCTxpbWFnZSBvdmVyZmxvdz0idmlzaWJsZSIgd2lkdGg9Ijc2IiBoZWlnaHQ9IjEwOCIgaWQ9IkViZW5lXzNfS29waWVfNl94QTBfSW1hZ2UiIHhsaW5rOmhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRXdBQUFCc0NBSUFBQUJQV2NOS0FBQUFDWEJJV1hNQUFBc1NBQUFMRWdIUzNYNzhBQUFBCkdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUFJQkpSRUZVZU5yc3p3RUJBREFJQXlDMWYrZTkKZ0FrOE5LQ1QxSFZUSDVDVWxKU1VsSlNVbEpTVWxKU1VsSlNVbEpTVWxKU1VsSlNVbEpTVWxKU1VsSlNVbEpTVWxKU1VsSlNVbEpTVQpsSlNVbEpTVWxKU1VsSlNVbEpTVWxKU1VsSlNVbEpTVWxKU1VsSlNVbEpTVWxKU1VsSlNVbEpTVWxKU1VsSlRjUFFFR0FPSGxBOVhxCjVpMFFBQUFBQUVsRlRrU3VRbUNDIiB0cmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAxIDIxNSAzMTIpIj4NCgk8L2ltYWdlPg0KPC9nPg0KPGcgaWQ9IkViZW5lXzNfS29waWVfN194QTBfSW1hZ2VfMV8iPg0KCQ0KCQk8aW1hZ2Ugb3ZlcmZsb3c9InZpc2libGUiIHdpZHRoPSI4MCIgaGVpZ2h0PSIxNzIiIGlkPSJFYmVuZV8zX0tvcGllXzdfeEEwX0ltYWdlIiB4bGluazpocmVmPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUZBQUFBQ3NDQUlBQUFCakk3eVlBQUFBQ1hCSVdYTUFBQXNTQUFBTEVnSFMzWDc4QUFBQQpHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBTDVKUkVGVWVOcnN6d0VCQUFBRUF6RDA3M3c5CjJCcXNrOVFuVTg4SUN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0wKQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTApDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEM5K3lBZ3dBClozMEVWVHVscE5RQUFBQUFTVVZPUks1Q1lJST0iIHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIDEgMzE5IDI0OCkiPg0KCTwvaW1hZ2U+DQo8L2c+DQo8ZyBpZD0iRWJlbmVfM19Lb3BpZV84X3hBMF9JbWFnZV8xXyI+DQoJDQoJCTxpbWFnZSBvdmVyZmxvdz0idmlzaWJsZSIgd2lkdGg9IjgwIiBoZWlnaHQ9IjcyIiBpZD0iRWJlbmVfM19Lb3BpZV84X3hBMF9JbWFnZSIgeGxpbms6aHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFGQUFBQUJJQ0FJQUFBRHU5dVVNQUFBQUNYQklXWE1BQUFzU0FBQUxFZ0hTM1g3OEFBQUEKR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQUdGSlJFRlVlTnJzenpFQkFBQUlBeURYUC9Rcwo0U2MwSUczbmt3Z0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMCkN3c0xDd3NMQ3dzTEN3c0xDd3NMQzk5YkFRWUEveWJYY2Qzc1lVOEFBQUFBU1VWT1JLNUNZSUk9IiB0cmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAxIDEwNiAzNDgpIj4NCgk8L2ltYWdlPg0KPC9nPg0KPGcgaWQ9IkViZW5lXzNfS29waWVfOV94QTBfSW1hZ2VfMV8iPg0KCQ0KCQk8aW1hZ2Ugb3ZlcmZsb3c9InZpc2libGUiIHdpZHRoPSI3MiIgaGVpZ2h0PSIyODAiIGlkPSJFYmVuZV8zX0tvcGllXzlfeEEwX0ltYWdlIiB4bGluazpocmVmPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUVnQUFBRVlDQUlBQUFCd2RpZFRBQUFBQ1hCSVdYTUFBQXNTQUFBTEVnSFMzWDc4QUFBQQpHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBUWxKUkVGVWVOcnN6d0VOQUFBSUF5QzFmK2ZiCjQ0TUdiSkpwZEZOS1RFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE0KVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TQpURXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNClRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE0KVEV4TVRFeE1URXhNVEV4TVRLelJDekFBK0YwRkxVdDk2RjhBQUFBQVNVVk9SSzVDWUlJPSIgdHJhbnNmb3JtPSJtYXRyaXgoMSAwIDAgMSA0MzAgMTQwKSI+DQoJPC9pbWFnZT4NCjwvZz4NCjxnIGlkPSJFYmVuZV8zX0tvcGllXzEwX3hBMF9JbWFnZV8xXyI+DQoJDQoJCTxpbWFnZSBvdmVyZmxvdz0idmlzaWJsZSIgd2lkdGg9IjcyIiBoZWlnaHQ9IjQyMCIgaWQ9IkViZW5lXzNfS29waWVfMTBfeEEwX0ltYWdlIiB4bGluazpocmVmPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUVnQUFBR2tDQUlBQUFBZGZ2UmRBQUFBQ1hCSVdYTUFBQXNTQUFBTEVnSFMzWDc4QUFBQQpHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBWDlKUkVGVWVOcnN6MEVSQUFBSUF5RFhQL1JzCjRjT0RCcVR0ZkJReE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXgKTVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeApNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4Ck1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXgKTVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeApNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4TVRFeE1URXhNVEV4Ck1URXhNVEV4TVRFeE1URXhNVEV4TVRHeE95dkFBRTYvNlBYS29tdGZBQUFBQUVsRlRrU3VRbUNDIiB0cmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAxIDUzNiAwKSI+DQoJPC9pbWFnZT4NCjwvZz4NCjwvc3ZnPg0K
|
34 |
+
";
|
35 |
+
$quads_parent_page = add_menu_page( 'Quick AdSense Reloaded Settings', $label, 'manage_options', 'quads-settings', 'quads_options_page', 'data:image/svg+xml;base64,' . $wpquads_logo );
|
36 |
//if (quads_is_installed_clickfraud() ){
|
37 |
//$quads_add_ons_page = add_submenu_page('quads-settings', __('Click Fraud Monitor'), __('Click Fraud Monitor'), 'manage_options', 'cfmonitor-config', 'cfmonitor_conf');
|
38 |
//} else {
|
includes/api.php
CHANGED
@@ -147,7 +147,7 @@ function quads_ad( $args ) {
|
|
147 |
|
148 |
$location_settings = quads_get_ad_location_settings( $args['location'] );
|
149 |
$code .= "\n".'<!-- WP QUADS Custom Ad v. ' . QUADS_VERSION .' -->'."\n";
|
150 |
-
$code .= '<div class="quads-location quads-ad' .$location_settings['ad']. '" id="quads-ad' .$location_settings['ad']. '">'."\n";
|
151 |
$code .= quads_render_ad( 'ad' . $location_settings['ad'], $quads_options[ 'ad' . $location_settings['ad'] ]['code'] );
|
152 |
$code .= '</div>';
|
153 |
}
|
147 |
|
148 |
$location_settings = quads_get_ad_location_settings( $args['location'] );
|
149 |
$code .= "\n".'<!-- WP QUADS Custom Ad v. ' . QUADS_VERSION .' -->'."\n";
|
150 |
+
$code .= '<div class="quads-location quads-ad' .$location_settings['ad']. '" id="quads-ad' .$location_settings['ad']. '" style="'. quads_get_inline_ad_style( $location_settings['ad'] ).'">'."\n";
|
151 |
$code .= quads_render_ad( 'ad' . $location_settings['ad'], $quads_options[ 'ad' . $location_settings['ad'] ]['code'] );
|
152 |
$code .= '</div>';
|
153 |
}
|
includes/template-functions.php
CHANGED
@@ -677,26 +677,28 @@ function quads_replace_ads($content, $quicktag, $id) {
|
|
677 |
if( strpos($content,'<!--'.$quicktag.'-->')===false ) {
|
678 |
return $content;
|
679 |
}
|
|
|
680 |
|
681 |
if ($id != -1) {
|
682 |
-
$
|
683 |
-
'float:left;margin:%1$dpx %1$dpx %1$dpx 0;',
|
684 |
-
'float:none;margin:%1$dpx 0 %1$dpx 0;text-align:center;',
|
685 |
-
'float:right;margin:%1$dpx 0 %1$dpx %1$dpx;',
|
686 |
-
'float:none;margin:0px;');
|
687 |
-
|
688 |
-
$adsalign = $quads_options['ad' . $id]['align'];
|
689 |
-
$adsmargin = isset($quads_options['ad' . $id]['margin']) ? $quads_options['ad' . $id]['margin'] : '3'; // default
|
690 |
-
$margin = sprintf($
|
691 |
-
|
692 |
-
// Do not create any inline style on AMP site
|
693 |
-
$style = !quads_is_amp_endpoint() ? apply_filters ('quads_filter_margins', $margin, 'ad'.$id ) : '';
|
694 |
-
$adscode = $quads_options['ad' . $id ]['code'];
|
695 |
|
|
|
|
|
696 |
$adscode =
|
697 |
"\n".'<!-- WP QUADS Content Ad Plugin v. ' . QUADS_VERSION .' -->'."\n".
|
698 |
'<div class="quads-location quads-ad' .$id. '" id="quads-ad' .$id. '" style="'.$style.'">'."\n".
|
699 |
-
quads_render_ad('ad'.$id, $
|
700 |
'</div>'. "\n";
|
701 |
|
702 |
} else {
|
@@ -707,6 +709,40 @@ function quads_replace_ads($content, $quicktag, $id) {
|
|
707 |
return $cont[0].$adscode.$cont[1];
|
708 |
}
|
709 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
710 |
/**
|
711 |
* Revert content to original content any remove any processing helper strings
|
712 |
*
|
677 |
if( strpos($content,'<!--'.$quicktag.'-->')===false ) {
|
678 |
return $content;
|
679 |
}
|
680 |
+
|
681 |
|
682 |
if ($id != -1) {
|
683 |
+
// $styleArray = array(
|
684 |
+
// 'float:left;margin:%1$dpx %1$dpx %1$dpx 0;',
|
685 |
+
// 'float:none;margin:%1$dpx 0 %1$dpx 0;text-align:center;',
|
686 |
+
// 'float:right;margin:%1$dpx 0 %1$dpx %1$dpx;',
|
687 |
+
// 'float:none;margin:0px;');
|
688 |
+
//
|
689 |
+
// $adsalign = $quads_options['ad' . $id]['align'];
|
690 |
+
// $adsmargin = isset($quads_options['ad' . $id]['margin']) ? $quads_options['ad' . $id]['margin'] : '3'; // default
|
691 |
+
// $margin = sprintf($styleArray[(int)$adsalign], $adsmargin);
|
692 |
+
//
|
693 |
+
// // Do not create any inline style on AMP site
|
694 |
+
// $style = !quads_is_amp_endpoint() ? apply_filters ('quads_filter_margins', $margin, 'ad'.$id ) : '';
|
|
|
695 |
|
696 |
+
$code = !empty($quads_options['ad' . $id ]['code']) ? $quads_options['ad' . $id ]['code'] : '';
|
697 |
+
$style = quads_get_inline_ad_style($id);
|
698 |
$adscode =
|
699 |
"\n".'<!-- WP QUADS Content Ad Plugin v. ' . QUADS_VERSION .' -->'."\n".
|
700 |
'<div class="quads-location quads-ad' .$id. '" id="quads-ad' .$id. '" style="'.$style.'">'."\n".
|
701 |
+
quads_render_ad('ad'.$id, $code)."\n".
|
702 |
'</div>'. "\n";
|
703 |
|
704 |
} else {
|
709 |
return $cont[0].$adscode.$cont[1];
|
710 |
}
|
711 |
|
712 |
+
/**
|
713 |
+
* Get ad inline style
|
714 |
+
*
|
715 |
+
* @global arr $quads_options
|
716 |
+
* @param int $id id of the ad
|
717 |
+
* @return string
|
718 |
+
*/
|
719 |
+
function quads_get_inline_ad_style( $id ) {
|
720 |
+
global $quads_options;
|
721 |
+
|
722 |
+
if( empty($id) ) {
|
723 |
+
return '';
|
724 |
+
}
|
725 |
+
|
726 |
+
// Basic style
|
727 |
+
$styleArray = array(
|
728 |
+
'float:left;margin:%1$dpx %1$dpx %1$dpx 0;',
|
729 |
+
'float:none;margin:%1$dpx 0 %1$dpx 0;text-align:center;',
|
730 |
+
'float:right;margin:%1$dpx 0 %1$dpx %1$dpx;',
|
731 |
+
'float:none;margin:0px;');
|
732 |
+
|
733 |
+
// Alignment
|
734 |
+
$adsalign = $quads_options['ad' . $id]['align'];
|
735 |
+
|
736 |
+
// Margin
|
737 |
+
$adsmargin = isset( $quads_options['ad' . $id]['margin'] ) ? $quads_options['ad' . $id]['margin'] : '3'; // default optin = 3
|
738 |
+
$margin = sprintf( $styleArray[( int ) $adsalign], $adsmargin );
|
739 |
+
|
740 |
+
// Do not create any inline style on AMP site
|
741 |
+
$style = !quads_is_amp_endpoint() ? apply_filters( 'quads_filter_margins', $margin, 'ad' . $id ) : '';
|
742 |
+
|
743 |
+
return $style;
|
744 |
+
}
|
745 |
+
|
746 |
/**
|
747 |
* Revert content to original content any remove any processing helper strings
|
748 |
*
|
quick-adsense-reloaded.php
CHANGED
@@ -6,7 +6,7 @@
|
|
6 |
* Description: Insert Google AdSense or any Ads code into your website. A fork of Quick AdSense
|
7 |
* Author: Rene Hermenau, WP-Staging
|
8 |
* Author URI: https://wordpress.org/plugins/quick-adsense-reloaded/
|
9 |
-
* Version: 1.4.
|
10 |
* Text Domain: quick-adsense-reloaded
|
11 |
* Domain Path: languages
|
12 |
* Credits: WP QUADS - Quick AdSense Reloaded is a fork of Quick AdSense
|
@@ -35,7 +35,7 @@ if( !defined( 'ABSPATH' ) )
|
|
35 |
|
36 |
// Plugin version
|
37 |
if( !defined( 'QUADS_VERSION' ) ) {
|
38 |
-
define( 'QUADS_VERSION', '1.4.
|
39 |
}
|
40 |
|
41 |
// Plugin name
|
6 |
* Description: Insert Google AdSense or any Ads code into your website. A fork of Quick AdSense
|
7 |
* Author: Rene Hermenau, WP-Staging
|
8 |
* Author URI: https://wordpress.org/plugins/quick-adsense-reloaded/
|
9 |
+
* Version: 1.4.6
|
10 |
* Text Domain: quick-adsense-reloaded
|
11 |
* Domain Path: languages
|
12 |
* Credits: WP QUADS - Quick AdSense Reloaded is a fork of Quick AdSense
|
35 |
|
36 |
// Plugin version
|
37 |
if( !defined( 'QUADS_VERSION' ) ) {
|
38 |
+
define( 'QUADS_VERSION', '1.4.6' );
|
39 |
}
|
40 |
|
41 |
// Plugin name
|
readme.txt
CHANGED
@@ -9,7 +9,7 @@ License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
|
9 |
Tags: adsense, ads, ad, google adsense, advertising, amp, ad injection, ad inserter, ad manager
|
10 |
Requires at least: 3.6+
|
11 |
Tested up to: 4.7.2
|
12 |
-
Stable tag: 1.4.
|
13 |
|
14 |
Quick Adsense Reloaded! Quickest way to insert Google AdSense & other ads into your website. Google AdSense integration with Google AMP support
|
15 |
|
@@ -129,6 +129,11 @@ Alternative Installation:
|
|
129 |
|
130 |
== Changelog ==
|
131 |
|
|
|
|
|
|
|
|
|
|
|
132 |
= 1.4.5 =
|
133 |
* New: Add new option to hide AMP ads on certain posts with WP QUADS PRO
|
134 |
|
9 |
Tags: adsense, ads, ad, google adsense, advertising, amp, ad injection, ad inserter, ad manager
|
10 |
Requires at least: 3.6+
|
11 |
Tested up to: 4.7.2
|
12 |
+
Stable tag: 1.4.6
|
13 |
|
14 |
Quick Adsense Reloaded! Quickest way to insert Google AdSense & other ads into your website. Google AdSense integration with Google AMP support
|
15 |
|
129 |
|
130 |
== Changelog ==
|
131 |
|
132 |
+
= 1.4.6 =
|
133 |
+
* New: Theme API for custom theme integration of AdSense ads supports margin and alignment options now
|
134 |
+
* New: Create WP QUADS admin menue logo
|
135 |
+
* Fix: Admin warning if no adsense spots are activated is not working properly
|
136 |
+
|
137 |
= 1.4.5 =
|
138 |
* New: Add new option to hide AMP ads on certain posts with WP QUADS PRO
|
139 |
|