Version Description
- 2018-06-25 =
- Tweaked tracker data anonymization
- Fixed tracker notice
Download this release
Release Info
Developer | jablonowski |
Plugin | Flexible Shipping for WooCommerce |
Version | 2.1.5 |
Comparing to | |
See all releases |
Code changes from version 2.1.4 to 2.1.5
- acceptance/reports/html/cucumber_reporter.html +1217 -0
- acceptance/reports/html/plugins_tests_report.html +1107 -0
- acceptance/reports/html/screenshot/After_2468.png +0 -0
- acceptance/reports/html/screenshot/screenShot1.png +0 -0
- acceptance/reports/html/screenshot/screenShot2.png +0 -0
- acceptance/reports/html/screenshot/screenShot3.png +0 -0
- acceptance/reports/html/screenshot/screenShot4.png +0 -0
- acceptance/reports/html/tracker_long_message_is_visible-14-1.png +0 -0
- acceptance/reports/json/cucumber_report.json +467 -0
- flexible-shipping.php +21 -9
- inc/wpdesk-tracker/class-wpdesk-tracker-factory.php +91 -0
- inc/wpdesk-tracker/class-wpdesk-tracker.php +199 -632
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-gateways.php +43 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-identification-gdpr.php +62 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-identification.php +39 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-jetpack.php +42 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-license-emails.php +54 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders-country.php +53 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders-month.php +57 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders.php +42 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-plugins.php +84 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-products-variations.php +39 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-products.php +43 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-server.php +61 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-settings.php +55 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-classes.php +41 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-methods-zones.php +60 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-methods.php +47 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-templates.php +65 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-theme.php +44 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-user-agent.php +35 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-users.php +44 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-wordpress.php +50 -0
- inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider.php +30 -0
- inc/wpdesk-tracker/lang/wpdesk-tracker-pl_PL.mo +0 -0
- inc/wpdesk-tracker/lang/wpdesk-tracker-pl_PL.po +5 -12
- inc/wpdesk-tracker/sender/Exception/class-wpdesk-tracker-sender-exception-wperror.php +17 -0
- inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender-logged.php +56 -0
- inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender-wordpress-to-wpdesk.php +60 -0
- inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender.php +23 -0
- inc/wpdesk-tracker/views/tracker-connect.php +3 -10
- inc/wpdesk-tracker/views/tracker-notice.php +11 -56
- languages/flexible-shipping-pl_PL.mo +0 -0
- languages/flexible-shipping-pl_PL.po +30 -42
- readme.txt +5 -1
- vendor/autoload.php +1 -1
- vendor/composer/autoload_classmap.php +55 -0
- vendor/composer/autoload_real.php +4 -4
- vendor/composer/autoload_static.php +60 -1
acceptance/reports/html/cucumber_reporter.html
ADDED
@@ -0,0 +1,1217 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html>
|
2 |
+
<html>
|
3 |
+
<head>
|
4 |
+
<title>Cucumber Feature Report</title>
|
5 |
+
<link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" >
|
6 |
+
<style type="text/css">
|
7 |
+
.panel-heading {
|
8 |
+
padding: 0;
|
9 |
+
}
|
10 |
+
|
11 |
+
.panel-heading a {
|
12 |
+
padding: 10px 15px;
|
13 |
+
display: block;
|
14 |
+
position: relative;
|
15 |
+
text-decoration: none;
|
16 |
+
}
|
17 |
+
|
18 |
+
.panel-heading i.glyphicon-chevron-down {
|
19 |
+
display: none;
|
20 |
+
}
|
21 |
+
|
22 |
+
.panel-heading i.glyphicon-chevron-right {
|
23 |
+
display: inline-block;
|
24 |
+
}
|
25 |
+
|
26 |
+
.panel-heading.open i.glyphicon-chevron-down {
|
27 |
+
display: inline-block;
|
28 |
+
}
|
29 |
+
|
30 |
+
.panel-heading.open i.glyphicon-chevron-right {
|
31 |
+
display: none;
|
32 |
+
}
|
33 |
+
|
34 |
+
.generated-on {
|
35 |
+
text-align: right;
|
36 |
+
padding-bottom: 10px;
|
37 |
+
}
|
38 |
+
|
39 |
+
.panel-title b {
|
40 |
+
padding-right: 10px;
|
41 |
+
}
|
42 |
+
|
43 |
+
.panel-heading .label-container {
|
44 |
+
position: absolute;
|
45 |
+
top: 8px;
|
46 |
+
right: 8px;
|
47 |
+
}
|
48 |
+
|
49 |
+
.panel-heading .label-container label {
|
50 |
+
margin-left: 5px;
|
51 |
+
padding: 5px;
|
52 |
+
}
|
53 |
+
|
54 |
+
.navbar .label-container {
|
55 |
+
position: absolute;
|
56 |
+
right: 10px;
|
57 |
+
top: 14px;
|
58 |
+
}
|
59 |
+
|
60 |
+
.navbar {
|
61 |
+
margin-bottom: 10px;
|
62 |
+
}
|
63 |
+
|
64 |
+
.navbar .label {
|
65 |
+
font-size: 20px;
|
66 |
+
}
|
67 |
+
|
68 |
+
.navbar .project-name {
|
69 |
+
position: absolute;
|
70 |
+
top: 10px;
|
71 |
+
left: 50%;
|
72 |
+
margin-left: -100px;
|
73 |
+
text-align: center;
|
74 |
+
font-size: 20px;
|
75 |
+
font-weight: bold;
|
76 |
+
}
|
77 |
+
|
78 |
+
.tags {
|
79 |
+
margin-left: 18px;
|
80 |
+
margin-right: 20px;
|
81 |
+
padding-top: 5px;
|
82 |
+
margin-bottom: -4px;
|
83 |
+
}
|
84 |
+
|
85 |
+
.tag {
|
86 |
+
font-size: 13px;
|
87 |
+
color: #696969;
|
88 |
+
letter-spacing: 0.3px;
|
89 |
+
font-weight: bold;
|
90 |
+
font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;
|
91 |
+
}
|
92 |
+
|
93 |
+
.chart {
|
94 |
+
padding-bottom: 15px;
|
95 |
+
}
|
96 |
+
|
97 |
+
div.chart div div svg rect {
|
98 |
+
fill: #f5f5f5;
|
99 |
+
}
|
100 |
+
|
101 |
+
table.arguments {
|
102 |
+
margin-left: 30px;
|
103 |
+
}
|
104 |
+
|
105 |
+
.screenshot {
|
106 |
+
padding: 2% 0 2% 0;
|
107 |
+
}
|
108 |
+
|
109 |
+
.scenarioTitle {
|
110 |
+
width: 80%
|
111 |
+
}
|
112 |
+
|
113 |
+
.description {
|
114 |
+
background-color: white;
|
115 |
+
border-color: white;
|
116 |
+
line-height: 1.6;
|
117 |
+
color: #6f6f6f;
|
118 |
+
font-weight: 400;
|
119 |
+
font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;
|
120 |
+
font-size: 14px;
|
121 |
+
padding: 0.1em 0.5em 1.2em 1.5em
|
122 |
+
}
|
123 |
+
|
124 |
+
#scenario-description {
|
125 |
+
padding-bottom: 1em;
|
126 |
+
padding-left: 0.2em;
|
127 |
+
}
|
128 |
+
|
129 |
+
.scrollBar {
|
130 |
+
overflow-x: scroll;
|
131 |
+
}
|
132 |
+
|
133 |
+
table {
|
134 |
+
border-collapse: collapse;
|
135 |
+
}
|
136 |
+
|
137 |
+
table, th, td {
|
138 |
+
border: 1px solid black;
|
139 |
+
}
|
140 |
+
|
141 |
+
th, td {
|
142 |
+
text-align: left;
|
143 |
+
padding: 8px;
|
144 |
+
}
|
145 |
+
|
146 |
+
th {
|
147 |
+
background-color: #f5f5f5;
|
148 |
+
color: black;
|
149 |
+
}
|
150 |
+
|
151 |
+
.info {
|
152 |
+
background-color: #fbfbfb;
|
153 |
+
}
|
154 |
+
|
155 |
+
.step-duration {
|
156 |
+
float: right;
|
157 |
+
}
|
158 |
+
|
159 |
+
.footer-div {
|
160 |
+
text-align: right;
|
161 |
+
vertical-align: middle;
|
162 |
+
height:3.5%;
|
163 |
+
width:100%;
|
164 |
+
}
|
165 |
+
|
166 |
+
.footer-container {
|
167 |
+
margin-right: 10px;
|
168 |
+
margin-top: 5px;
|
169 |
+
width:18%;
|
170 |
+
z-index: 10;
|
171 |
+
position: absolute;
|
172 |
+
right: 0;
|
173 |
+
bottom: 10px;
|
174 |
+
text-align: center;
|
175 |
+
background-color: transparent;
|
176 |
+
}
|
177 |
+
|
178 |
+
.footer-link {
|
179 |
+
font-size: 13px;
|
180 |
+
float: right;
|
181 |
+
}
|
182 |
+
|
183 |
+
.footer-link:hover {
|
184 |
+
color: darkgray;
|
185 |
+
}
|
186 |
+
</style>
|
187 |
+
<meta charset="UTF-8">
|
188 |
+
</head>
|
189 |
+
<body>
|
190 |
+
|
191 |
+
<div class="navbar navbar-default navbar-static-top" role="navigation">
|
192 |
+
<div class="container">
|
193 |
+
<div class="navbar-header">
|
194 |
+
<a class="navbar-brand">Cucumberjs Report</a>
|
195 |
+
<div class="project-name visible-md visible-lg">WPDESK_PLUGINS_TESTS</div>
|
196 |
+
<div class="label-container">
|
197 |
+
<span class="label label-success" title=scenarios>Passed: 3</span>
|
198 |
+
<span class="label label-danger" title=scenarios>Failed: 1</span>
|
199 |
+
</div>
|
200 |
+
</div>
|
201 |
+
</div>
|
202 |
+
</div>
|
203 |
+
|
204 |
+
<div class="container">
|
205 |
+
|
206 |
+
<div class="generated-on">Mon Jun 25 2018 11:16:58 GMT+0000 (UTC)</div>
|
207 |
+
|
208 |
+
<div class="row">
|
209 |
+
<div class="chart col-lg-6 col-md-6" id="piechart_features"></div>
|
210 |
+
<div class="chart col-lg-6 col-md-6" id="piechart_scenarios"></div>
|
211 |
+
</div>
|
212 |
+
|
213 |
+
|
214 |
+
|
215 |
+
<div class="row">
|
216 |
+
|
217 |
+
<div class="col-lg-6 col-md-6">
|
218 |
+
<div class="panel panel-default">
|
219 |
+
<div class="panel-heading">
|
220 |
+
<h4 class="panel-title">
|
221 |
+
<div class="tags"> <span class="tag">@flexible-shipping</span> </div>
|
222 |
+
<a data-toggle="collapse" href="#collapseFeature0">
|
223 |
+
<i class="glyphicon glyphicon-chevron-right"></i>
|
224 |
+
<i class="glyphicon glyphicon-chevron-down"></i>
|
225 |
+
<b>Feature:</b>Activate Flexible shipping tests
|
226 |
+
<span class="label-container">
|
227 |
+
<span class="label label-success">2</span>
|
228 |
+
|
229 |
+
|
230 |
+
|
231 |
+
|
232 |
+
</span>
|
233 |
+
</a>
|
234 |
+
</h4>
|
235 |
+
</div>
|
236 |
+
<div id="collapseFeature0" class="panel-collapse collapse">
|
237 |
+
<div class="panel-body">
|
238 |
+
|
239 |
+
|
240 |
+
<div class="panel panel-default">
|
241 |
+
<div class="panel-heading">
|
242 |
+
<h4 class="panel-title">
|
243 |
+
<div class="tags"> </div>
|
244 |
+
<a data-toggle="collapse" href="#collapseScenario0_0">
|
245 |
+
<i class="glyphicon glyphicon-chevron-right"></i>
|
246 |
+
<i class="glyphicon glyphicon-chevron-down"></i>
|
247 |
+
<b>Scenario:</b>Plugin Flexible Shipping is active
|
248 |
+
<span class="label-container">
|
249 |
+
<span class="label label-success" title="Passed">6</span>
|
250 |
+
|
251 |
+
|
252 |
+
|
253 |
+
|
254 |
+
</span>
|
255 |
+
</a>
|
256 |
+
</h4>
|
257 |
+
</div>
|
258 |
+
<div id="collapseScenario0_0" class="panel-collapse collapse">
|
259 |
+
<div class="panel-body">
|
260 |
+
|
261 |
+
|
262 |
+
|
263 |
+
|
264 |
+
|
265 |
+
<p class="scenario-container">
|
266 |
+
|
267 |
+
|
268 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
269 |
+
|
270 |
+
|
271 |
+
<span class="text">
|
272 |
+
<span class="keyword highlight">Given </span>
|
273 |
+
user is logged in to wordPress
|
274 |
+
|
275 |
+
<span class="step-duration">
|
276 |
+
0s
|
277 |
+
</span>
|
278 |
+
|
279 |
+
|
280 |
+
|
281 |
+
|
282 |
+
</span>
|
283 |
+
|
284 |
+
|
285 |
+
|
286 |
+
|
287 |
+
|
288 |
+
|
289 |
+
|
290 |
+
|
291 |
+
|
292 |
+
|
293 |
+
</p>
|
294 |
+
|
295 |
+
|
296 |
+
|
297 |
+
<p class="scenario-container">
|
298 |
+
|
299 |
+
|
300 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
301 |
+
|
302 |
+
|
303 |
+
<span class="text">
|
304 |
+
<span class="keyword highlight">And </span>
|
305 |
+
i resets the consent to collect data in the database
|
306 |
+
|
307 |
+
<span class="step-duration">
|
308 |
+
0s
|
309 |
+
</span>
|
310 |
+
|
311 |
+
|
312 |
+
|
313 |
+
|
314 |
+
</span>
|
315 |
+
|
316 |
+
|
317 |
+
|
318 |
+
|
319 |
+
|
320 |
+
|
321 |
+
|
322 |
+
|
323 |
+
|
324 |
+
|
325 |
+
</p>
|
326 |
+
|
327 |
+
|
328 |
+
|
329 |
+
<p class="scenario-container">
|
330 |
+
|
331 |
+
|
332 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
333 |
+
|
334 |
+
|
335 |
+
<span class="text">
|
336 |
+
<span class="keyword highlight">When </span>
|
337 |
+
i open "menu-plugins" and activate plugin with slug "flexible-shipping"
|
338 |
+
|
339 |
+
<span class="step-duration">
|
340 |
+
2s
|
341 |
+
</span>
|
342 |
+
|
343 |
+
|
344 |
+
|
345 |
+
|
346 |
+
</span>
|
347 |
+
|
348 |
+
|
349 |
+
|
350 |
+
|
351 |
+
|
352 |
+
|
353 |
+
|
354 |
+
|
355 |
+
|
356 |
+
|
357 |
+
</p>
|
358 |
+
|
359 |
+
|
360 |
+
|
361 |
+
<p class="scenario-container">
|
362 |
+
|
363 |
+
|
364 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
365 |
+
|
366 |
+
|
367 |
+
<span class="text">
|
368 |
+
<span class="keyword highlight">Then </span>
|
369 |
+
check if plugin with slug "flexible-shipping" is Active
|
370 |
+
|
371 |
+
<span class="step-duration">
|
372 |
+
0s
|
373 |
+
</span>
|
374 |
+
|
375 |
+
|
376 |
+
|
377 |
+
|
378 |
+
</span>
|
379 |
+
|
380 |
+
|
381 |
+
|
382 |
+
|
383 |
+
|
384 |
+
|
385 |
+
|
386 |
+
|
387 |
+
|
388 |
+
|
389 |
+
</p>
|
390 |
+
|
391 |
+
|
392 |
+
|
393 |
+
|
394 |
+
</div>
|
395 |
+
</div>
|
396 |
+
</div>
|
397 |
+
|
398 |
+
<div class="panel panel-default">
|
399 |
+
<div class="panel-heading">
|
400 |
+
<h4 class="panel-title">
|
401 |
+
<div class="tags"> </div>
|
402 |
+
<a data-toggle="collapse" href="#collapseScenario0_1">
|
403 |
+
<i class="glyphicon glyphicon-chevron-right"></i>
|
404 |
+
<i class="glyphicon glyphicon-chevron-down"></i>
|
405 |
+
<b>Scenario:</b>Plugin Flexible Shipping is inactive
|
406 |
+
<span class="label-container">
|
407 |
+
<span class="label label-success" title="Passed">6</span>
|
408 |
+
|
409 |
+
|
410 |
+
|
411 |
+
|
412 |
+
</span>
|
413 |
+
</a>
|
414 |
+
</h4>
|
415 |
+
</div>
|
416 |
+
<div id="collapseScenario0_1" class="panel-collapse collapse">
|
417 |
+
<div class="panel-body">
|
418 |
+
|
419 |
+
|
420 |
+
|
421 |
+
|
422 |
+
|
423 |
+
<p class="scenario-container">
|
424 |
+
|
425 |
+
|
426 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
427 |
+
|
428 |
+
|
429 |
+
<span class="text">
|
430 |
+
<span class="keyword highlight">Given </span>
|
431 |
+
user is logged in to wordPress
|
432 |
+
|
433 |
+
<span class="step-duration">
|
434 |
+
0s
|
435 |
+
</span>
|
436 |
+
|
437 |
+
|
438 |
+
|
439 |
+
|
440 |
+
</span>
|
441 |
+
|
442 |
+
|
443 |
+
|
444 |
+
|
445 |
+
|
446 |
+
|
447 |
+
|
448 |
+
|
449 |
+
|
450 |
+
|
451 |
+
</p>
|
452 |
+
|
453 |
+
|
454 |
+
|
455 |
+
<p class="scenario-container">
|
456 |
+
|
457 |
+
|
458 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
459 |
+
|
460 |
+
|
461 |
+
<span class="text">
|
462 |
+
<span class="keyword highlight">And </span>
|
463 |
+
i resets the consent to collect data in the database
|
464 |
+
|
465 |
+
<span class="step-duration">
|
466 |
+
0s
|
467 |
+
</span>
|
468 |
+
|
469 |
+
|
470 |
+
|
471 |
+
|
472 |
+
</span>
|
473 |
+
|
474 |
+
|
475 |
+
|
476 |
+
|
477 |
+
|
478 |
+
|
479 |
+
|
480 |
+
|
481 |
+
|
482 |
+
|
483 |
+
</p>
|
484 |
+
|
485 |
+
|
486 |
+
|
487 |
+
<p class="scenario-container">
|
488 |
+
|
489 |
+
|
490 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
491 |
+
|
492 |
+
|
493 |
+
<span class="text">
|
494 |
+
<span class="keyword highlight">When </span>
|
495 |
+
i open "menu-plugins" and deactivate plugin with slug "flexible-shipping"
|
496 |
+
|
497 |
+
<span class="step-duration">
|
498 |
+
1s
|
499 |
+
</span>
|
500 |
+
|
501 |
+
|
502 |
+
|
503 |
+
|
504 |
+
</span>
|
505 |
+
|
506 |
+
|
507 |
+
|
508 |
+
|
509 |
+
|
510 |
+
|
511 |
+
|
512 |
+
|
513 |
+
|
514 |
+
|
515 |
+
</p>
|
516 |
+
|
517 |
+
|
518 |
+
|
519 |
+
<p class="scenario-container">
|
520 |
+
|
521 |
+
|
522 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
523 |
+
|
524 |
+
|
525 |
+
<span class="text">
|
526 |
+
<span class="keyword highlight">Then </span>
|
527 |
+
check if plugin with slug "flexible-shipping" is Inactive
|
528 |
+
|
529 |
+
<span class="step-duration">
|
530 |
+
0s
|
531 |
+
</span>
|
532 |
+
|
533 |
+
|
534 |
+
|
535 |
+
|
536 |
+
</span>
|
537 |
+
|
538 |
+
|
539 |
+
|
540 |
+
|
541 |
+
|
542 |
+
|
543 |
+
|
544 |
+
|
545 |
+
|
546 |
+
|
547 |
+
</p>
|
548 |
+
|
549 |
+
|
550 |
+
|
551 |
+
|
552 |
+
</div>
|
553 |
+
</div>
|
554 |
+
</div>
|
555 |
+
|
556 |
+
</div>
|
557 |
+
</div>
|
558 |
+
</div>
|
559 |
+
</div>
|
560 |
+
|
561 |
+
|
562 |
+
|
563 |
+
<div class="col-lg-6 col-md-6">
|
564 |
+
<div class="panel panel-default">
|
565 |
+
<div class="panel-heading">
|
566 |
+
<h4 class="panel-title">
|
567 |
+
<div class="tags"> <span class="tag">@flexible-shipping</span> </div>
|
568 |
+
<a data-toggle="collapse" href="#collapseFeature1">
|
569 |
+
<i class="glyphicon glyphicon-chevron-right"></i>
|
570 |
+
<i class="glyphicon glyphicon-chevron-down"></i>
|
571 |
+
<b>Feature:</b>Tracker message Flexible Shippping tests
|
572 |
+
<span class="label-container">
|
573 |
+
<span class="label label-success">1</span>
|
574 |
+
<span class="label label-danger">1</span>
|
575 |
+
|
576 |
+
|
577 |
+
|
578 |
+
</span>
|
579 |
+
</a>
|
580 |
+
</h4>
|
581 |
+
</div>
|
582 |
+
<div id="collapseFeature1" class="panel-collapse collapse">
|
583 |
+
<div class="panel-body">
|
584 |
+
|
585 |
+
|
586 |
+
<div class="panel panel-default">
|
587 |
+
<div class="panel-heading">
|
588 |
+
<h4 class="panel-title">
|
589 |
+
<div class="tags"> </div>
|
590 |
+
<a data-toggle="collapse" href="#collapseScenario1_0">
|
591 |
+
<i class="glyphicon glyphicon-chevron-right"></i>
|
592 |
+
<i class="glyphicon glyphicon-chevron-down"></i>
|
593 |
+
<b>Scenario:</b>Tracker message is Visible
|
594 |
+
<span class="label-container">
|
595 |
+
<span class="label label-success" title="Passed">8</span>
|
596 |
+
|
597 |
+
|
598 |
+
|
599 |
+
|
600 |
+
</span>
|
601 |
+
</a>
|
602 |
+
</h4>
|
603 |
+
</div>
|
604 |
+
<div id="collapseScenario1_0" class="panel-collapse collapse">
|
605 |
+
<div class="panel-body">
|
606 |
+
|
607 |
+
|
608 |
+
|
609 |
+
|
610 |
+
|
611 |
+
<p class="scenario-container">
|
612 |
+
|
613 |
+
|
614 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
615 |
+
|
616 |
+
|
617 |
+
<span class="text">
|
618 |
+
<span class="keyword highlight">Given </span>
|
619 |
+
user is logged in to wordPress
|
620 |
+
|
621 |
+
<span class="step-duration">
|
622 |
+
0s
|
623 |
+
</span>
|
624 |
+
|
625 |
+
|
626 |
+
|
627 |
+
|
628 |
+
</span>
|
629 |
+
|
630 |
+
|
631 |
+
|
632 |
+
|
633 |
+
|
634 |
+
|
635 |
+
|
636 |
+
|
637 |
+
|
638 |
+
|
639 |
+
</p>
|
640 |
+
|
641 |
+
|
642 |
+
|
643 |
+
<p class="scenario-container">
|
644 |
+
|
645 |
+
|
646 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
647 |
+
|
648 |
+
|
649 |
+
<span class="text">
|
650 |
+
<span class="keyword highlight">And </span>
|
651 |
+
i resets the consent to collect data in the database
|
652 |
+
|
653 |
+
<span class="step-duration">
|
654 |
+
0s
|
655 |
+
</span>
|
656 |
+
|
657 |
+
|
658 |
+
|
659 |
+
|
660 |
+
</span>
|
661 |
+
|
662 |
+
|
663 |
+
|
664 |
+
|
665 |
+
|
666 |
+
|
667 |
+
|
668 |
+
|
669 |
+
|
670 |
+
|
671 |
+
</p>
|
672 |
+
|
673 |
+
|
674 |
+
|
675 |
+
<p class="scenario-container">
|
676 |
+
|
677 |
+
|
678 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
679 |
+
|
680 |
+
|
681 |
+
<span class="text">
|
682 |
+
<span class="keyword highlight">When </span>
|
683 |
+
i open "menu-plugins" and activate plugin with slug "flexible-shipping"
|
684 |
+
|
685 |
+
<span class="step-duration">
|
686 |
+
1s
|
687 |
+
</span>
|
688 |
+
|
689 |
+
|
690 |
+
|
691 |
+
|
692 |
+
</span>
|
693 |
+
|
694 |
+
|
695 |
+
|
696 |
+
|
697 |
+
|
698 |
+
|
699 |
+
|
700 |
+
|
701 |
+
|
702 |
+
|
703 |
+
</p>
|
704 |
+
|
705 |
+
|
706 |
+
|
707 |
+
<p class="scenario-container">
|
708 |
+
|
709 |
+
|
710 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
711 |
+
|
712 |
+
|
713 |
+
<span class="text">
|
714 |
+
<span class="keyword highlight">Then </span>
|
715 |
+
tracker message type "short" visible
|
716 |
+
|
717 |
+
<span class="step-duration">
|
718 |
+
0s
|
719 |
+
</span>
|
720 |
+
|
721 |
+
|
722 |
+
|
723 |
+
|
724 |
+
</span>
|
725 |
+
|
726 |
+
|
727 |
+
|
728 |
+
|
729 |
+
|
730 |
+
|
731 |
+
|
732 |
+
|
733 |
+
|
734 |
+
|
735 |
+
</p>
|
736 |
+
|
737 |
+
|
738 |
+
|
739 |
+
<p class="scenario-container">
|
740 |
+
|
741 |
+
|
742 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
743 |
+
|
744 |
+
|
745 |
+
<span class="text">
|
746 |
+
<span class="keyword highlight">And </span>
|
747 |
+
Check if buttons skip and Allow & Continue visible in tracker message
|
748 |
+
|
749 |
+
<span class="step-duration">
|
750 |
+
0s
|
751 |
+
</span>
|
752 |
+
|
753 |
+
|
754 |
+
|
755 |
+
|
756 |
+
</span>
|
757 |
+
|
758 |
+
|
759 |
+
|
760 |
+
|
761 |
+
|
762 |
+
|
763 |
+
|
764 |
+
|
765 |
+
|
766 |
+
|
767 |
+
</p>
|
768 |
+
|
769 |
+
|
770 |
+
|
771 |
+
<p class="scenario-container">
|
772 |
+
|
773 |
+
|
774 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
775 |
+
|
776 |
+
|
777 |
+
<span class="text">
|
778 |
+
<span class="keyword highlight">But </span>
|
779 |
+
i open "menu-plugins" and deactivate plugin with slug "flexible-shipping"
|
780 |
+
|
781 |
+
<span class="step-duration">
|
782 |
+
1s
|
783 |
+
</span>
|
784 |
+
|
785 |
+
|
786 |
+
|
787 |
+
|
788 |
+
</span>
|
789 |
+
|
790 |
+
|
791 |
+
|
792 |
+
|
793 |
+
|
794 |
+
|
795 |
+
|
796 |
+
|
797 |
+
|
798 |
+
|
799 |
+
</p>
|
800 |
+
|
801 |
+
|
802 |
+
|
803 |
+
|
804 |
+
</div>
|
805 |
+
</div>
|
806 |
+
</div>
|
807 |
+
|
808 |
+
<div class="panel panel-default">
|
809 |
+
<div class="panel-heading">
|
810 |
+
<h4 class="panel-title">
|
811 |
+
<div class="tags"> </div>
|
812 |
+
<a data-toggle="collapse" href="#collapseScenario1_1">
|
813 |
+
<i class="glyphicon glyphicon-chevron-right"></i>
|
814 |
+
<i class="glyphicon glyphicon-chevron-down"></i>
|
815 |
+
<b>Scenario:</b>Tracker long message is Visible
|
816 |
+
<span class="label-container">
|
817 |
+
<span class="label label-success" title="Passed">7</span>
|
818 |
+
|
819 |
+
|
820 |
+
<span class="label label-warning" title="Skipped">1</span>
|
821 |
+
<span class="label label-danger" title="Failed">1</span>
|
822 |
+
</span>
|
823 |
+
</a>
|
824 |
+
</h4>
|
825 |
+
</div>
|
826 |
+
<div id="collapseScenario1_1" class="panel-collapse collapse">
|
827 |
+
<div class="panel-body">
|
828 |
+
|
829 |
+
|
830 |
+
|
831 |
+
|
832 |
+
|
833 |
+
<p class="scenario-container">
|
834 |
+
|
835 |
+
|
836 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
837 |
+
|
838 |
+
|
839 |
+
<span class="text">
|
840 |
+
<span class="keyword highlight">Given </span>
|
841 |
+
user is logged in to wordPress
|
842 |
+
|
843 |
+
<span class="step-duration">
|
844 |
+
0s
|
845 |
+
</span>
|
846 |
+
|
847 |
+
|
848 |
+
|
849 |
+
|
850 |
+
</span>
|
851 |
+
|
852 |
+
|
853 |
+
|
854 |
+
|
855 |
+
|
856 |
+
|
857 |
+
|
858 |
+
|
859 |
+
|
860 |
+
|
861 |
+
</p>
|
862 |
+
|
863 |
+
|
864 |
+
|
865 |
+
<p class="scenario-container">
|
866 |
+
|
867 |
+
|
868 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
869 |
+
|
870 |
+
|
871 |
+
<span class="text">
|
872 |
+
<span class="keyword highlight">And </span>
|
873 |
+
i resets the consent to collect data in the database
|
874 |
+
|
875 |
+
<span class="step-duration">
|
876 |
+
0s
|
877 |
+
</span>
|
878 |
+
|
879 |
+
|
880 |
+
|
881 |
+
|
882 |
+
</span>
|
883 |
+
|
884 |
+
|
885 |
+
|
886 |
+
|
887 |
+
|
888 |
+
|
889 |
+
|
890 |
+
|
891 |
+
|
892 |
+
|
893 |
+
</p>
|
894 |
+
|
895 |
+
|
896 |
+
|
897 |
+
<p class="scenario-container">
|
898 |
+
|
899 |
+
|
900 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
901 |
+
|
902 |
+
|
903 |
+
<span class="text">
|
904 |
+
<span class="keyword highlight">When </span>
|
905 |
+
i open "menu-plugins" and activate plugin with slug "flexible-shipping"
|
906 |
+
|
907 |
+
<span class="step-duration">
|
908 |
+
1s
|
909 |
+
</span>
|
910 |
+
|
911 |
+
|
912 |
+
|
913 |
+
|
914 |
+
</span>
|
915 |
+
|
916 |
+
|
917 |
+
|
918 |
+
|
919 |
+
|
920 |
+
|
921 |
+
|
922 |
+
|
923 |
+
|
924 |
+
|
925 |
+
</p>
|
926 |
+
|
927 |
+
|
928 |
+
|
929 |
+
<p class="scenario-container">
|
930 |
+
|
931 |
+
|
932 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
933 |
+
|
934 |
+
|
935 |
+
<span class="text">
|
936 |
+
<span class="keyword highlight">And </span>
|
937 |
+
Skip tracker message
|
938 |
+
|
939 |
+
<span class="step-duration">
|
940 |
+
1s
|
941 |
+
</span>
|
942 |
+
|
943 |
+
|
944 |
+
|
945 |
+
|
946 |
+
</span>
|
947 |
+
|
948 |
+
|
949 |
+
|
950 |
+
|
951 |
+
|
952 |
+
|
953 |
+
|
954 |
+
|
955 |
+
|
956 |
+
|
957 |
+
</p>
|
958 |
+
|
959 |
+
|
960 |
+
|
961 |
+
<p class="scenario-container">
|
962 |
+
|
963 |
+
|
964 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
965 |
+
|
966 |
+
|
967 |
+
<span class="text">
|
968 |
+
<span class="keyword highlight">And </span>
|
969 |
+
i open menu "toplevel_page_woocommerce" and submenu "Settings" then open tab "Shipping"
|
970 |
+
|
971 |
+
<span class="step-duration">
|
972 |
+
1s
|
973 |
+
</span>
|
974 |
+
|
975 |
+
|
976 |
+
|
977 |
+
|
978 |
+
</span>
|
979 |
+
|
980 |
+
|
981 |
+
|
982 |
+
|
983 |
+
|
984 |
+
|
985 |
+
|
986 |
+
|
987 |
+
|
988 |
+
|
989 |
+
</p>
|
990 |
+
|
991 |
+
|
992 |
+
|
993 |
+
<p class="scenario-container">
|
994 |
+
|
995 |
+
|
996 |
+
<span class="label label-danger" title="Failed"><i class="glyphicon glyphicon-remove"></i></span>
|
997 |
+
|
998 |
+
|
999 |
+
<span class="text">
|
1000 |
+
<span class="keyword highlight">Then </span>
|
1001 |
+
tracker message type "long" visible
|
1002 |
+
|
1003 |
+
<span class="step-duration">
|
1004 |
+
0s
|
1005 |
+
</span>
|
1006 |
+
|
1007 |
+
|
1008 |
+
|
1009 |
+
|
1010 |
+
</span>
|
1011 |
+
|
1012 |
+
|
1013 |
+
|
1014 |
+
|
1015 |
+
<a href="#error1_16" data-toggle="collapse">+ Show Error</a>
|
1016 |
+
<div id="error1_16" class="collapse">
|
1017 |
+
<pre class=info>AssertionError: expected 'Hey admin,\nWe need your help to improve WP Desk plugins, so they are more useful for you and the rest of 30,000+ users. By collecting data on how you use our plugins, you will help us a lot. We will not collect any sensitive data, so you can feel safe. Find out more »\nAllow\nDismiss this notice.' to include '\nWe need your help to improve WP Desk plugins, so they are more useful for you and the rest of 18,000+ users. By collecting data on how you use our plugins, you will help us a lot. We will not collect any sensitive data, so you can feel safe. Find out more'</pre>
|
1018 |
+
</div>
|
1019 |
+
|
1020 |
+
|
1021 |
+
|
1022 |
+
|
1023 |
+
|
1024 |
+
|
1025 |
+
|
1026 |
+
</p>
|
1027 |
+
|
1028 |
+
|
1029 |
+
|
1030 |
+
<p class="scenario-container">
|
1031 |
+
|
1032 |
+
|
1033 |
+
<span class="label label-warning" title="Skipped"><i class="glyphicon glyphicon-minus"></i></span>
|
1034 |
+
|
1035 |
+
|
1036 |
+
<span class="text">
|
1037 |
+
<span class="keyword highlight">And </span>
|
1038 |
+
i open "menu-plugins" and deactivate plugin with slug "flexible-shipping"
|
1039 |
+
|
1040 |
+
|
1041 |
+
|
1042 |
+
|
1043 |
+
</span>
|
1044 |
+
|
1045 |
+
|
1046 |
+
|
1047 |
+
|
1048 |
+
|
1049 |
+
|
1050 |
+
|
1051 |
+
|
1052 |
+
|
1053 |
+
|
1054 |
+
</p>
|
1055 |
+
|
1056 |
+
|
1057 |
+
|
1058 |
+
<p class="scenario-container">
|
1059 |
+
|
1060 |
+
|
1061 |
+
<span class="label label-success" title="Success"><i class="glyphicon glyphicon-ok"></i></span>
|
1062 |
+
|
1063 |
+
|
1064 |
+
<span class="text">
|
1065 |
+
<span class="keyword highlight">After </span>
|
1066 |
+
|
1067 |
+
|
1068 |
+
<span class="step-duration">
|
1069 |
+
2s
|
1070 |
+
</span>
|
1071 |
+
|
1072 |
+
|
1073 |
+
|
1074 |
+
|
1075 |
+
</span>
|
1076 |
+
|
1077 |
+
|
1078 |
+
|
1079 |
+
|
1080 |
+
|
1081 |
+
|
1082 |
+
|
1083 |
+
|
1084 |
+
<a class="toggle" href="#">Screenshot -</a>
|
1085 |
+
<a class="screenshot" href="screenshot/After_2468.png">
|
1086 |
+
<img class="screenshot" style="height:100%;width:100%" id="my_images" src="screenshot/After_2468.png"/>
|
1087 |
+
</a>
|
1088 |
+
|
1089 |
+
|
1090 |
+
|
1091 |
+
</p>
|
1092 |
+
|
1093 |
+
|
1094 |
+
</div>
|
1095 |
+
</div>
|
1096 |
+
</div>
|
1097 |
+
|
1098 |
+
</div>
|
1099 |
+
</div>
|
1100 |
+
</div>
|
1101 |
+
</div>
|
1102 |
+
|
1103 |
+
</div>
|
1104 |
+
|
1105 |
+
|
1106 |
+
|
1107 |
+
|
1108 |
+
</div>
|
1109 |
+
|
1110 |
+
<!--<footer class="footer">-->
|
1111 |
+
<!--<div class="footer-text">-->
|
1112 |
+
<!--<p class="text-muted"> Report generated by cucumber-html-reporter</p>-->
|
1113 |
+
<!--</div>-->
|
1114 |
+
<!--</footer>-->
|
1115 |
+
|
1116 |
+
<div class="navbar-fixed-bottom row-fluid footer-div ">
|
1117 |
+
<div class="navbar-inner">
|
1118 |
+
<div class="footer-container">
|
1119 |
+
<a target="_blank" href="https://www.npmjs.com/package/cucumber-html-reporter">
|
1120 |
+
<div class="text-muted footer-link">
|
1121 |
+
generated by @cucumber-html-reporter
|
1122 |
+
</div>
|
1123 |
+
</a>
|
1124 |
+
</div>
|
1125 |
+
</div>
|
1126 |
+
</div>
|
1127 |
+
|
1128 |
+
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
|
1129 |
+
<script src="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
|
1130 |
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.5.1/moment.min.js"></script>
|
1131 |
+
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
|
1132 |
+
<script type="text/javascript">
|
1133 |
+
google.load("visualization", "1", {packages: ["corechart"]});
|
1134 |
+
google.setOnLoadCallback(function() {drawChart({
|
1135 |
+
"title" : "Features",
|
1136 |
+
"failed" : 1,
|
1137 |
+
"passed" : 1
|
1138 |
+
})
|
1139 |
+
});
|
1140 |
+
google.setOnLoadCallback(function() {drawChart({
|
1141 |
+
"title" : "Scenarios",
|
1142 |
+
"failed" : 1,
|
1143 |
+
"passed" : 3,
|
1144 |
+
"notdefined" : 0,
|
1145 |
+
"skipped" : 0
|
1146 |
+
})
|
1147 |
+
});
|
1148 |
+
</script>
|
1149 |
+
<script>
|
1150 |
+
$(document).ready(function() {
|
1151 |
+
$('.collapse').on('hide.bs.collapse', function(e) {
|
1152 |
+
e.stopPropagation();
|
1153 |
+
$(this).prev().removeClass('open');
|
1154 |
+
}).on('show.bs.collapse', function(e) {
|
1155 |
+
e.stopPropagation();
|
1156 |
+
$(this).prev().addClass('open');
|
1157 |
+
});
|
1158 |
+
|
1159 |
+
$('a.toggle').on('click', function() {
|
1160 |
+
if ($(this).text() === 'Screenshot -') {
|
1161 |
+
$(this).text('Screenshot +');
|
1162 |
+
$(this).siblings('a.screenshot').find('img').hide();
|
1163 |
+
} else {
|
1164 |
+
$(this).text('Screenshot -');
|
1165 |
+
$(this).siblings('a.screenshot').find('img').show();
|
1166 |
+
}
|
1167 |
+
});
|
1168 |
+
var $generated = $('.generated-on');
|
1169 |
+
|
1170 |
+
$generated.text('Generated ' + moment($generated.text()).fromNow());
|
1171 |
+
|
1172 |
+
|
1173 |
+
});
|
1174 |
+
|
1175 |
+
function drawChart(chartData) {
|
1176 |
+
var data = google.visualization.arrayToDataTable([
|
1177 |
+
['Task', 'Cucumber Results'],
|
1178 |
+
['Passed', chartData.passed],
|
1179 |
+
['Failed', chartData.failed],
|
1180 |
+
['Pending', chartData.notdefined],
|
1181 |
+
['Skipped', chartData.skipped]
|
1182 |
+
]);
|
1183 |
+
|
1184 |
+
var total = chartData.passed + chartData.failed + (chartData.notdefined || 0) + (chartData.skipped || 0);
|
1185 |
+
var title;
|
1186 |
+
|
1187 |
+
if (total === 1) {
|
1188 |
+
title = total + ' ' + chartData.title.slice(0, -1)
|
1189 |
+
} else {
|
1190 |
+
title = total + ' ' + chartData.title;
|
1191 |
+
}
|
1192 |
+
|
1193 |
+
var options = {
|
1194 |
+
width: '100%',
|
1195 |
+
height: 240,
|
1196 |
+
title: title,
|
1197 |
+
is3D: true,
|
1198 |
+
colors: ['#5cb85c', '#d9534f', '#5bc0de', '#f0ad4e'],
|
1199 |
+
fontSize: '13',
|
1200 |
+
fontName: '"Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif',
|
1201 |
+
slices: {
|
1202 |
+
1: {offset: 0.4},
|
1203 |
+
2: {offset: 0.4},
|
1204 |
+
3: {offset: 0.4}
|
1205 |
+
},
|
1206 |
+
titleTextStyle: {
|
1207 |
+
fontSize: '13',
|
1208 |
+
color: '#5e5e5e'
|
1209 |
+
}
|
1210 |
+
};
|
1211 |
+
|
1212 |
+
var chart = new google.visualization.PieChart(document.getElementById('piechart_' + chartData.title.toLowerCase()));
|
1213 |
+
chart.draw(data, options);
|
1214 |
+
}
|
1215 |
+
</script>
|
1216 |
+
</body>
|
1217 |
+
</html>
|
acceptance/reports/html/plugins_tests_report.html
ADDED
@@ -0,0 +1,1107 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!doctype html>
|
2 |
+
<html>
|
3 |
+
<head>
|
4 |
+
<title>Cucumber Report</title>
|
5 |
+
<meta charset="UTF-8"/>
|
6 |
+
|
7 |
+
<style type="text/css">
|
8 |
+
body {
|
9 |
+
font-family: Arial, sans-serif;
|
10 |
+
margin: 0;
|
11 |
+
background-color: #fff;
|
12 |
+
color: #282828;
|
13 |
+
}
|
14 |
+
|
15 |
+
.feature-navigator {
|
16 |
+
position: fixed;
|
17 |
+
overflow-y: auto;
|
18 |
+
height: 100%;
|
19 |
+
width: 20%;
|
20 |
+
float: left;
|
21 |
+
}
|
22 |
+
|
23 |
+
.report-container {
|
24 |
+
margin-top: 60px;
|
25 |
+
margin-left: 20%;
|
26 |
+
width: 75%;
|
27 |
+
float: left;
|
28 |
+
padding-left: 20px;
|
29 |
+
}
|
30 |
+
|
31 |
+
a, a:hover, a:visited {
|
32 |
+
color: #000;
|
33 |
+
text-decoration: none;
|
34 |
+
}
|
35 |
+
|
36 |
+
table {
|
37 |
+
width: 100%;
|
38 |
+
border-collapse: collapse;
|
39 |
+
}
|
40 |
+
|
41 |
+
th {
|
42 |
+
text-align: left;
|
43 |
+
background-color: #eee;
|
44 |
+
color: #999;
|
45 |
+
text-transform: capitalize;
|
46 |
+
}
|
47 |
+
|
48 |
+
th, td {
|
49 |
+
padding: 5px 10px;
|
50 |
+
border-bottom: rgba(162, 162, 162, 0.16) 1px solid;
|
51 |
+
}
|
52 |
+
|
53 |
+
tr.failed { cursor: pointer; }
|
54 |
+
|
55 |
+
tr td.passed,
|
56 |
+
.passed,
|
57 |
+
tr.passed,
|
58 |
+
.summary .passed {
|
59 |
+
background-color: rgb(150, 250, 150);
|
60 |
+
}
|
61 |
+
|
62 |
+
tr td.failed,
|
63 |
+
tr.failed,
|
64 |
+
.summary .failed {
|
65 |
+
background-color: rgb(250, 150, 150);
|
66 |
+
}
|
67 |
+
|
68 |
+
td.status {
|
69 |
+
text-transform: capitalize;
|
70 |
+
}
|
71 |
+
|
72 |
+
.datatable {
|
73 |
+
margin-left: 2em;
|
74 |
+
width: auto;
|
75 |
+
border-width: 1pt;
|
76 |
+
margin-top: 0.6em;
|
77 |
+
font-size: 80%;
|
78 |
+
}
|
79 |
+
.datatable td {
|
80 |
+
border: rgba(162, 162, 162, 0.16) 1px solid;
|
81 |
+
}
|
82 |
+
|
83 |
+
h1 {
|
84 |
+
margin: 0;
|
85 |
+
padding: 20px 10px 10px 10px;
|
86 |
+
color: #282828;
|
87 |
+
}
|
88 |
+
|
89 |
+
h2 {
|
90 |
+
margin-top: 5px;
|
91 |
+
margin-bottom: 5px;
|
92 |
+
}
|
93 |
+
|
94 |
+
h2.component {
|
95 |
+
color: #282828;
|
96 |
+
padding: 0 10px 10px 10px;
|
97 |
+
}
|
98 |
+
|
99 |
+
h3 { margin: 25px 0 10px 0; }
|
100 |
+
|
101 |
+
img {
|
102 |
+
max-width: 100%;
|
103 |
+
margin-top: 10px;
|
104 |
+
}
|
105 |
+
|
106 |
+
.filename {
|
107 |
+
margin: 0 0 10px 0;
|
108 |
+
color: #999;
|
109 |
+
}
|
110 |
+
|
111 |
+
span.tags {
|
112 |
+
float: right;
|
113 |
+
font-size: 15px;
|
114 |
+
color: #888;
|
115 |
+
}
|
116 |
+
|
117 |
+
span.scenario-tag {
|
118 |
+
float: right;
|
119 |
+
font-size: 15px;
|
120 |
+
color: #888;
|
121 |
+
margin-left: 0.5em;
|
122 |
+
}
|
123 |
+
|
124 |
+
p.story {
|
125 |
+
font-size: 20px;
|
126 |
+
color: #888;
|
127 |
+
font-style: italic;
|
128 |
+
padding-left: 20px;
|
129 |
+
}
|
130 |
+
|
131 |
+
div.report {
|
132 |
+
width: 100%;
|
133 |
+
float: left;
|
134 |
+
padding: 10px;
|
135 |
+
background: #fff;
|
136 |
+
}
|
137 |
+
|
138 |
+
td.result,
|
139 |
+
.duration { text-align: right; }
|
140 |
+
|
141 |
+
.hidden { display: none; }
|
142 |
+
|
143 |
+
.header {
|
144 |
+
width: 100%;
|
145 |
+
float: left;
|
146 |
+
}
|
147 |
+
|
148 |
+
.header .logo {
|
149 |
+
margin: 0 auto;
|
150 |
+
max-width: 90%;
|
151 |
+
padding-left: 10px;
|
152 |
+
}
|
153 |
+
|
154 |
+
.summary,
|
155 |
+
.feature-list,
|
156 |
+
.scenario-list {
|
157 |
+
list-style-type: none;
|
158 |
+
margin: 0;
|
159 |
+
padding: 10px;
|
160 |
+
}
|
161 |
+
|
162 |
+
.summary li,
|
163 |
+
.feature-list li,
|
164 |
+
.scenario-list li { padding: 10px; }
|
165 |
+
|
166 |
+
.scenario-list li a { color: #999; }
|
167 |
+
|
168 |
+
.summary li { padding: 5px 10px; }
|
169 |
+
|
170 |
+
.feature-list li {
|
171 |
+
border-top: rgba(162, 162, 162, 0.16) 1px solid;
|
172 |
+
border-bottom: rgba(162, 162, 162, 0.16) 1px solid;
|
173 |
+
}
|
174 |
+
|
175 |
+
.scenario-list li { border: none; }
|
176 |
+
|
177 |
+
.scenario-list { padding: 10px 0; }
|
178 |
+
|
179 |
+
.summary li,
|
180 |
+
.feature-list li { font-weight: bold; }
|
181 |
+
|
182 |
+
.scenario-list li { font-weight: normal; }
|
183 |
+
|
184 |
+
.feature-list > li.passed { border-left: 5px solid rgb(150, 250, 150); }
|
185 |
+
.feature-list > li.failed { border-left: 5px solid rgb(250, 150, 150); }
|
186 |
+
|
187 |
+
.scenario-list > li.passed a { color: #999; }
|
188 |
+
.scenario-list > li.failed a { color: rgb(250, 150, 150); }
|
189 |
+
|
190 |
+
.summary span.passed {
|
191 |
+
color: rgb(150, 250, 150);
|
192 |
+
background-color: transparent;
|
193 |
+
text-transform: capitalize;
|
194 |
+
}
|
195 |
+
|
196 |
+
.summary span.failed {
|
197 |
+
color: rgb(250, 150, 150);
|
198 |
+
background-color: transparent;
|
199 |
+
text-transform: capitalize;
|
200 |
+
}
|
201 |
+
|
202 |
+
.footer {
|
203 |
+
color: #3C494C;
|
204 |
+
text-align: center;
|
205 |
+
padding: 20px 0;
|
206 |
+
float: left;
|
207 |
+
width: 100%;
|
208 |
+
}
|
209 |
+
|
210 |
+
.footer a, footer a:visited { color: #3C494C; }
|
211 |
+
|
212 |
+
.copy-to-clipboard { /* as small as possible - when hidden, copy will not work */
|
213 |
+
width: 2em;
|
214 |
+
height: 2em;
|
215 |
+
position: fixed;
|
216 |
+
top: 0;
|
217 |
+
left: 0;
|
218 |
+
border: none;
|
219 |
+
outline: none;
|
220 |
+
box-shadow: none;
|
221 |
+
}
|
222 |
+
|
223 |
+
tr td.skipped,
|
224 |
+
.skipped {
|
225 |
+
background-color: rgb(250, 250, 150);
|
226 |
+
}
|
227 |
+
|
228 |
+
@media (max-width: 500px) {
|
229 |
+
.feature-navigator {
|
230 |
+
position: relative;
|
231 |
+
height: auto;
|
232 |
+
width: 100%;
|
233 |
+
clear: both;
|
234 |
+
overflow: auto;
|
235 |
+
}
|
236 |
+
.report-container {
|
237 |
+
margin-top: 1em;
|
238 |
+
margin-left: auto;
|
239 |
+
width: 100%
|
240 |
+
}
|
241 |
+
}
|
242 |
+
|
243 |
+
.print-button {
|
244 |
+
background-color: transparent;
|
245 |
+
color: #428bca;
|
246 |
+
transition: all .5s;
|
247 |
+
display: inline-block;
|
248 |
+
padding: .375rem 1rem;
|
249 |
+
font-size: 1rem;
|
250 |
+
font-weight: normal;
|
251 |
+
line-height: 1.5;
|
252 |
+
text-align: center;
|
253 |
+
white-space: nowrap;
|
254 |
+
vertical-align: middle;
|
255 |
+
cursor: pointer;
|
256 |
+
-webkit-user-select: none;
|
257 |
+
-moz-user-select: none;
|
258 |
+
-ms-user-select: none;
|
259 |
+
user-select: none;
|
260 |
+
border: 1px solid #428bca;
|
261 |
+
border-radius: .25rem;
|
262 |
+
margin: 20px 0 0 20px;
|
263 |
+
}
|
264 |
+
|
265 |
+
.print-button:hover {
|
266 |
+
background-color: #428bca;
|
267 |
+
color: #fff;
|
268 |
+
border-color: #428bca;
|
269 |
+
text-decoration: none;
|
270 |
+
}
|
271 |
+
|
272 |
+
.print-button:focus {
|
273 |
+
outline: none;
|
274 |
+
}
|
275 |
+
|
276 |
+
@media print {
|
277 |
+
.print-button {
|
278 |
+
display: none;
|
279 |
+
}
|
280 |
+
}
|
281 |
+
.print-button {
|
282 |
+
background-color: transparent;
|
283 |
+
color: #428bca;
|
284 |
+
transition: all .5s;
|
285 |
+
display: inline-block;
|
286 |
+
padding: .375rem 1rem;
|
287 |
+
font-size: 1rem;
|
288 |
+
font-weight: normal;
|
289 |
+
line-height: 1.5;
|
290 |
+
text-align: center;
|
291 |
+
white-space: nowrap;
|
292 |
+
vertical-align: middle;
|
293 |
+
cursor: pointer;
|
294 |
+
-webkit-user-select: none;
|
295 |
+
-moz-user-select: none;
|
296 |
+
-ms-user-select: none;
|
297 |
+
user-select: none;
|
298 |
+
border: 1px solid #428bca;
|
299 |
+
border-radius: .25rem;
|
300 |
+
margin: 20px 0 0 20px;
|
301 |
+
}
|
302 |
+
|
303 |
+
.print-button:hover {
|
304 |
+
background-color: #428bca;
|
305 |
+
color: #fff;
|
306 |
+
border-color: #428bca;
|
307 |
+
text-decoration: none;
|
308 |
+
}
|
309 |
+
|
310 |
+
.print-button:focus {
|
311 |
+
outline: none;
|
312 |
+
}
|
313 |
+
|
314 |
+
.summary-table .main-header th,
|
315 |
+
.summary-table .sub-header th:nth-child(2),
|
316 |
+
.summary-table table tr td:nth-child(2),
|
317 |
+
.summary-table .sub-header th:nth-child(5),
|
318 |
+
.summary-table table tr td:nth-child(5),
|
319 |
+
.summary-table .sub-header th:nth-child(9),
|
320 |
+
.summary-table table tr td:nth-child(9) {
|
321 |
+
border-left: 1px solid #999999;
|
322 |
+
}
|
323 |
+
|
324 |
+
.summary-table .main-header th:first-child {
|
325 |
+
border-left: none;
|
326 |
+
}
|
327 |
+
|
328 |
+
.screenshots {
|
329 |
+
display: block;
|
330 |
+
position: relative;
|
331 |
+
margin-top: 60px;
|
332 |
+
margin-left: 20%;
|
333 |
+
max-width: 75%;
|
334 |
+
float: left;
|
335 |
+
}
|
336 |
+
|
337 |
+
.screenshots .image-container {
|
338 |
+
padding: 10px;
|
339 |
+
}
|
340 |
+
|
341 |
+
.screenshot-link a {
|
342 |
+
text-decoration: underline;
|
343 |
+
color: #0000ff;
|
344 |
+
}
|
345 |
+
|
346 |
+
@media print {
|
347 |
+
|
348 |
+
.feature-navigator {
|
349 |
+
position: relative;
|
350 |
+
height: auto;
|
351 |
+
width: 100%;
|
352 |
+
float: none;
|
353 |
+
display:block;
|
354 |
+
clear: both;
|
355 |
+
}
|
356 |
+
|
357 |
+
.report-container {
|
358 |
+
margin-top: 20px;
|
359 |
+
margin-left:0;
|
360 |
+
width: 100%;
|
361 |
+
float: none;
|
362 |
+
}
|
363 |
+
|
364 |
+
.feature-navigator .logo {
|
365 |
+
max-height:72px;
|
366 |
+
display:block;
|
367 |
+
}
|
368 |
+
|
369 |
+
.feature-navigator h1, .feature-navigator h2 {
|
370 |
+
display: block;
|
371 |
+
text-align:center;
|
372 |
+
}
|
373 |
+
|
374 |
+
.feature-navigator h2 {
|
375 |
+
font-size:18px;
|
376 |
+
}
|
377 |
+
|
378 |
+
.feature-navigator .summary {
|
379 |
+
border-top: 3px solid #333;
|
380 |
+
border-bottom: 3px solid #333;
|
381 |
+
display: table;
|
382 |
+
width: 100%;
|
383 |
+
}
|
384 |
+
|
385 |
+
.feature-navigator .summary > li {
|
386 |
+
display: table-cell;
|
387 |
+
text-align: center;
|
388 |
+
}
|
389 |
+
|
390 |
+
.print-button {
|
391 |
+
display: none;
|
392 |
+
}
|
393 |
+
|
394 |
+
.hidden.failed {
|
395 |
+
display: table-row;
|
396 |
+
}
|
397 |
+
|
398 |
+
.print-hide {
|
399 |
+
display: none !important;
|
400 |
+
}
|
401 |
+
}
|
402 |
+
</style></head>
|
403 |
+
<body>
|
404 |
+
<aside class="feature-navigator">
|
405 |
+
<header class="header">
|
406 |
+
<button class="print-button" type="button" onclick="window.scrollTo(0, 0); window.print();">Print Report</button>
|
407 |
+
|
408 |
+
<img class="logo" src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjU5OXB4IiBoZWlnaHQ9IjE1MHB4IiB2aWV3Qm94PSIwIDAgNTk5IDE1MCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczpza2V0Y2g9Imh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaC9ucyI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDMuMi4yICg5OTgzKSAtIGh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaCAtLT4KICAgIDx0aXRsZT5jdWN1bWJlcjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPjwvZGVmcz4KICAgIDxnIGlkPSJMb2dvcyIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc2tldGNoOnR5cGU9Ik1TUGFnZSI+CiAgICAgICAgPGcgaWQ9ImN1Y3VtYmVyIiBza2V0Y2g6dHlwZT0iTVNMYXllckdyb3VwIj4KICAgICAgICAgICAgPGcgaWQ9Imc2MDUzIiBza2V0Y2g6dHlwZT0iTVNTaGFwZUdyb3VwIj4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik01MjQuNzExNzYxLDg3LjAwMTg4NzYgQzUxNy42NTI4NTksODcuMDAxODg3NiA1MTMuMTgyMjIsOTAuNTQxMTA3NCA1MDkuODg4MDY2LDk1Ljk2NzkxMTEgQzUwOS44ODgwNjYsOTQuNTUyMjIzMiA1MTAuNTkzOTU2LDkyLjkwMDU4NzIgNTEwLjU5Mzk1Niw5MS43MjA4NDczIEw1MTAuNTkzOTU2LDg5LjM2MTM2NzQgTDQ5OC44MjkxMTgsODkuMzYxMzY3NCBMNDk4LjgyOTExOCwxNDguMzQ4MzY0IEw1MTAuNTkzOTU2LDE0OC4zNDgzNjQgTDUxMC41OTM5NTYsMTE0LjM3MTg1NCBDNTEwLjU5Mzk1NiwxMDQuNjk3OTg3IDUxNS43NzA0ODUsOTguNzk5Mjg2OSA1MjQuNzExNzYxLDk4Ljc5OTI4NjkgTDUyNy4wNjQ3MjksOTguNzk5Mjg2OSBMNTI3LjA2NDcyOSw4Ny4wMDE4ODc2IEw1MjQuNzExNzYxLDg3LjAwMTg4NzYgTDUyNC43MTE3NjEsODcuMDAxODg3NiBaIiBpZD0icGF0aDU0NDMiIGZpbGw9IiMwMDAwMDAiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik00Ni4zNTM0NjA1LDEwOC43MDkxMDIgQzQzLjA1OTMwNiwxMDMuNTE4MjQ3IDM4LjM1MzM3MDksOTkuOTc5MDI2OCAzMS41Mjk3NjUsOTkuOTc5MDI2OCBDMjAuNzA2MTE0NCw5OS45NzkwMjY4IDEyLjk0MTMyMTUsMTA4LjIzNzIwNiAxMi45NDEzMjE1LDExOC42MTg5MTggQzEyLjk0MTMyMTUsMTI5LjAwMDYyOSAyMC43MDYxMTQ0LDEzNy4yNTg4MDkgMzEuNTI5NzY1LDEzNy4yNTg4MDkgQzM4LjM1MzM3MDksMTM3LjI1ODgwOSA0My4wNTkzMDYsMTMzLjk1NTUzNyA0Ni4zNTM0NjA1LDEyOC43NjQ2ODEgTDU3LjE3NzExMTIsMTM1LjEzNTI3NyBDNTIuMDAwNTgyNiwxNDMuMTU3NTA4IDQyLjM1MzQxNTcsMTQ5LjA1NjIwOCAzMS41Mjk3NjUsMTQ5LjA1NjIwOCBDMTEuNTI5NTQwOSwxNDkuMDU2MjA4IDcuMTA1NDI3MzZlLTE1LDEzMy45NTU1MzcgNy4xMDU0MjczNmUtMTUsMTE4Ljg1NDg2NiBDNy4xMDU0MjczNmUtMTUsMTAzLjc1NDE5NSAxMS43NjQ4Mzc3LDg4LjY1MzUyMzUgMzEuNTI5NzY1LDg4LjY1MzUyMzUgQzQzLjc2NTE5NjIsODguNjUzNTIzNSA1MS41Mjk5ODkxLDk0LjU1MjIyMzIgNTcuMTc3MTExMiwxMDIuNTc0NDU1IEw0Ni4zNTM0NjA1LDEwOC43MDkxMDIgTDQ2LjM1MzQ2MDUsMTA4LjcwOTEwMiBaIiBpZD0icGF0aDU0NDUiIGZpbGw9IiMwMDAwMDAiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik02Ny41MzAxNjg0LDkwLjA2OTIxMTQgTDc5Ljc2NTU5OTYsOTAuMDY5MjExNCBMNzkuNzY1NTk5NiwxMjIuMTU4MTM4IEM3OS43NjU1OTk2LDEzMC42NTIyNjUgODUuODgzMzE1MiwxMzYuNTUwOTY1IDkzLjY0ODEwODEsMTM2LjU1MDk2NSBDMTAxLjE3NzYwNCwxMzYuNTUwOTY1IDEwNy41MzA2MTcsMTMwLjQxNjMxNyAxMDcuNTMwNjE3LDEyMi4xNTgxMzggTDEwNy41MzA2MTcsOTAuMDY5MjExNCBMMTE5Ljc2NjA0OCw5MC4wNjkyMTE0IEwxMTkuNzY2MDQ4LDEyMy4xMDE5MyBDMTE5Ljc2NjA0OCwxMzkuMTQ2MzkzIDEwNy4yOTUzMiwxNDguODIwMjYgOTMuNjQ4MTA4MSwxNDguODIwMjYgQzgwLjAwMDg5NjQsMTQ4LjgyMDI2IDY3LjUzMDE2ODQsMTM5LjE0NjM5MyA2Ny41MzAxNjg0LDEyMy4xMDE5MyBMNjcuNTMwMTY4NCw5MC4wNjkyMTE0IEw2Ny41MzAxNjg0LDkwLjA2OTIxMTQgWiIgaWQ9InBhdGg1NDQ3IiBmaWxsPSIjMDAwMDAwIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTc3LjE3ODQ1NiwxMDguNzA5MTAyIEMxNzMuODg0MzAxLDEwMy41MTgyNDcgMTY5LjE3ODM2Niw5OS45NzkwMjY4IDE2Mi4zNTQ3Niw5OS45NzkwMjY4IEMxNTEuNTMxMTEsOTkuOTc5MDI2OCAxNDMuNzY2MzE3LDEwOC4yMzcyMDYgMTQzLjc2NjMxNywxMTguNjE4OTE4IEMxNDMuNzY2MzE3LDEyOS4wMDA2MjkgMTUxLjUzMTExLDEzNy4yNTg4MDkgMTYyLjM1NDc2LDEzNy4yNTg4MDkgQzE2OS4xNzgzNjYsMTM3LjI1ODgwOSAxNzMuODg0MzAxLDEzMy45NTU1MzcgMTc3LjE3ODQ1NiwxMjguNzY0NjgxIEwxODguMDAyMTA2LDEzNS4xMzUyNzcgQzE4Mi44MjU1NzgsMTQzLjE1NzUwOCAxNzMuMTc4NDExLDE0OS4wNTYyMDggMTYyLjM1NDc2LDE0OS4wNTYyMDggQzE0Mi4zNTQ1MzYsMTQ5LjA1NjIwOCAxMzAuODI0OTk1LDEzMy45NTU1MzcgMTMwLjgyNDk5NSwxMTguODU0ODY2IEMxMzAuODI0OTk1LDEwMy43NTQxOTUgMTQyLjM1NDUzNiw4OC42NTM1MjM1IDE2Mi4zNTQ3Niw4OC42NTM1MjM1IEMxNzQuNTkwMTkxLDg4LjY1MzUyMzUgMTgyLjM1NDk4NCw5NC41NTIyMjMyIDE4OC4wMDIxMDYsMTAyLjU3NDQ1NSBMMTc3LjE3ODQ1NiwxMDguNzA5MTAyIEwxNzcuMTc4NDU2LDEwOC43MDkxMDIgWiIgaWQ9InBhdGg1NDQ5IiBmaWxsPSIjMDAwMDAwIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTk4LjM1NTE2NCw5MC4wNjkyMTE0IEwyMTAuNTkwNTk1LDkwLjA2OTIxMTQgTDIxMC41OTA1OTUsMTIyLjE1ODEzOCBDMjEwLjU5MDU5NSwxMzAuNjUyMjY1IDIxNi43MDgzMSwxMzYuNTUwOTY1IDIyNC40NzMxMDMsMTM2LjU1MDk2NSBDMjMyLjAwMjU5OSwxMzYuNTUwOTY1IDIzOC4zNTU2MTIsMTMwLjQxNjMxNyAyMzguMzU1NjEyLDEyMi4xNTgxMzggTDIzOC4zNTU2MTIsOTAuMDY5MjExNCBMMjUwLjU5MTA0Myw5MC4wNjkyMTE0IEwyNTAuNTkxMDQzLDEyMy4xMDE5MyBDMjUwLjU5MTA0MywxMzkuMTQ2MzkzIDIzOC4xMjAzMTUsMTQ4LjgyMDI2IDIyNC40NzMxMDMsMTQ4LjgyMDI2IEMyMTAuODI1ODkyLDE0OC44MjAyNiAxOTguMzU1MTY0LDEzOS4xNDYzOTMgMTk4LjM1NTE2NCwxMjMuMTAxOTMgTDE5OC4zNTUxNjQsOTAuMDY5MjExNCBMMTk4LjM1NTE2NCw5MC4wNjkyMTE0IFoiIGlkPSJwYXRoNTQ1MSIgZmlsbD0iIzAwMDAwMCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTI2NS44ODUzMzIsMTExLjU0MDQ3OCBDMjY1Ljg4NTMzMiw5Ni45MTE3MDMgMjc1LjUzMjQ5OSw4OC42NTM1MjM1IDI4Ni44MjY3NDMsODguNjUzNTIzNSBDMjk1LjUzMjcyMyw4OC42NTM1MjM1IDMwMS42NTA0MzksOTIuOTAwNTg3MiAzMDQuMDAzNDA2LDk4Ljc5OTI4NjkgTDMwNC4yMzg3MDMsOTguNzk5Mjg2OSBDMzA2LjU5MTY3LDkyLjY2NDYzOTMgMzEyLjcwOTM4Niw4OC42NTM1MjM1IDMyMS40MTUzNjYsODguNjUzNTIzNSBDMzMyLjcwOTYxLDg4LjY1MzUyMzUgMzQyLjM1Njc3Nyw5Ny4xNDc2NTEgMzQyLjM1Njc3NywxMTEuNTQwNDc4IEwzNDIuMzU2Nzc3LDE0Ny40MDQ1NzIgTDMzMC4xMjEzNDYsMTQ3LjQwNDU3MiBMMzMwLjEyMTM0NiwxMTEuNTQwNDc4IEMzMzAuMTIxMzQ2LDEwNC42OTc5ODcgMzI1Ljg4NjAwNCwxMDAuNjg2ODcxIDMyMC43MDk0NzYsMTAwLjY4Njg3MSBDMzE0LjgyNzA1NywxMDAuNjg2ODcxIDMxMC41OTE3MTUsMTA0LjIyNjA5MSAzMTAuNTkxNzE1LDExMy4xOTIxMTQgTDMxMC41OTE3MTUsMTQ3LjE2ODYyNCBMMjk4LjM1NjI4NCwxNDcuMTY4NjI0IEwyOTguMzU2Mjg0LDExMy4xOTIxMTQgQzI5OC4zNTYyODQsMTA0LjIyNjA5MSAyOTQuMTIwOTQyLDEwMC42ODY4NzEgMjg4LjIzODUyNCwxMDAuNjg2ODcxIEMyODMuMDYxOTk1LDEwMC42ODY4NzEgMjc4LjgyNjY1MywxMDQuNjk3OTg3IDI3OC44MjY2NTMsMTExLjU0MDQ3OCBMMjc4LjgyNjY1MywxNDcuMTY4NjI0IEwyNjUuODg1MzMyLDE0Ny4xNjg2MjQgTDI2NS44ODUzMzIsMTExLjU0MDQ3OCBMMjY1Ljg4NTMzMiwxMTEuNTQwNDc4IFoiIGlkPSJwYXRoNTQ1MyIgZmlsbD0iIzAwMDAwMCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTM1Ny40MTU3NjksNzMuMDgwOTU2NCBMMzY5LjY1MTIwMSw3My4wODA5NTY0IEwzNjkuNjUxMjAxLDk3LjE0NzY1MSBMMzY5Ljg4NjQ5Nyw5Ny4xNDc2NTEgQzM3Mi43MTAwNTgsOTIuNDI4NjkxMyAzODAuNDc0ODUxLDg4LjY1MzUyMzUgMzg4LjQ3NDk0MSw4OC42NTM1MjM1IEM0MDMuMjk4NjM2LDg4LjY1MzUyMzUgNDE4LjEyMjMzMiw5OS43NDMwNzg5IDQxOC4xMjIzMzIsMTE4Ljg1NDg2NiBDNDE4LjEyMjMzMiwxMzcuOTY2NjUzIDQwMy4yOTg2MzYsMTQ5LjA1NjIwOCAzODguNDc0OTQxLDE0OS4wNTYyMDggQzM4MC40NzQ4NTEsMTQ5LjA1NjIwOCAzNzIuNzEwMDU4LDE0NS4yODEwNCAzNjkuODg2NDk3LDE0MC41NjIwODEgTDM2OS42NTEyMDEsMTQwLjU2MjA4MSBMMzY5LjY1MTIwMSwxNDcuNjQwNTIgTDM1Ny40MTU3NjksMTQ3LjY0MDUyIEwzNTcuNDE1NzY5LDczLjA4MDk1NjQgTDM1Ny40MTU3NjksNzMuMDgwOTU2NCBaIE0zODcuMjk4NDU3LDEwMC4yMTQ5NzUgQzM3Ny4xODA2OTcsMTAwLjIxNDk3NSAzNjkuNjUxMjAxLDEwOC4yMzcyMDYgMzY5LjY1MTIwMSwxMTguODU0ODY2IEMzNjkuNjUxMjAxLDEyOS40NzI1MjUgMzc3LjE4MDY5NywxMzcuNDk0NzU3IDM4Ny4yOTg0NTcsMTM3LjQ5NDc1NyBDMzk3LjY1MTUxNCwxMzcuNDk0NzU3IDQwNS4xODEwMSwxMjkuNDcyNTI1IDQwNS4xODEwMSwxMTguODU0ODY2IEM0MDUuMTgxMDEsMTA4LjAwMTI1OCAzOTcuNjUxNTE0LDEwMC4yMTQ5NzUgMzg3LjI5ODQ1NywxMDAuMjE0OTc1IEwzODcuMjk4NDU3LDEwMC4yMTQ5NzUgWiIgaWQ9InBhdGg1NDU1IiBmaWxsPSIjMDAwMDAwIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNDg0LjAwNTQyMywxMzQuODk5MzI5IEM0NzcuMTgxODE3LDE0My42Mjk0MDQgNDY3Ljc2OTk0NywxNDguODIwMjYgNDU3LjQxNjg5LDE0OC44MjAyNiBDNDM3LjQxNjY2NiwxNDguODIwMjYgNDI1Ljg4NzEyNSwxMzMuNzE5NTg5IDQyNS44ODcxMjUsMTE4LjYxODkxOCBDNDI1Ljg4NzEyNSwxMDMuNTE4MjQ3IDQzNy42NTE5NjIsODguNjUzNTIzNSA0NTcuNDE2ODksODguNjUzNTIzNSBDNDY5LjE4MTcyNyw4OC42NTM1MjM1IDQ4Ny4wNjQyODEsOTguNTYzMzM4OSA0ODcuMDY0MjgxLDEyMC43NDI0NSBMNDg3LjA2NDI4MSwxMjIuODY1OTgyIEw0MzkuNzY5NjMzLDEyMi44NjU5ODIgQzQ0MC40NzU1MjMsMTMxLjU5NjA1NyA0NDguNzEwOTEsMTM3Ljk2NjY1MyA0NTcuMTgxNTkzLDEzNy45NjY2NTMgQzQ2My43Njk5MDIsMTM3Ljk2NjY1MyA0NjkuNDE3MDI0LDEzNC42NjMzODEgNDczLjY1MjM2NiwxMjkuMDAwNjI5IEw0ODQuMDA1NDIzLDEzNC44OTkzMjkgTDQ4NC4wMDU0MjMsMTM0Ljg5OTMyOSBaIE00NzIuNzExMTc5LDExMi43MjAyMTggQzQ3MC4xMjI5MTQsMTAzLjk5MDE0MyA0NjMuNzY5OTAyLDk5LjI3MTE4MjkgNDU1Ljc2OTgxMiw5OS4yNzExODI5IEM0NDguMDA1MDIsOTkuMjcxMTgyOSA0NDEuNjUyMDA3LDEwNC4yMjYwOTEgNDM5LjUzNDMzNiwxMTIuNzIwMjE4IEw0NzIuNzExMTc5LDExMi43MjAyMTggTDQ3Mi43MTExNzksMTEyLjcyMDIxOCBaIiBpZD0icGF0aDU0NTciIGZpbGw9IiMwMDAwMDAiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik01NjAuNDU4MjMzLDAuOTI3MTcwMTk3IEM1MzkuMTYyNjIxLDAuOTI3MTcwMTk3IDUyMS45MjgzODksMTguMjA5MTAxNyA1MjEuOTI4Mzg5LDM5LjU2MzY1MyBDNTIxLjkyODM4OSw1OC4zNjUwMjIgNTM1LjM2ODY1NCw3My45ODcwNjc0IDU1My4xMDUyMDksNzcuNDYyNzk4MyBMNTUzLjEwNTIwOSw4OC41MjI4NjAyIEM1NzYuMTY0NTEyLDg1LjAzNjcyNCA1OTYuNTgyMTMxLDY2LjY4MTQ2NDIgNTk4LjEwNTcxMyw0Mi41ODY3MzY2IEM1OTkuMDIyNzgyLDI4LjA4MzcyODggNTkxLjgxMTYzMSwxMy4yNzc5MTA3IDU3OS42NDk2MjQsNi4wODg1MzI0IEM1NzguOTUzMjk5LDUuNjc2OTExIDU3OC4yNDU4MzQsNS4yNjgyNzcxNiA1NzcuNTE3MjQ3LDQuOTA4NzkyNDcgQzU3Ni43NzQ4NDgsNC41NDI0OTMxMyA1NzYuMDEyNDk5LDQuMTg1NDkwMTQgNTc1LjIzNzgxLDMuODc2NTIwMDMgQzU3NC45OTE5MDEsMy43NzMzNjc4MiA1NzQuNzUwOTQ4LDMuNjc5NzkyMjYgNTc0LjUwMjUwOCwzLjU4MTU4NTA1IEM1NzMuODI1ODk1LDMuMzMxMTIyNzIgNTczLjE0MzE2OCwzLjA0OTA4MyA1NzIuNDQzNjYxLDIuODQ0MjQ3NTkgQzU2OC42NzM0MzgsMS41OTgxNDUxNiA1NjQuNjQzMTI2LDAuOTI3MTcwMTk3IDU2MC40NTgyMzMsMC45MjcxNzAxOTcgTDU2MC40NTgyMzMsMC45MjcxNzAxOTcgWiIgaWQ9InBhdGgzOTQzIiBmaWxsPSIjMDBBODE4Ij48L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNTY4LjM5OTQ5OCwxNS4yMzE1MTY5IEM1NjcuMDgxNDY5LDE1LjA5NjAzMDggNTY1LjY5MzU4NSwxNS41NTU5NDU0IDU2NC43MjI5ODYsMTYuNzA2MTkxOCBDNTY0LjAxNzA5NiwxNy42NDk5ODM3IDU2My41NzU5MTUsMTguNTY0MjgyMiA1NjMuMTA1MzIxLDE5LjUwODA3NDEgQzU2MS42OTM1NCwyMi44MTEzNDYgNTYyLjE2NDEzNCwyNi4zNTA1NjU4IDU2NC4yODE4MDUsMjguOTQ1OTkzNiBDNTY3LjU3NTk1OSwyOC4yMzgxNDk2IDU3MC4zNzAxMDgsMjYuMTI5MzY0NSA1NzEuNzgxODg5LDIyLjgyNjA5MjcgQzU3Mi4yNTI0ODIsMjEuODgyMzAwOCA1NzIuNTE3MTkxLDIwLjY3MzA2NzMgNTcyLjUxNzE5MSwxOS43MjkyNzU0IEM1NzIuNjY0MjUyLDE3LjIyMjMyOCA1NzAuNTk2MjE0LDE1LjQ1NzMyNjQgNTY4LjM5OTQ5OCwxNS4yMzE1MTY5IEw1NjguMzk5NDk4LDE1LjIzMTUxNjkgWiBNNTUxLjI2Njk1MywxNS40NTI3MTgxIEM1NDkuMTE4NDkxLDE1LjY1Nzc5MDIgNTQ3LjA3NTczLDE3LjM2OTc5NTUgNTQ3LjA3NTczLDE5LjcyOTI3NTQgQzU0Ny4wNzU3MywyMC42NzMwNjczIDU0Ny4zNDA0MzgsMjEuODgyMzAwOCA1NDcuODExMDMyLDIyLjgyNjA5MjcgQzU0OS4yMjI4MTMsMjYuMTI5MzY0NSA1NTIuMjM3NTUyLDI4LjIzODE0OTYgNTU1LjUzMTcwNywyOC45NDU5OTM2IEM1NTcuNDE0MDgxLDI2LjM1MDU2NTggNTU3Ljg5OTM4LDIyLjgxMTM0NiA1NTYuNDg3NiwxOS41MDgwNzQxIEM1NTYuMDE3MDA2LDE4LjU2NDI4MjIgNTU1LjU3NTgyNSwxNy42MzUyMzcgNTU0Ljg2OTkzNSwxNi45MjczOTMgQzU1My44OTkzMzUsMTUuNzc3MTQ2NiA1NTIuNTU2MDMxLDE1LjMyOTY3NSA1NTEuMjY2OTUzLDE1LjQ1MjcxODEgTDU1MS4yNjY5NTMsMTUuNDUyNzE4MSBaIE01MzkuNzIyNzA2LDI2LjgwNzcxNSBDNTM2LjAxMjMwMSwyNi45OTg2Njc3IDUzNC4zNTQ5OTksMzEuNjc0MTQyMiA1MzcuNDQzMjY5LDM0LjEwNzM1NTggQzUzOC4zODQ0NTYsMzQuODE1MTk5OCA1MzkuMjk2MjMxLDM1LjMzMTMzNiA1NDAuMjM3NDE4LDM1LjgwMzIzMiBDNTQzLjUzMTU3MiwzNy4yMTg5MTk5IDU0Ny4zNDA0MzgsMzYuNzMyMjc3MiA1NTAuMTY0LDM0Ljg0NDY5MzMgQzU0OS40NTgxMDksMzEuNzc3MzY5NCA1NDcuMDYxMDI0LDI4Ljk2MDc0MDQgNTQzLjc2Njg2OSwyNy41NDUwNTI0IEM1NDIuNTkwMzg1LDI3LjA3MzE1NjUgNTQxLjYzNDQ5MiwyNi44MDc3MTUgNTQwLjQ1ODAwOCwyNi44MDc3MTUgQzU0MC4xOTMzLDI2Ljc3ODIyMTUgNTM5Ljk3MDA2NiwyNi43OTQ5NzM4IDUzOS43MjI3MDYsMjYuODA3NzE1IEw1MzkuNzIyNzA2LDI2LjgwNzcxNSBaIE01NzUuOTczMTEyLDQxLjExMjA2MTcgQzU3My44MTc3NTYsNDEuMDcwNTgyIDU3MS42MzQ4MjgsNDEuNzAxOTMxNiA1NjkuODcwMTAzLDQyLjg4MTY3MTYgQzU3MC41NzU5OTMsNDUuOTQ4OTk1NCA1NzIuOTczMDc5LDQ4Ljc2NTYyNDUgNTc2LjI2NzIzMyw1MC4xODEzMTI0IEM1NzcuNDQzNzE3LDUwLjY1MzIwODQgNTc4LjM5OTYxLDUwLjkxODY0OTkgNTc5LjU3NjA5NCw1MC45MTg2NDk5IEM1ODMuODExNDM1LDUxLjE1NDU5NzggNTg1Ljg4NDk4OCw0NS45MDQ3NTUxIDU4Mi41OTA4MzMsNDMuNTQ1Mjc1MyBDNTgxLjY0OTY0Niw0Mi44Mzc0MzEzIDU4MC43Mzc4NzEsNDIuMzk1MDI4OCA1NzkuNzk2Njg0LDQxLjkyMzEzMjkgQzU3OC41NjEzNzcsNDEuMzkyMjQ5OSA1NzcuMjY2MzI0LDQxLjEzNjk0NzEgNTc1Ljk3MzExMiw0MS4xMTIwNjE3IEw1NzUuOTczMTEyLDQxLjExMjA2MTcgWiBNNTQzLjg0MDM5OSw0MS4zMzMyNjI5IEM1NDIuNTQ3MTg2LDQxLjM1ODE1NTQgNTQxLjI1MjEzNSw0MS42MTM0NTExIDU0MC4wMTY4MjcsNDIuMTQ0MzM0MSBDNTM4Ljg0MDM0Myw0Mi42MTYyMzAxIDUzNy45Mjg1NjgsNDMuMTMyMzY2MyA1MzcuMjIyNjc4LDQzLjg0MDIxMDMgQzUzNC4xNjM4Miw0Ni40MzU2MzgxIDUzNi4yMjI2NjcsNTEuMzc1Nzk5MSA1NDAuNDU4MDA4LDUxLjEzOTg1MTEgQzU0MS42MzQ0OTIsNTEuMTM5ODUxMSA1NDIuODI1NjgyLDUwLjg3NDQwOTYgNTQzLjc2Njg2OSw1MC40MDI1MTM2IEM1NDcuMDYxMDI0LDQ4Ljk4NjgyNTcgNTQ5LjM5OTI4NSw0Ni4xNzAxOTY2IDU0OS44Njk4NzksNDMuMTAyODcyOCBDNTQ4LjEwNTE1Myw0MS45MjMxMzI5IDU0NS45OTU3NTUsNDEuMjkxNzg4IDU0My44NDAzOTksNDEuMzMzMjYyOSBMNTQzLjg0MDM5OSw0MS4zMzMyNjI5IFogTTU1NS43NTIyOTcsNDguNTU5MTcgQzU1Mi40NTgxNDMsNDkuMjY3MDEzOSA1NDkuNjYzOTk0LDUxLjM3NTc5OTEgNTQ4LjI1MjIxMyw1NC42NzkwNzA5IEM1NDcuNzgxNjIsNTUuNjIyODYyOCA1NDcuNTE2OTExLDU2Ljc1ODM2MjUgNTQ3LjUxNjkxMSw1Ny43MDIxNTQ1IEM1NDcuMjgxNjE0LDYxLjcxMzI3MDIgNTUyLjczNzU1OCw2My44NjYyOTU2IDU1NS4wOTA1MjUsNjAuNzk4OTcxOCBDNTU1Ljc5NjQxNiw1OS44NTUxNzk4IDU1Ni4yMzc1OTcsNTguOTQwODgxNCA1NTYuNzA4MTksNTcuOTk3MDg5NSBDNTU4LjExOTk3MSw1NC45Mjk3NjU2IDU1Ny42MzQ2NzEsNTEuMzkwNTQ1OCA1NTUuNzUyMjk3LDQ4LjU1OTE3IEw1NTUuNzUyMjk3LDQ4LjU1OTE3IFogTTU2NC41MDIzOTUsNDguNzgwMzcxMiBDNTYyLjYyMDAyMSw1MS4zNzU3OTkxIDU2Mi4xMzQ3MjIsNTQuOTE1MDE4OSA1NjMuNTQ2NTAyLDU4LjIxODI5MDcgQzU2NC4wMTcwOTYsNTkuMTYyMDgyNiA1NjQuNDU4Mjc3LDYwLjA5MTEyNzggNTY1LjE2NDE2OCw2MC43OTg5NzE4IEM1NjcuNzUyNDMyLDYzLjYzMDM0NzYgNTczLjE5MzY2OSw2MS41MzYzMDkyIDU3Mi45NTgzNzMsNTcuOTk3MDg5NSBDNTcyLjk1ODM3Myw1Ny4wNTMyOTc1IDU3Mi42OTM2NjQsNTUuODQ0MDY0MSA1NzIuMjIzMDcsNTQuOTAwMjcyMSBDNTcwLjgxMTI5LDUxLjU5NzAwMDMgNTY3Ljc5NjU1LDQ5LjQ4ODIxNTIgNTY0LjUwMjM5NSw0OC43ODAzNzEyIEw1NjQuNTAyMzk1LDQ4Ljc4MDM3MTIgWiIgaWQ9InJlY3Q0MDA1IiBmaWxsPSIjRkZGRkZGIj48L3BhdGg+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg==" alt="" />
|
409 |
+
|
410 |
+
<h1>Plugins tests report</h1>
|
411 |
+
|
412 |
+
<h2 class="component"></h2>
|
413 |
+
</header>
|
414 |
+
<ul class="summary">
|
415 |
+
<li>2 Features</li>
|
416 |
+
<li>4 Scenarios</li>
|
417 |
+
<li> Steps</li>
|
418 |
+
<li class="passed print-hide">3 Passed scenarios</li>
|
419 |
+
<li class="failed print-hide">1 Failing scenarios</li>
|
420 |
+
<li class="passed print-hide"> Passed steps</li>
|
421 |
+
<li class="failed print-hide"> Failing steps</li>
|
422 |
+
<li class="skipped print-hide"> Skipped steps</li>
|
423 |
+
<li>Status <span class="failed">failed</span></li>
|
424 |
+
</ul>
|
425 |
+
|
426 |
+
<ul class="feature-list print-hide">
|
427 |
+
<li class="failed">
|
428 |
+
<a href="#F_tracker-message-flexible-shippping-tests" title="Tracker message Flexible Shippping tests">Tracker message Flexible Shippping tests</a>
|
429 |
+
<ul class="scenario-list">
|
430 |
+
<li class="failed"><a href="#S_tracker-message-flexible-shippping-tests;tracker-long-message-is-visible" title="Tracker long message is Visible">Tracker long message is Visible</a></li>
|
431 |
+
<li class="passed"><a href="#S_tracker-message-flexible-shippping-tests;tracker-message-is-visible" title="Tracker message is Visible">Tracker message is Visible</a></li>
|
432 |
+
</ul>
|
433 |
+
</li>
|
434 |
+
<li class="passed">
|
435 |
+
<a href="#F_activate-flexible-shipping-tests" title="Activate Flexible shipping tests">Activate Flexible shipping tests</a>
|
436 |
+
<ul class="scenario-list">
|
437 |
+
<li class="passed"><a href="#S_activate-flexible-shipping-tests;plugin-flexible-shipping-is-active" title="Plugin Flexible Shipping is active">Plugin Flexible Shipping is active</a></li>
|
438 |
+
<li class="passed"><a href="#S_activate-flexible-shipping-tests;plugin-flexible-shipping-is-inactive" title="Plugin Flexible Shipping is inactive">Plugin Flexible Shipping is inactive</a></li>
|
439 |
+
</ul>
|
440 |
+
</li>
|
441 |
+
</ul>
|
442 |
+
</aside><main class="report-container">
|
443 |
+
|
444 |
+
<!--
|
445 |
+
<div class="summary-table">
|
446 |
+
<table>
|
447 |
+
<tr class="main-header">
|
448 |
+
<th>Feature</th>
|
449 |
+
<th colspan="3">Scenarios</th>
|
450 |
+
<th colspan="4">Steps</th>
|
451 |
+
<th colspan="2"></th>
|
452 |
+
</tr>
|
453 |
+
<tr class="sub-header">
|
454 |
+
<th></th>
|
455 |
+
<th>Total</th>
|
456 |
+
<th>Passed</th>
|
457 |
+
<th>Failed</th>
|
458 |
+
<th>Total</th>
|
459 |
+
<th>Passed</th>
|
460 |
+
<th>Failed</th>
|
461 |
+
<th>Skipped</th>
|
462 |
+
<th>Duration</th>
|
463 |
+
<th>Status</th>
|
464 |
+
</tr>
|
465 |
+
|
466 |
+
<tr class="failed">
|
467 |
+
<td>Tracker message Flexible Shippping tests</td>
|
468 |
+
<td class="scenarios-all"></td>
|
469 |
+
<td class="scenarios-passed passed"></td>
|
470 |
+
<td class="scenarios-failed failed"></td>
|
471 |
+
<td class="steps-all"></td>
|
472 |
+
<td class="steps-passed passed"></td>
|
473 |
+
<td class="steps-failed failed"></td>
|
474 |
+
<td class="steps-skipped skipped"></td>
|
475 |
+
<td class="duration">6.04 s</td>
|
476 |
+
<td class="status">failed</td>
|
477 |
+
</tr>
|
478 |
+
<tr class="passed">
|
479 |
+
<td>Activate Flexible shipping tests</td>
|
480 |
+
<td class="scenarios-all"></td>
|
481 |
+
<td class="scenarios-passed passed"></td>
|
482 |
+
<td class="scenarios-failed failed"></td>
|
483 |
+
<td class="steps-all"></td>
|
484 |
+
<td class="steps-passed passed"></td>
|
485 |
+
<td class="steps-failed failed"></td>
|
486 |
+
<td class="steps-skipped skipped"></td>
|
487 |
+
<td class="duration">4.37 s</td>
|
488 |
+
<td class="status">passed</td>
|
489 |
+
</tr>
|
490 |
+
|
491 |
+
</table>
|
492 |
+
</div>
|
493 |
+
-->
|
494 |
+
|
495 |
+
<section class="report" id="F_tracker-message-flexible-shippping-tests">
|
496 |
+
<h2>Feature: Tracker message Flexible Shippping tests <span class="tags">@flexible-shipping</span></h2>
|
497 |
+
|
498 |
+
<p class="filename">/tmp/tests/test-acceptance/features/tests_scenario/flexible-shipping/trackerMessageIsVisibleWhenActivatePluginFlexibleShippingTest.feature</p>
|
499 |
+
|
500 |
+
<p class="story"></p>
|
501 |
+
<h3 id="S_tracker-message-flexible-shippping-tests;tracker-long-message-is-visible">
|
502 |
+
Scenario: Tracker long message is Visible
|
503 |
+
<span class="scenario-tag">@flexible-shipping</span>
|
504 |
+
</h3>
|
505 |
+
|
506 |
+
<table>
|
507 |
+
<tr class="header-row">
|
508 |
+
<th style="width: 100px;">Condition</th>
|
509 |
+
<th>Step</th>
|
510 |
+
<th style="width: 100px;">Line</th>
|
511 |
+
<th class="duration" style="width: 100px;">Duration</th>
|
512 |
+
<th style="width: 100px;">Status</th>
|
513 |
+
</tr>
|
514 |
+
|
515 |
+
<tr class="passed">
|
516 |
+
<td>Given </td>
|
517 |
+
<td>
|
518 |
+
user is logged in to wordPress
|
519 |
+
<table class="datatable">
|
520 |
+
<!-- -->
|
521 |
+
</table>
|
522 |
+
</td>
|
523 |
+
<td>5</td>
|
524 |
+
<td class="duration">0.32 s</td>
|
525 |
+
<td class="status">passed</td>
|
526 |
+
</tr>
|
527 |
+
|
528 |
+
<tr class="hidden passed">
|
529 |
+
<td class="trace" colspan="4">
|
530 |
+
<pre></pre>
|
531 |
+
</td>
|
532 |
+
<td class="screenshot-link" data-index="0"></td>
|
533 |
+
</tr>
|
534 |
+
<tr class="passed">
|
535 |
+
<td>And </td>
|
536 |
+
<td>
|
537 |
+
i resets the consent to collect data in the database
|
538 |
+
<table class="datatable">
|
539 |
+
<!-- -->
|
540 |
+
</table>
|
541 |
+
</td>
|
542 |
+
<td>6</td>
|
543 |
+
<td class="duration">0.02 s</td>
|
544 |
+
<td class="status">passed</td>
|
545 |
+
</tr>
|
546 |
+
|
547 |
+
<tr class="hidden passed">
|
548 |
+
<td class="trace" colspan="4">
|
549 |
+
<pre></pre>
|
550 |
+
</td>
|
551 |
+
<td class="screenshot-link" data-index="0"></td>
|
552 |
+
</tr>
|
553 |
+
<tr class="passed">
|
554 |
+
<td>When </td>
|
555 |
+
<td>
|
556 |
+
i open "menu-plugins" and activate plugin with slug "flexible-shipping"
|
557 |
+
<table class="datatable">
|
558 |
+
<!-- -->
|
559 |
+
</table>
|
560 |
+
</td>
|
561 |
+
<td>15</td>
|
562 |
+
<td class="duration">0.67 s</td>
|
563 |
+
<td class="status">passed</td>
|
564 |
+
</tr>
|
565 |
+
|
566 |
+
<tr class="hidden passed">
|
567 |
+
<td class="trace" colspan="4">
|
568 |
+
<pre></pre>
|
569 |
+
</td>
|
570 |
+
<td class="screenshot-link" data-index="0"></td>
|
571 |
+
</tr>
|
572 |
+
<tr class="passed">
|
573 |
+
<td>And </td>
|
574 |
+
<td>
|
575 |
+
Skip tracker message
|
576 |
+
<table class="datatable">
|
577 |
+
<!-- -->
|
578 |
+
</table>
|
579 |
+
</td>
|
580 |
+
<td>16</td>
|
581 |
+
<td class="duration">1.34 s</td>
|
582 |
+
<td class="status">passed</td>
|
583 |
+
</tr>
|
584 |
+
|
585 |
+
<tr class="hidden passed">
|
586 |
+
<td class="trace" colspan="4">
|
587 |
+
<pre></pre>
|
588 |
+
</td>
|
589 |
+
<td class="screenshot-link" data-index="0"></td>
|
590 |
+
</tr>
|
591 |
+
<tr class="passed">
|
592 |
+
<td>And </td>
|
593 |
+
<td>
|
594 |
+
i open menu "toplevel_page_woocommerce" and submenu "Settings" then open tab "Shipping"
|
595 |
+
<table class="datatable">
|
596 |
+
<!-- -->
|
597 |
+
</table>
|
598 |
+
</td>
|
599 |
+
<td>17</td>
|
600 |
+
<td class="duration">1.42 s</td>
|
601 |
+
<td class="status">passed</td>
|
602 |
+
</tr>
|
603 |
+
|
604 |
+
<tr class="hidden passed">
|
605 |
+
<td class="trace" colspan="4">
|
606 |
+
<pre></pre>
|
607 |
+
</td>
|
608 |
+
<td class="screenshot-link" data-index="0"></td>
|
609 |
+
</tr>
|
610 |
+
<tr class="failed">
|
611 |
+
<td>Then </td>
|
612 |
+
<td>
|
613 |
+
tracker message type "long" visible
|
614 |
+
<table class="datatable">
|
615 |
+
<!-- -->
|
616 |
+
</table>
|
617 |
+
</td>
|
618 |
+
<td>18</td>
|
619 |
+
<td class="duration">0.09 s</td>
|
620 |
+
<td class="status">failed</td>
|
621 |
+
</tr>
|
622 |
+
|
623 |
+
<tr class="hidden failed">
|
624 |
+
<td class="trace" colspan="4">
|
625 |
+
<pre>AssertionError: expected 'Hey admin,\nWe need your help to improve WP Desk plugins, so they are more useful for you and the rest of 30,000+ users. By collecting data on how you use our plugins, you will help us a lot. We will not collect any sensitive data, so you can feel safe. Find out more »\nAllow\nDismiss this notice.' to include '\nWe need your help to improve WP Desk plugins, so they are more useful for you and the rest of 18,000+ users. By collecting data on how you use our plugins, you will help us a lot. We will not collect any sensitive data, so you can feel safe. Find out more'</pre>
|
626 |
+
</td>
|
627 |
+
<td class="screenshot-link" data-index="0"></td>
|
628 |
+
</tr>
|
629 |
+
<tr class="skipped">
|
630 |
+
<td>And </td>
|
631 |
+
<td>
|
632 |
+
i open "menu-plugins" and deactivate plugin with slug "flexible-shipping"
|
633 |
+
<table class="datatable">
|
634 |
+
<!-- -->
|
635 |
+
</table>
|
636 |
+
</td>
|
637 |
+
<td>19</td>
|
638 |
+
<td class="duration"></td>
|
639 |
+
<td class="status">skipped</td>
|
640 |
+
</tr>
|
641 |
+
|
642 |
+
<tr class="hidden skipped">
|
643 |
+
<td class="trace" colspan="4">
|
644 |
+
<pre></pre>
|
645 |
+
</td>
|
646 |
+
<td class="screenshot-link" data-index="0"></td>
|
647 |
+
</tr>
|
648 |
+
|
649 |
+
</table>
|
650 |
+
|
651 |
+
|
652 |
+
|
653 |
+
<img src="tracker_long_message_is_visible-14-1.png" />
|
654 |
+
<h3 id="S_tracker-message-flexible-shippping-tests;tracker-message-is-visible">
|
655 |
+
Scenario: Tracker message is Visible
|
656 |
+
<span class="scenario-tag">@flexible-shipping</span>
|
657 |
+
</h3>
|
658 |
+
|
659 |
+
<table>
|
660 |
+
<tr class="header-row">
|
661 |
+
<th style="width: 100px;">Condition</th>
|
662 |
+
<th>Step</th>
|
663 |
+
<th style="width: 100px;">Line</th>
|
664 |
+
<th class="duration" style="width: 100px;">Duration</th>
|
665 |
+
<th style="width: 100px;">Status</th>
|
666 |
+
</tr>
|
667 |
+
|
668 |
+
<tr class="passed">
|
669 |
+
<td>Given </td>
|
670 |
+
<td>
|
671 |
+
user is logged in to wordPress
|
672 |
+
<table class="datatable">
|
673 |
+
<!-- -->
|
674 |
+
</table>
|
675 |
+
</td>
|
676 |
+
<td>5</td>
|
677 |
+
<td class="duration">0.27 s</td>
|
678 |
+
<td class="status">passed</td>
|
679 |
+
</tr>
|
680 |
+
|
681 |
+
<tr class="hidden passed">
|
682 |
+
<td class="trace" colspan="4">
|
683 |
+
<pre></pre>
|
684 |
+
</td>
|
685 |
+
<td class="screenshot-link" data-index="0"></td>
|
686 |
+
</tr>
|
687 |
+
<tr class="passed">
|
688 |
+
<td>And </td>
|
689 |
+
<td>
|
690 |
+
i resets the consent to collect data in the database
|
691 |
+
<table class="datatable">
|
692 |
+
<!-- -->
|
693 |
+
</table>
|
694 |
+
</td>
|
695 |
+
<td>6</td>
|
696 |
+
<td class="duration">0 s</td>
|
697 |
+
<td class="status">passed</td>
|
698 |
+
</tr>
|
699 |
+
|
700 |
+
<tr class="hidden passed">
|
701 |
+
<td class="trace" colspan="4">
|
702 |
+
<pre></pre>
|
703 |
+
</td>
|
704 |
+
<td class="screenshot-link" data-index="0"></td>
|
705 |
+
</tr>
|
706 |
+
<tr class="passed">
|
707 |
+
<td>When </td>
|
708 |
+
<td>
|
709 |
+
i open "menu-plugins" and activate plugin with slug "flexible-shipping"
|
710 |
+
<table class="datatable">
|
711 |
+
<!-- -->
|
712 |
+
</table>
|
713 |
+
</td>
|
714 |
+
<td>9</td>
|
715 |
+
<td class="duration">0.67 s</td>
|
716 |
+
<td class="status">passed</td>
|
717 |
+
</tr>
|
718 |
+
|
719 |
+
<tr class="hidden passed">
|
720 |
+
<td class="trace" colspan="4">
|
721 |
+
<pre></pre>
|
722 |
+
</td>
|
723 |
+
<td class="screenshot-link" data-index="0"></td>
|
724 |
+
</tr>
|
725 |
+
<tr class="passed">
|
726 |
+
<td>Then </td>
|
727 |
+
<td>
|
728 |
+
tracker message type "short" visible
|
729 |
+
<table class="datatable">
|
730 |
+
<!-- -->
|
731 |
+
</table>
|
732 |
+
</td>
|
733 |
+
<td>10</td>
|
734 |
+
<td class="duration">0.11 s</td>
|
735 |
+
<td class="status">passed</td>
|
736 |
+
</tr>
|
737 |
+
|
738 |
+
<tr class="hidden passed">
|
739 |
+
<td class="trace" colspan="4">
|
740 |
+
<pre></pre>
|
741 |
+
</td>
|
742 |
+
<td class="screenshot-link" data-index="0"></td>
|
743 |
+
</tr>
|
744 |
+
<tr class="passed">
|
745 |
+
<td>And </td>
|
746 |
+
<td>
|
747 |
+
Check if buttons skip and Allow & Continue visible in tracker message
|
748 |
+
<table class="datatable">
|
749 |
+
<!-- -->
|
750 |
+
</table>
|
751 |
+
</td>
|
752 |
+
<td>11</td>
|
753 |
+
<td class="duration">0.12 s</td>
|
754 |
+
<td class="status">passed</td>
|
755 |
+
</tr>
|
756 |
+
|
757 |
+
<tr class="hidden passed">
|
758 |
+
<td class="trace" colspan="4">
|
759 |
+
<pre></pre>
|
760 |
+
</td>
|
761 |
+
<td class="screenshot-link" data-index="0"></td>
|
762 |
+
</tr>
|
763 |
+
<tr class="passed">
|
764 |
+
<td>But </td>
|
765 |
+
<td>
|
766 |
+
i open "menu-plugins" and deactivate plugin with slug "flexible-shipping"
|
767 |
+
<table class="datatable">
|
768 |
+
<!-- -->
|
769 |
+
</table>
|
770 |
+
</td>
|
771 |
+
<td>12</td>
|
772 |
+
<td class="duration">1.02 s</td>
|
773 |
+
<td class="status">passed</td>
|
774 |
+
</tr>
|
775 |
+
|
776 |
+
<tr class="hidden passed">
|
777 |
+
<td class="trace" colspan="4">
|
778 |
+
<pre></pre>
|
779 |
+
</td>
|
780 |
+
<td class="screenshot-link" data-index="0"></td>
|
781 |
+
</tr>
|
782 |
+
|
783 |
+
</table>
|
784 |
+
|
785 |
+
|
786 |
+
|
787 |
+
|
788 |
+
</section>
|
789 |
+
<section class="report" id="F_activate-flexible-shipping-tests">
|
790 |
+
<h2>Feature: Activate Flexible shipping tests <span class="tags">@flexible-shipping</span></h2>
|
791 |
+
|
792 |
+
<p class="filename">/tmp/tests/test-acceptance/features/tests_scenario/flexible-shipping/activateAndDeactivateFlexibleShippingTests.feature</p>
|
793 |
+
|
794 |
+
<p class="story"></p>
|
795 |
+
<h3 id="S_activate-flexible-shipping-tests;plugin-flexible-shipping-is-active">
|
796 |
+
Scenario: Plugin Flexible Shipping is active
|
797 |
+
<span class="scenario-tag">@flexible-shipping</span>
|
798 |
+
</h3>
|
799 |
+
|
800 |
+
<table>
|
801 |
+
<tr class="header-row">
|
802 |
+
<th style="width: 100px;">Condition</th>
|
803 |
+
<th>Step</th>
|
804 |
+
<th style="width: 100px;">Line</th>
|
805 |
+
<th class="duration" style="width: 100px;">Duration</th>
|
806 |
+
<th style="width: 100px;">Status</th>
|
807 |
+
</tr>
|
808 |
+
|
809 |
+
<tr class="passed">
|
810 |
+
<td>Given </td>
|
811 |
+
<td>
|
812 |
+
user is logged in to wordPress
|
813 |
+
<table class="datatable">
|
814 |
+
<!-- -->
|
815 |
+
</table>
|
816 |
+
</td>
|
817 |
+
<td>5</td>
|
818 |
+
<td class="duration">0.28 s</td>
|
819 |
+
<td class="status">passed</td>
|
820 |
+
</tr>
|
821 |
+
|
822 |
+
<tr class="hidden passed">
|
823 |
+
<td class="trace" colspan="4">
|
824 |
+
<pre></pre>
|
825 |
+
</td>
|
826 |
+
<td class="screenshot-link" data-index="1"></td>
|
827 |
+
</tr>
|
828 |
+
<tr class="passed">
|
829 |
+
<td>And </td>
|
830 |
+
<td>
|
831 |
+
i resets the consent to collect data in the database
|
832 |
+
<table class="datatable">
|
833 |
+
<!-- -->
|
834 |
+
</table>
|
835 |
+
</td>
|
836 |
+
<td>6</td>
|
837 |
+
<td class="duration">0.03 s</td>
|
838 |
+
<td class="status">passed</td>
|
839 |
+
</tr>
|
840 |
+
|
841 |
+
<tr class="hidden passed">
|
842 |
+
<td class="trace" colspan="4">
|
843 |
+
<pre></pre>
|
844 |
+
</td>
|
845 |
+
<td class="screenshot-link" data-index="1"></td>
|
846 |
+
</tr>
|
847 |
+
<tr class="passed">
|
848 |
+
<td>When </td>
|
849 |
+
<td>
|
850 |
+
i open "menu-plugins" and activate plugin with slug "flexible-shipping"
|
851 |
+
<table class="datatable">
|
852 |
+
<!-- -->
|
853 |
+
</table>
|
854 |
+
</td>
|
855 |
+
<td>9</td>
|
856 |
+
<td class="duration">1.99 s</td>
|
857 |
+
<td class="status">passed</td>
|
858 |
+
</tr>
|
859 |
+
|
860 |
+
<tr class="hidden passed">
|
861 |
+
<td class="trace" colspan="4">
|
862 |
+
<pre></pre>
|
863 |
+
</td>
|
864 |
+
<td class="screenshot-link" data-index="1"></td>
|
865 |
+
</tr>
|
866 |
+
<tr class="passed">
|
867 |
+
<td>Then </td>
|
868 |
+
<td>
|
869 |
+
check if plugin with slug "flexible-shipping" is Active
|
870 |
+
<table class="datatable">
|
871 |
+
<!-- -->
|
872 |
+
</table>
|
873 |
+
</td>
|
874 |
+
<td>10</td>
|
875 |
+
<td class="duration">0.39 s</td>
|
876 |
+
<td class="status">passed</td>
|
877 |
+
</tr>
|
878 |
+
|
879 |
+
<tr class="hidden passed">
|
880 |
+
<td class="trace" colspan="4">
|
881 |
+
<pre></pre>
|
882 |
+
</td>
|
883 |
+
<td class="screenshot-link" data-index="1"></td>
|
884 |
+
</tr>
|
885 |
+
|
886 |
+
</table>
|
887 |
+
|
888 |
+
|
889 |
+
|
890 |
+
|
891 |
+
<h3 id="S_activate-flexible-shipping-tests;plugin-flexible-shipping-is-inactive">
|
892 |
+
Scenario: Plugin Flexible Shipping is inactive
|
893 |
+
<span class="scenario-tag">@flexible-shipping</span>
|
894 |
+
</h3>
|
895 |
+
|
896 |
+
<table>
|
897 |
+
<tr class="header-row">
|
898 |
+
<th style="width: 100px;">Condition</th>
|
899 |
+
<th>Step</th>
|
900 |
+
<th style="width: 100px;">Line</th>
|
901 |
+
<th class="duration" style="width: 100px;">Duration</th>
|
902 |
+
<th style="width: 100px;">Status</th>
|
903 |
+
</tr>
|
904 |
+
|
905 |
+
<tr class="passed">
|
906 |
+
<td>Given </td>
|
907 |
+
<td>
|
908 |
+
user is logged in to wordPress
|
909 |
+
<table class="datatable">
|
910 |
+
<!-- -->
|
911 |
+
</table>
|
912 |
+
</td>
|
913 |
+
<td>5</td>
|
914 |
+
<td class="duration">0.28 s</td>
|
915 |
+
<td class="status">passed</td>
|
916 |
+
</tr>
|
917 |
+
|
918 |
+
<tr class="hidden passed">
|
919 |
+
<td class="trace" colspan="4">
|
920 |
+
<pre></pre>
|
921 |
+
</td>
|
922 |
+
<td class="screenshot-link" data-index="1"></td>
|
923 |
+
</tr>
|
924 |
+
<tr class="passed">
|
925 |
+
<td>And </td>
|
926 |
+
<td>
|
927 |
+
i resets the consent to collect data in the database
|
928 |
+
<table class="datatable">
|
929 |
+
<!-- -->
|
930 |
+
</table>
|
931 |
+
</td>
|
932 |
+
<td>6</td>
|
933 |
+
<td class="duration">0.02 s</td>
|
934 |
+
<td class="status">passed</td>
|
935 |
+
</tr>
|
936 |
+
|
937 |
+
<tr class="hidden passed">
|
938 |
+
<td class="trace" colspan="4">
|
939 |
+
<pre></pre>
|
940 |
+
</td>
|
941 |
+
<td class="screenshot-link" data-index="1"></td>
|
942 |
+
</tr>
|
943 |
+
<tr class="passed">
|
944 |
+
<td>When </td>
|
945 |
+
<td>
|
946 |
+
i open "menu-plugins" and deactivate plugin with slug "flexible-shipping"
|
947 |
+
<table class="datatable">
|
948 |
+
<!-- -->
|
949 |
+
</table>
|
950 |
+
</td>
|
951 |
+
<td>13</td>
|
952 |
+
<td class="duration">1.01 s</td>
|
953 |
+
<td class="status">passed</td>
|
954 |
+
</tr>
|
955 |
+
|
956 |
+
<tr class="hidden passed">
|
957 |
+
<td class="trace" colspan="4">
|
958 |
+
<pre></pre>
|
959 |
+
</td>
|
960 |
+
<td class="screenshot-link" data-index="1"></td>
|
961 |
+
</tr>
|
962 |
+
<tr class="passed">
|
963 |
+
<td>Then </td>
|
964 |
+
<td>
|
965 |
+
check if plugin with slug "flexible-shipping" is Inactive
|
966 |
+
<table class="datatable">
|
967 |
+
<!-- -->
|
968 |
+
</table>
|
969 |
+
</td>
|
970 |
+
<td>14</td>
|
971 |
+
<td class="duration">0.36 s</td>
|
972 |
+
<td class="status">passed</td>
|
973 |
+
</tr>
|
974 |
+
|
975 |
+
<tr class="hidden passed">
|
976 |
+
<td class="trace" colspan="4">
|
977 |
+
<pre></pre>
|
978 |
+
</td>
|
979 |
+
<td class="screenshot-link" data-index="1"></td>
|
980 |
+
</tr>
|
981 |
+
|
982 |
+
</table>
|
983 |
+
|
984 |
+
|
985 |
+
|
986 |
+
|
987 |
+
</section>
|
988 |
+
|
989 |
+
<section class="report">
|
990 |
+
<h2>Tags statistics</h2>
|
991 |
+
|
992 |
+
<div class="summary-table">
|
993 |
+
<table>
|
994 |
+
<tr class="main-header">
|
995 |
+
<th>Tags</th>
|
996 |
+
<th colspan="3">Scenarios</th>
|
997 |
+
<th colspan="4">Steps</th>
|
998 |
+
<th colspan="2"></th>
|
999 |
+
</tr>
|
1000 |
+
<tr class="sub-header">
|
1001 |
+
<th></th>
|
1002 |
+
<th>Total</th>
|
1003 |
+
<th>Passed</th>
|
1004 |
+
<th>Failed</th>
|
1005 |
+
<th>Total</th>
|
1006 |
+
<th>Passed</th>
|
1007 |
+
<th>Failed</th>
|
1008 |
+
<th>Skipped</th>
|
1009 |
+
<th>Duration</th>
|
1010 |
+
<th>Status</th>
|
1011 |
+
</tr>
|
1012 |
+
|
1013 |
+
<tr class="failed">
|
1014 |
+
<td>@flexible-shipping</td>
|
1015 |
+
<td class="scenarios-all">4</td>
|
1016 |
+
<td class="scenarios-passed passed">3</td>
|
1017 |
+
<td class="scenarios-failed failed">1</td>
|
1018 |
+
<td class="steps-all">21</td>
|
1019 |
+
<td class="steps-passed passed">19</td>
|
1020 |
+
<td class="steps-failed failed">1</td>
|
1021 |
+
<td class="steps-skipped skipped">1</td>
|
1022 |
+
<td class="duration">10.41 s</td>
|
1023 |
+
<td class="status">failed</td>
|
1024 |
+
</tr>
|
1025 |
+
|
1026 |
+
</table>
|
1027 |
+
</div>
|
1028 |
+
</section>
|
1029 |
+
</main>
|
1030 |
+
|
1031 |
+
<div class="screenshots">
|
1032 |
+
</div>
|
1033 |
+
<div class="footer">
|
1034 |
+
<p><a href="https://github.com/leinonen/cucumber-html-report">Cucumber HTML Report Generator</a> by <a
|
1035 |
+
href="http://leinonen.se">Peter Leinonen</a> 2016.</p>
|
1036 |
+
</div>
|
1037 |
+
|
1038 |
+
<script>
|
1039 |
+
(function() {
|
1040 |
+
"use strict";
|
1041 |
+
|
1042 |
+
// Thanks to http://stackoverflow.com/questions/400212/how-do-i-copy-to-the-clipboard-in-javascript/30810322#30810322
|
1043 |
+
function copyTextToClipboard(text) {
|
1044 |
+
// Puts the supplied text into a hidden text area to select it and copy it the clipboard
|
1045 |
+
var textArea = document.createElement("textarea");
|
1046 |
+
textArea.class = "copy-to-clipboard";
|
1047 |
+
textArea.value = text;
|
1048 |
+
document.body.appendChild(textArea);
|
1049 |
+
textArea.select();
|
1050 |
+
try {
|
1051 |
+
document.execCommand("copy");
|
1052 |
+
} finally {
|
1053 |
+
document.body.removeChild(textArea);
|
1054 |
+
}
|
1055 |
+
}
|
1056 |
+
|
1057 |
+
var failed = document.getElementsByClassName("failed");
|
1058 |
+
for (var i = 0; i < failed.length; i += 1) {
|
1059 |
+
if (failed[i].className === "failed" && !failed[i].classList.contains("hidden")) {
|
1060 |
+
failed[i].addEventListener("click", (function(i) {
|
1061 |
+
return function() {
|
1062 |
+
if (failed[i].nextElementSibling.classList.contains("hidden")) {
|
1063 |
+
failed[i].nextElementSibling.classList.remove("hidden");
|
1064 |
+
} else {
|
1065 |
+
failed[i].nextElementSibling.classList.add("hidden");
|
1066 |
+
}
|
1067 |
+
copyTextToClipboard(failed[i].nextElementSibling.textContent);
|
1068 |
+
}
|
1069 |
+
})(i));
|
1070 |
+
}
|
1071 |
+
else if (failed[i].classList.contains("hidden")) {
|
1072 |
+
var children = failed[i].children;
|
1073 |
+
Array.prototype.filter.call(children, function(child) {
|
1074 |
+
return child.classList.contains("trace");
|
1075 |
+
})[0].addEventListener("click", (function(i) {
|
1076 |
+
return function() {
|
1077 |
+
if (failed[i].classList.contains("hidden")) {
|
1078 |
+
failed[i].classList.remove("hidden");
|
1079 |
+
} else {
|
1080 |
+
failed[i].classList.add("hidden");
|
1081 |
+
}
|
1082 |
+
}
|
1083 |
+
})(i));
|
1084 |
+
}
|
1085 |
+
}
|
1086 |
+
})(window);
|
1087 |
+
|
1088 |
+
/**
|
1089 |
+
* Rouds a number to the supplied decimals. Only makes sense for floats!
|
1090 |
+
* @param number The number to round
|
1091 |
+
* @param decimals The maximum number of decimals expected.
|
1092 |
+
* @returns {number} The rounded number. Always returns a float!
|
1093 |
+
*/
|
1094 |
+
var round = function(number, decimals) {
|
1095 |
+
return Math.round(number * Math.pow(10, decimals)) / parseFloat(Math.pow(10, decimals));
|
1096 |
+
};
|
1097 |
+
|
1098 |
+
|
1099 |
+
document.addEventListener("DOMContentLoaded", function() {
|
1100 |
+
var screenshotLinks = document.getElementsByClassName("screenshot-link");
|
1101 |
+
Array.prototype.forEach.call(screenshotLinks, function(failure) {
|
1102 |
+
var index = failure.getAttribute("data-index");
|
1103 |
+
var href = JSON.parse(failure.getAttribute("data-features"))[index].replace(/\s/g, "_");
|
1104 |
+
failure.innerHTML = "<a href='#" + href + "'>Screenshot</a>"
|
1105 |
+
});
|
1106 |
+
});
|
1107 |
+
</script></body>
|
acceptance/reports/html/screenshot/After_2468.png
ADDED
Binary file
|
acceptance/reports/html/screenshot/screenShot1.png
ADDED
Binary file
|
acceptance/reports/html/screenshot/screenShot2.png
ADDED
Binary file
|
acceptance/reports/html/screenshot/screenShot3.png
ADDED
Binary file
|
acceptance/reports/html/screenshot/screenShot4.png
ADDED
Binary file
|
acceptance/reports/html/tracker_long_message_is_visible-14-1.png
ADDED
Binary file
|
acceptance/reports/json/cucumber_report.json
ADDED
@@ -0,0 +1,467 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
[
|
2 |
+
{
|
3 |
+
"elements": [
|
4 |
+
{
|
5 |
+
"id": "activate-flexible-shipping-tests;plugin-flexible-shipping-is-active",
|
6 |
+
"keyword": "Scenario",
|
7 |
+
"line": 8,
|
8 |
+
"name": "Plugin Flexible Shipping is active",
|
9 |
+
"steps": [
|
10 |
+
{
|
11 |
+
"arguments": [],
|
12 |
+
"keyword": "Before ",
|
13 |
+
"result": {
|
14 |
+
"status": "passed",
|
15 |
+
"duration": 3599406680
|
16 |
+
},
|
17 |
+
"hidden": true,
|
18 |
+
"match": {
|
19 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/common.js:21"
|
20 |
+
}
|
21 |
+
},
|
22 |
+
{
|
23 |
+
"arguments": [],
|
24 |
+
"keyword": "Given ",
|
25 |
+
"name": "user is logged in to wordPress",
|
26 |
+
"result": {
|
27 |
+
"status": "passed",
|
28 |
+
"duration": 282314689
|
29 |
+
},
|
30 |
+
"line": 5,
|
31 |
+
"match": {
|
32 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/commonResults.js:9"
|
33 |
+
}
|
34 |
+
},
|
35 |
+
{
|
36 |
+
"arguments": [],
|
37 |
+
"keyword": "And ",
|
38 |
+
"name": "i resets the consent to collect data in the database",
|
39 |
+
"result": {
|
40 |
+
"status": "passed",
|
41 |
+
"duration": 34143651
|
42 |
+
},
|
43 |
+
"line": 6,
|
44 |
+
"match": {
|
45 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/wpdesk-helper/wpdeskHelperSettingsSteps.js:11"
|
46 |
+
}
|
47 |
+
},
|
48 |
+
{
|
49 |
+
"arguments": [],
|
50 |
+
"keyword": "When ",
|
51 |
+
"name": "i open \"menu-plugins\" and activate plugin with slug \"flexible-shipping\"",
|
52 |
+
"result": {
|
53 |
+
"status": "passed",
|
54 |
+
"duration": 1994588779
|
55 |
+
},
|
56 |
+
"line": 9,
|
57 |
+
"match": {
|
58 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/plugins/pluginsSteps.js:9"
|
59 |
+
}
|
60 |
+
},
|
61 |
+
{
|
62 |
+
"arguments": [],
|
63 |
+
"keyword": "Then ",
|
64 |
+
"name": "check if plugin with slug \"flexible-shipping\" is Active",
|
65 |
+
"result": {
|
66 |
+
"status": "passed",
|
67 |
+
"duration": 393258709
|
68 |
+
},
|
69 |
+
"line": 10,
|
70 |
+
"match": {
|
71 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/plugins/pluginsSteps.js:13"
|
72 |
+
}
|
73 |
+
},
|
74 |
+
{
|
75 |
+
"arguments": [],
|
76 |
+
"keyword": "After ",
|
77 |
+
"result": {
|
78 |
+
"status": "passed",
|
79 |
+
"duration": 2005638388
|
80 |
+
},
|
81 |
+
"hidden": true,
|
82 |
+
"match": {
|
83 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/common.js:35"
|
84 |
+
}
|
85 |
+
}
|
86 |
+
],
|
87 |
+
"tags": [
|
88 |
+
{
|
89 |
+
"name": "@flexible-shipping",
|
90 |
+
"line": 1
|
91 |
+
}
|
92 |
+
],
|
93 |
+
"type": "scenario"
|
94 |
+
},
|
95 |
+
{
|
96 |
+
"id": "activate-flexible-shipping-tests;plugin-flexible-shipping-is-inactive",
|
97 |
+
"keyword": "Scenario",
|
98 |
+
"line": 12,
|
99 |
+
"name": "Plugin Flexible Shipping is inactive",
|
100 |
+
"steps": [
|
101 |
+
{
|
102 |
+
"arguments": [],
|
103 |
+
"keyword": "Before ",
|
104 |
+
"result": {
|
105 |
+
"status": "passed",
|
106 |
+
"duration": 866650920
|
107 |
+
},
|
108 |
+
"hidden": true,
|
109 |
+
"match": {
|
110 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/common.js:21"
|
111 |
+
}
|
112 |
+
},
|
113 |
+
{
|
114 |
+
"arguments": [],
|
115 |
+
"keyword": "Given ",
|
116 |
+
"name": "user is logged in to wordPress",
|
117 |
+
"result": {
|
118 |
+
"status": "passed",
|
119 |
+
"duration": 283896978
|
120 |
+
},
|
121 |
+
"line": 5,
|
122 |
+
"match": {
|
123 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/commonResults.js:9"
|
124 |
+
}
|
125 |
+
},
|
126 |
+
{
|
127 |
+
"arguments": [],
|
128 |
+
"keyword": "And ",
|
129 |
+
"name": "i resets the consent to collect data in the database",
|
130 |
+
"result": {
|
131 |
+
"status": "passed",
|
132 |
+
"duration": 20358313
|
133 |
+
},
|
134 |
+
"line": 6,
|
135 |
+
"match": {
|
136 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/wpdesk-helper/wpdeskHelperSettingsSteps.js:11"
|
137 |
+
}
|
138 |
+
},
|
139 |
+
{
|
140 |
+
"arguments": [],
|
141 |
+
"keyword": "When ",
|
142 |
+
"name": "i open \"menu-plugins\" and deactivate plugin with slug \"flexible-shipping\"",
|
143 |
+
"result": {
|
144 |
+
"status": "passed",
|
145 |
+
"duration": 1006091149
|
146 |
+
},
|
147 |
+
"line": 13,
|
148 |
+
"match": {
|
149 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/plugins/pluginsSteps.js:17"
|
150 |
+
}
|
151 |
+
},
|
152 |
+
{
|
153 |
+
"arguments": [],
|
154 |
+
"keyword": "Then ",
|
155 |
+
"name": "check if plugin with slug \"flexible-shipping\" is Inactive",
|
156 |
+
"result": {
|
157 |
+
"status": "passed",
|
158 |
+
"duration": 358107833
|
159 |
+
},
|
160 |
+
"line": 14,
|
161 |
+
"match": {
|
162 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/plugins/pluginsSteps.js:21"
|
163 |
+
}
|
164 |
+
},
|
165 |
+
{
|
166 |
+
"arguments": [],
|
167 |
+
"keyword": "After ",
|
168 |
+
"result": {
|
169 |
+
"status": "passed",
|
170 |
+
"duration": 1947716328
|
171 |
+
},
|
172 |
+
"hidden": true,
|
173 |
+
"match": {
|
174 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/common.js:35"
|
175 |
+
}
|
176 |
+
}
|
177 |
+
],
|
178 |
+
"tags": [
|
179 |
+
{
|
180 |
+
"name": "@flexible-shipping",
|
181 |
+
"line": 1
|
182 |
+
}
|
183 |
+
],
|
184 |
+
"type": "scenario"
|
185 |
+
}
|
186 |
+
],
|
187 |
+
"id": "activate-flexible-shipping-tests",
|
188 |
+
"keyword": "Feature",
|
189 |
+
"line": 2,
|
190 |
+
"name": "Activate Flexible shipping tests",
|
191 |
+
"tags": [
|
192 |
+
{
|
193 |
+
"name": "@flexible-shipping",
|
194 |
+
"line": 1
|
195 |
+
}
|
196 |
+
],
|
197 |
+
"uri": "/tmp/tests/test-acceptance/features/tests_scenario/flexible-shipping/activateAndDeactivateFlexibleShippingTests.feature"
|
198 |
+
},
|
199 |
+
{
|
200 |
+
"elements": [
|
201 |
+
{
|
202 |
+
"id": "tracker-message-flexible-shippping-tests;tracker-message-is-visible",
|
203 |
+
"keyword": "Scenario",
|
204 |
+
"line": 8,
|
205 |
+
"name": "Tracker message is Visible",
|
206 |
+
"steps": [
|
207 |
+
{
|
208 |
+
"arguments": [],
|
209 |
+
"keyword": "Before ",
|
210 |
+
"result": {
|
211 |
+
"status": "passed",
|
212 |
+
"duration": 1062553304
|
213 |
+
},
|
214 |
+
"hidden": true,
|
215 |
+
"match": {
|
216 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/common.js:21"
|
217 |
+
}
|
218 |
+
},
|
219 |
+
{
|
220 |
+
"arguments": [],
|
221 |
+
"keyword": "Given ",
|
222 |
+
"name": "user is logged in to wordPress",
|
223 |
+
"result": {
|
224 |
+
"status": "passed",
|
225 |
+
"duration": 266135692
|
226 |
+
},
|
227 |
+
"line": 5,
|
228 |
+
"match": {
|
229 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/commonResults.js:9"
|
230 |
+
}
|
231 |
+
},
|
232 |
+
{
|
233 |
+
"arguments": [],
|
234 |
+
"keyword": "And ",
|
235 |
+
"name": "i resets the consent to collect data in the database",
|
236 |
+
"result": {
|
237 |
+
"status": "passed",
|
238 |
+
"duration": 908454
|
239 |
+
},
|
240 |
+
"line": 6,
|
241 |
+
"match": {
|
242 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/wpdesk-helper/wpdeskHelperSettingsSteps.js:11"
|
243 |
+
}
|
244 |
+
},
|
245 |
+
{
|
246 |
+
"arguments": [],
|
247 |
+
"keyword": "When ",
|
248 |
+
"name": "i open \"menu-plugins\" and activate plugin with slug \"flexible-shipping\"",
|
249 |
+
"result": {
|
250 |
+
"status": "passed",
|
251 |
+
"duration": 666316716
|
252 |
+
},
|
253 |
+
"line": 9,
|
254 |
+
"match": {
|
255 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/plugins/pluginsSteps.js:9"
|
256 |
+
}
|
257 |
+
},
|
258 |
+
{
|
259 |
+
"arguments": [],
|
260 |
+
"keyword": "Then ",
|
261 |
+
"name": "tracker message type \"short\" visible",
|
262 |
+
"result": {
|
263 |
+
"status": "passed",
|
264 |
+
"duration": 107457293
|
265 |
+
},
|
266 |
+
"line": 10,
|
267 |
+
"match": {
|
268 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/tracker/trackerResults.js:4"
|
269 |
+
}
|
270 |
+
},
|
271 |
+
{
|
272 |
+
"arguments": [],
|
273 |
+
"keyword": "And ",
|
274 |
+
"name": "Check if buttons skip and Allow & Continue visible in tracker message",
|
275 |
+
"result": {
|
276 |
+
"status": "passed",
|
277 |
+
"duration": 122730481
|
278 |
+
},
|
279 |
+
"line": 11,
|
280 |
+
"match": {
|
281 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/tracker/trackerResults.js:8"
|
282 |
+
}
|
283 |
+
},
|
284 |
+
{
|
285 |
+
"arguments": [],
|
286 |
+
"keyword": "But ",
|
287 |
+
"name": "i open \"menu-plugins\" and deactivate plugin with slug \"flexible-shipping\"",
|
288 |
+
"result": {
|
289 |
+
"status": "passed",
|
290 |
+
"duration": 1024714441
|
291 |
+
},
|
292 |
+
"line": 12,
|
293 |
+
"match": {
|
294 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/plugins/pluginsSteps.js:17"
|
295 |
+
}
|
296 |
+
},
|
297 |
+
{
|
298 |
+
"arguments": [],
|
299 |
+
"keyword": "After ",
|
300 |
+
"result": {
|
301 |
+
"status": "passed",
|
302 |
+
"duration": 1970986080
|
303 |
+
},
|
304 |
+
"hidden": true,
|
305 |
+
"match": {
|
306 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/common.js:35"
|
307 |
+
}
|
308 |
+
}
|
309 |
+
],
|
310 |
+
"tags": [
|
311 |
+
{
|
312 |
+
"name": "@flexible-shipping",
|
313 |
+
"line": 1
|
314 |
+
}
|
315 |
+
],
|
316 |
+
"type": "scenario"
|
317 |
+
},
|
318 |
+
{
|
319 |
+
"id": "tracker-message-flexible-shippping-tests;tracker-long-message-is-visible",
|
320 |
+
"keyword": "Scenario",
|
321 |
+
"line": 14,
|
322 |
+
"name": "Tracker long message is Visible",
|
323 |
+
"steps": [
|
324 |
+
{
|
325 |
+
"arguments": [],
|
326 |
+
"keyword": "Before ",
|
327 |
+
"result": {
|
328 |
+
"status": "passed",
|
329 |
+
"duration": 916184383
|
330 |
+
},
|
331 |
+
"hidden": true,
|
332 |
+
"match": {
|
333 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/common.js:21"
|
334 |
+
}
|
335 |
+
},
|
336 |
+
{
|
337 |
+
"arguments": [],
|
338 |
+
"keyword": "Given ",
|
339 |
+
"name": "user is logged in to wordPress",
|
340 |
+
"result": {
|
341 |
+
"status": "passed",
|
342 |
+
"duration": 317356268
|
343 |
+
},
|
344 |
+
"line": 5,
|
345 |
+
"match": {
|
346 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/commonResults.js:9"
|
347 |
+
}
|
348 |
+
},
|
349 |
+
{
|
350 |
+
"arguments": [],
|
351 |
+
"keyword": "And ",
|
352 |
+
"name": "i resets the consent to collect data in the database",
|
353 |
+
"result": {
|
354 |
+
"status": "passed",
|
355 |
+
"duration": 21112418
|
356 |
+
},
|
357 |
+
"line": 6,
|
358 |
+
"match": {
|
359 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/wpdesk-helper/wpdeskHelperSettingsSteps.js:11"
|
360 |
+
}
|
361 |
+
},
|
362 |
+
{
|
363 |
+
"arguments": [],
|
364 |
+
"keyword": "When ",
|
365 |
+
"name": "i open \"menu-plugins\" and activate plugin with slug \"flexible-shipping\"",
|
366 |
+
"result": {
|
367 |
+
"status": "passed",
|
368 |
+
"duration": 667289657
|
369 |
+
},
|
370 |
+
"line": 15,
|
371 |
+
"match": {
|
372 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/plugins/pluginsSteps.js:9"
|
373 |
+
}
|
374 |
+
},
|
375 |
+
{
|
376 |
+
"arguments": [],
|
377 |
+
"keyword": "And ",
|
378 |
+
"name": "Skip tracker message",
|
379 |
+
"result": {
|
380 |
+
"status": "passed",
|
381 |
+
"duration": 1339171885
|
382 |
+
},
|
383 |
+
"line": 16,
|
384 |
+
"match": {
|
385 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/tracker/trackerMessageSteps.js:4"
|
386 |
+
}
|
387 |
+
},
|
388 |
+
{
|
389 |
+
"arguments": [],
|
390 |
+
"keyword": "And ",
|
391 |
+
"name": "i open menu \"toplevel_page_woocommerce\" and submenu \"Settings\" then open tab \"Shipping\"",
|
392 |
+
"result": {
|
393 |
+
"status": "passed",
|
394 |
+
"duration": 1418840471
|
395 |
+
},
|
396 |
+
"line": 17,
|
397 |
+
"match": {
|
398 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/menu/menuSteps.js:23"
|
399 |
+
}
|
400 |
+
},
|
401 |
+
{
|
402 |
+
"arguments": [],
|
403 |
+
"keyword": "Then ",
|
404 |
+
"name": "tracker message type \"long\" visible",
|
405 |
+
"result": {
|
406 |
+
"status": "failed",
|
407 |
+
"duration": 88741344,
|
408 |
+
"error_message": "AssertionError: expected 'Hey admin,\\nWe need your help to improve WP Desk plugins, so they are more useful for you and the rest of 30,000+ users. By collecting data on how you use our plugins, you will help us a lot. We will not collect any sensitive data, so you can feel safe. Find out more »\\nAllow\\nDismiss this notice.' to include '\\nWe need your help to improve WP Desk plugins, so they are more useful for you and the rest of 18,000+ users. By collecting data on how you use our plugins, you will help us a lot. We will not collect any sensitive data, so you can feel safe. Find out more'"
|
409 |
+
},
|
410 |
+
"line": 18,
|
411 |
+
"match": {
|
412 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/tracker/trackerResults.js:4"
|
413 |
+
}
|
414 |
+
},
|
415 |
+
{
|
416 |
+
"arguments": [],
|
417 |
+
"keyword": "And ",
|
418 |
+
"name": "i open \"menu-plugins\" and deactivate plugin with slug \"flexible-shipping\"",
|
419 |
+
"result": {
|
420 |
+
"status": "skipped"
|
421 |
+
},
|
422 |
+
"line": 19,
|
423 |
+
"match": {
|
424 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/plugins/pluginsSteps.js:17"
|
425 |
+
}
|
426 |
+
},
|
427 |
+
{
|
428 |
+
"arguments": [],
|
429 |
+
"keyword": "After ",
|
430 |
+
"result": {
|
431 |
+
"status": "passed",
|
432 |
+
"duration": 2161554779
|
433 |
+
},
|
434 |
+
"hidden": true,
|
435 |
+
"embeddings": [
|
436 |
+
{
|
437 |
+
"data": "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48aNq5d+apoCuk4JYAB7e3s6depImzZtad6sOW7ubthsNvLy8jlzJoEjR44QHRODtbT0kgIXEREREREREREREREREZG6qXMCWERERERERERERERERERErk7mhg5ARERERERERERERERERETqhxLAIiIiIiIiIiIiIiIiIiLXCSWARURERERERERERERERESuE0oAi4iIiIiIiIiIiIiIiIhcJ5QAFhERERERERERERERERG5Ttg3dADyv23P9s0NHYKIiIiIiIiIiIiIiIjUk9TUVIKDgxs6jGtGXFwcjRs3rtc+VQEsIiIiIiIiIiIiIiIiIpfMZrM1dAjXpPoeNyWARURERERERERERERERESuE0oAi4iIiIiIiIiIiIiIiIhcJ5QAFhERERERERERERERERG5TigBLCIiIiIiIiIiIiIiIiJynVACWERERERERERERERERETkOqEEsIiIiIiIiIiIiIiIiIjIdUIJYBERERERERERERERERG5rpSUlHA8/mRDh9EglAAWERERERERERERERERkevKqdMJfPbVjIYOo0EoASwiIiIiIiIiIiIiIiIiV5UfflrADz8tuGD7pBf/TnTM4QaI6Nph39ABiIiIiIiIiIiIiIiIiIhcjb6d9SORUQcr3deta2ceefjBKxxRzZQAFhEREREREREREREREZFr0vadu1m3YRO5ebm0CQ7m/lF34+7mdkG7FavXsmv3XnJy83B3d6Nzp44Mvz0cJyenavsfdc+dHI2LIz+/oMJ2dzc3Rt19Z71eS33RFNAiIiIiIiIiIiIiIiIics2JOXyERUuWMeqeO3j+macpKipiccTyStueTjhDxw7tmfzsBMY8dD9H447z04JFNZ7D3d2Ne++644Lt9917F25urpd8DZeDKoBFRERERERERERERERE5KqzZ18kkQcqTr9cWlpq/LxpyzZ6h/agXds2AAy8rT/fzf6xyv7c3dzw9vbC29uLB0bdw8effsG999yJm2v1idwe3buyLzKKqOgY43WXkE4Xe1mXnRLAIiIiIiIiIiIiIiIiInLVCenYgTuGD6mw7d0P/m38nJ2dTezRY2zbscvYZrPZsBQX19h3kwB/ANLTM2pMAAPcN/Iujh0/jr2dfaUVwVcTJYBFRERERERERERERERE5Krj5ORIY1/fKvf7eHvTvl0b7hw+tM59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unZl9ZqyKayPHosjfNBtmM1m45sLoT26EXc8HqDGuCpz9FgcQ4eE4+jggKW48mm0RURERERERERERERERK529Z3MlLqrdQL4eHw8vo19q23j4Vl5svPEiRN1iwoI8PcntGd3fLy9adeuLQ/cdy+JiUl8/OlnAMTFHWfI4EEMDg/j5MlTBLdqZRwbFNiSzp1DiIs7joeHO76+vkQdjKnqVBdoEhBAn969cHF25oH7RuLu5sr3c+YCMHfeAu4bdQ9v/v1lFi9dRpfOIQwfejuTJr9cY1xV+XHefEaNvIv3332beQt+pshSRJOAAI7Hx9dlyERERERERERERERERETkf1ytE8B79uwmNLTnBVn7ESNG8POiRcbP57PZbOzZtadOQZ09m8yA/v0IG3grefn5xMef4OsZ3/LTgp8pKioCYMGixQQFBfLc3/6Kp6cnObm5xBw6jNVqxde3EY+NG0vTJgHk5eWzY+cupn/zba3OHR1zmJBOnXjnrddxsLdnf+QBHn1iPBkZGQCkpKbyx/F/4YXnnuH9d98mJSWFl159nY2bNtcYV1VSU9N47I9/4tm//ZW33niV4pISkpNTOBh9qE7jJiIiIiIiIiIiIiIiIiL/20ytO3SpekHb8wwZMoTevXvX6QQ7d+5k1apVdQ5M/jfs2b75ip8zNjZWa97VIDExsdr1ZzWGl642Y6w1gC9OTWOn+/fy0bNDrhTdazXTGDWMmsZdRERERERERORKqHUFMMCqVauUzBURERERERERERERERERuUqZGzoAERERERERERERERERERGpH0oAi4iIiIiIiIiIiIiIiIhcJ5QAFhERERERERERERERERG5TigBLCIiIiIiIiIiIiIiIiJynVACWOQ6ZrPZ2LFjB4sXL8ZisTR0OFdMfHw8mzZtIiMjo6FDuWokJCSwYMEC1q9f39ChiIjIeXJzc9myZQtr165t6FDqXXJyMjt27CAuLq6hQ6mTkpISDh48yIYNGxo6FBERERERERGROlMCWOQ6ZrVamTNnDuvWraOkpKShw7liZs2axYIFC8jMzLzkvkpLSzl79iz5+fn1EFnDmTFjBo899hgrV66sdP/evXtp3bo1v//97+vtnJejT6kfeXl5JCUlNXQY1z2LxcKpU6caOoxa27p1K88//zy//vprQ4dy3Tt16hQvvfQSM2fOBMq+pDNv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vwHo0e0hYi5cJDk5mRbNmpGVlUVCYiJpqWkkJCQydPAgNvzwI1X9/fn2uw3079ub8PCDANSpVYv4+PgbGr/cWKV937SIiIiIiIiIiIiIiIhIRbKyMj8DcmmUqgO4emB1o/P3/PlIvvrqK7Kzs+nduzc1a9bk0KFDJCUmlltwxflt2++89a/xvDDsOQYPeoqjR4/x3D9e5GJsLAB3t25Fu3Z3Y2dnx7lz53n7X+NJSMiJa8Lkqbz0wj/oeN89RJw5y/YdO3mgy/28MOw5MrOyOHr0OO9/MPmG74PcGCaTCZPJRN/fh+T7fGO3byooIhEREREREREREREREZHi5Q5OLa9OYKua9RpZNFzS1dWVZ599FicnJ86dP8+Kr74ypma2sbGhRcsW/LHzD42+lFLZs3NbuaZnMpnIzMxkwM7n8n2uDmARERERERERERERERG5FV26dAlbW9ty6wC2eARwj0cewcnJiWPHjvHt2rVkZGYa32VlZbFzx85yCUikrLKzsys6BBERERERERERERERERGLlHfflkUdwCEhIQQEBLBx40Z27dpVrgGIiIiIiIiIiIiIiIiIiEj5sKgDODExgblz5pB4E97vKyIiIiIiIiIiIiIiIiIi18eiDuBz587f6DhERERERERERERERERERKSMrCs6ABERERERERERERERERERKR/qABYRERERERERERERERERuUOoA1hERERERERERERERERE5A6hDmARERERERERERERERERkTuEOoBFRERERERERERERERERO4Q6gAWEREREREREREREREREblD2FR0ACJSeikpKZhMJpydnSs6FBERERERERERERERkTve1YQE/ty9l1Onz5CSkoKbmyt1a9eiZfOm2NvbV3R4+agDWOQ29OKLL/Lkk0/SpUuXUq23cuVK9uzZw5QpU25QZCIiIiIiIiIiIiIiIneWX7du5/uNm8jKysr3+cFDR9i4aQt9n+hFg/r1Kii6wjQFtEgJBgwYwMaNG/N9dvjwYbp27UpqamqFxGQyma5rvUaNGtG5c+dyjkZEREREREREREREROTOtGnLL6zb8AP29nY4Oznl+87TswqpaWl8sWQ5Bw8fqaAIC1MHsMjfSEhICKGhoRUdhoiIiIiIiIiIiIiIyC0vOuYCGzdtwdnZieHPDWX480ONTmA/P19GvvA8g5/q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vzje3t506tSJb7/9lvDwcOPcv6Q8a+nvC9eX765XebWvkNP5V9xvWdy+29raMnToUJ588knmz5/P22+/na9OhpyHg+Li4li4cCEuLi4lTh0LJf8elp6L56pTpw7u7u5s2bKFQ4cO8c477wA510gbN27EwcHBGFlYmuN43333MWbMGLZu3UqLFi1o2bIlH3/8MVu3biUoKMi4FisvuXm/pLJeUhtzu7SFZTmXLa4uz6u4/FvSdZu57RZVhxd8DYwl+feBBx5g7ty5xuuN6tatC2DxdVVFtP0FFXUs6tWrV6o8diOvlYorB2XJdyW53vuS5hSXjz/88ENatGhhvFM6d3rropTmmr0o1So7ElSldO2OtZWVcdxqVHHiyMWEEtdxtbfBw9GWE5eSaFk954GS47FJOWl4OGMyQXxaBmlZ13CwqVRofQebSqRfs/z1awU7lK2srIy/a3g4seFw/gfgjl9KMnscAt2deKCOLx/2aGJ2u5eS05my5QjLn2rDD0eiOX4piTWD21kct4jceGWaAlrk7yAoKAgfHx/CwsLy3Sh88MEHWbVqFYDxNH+nTp04c+YMy5YtIyYmhpiYGDFReK0AACAASURBVOOpztJ48MEHWb9+Pb/99huxsbGcO3fOOEk0t4277rqLkJAQpkyZwsmTJ4mLizP7dF+XLl1ITExk/fr1+fate/fuLFq0iEOHDhEREcGMGTNo37497u7uBAUF4ezszKJFi4ztl5eSjp+zszPHjx833kEbExNDeHg4MTExLFiwgGvXrhV5AhgQEMDOnTu5cOEChw8fJisry+w+lidLY4ScG+b169dn+vTpnDt3jr1797JixQq6d+9uLNOtWzcWLVpEXFyccVOmVq1aBAcH89FHH3H69GkuXbqU731eBeXeMMjOzubee+8Fci46c5+wLGoKytIaP348I0aMYMiQIZw/f57g4GD69u0LQI8ePQBYvHgxK1asYNWqVcybNw8fHx/S09N59tln+fTTTzl48CDZ2dmFnuwNDg5m9OjRZGdnM2XKFBISij/5njBhAuPGjWPz5s04Ojpy99134+bmhoODAxcvXuTDDz/E3d2d4OBg4uLieOWVVwq9e7Vz584MGjQIe3t7Nm3axOXLOdPoXM/ozL179zJy5EgWLVpkXOTmXuiNGTOGefPmFVonPDycq1evYm9vT0BAgFGmLc3D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EREREakiFAAWEREREREREREREREREakiFAAWEREREREREREREREREakiFAAWEREREREREREREREREakiFAAWEREREREREREREREREakiFAAWEREREREREREREREREakiFAAWEREREREREREREREREakiFAAWEREREREREREREREREakizOXdcMKECaVK9+abb5Z3FyIiIiIiIiIiIiIiIiIiUgbqASwiIiIiIiIiIiIiIiIiUkWUuwewyNXgdGIaY5bvZsXB0yRlZFd2cS6Zp4uZ/tf48d9BrfHzcqvs4oiIiIiIiIiIiIiIiEgFK1MA+MKwz5d7WOd3pr5B9+u6YjabiU9I4NSpKJb//CvLlv+M3W6/rPsWyevxhb+z+lQqVrdq4Pbv7zCflGNj2f5TpCQk8OuoAZVdHBEREREREREREREREalgV2QP4Nq1a7Fx0x98/e0iXF3daNemNS8+N4b69YJ47/0PK7t4chVZuf8kOXX8wfTvD/4CYDJidXVl1f6TlV0SERERERERERERERERuQyuyAAwwNmzMezZux+A7X/twNXVldtuvZn33v+Qju3b8erE8fj6+hBz7hxLfviRhd/8n2Pb4Pr1ePnF52nZohlp6emcPh3Np5/PZ9PmLQD4+vrwwtjRdL62IympKXy/ZJlj+9q1a/HKuBdo07oVdpuN31auZvrMWf/8CZArQo7NBmanyi5GxTI7kWO3VXYpRERERERERERERERE5DK4YgPAF0tPT8fZ2RmAE6dOMXPW+8TFJ9CmVUuefeZpdu/dx67de/D19WHe3DmE7trDuAmTsdvtvDLuBRo0qM+mzVswGAzMmjGN+IQExr0yibp1A3nhudGcOn2ades3MmbUCKpVq8YL4yZgt9swm/81p0hERERERERERERERERErnJXbHTTYDBgNpvxqFaN9u3aMviu2/lz23YAzpw5y5kzZwHYvWcv/W7sS+tWLdm1ew/3DL6T1LQ0XnplIlZrNgApySmOfHtc14369YJ46pnRpKWlsyNkJ21at+KGPr1Zt34j1X19OX48kh1/h/zzBy0iIiIiIiIiIiIiIiIicgmu2ADwffcM5r57BgOQmZnJ6rXr+e8HcwBo1LABo0Y8RbNm12C32bG4WHB3dwOgSeNG7Azd5Qj+XqxJk0a4uLiw+tfljmUmk4n9B8IA+GbRYt58bTKB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IiIictUyNGzayl5yMpHLI2TbHxWan91uJzMzk4f+ejLf8pUDl5YrP8NTcyEouISd2sBqhcx0yLGDi2tub1wjkGODzAzIzARnJzAYICsbzMbcNNk5kG0FJ+fc3rvZ2ZCVCTYbGI1gdgZX19x/59ggIxVyssHiCiYzZGWANTs3+Gtxyc2jNAHgyHDsHz9RrnMiIiIiIiIiIiIiIiIiFefs2bNYLBYMhorp5Kc5gEUulcH4v+GXsYPR9L95eM1GMLjlBmcNhtygsMV+/t8GcOZ8sPf85xxLbnDXbjufxng+PwMYbWDyyF13IdBrMoOrDQwm9f4VERERERERERERERERBYBFKoTBCKYLwde8QVhDbrDWbswN4gKY7f9bZyA3yOtIm/cz/9sm3z7y9PI1G8Buyp9ORERERERERERERERErloKAItUmGKCsIaLgsLFbVdsMLeQbRX7FRERERERERERERERkfOMJScREREREREREREREREREZF/AwWARURERERERERERERERESqCAWARYplgGxrZReiYmVb0bjRIiIiIiIiIiIiIiIiVZMCwCLFMJsMEB9XdYLA2VY4cxqzWbe+iIiIiIiIiIiIiIhIVWSu7AKIXMluaVmXZbsjIeoUYK/s4lQAAxjgxuYBlV0QERERERERERERERERuQwUABYpxkcP9MDDZRurDpzkTFJ6ZRfnktX2dKFfs0Cm39m5sosiIiIiIiIiIiIiIiIil4ECwCLFqOPlxoJHe1d2MURERERERERERERERERKRROBioiIiIiIiIiIiIiIiIhUEQoAi4iIiIiIiIiIiIiIiIhUEWUaArpBgwbcfPNAvLw8S0yblJjEL7/+wrFjx8pdOBERERERERERERERERERKb0y9QAeWMrgL4CnlycDbx5YrkKJiIiIiIiIiIiIiIiIiEjZlSkA7FnK4G95018tXFxc6Nn9OiwWS2UXRURERERERERERERERESqkDINAf1P8vH25rFhj9CrR3d8fX2Ij4/n75BQ3vvvbBISEyu7eJekUcMGzJz+FgNuvYPMzMzKLo6IiIiIiIiIiIiIiIiIVBFXZADY19eH+Z99jIuLC/MXfEXE8UhqVK9Ol86dyFDAVERERERERERERERERESkUFdkAPjZkU9Tzd2de4cMJebcOcfy5T//6vh3gwbBTBj3Ak2vacKZM2eZ/fFc1q3fCICXlydvv/k6QXUD8fby4mzMOb5dtJhmTZtwXbeuWJwtrFqzlukz38NqzS5zesgNUr8wdjSdr+1ISmoK3y9ZxsJv/i/f/usGBuDj7U1qaiqLFv/A5/MX5DvOFT8tBSDieCR33/8QHdq3ZeyzzxBcvx7JySnM/ugTfv51xWU911WR0Wjk8zYfkJ2d7VgWERFRiSUSERERERERERERERERKchsNuPi4lKxeVZobhXA2dmZG/pcz1ffLsoX/M3L19eHzz/5kK3btjPvy4W0atmCqf+ZwnMvjWfzlq24ubnRsX07ps14j/CICPr2vp4XnxvN6jXreOOt6fj4ePPic6M5dPgIi5csLXN6g8HArBnTiE9IYNwrk6hbN5AXnhvNqdOnWbd+oyO/Ge/+l2MRx2nVojlPDh9GxPFI1q7f4DiOJ0c+S0JiElarFYCp/5nCxk2bmTbjXTw9PYmOPvuPnPOq5sKNYrPZKrsoIiIiIiIiIiIiIiIiIkUyGo2YzRUbsr3iAsB16tTGYrFw6PCRItPce/ddJCUlMWHy69hsNjZv2UrtWrV4/NFH2LxlqyNdSOgujh0LZ/eevQy8aQBbtm7j9z82A9Cl87V0bN+OxUuWljl9j+u6Ub9eEE89M5q0tHR2hOykTetW3NCnt6MXMsBfITs5diycv3b8Tbu2bejZ47p8AeDjkSeIjY0DwMnJjIeHB7t272HP3v0VczKvQgaD0ZB8HwAAIABJREFUAQAnJ6dKLomIiIiIiIiIiIiIiIhI6VyIcVWEKy4AbCD34Gw5OUWmadKoEaG79uTr4fn3zlBu6HN9oemt1mxiY2Px9vJyLDtzJoamTZuUK32TJo1wcXFh9a/LHetNJhP7D4QVWebIEyeoFxRU5HqrNZtv/u87Jrz8Ip2u7ci3ixZzIOxgkemlaBV5g4iIiIiIiIiIiIiIiIj8m5QpAJyUmISnl2ep0ycmJpW5QNFnzmC1ZtOoUUM2/P5HoWkMBgN2u71M+VqtVkxmk+NzdnY2ZpOpXOmtVisJCQk8MeLZfNtkZmUVmV+W1YrZqfjT/cGcT1i/cRMPPXAfX37+Ce+9/yHfLlpc7DYiIiIiIiIiIiIiIiIiIhcYy5L4l19/IamUQd2kxCR+/fWXMhcoMzOTzX9u5e4778jXAzevI0eP0bZNK4zG/xW/Q7s2HAuPKPP+yiMiIhIfH5/cfx+PdPx3+nR0qbZPSUkBwKNatQLr9u7bz7gJk5m/8GseuO+eiiu0iIiIiIiIiIiIiIiIiFR5ZeoBfOzYMT6Y/YHj84QJE/Kt//3339m0adMlF+r92XP44tOPWTj/M+Yv+IqoqNN4eHpwbYf2zPn4UxYtXsLgu27njSmTWP7Lr7Rq2YKbB/TnpfGTLnnfpbFp8xaOHQvnnbffZN78BcTGxVM3MIBNf2zhbExMidtHRZ0mKSmZYUMf5pffVuDv58ePP/3C/fcOZs+efUDuMNcJCQmX+1BEREREREREREREREREpAqpsDmAKyr4C3Di5CkeHvYETzz+KE889iienh4kJSWze+8+LC4WoqPP8MTTo3j5xeeYOX0qMTExTHz1dTZuKnzI6Ipms9l4cuRoXnp+DC89Pwaj0cSpqCh27tpdqgBwltXKG29PZ9SIp7i+Z3cijkeyZes2+t3QlxFPDseanc3Bg4d5/c23/4GjEREREREREREREREREZGqwtCwaauyTaabx4UewBUZ/JWrS8i2fyZoLyIiIiIiIiIiIiIiInI1KNMcwIVR8FdERERERERERERERERE5MpwSQFgBX9FRERERERERERERERERK4clxQAVvBXREREREREREREREREROTKcclDQIuIiIiIiIiIiIiIiIiIyJVBAWARERERERERERERERERkSpCAWARIDs7u7KLUOWtWrWKtLS0Mm2TbbNzKinjMpVISiMuLq5cw/2nZmUTk5p1GUpUeeLTreyOTqrsYhSpvNcqIj6N8Liy3ZsliU/PIjWr8HY1M9vG1sj4Ct2f2goRERERERERERGR/1EAWK5qM2bMICgoiB9//LHQ9YMGDaJFixZER0df8r7WrFlD3bp1mTp16iXn9W+0evVqMjLKFqCZszWCJ5buKXTdluPxNHtvIwnp1ksu26zN4dz+1Y5LzqciZdvsZNvs+Zbd/c3fvLPp2D9ajvIGFR9dspvP/oosdF1FXrt/8px8tuMEU9Ye+kf2VR7lvVajf97PsgNnLmnfF1/Tlv/dREhU4cHykKhEBi2s2PutuLYiJTOb5rM2sjE89pL3cyW2FSIiIiIiIiIiIiIXM1d2AUQuty1btjB16lR2796NwWDgmmuuYdy4cfTp04eTJ0+SmJhY6HZ2u529e/cSGxtLbGwsderUuaRyHDt2jKSkJA4cOHBJ+VQ1cWlWxq8KY82Rc6RZcwjydmVcz4bc2aL4893A142hHQLxdLn0ZqxbPR9quDtfcj4VJTPbRuC0tWwc3oXmtTwcy+9s4Ud9H9dKLFl+u6OTmLj6ECFRiZgM0Ki6O7NvbUmzWtWK3a4ir92Vdk6uVF+HnmLE8r0Flp8a17dC8r/4mtqxl7BF2ZW3rXB3NjO0fSCNqrtfchmutLZCREREREREREREpDAKAEuVFh0dzd13301KSgqtW7fGycmJPXv2YLPZStzWYDCwadMmEhISaNGixSWX5fHHH6dNmzYVkldV8vLKAxw8l8r/3dcObxcnDp5LIci75IBeHQ8L43o2rJAydAr0plOgd4XkVRHs2MnKKVhH72/jXwmlKdr9/7eT6+r5sGZYZ6w5NnZGJRHgaSlxu4q8dlfaObmSBXi6sP7xLvmWuTtXzGtARV7TopS3rTAY4KUq2laIiIiIiIiIiIiIFEYBYKnSQkJCSElJoV27dmzYsAGAtLQ0LJb8Qarnn3+eJ598kuDgYKZPn07v3r0BuO222zh8+DCHDh3C1dWVBx98kLCwMOLj4/H39+fWW29l/PjxuLu7s337dsaNG0d4eDjp6ek0bNiQ4cOHM3ToUAwGA0uXLmXYsGE8+uijzJo1iy+++IKPP/6Y6OhoUlNTady4MdOnT6dHjx4AHDlyhMmTJ7Nt2zaSk5Px8/Ojf//+TJ8+PV/Zv/zyS5599tkCx37q1CksFgvTp0/nu+++IyEhgU6dOjFt2jQaNGgAwJgxY1i/fj0xMTHk5OTQvXt33nvvPYKCggDYuXMnEydOJDQ0FD8/P8aOHcuQIUMAiIiIYMyYMfz111+YTCY6d+7M4sWLy3yNwmJS6d+4BteeD6o0rpG/l96eM8k0eXcD8elWugb5MGdQCwK9XNkZlcT1n/1J4uT+ALy14Qjf7o7ibEomNd0t3HxNTSb1boyHxUx4XBqPLtlFRHw6WTYbzWtWY2LvxlzfoDoA728JZ+Xhc/zyyLWEx6cx9PtdRCakk5yZTX0fN2YNbE73+r4A5NjsvLPpGJ/tiCQpI5ta1Szc28qPSX0aFzi2nVFJvLzyAPvOplDf25WJvRszoElNAH4JO8tr6w4RlZyJk9FA1yAf3ux3DcE+bo7tu368BYDrg6vz40MduefbENr5eTL++kYA/N/uKN794xinkzNp7+/JOzc1p8n58/efdYf5bu9pYlKyMJsM3NWiDtMGNMXFbCI2LYunlu1hc2Q8RoOB0d2CebFHgzJdt6QMKyeTMhjSNoCmNXN7/Laq45kvzZc7T/LhtuMA+fZ/8bW7+5u/CT2dRGJGNvV9XHmsYxBPXBuEwVDyecp7TpYfOMN/1h8mOjmTjGxbvvoCuXP4vvjbAX49dBYDBvw9LUzq3ZhBzWoXOL4le6N5/fx+Az1dWPd45wJpXl4Zxje7osix2bk20IsPB7UkwNMFux1eWRXG/+2OIjUrh17Bvix+oEOx531ByElmbQnnXJqVHvV9+O/AFtRwd66Qa3WByWigdrWSA/SnkjIYtyKM3yPi8HU1M75XI+5t7c+xuDS6z93Covva06O+L7tOJzFwwV9seLwLyZk5+a4pwKtrDnE0LhWAoe0DmdSnCWajocD+MrJz+M+6Iyzeexq73c59rf2Z0rcJpovSlretAPB/e42j3MW1FVB8fbxcbYWIiIiIiIiIiIhIRdIcwFKlNW/eHGdnZ3bu3MmwYcNYv349rq6umEymfOn8/f3p0aMHhw4d4pFHHiE5OblAXunp6WzcuJGUlBRuuukmbDYbH3zwASNHjgTgxIkThISE4OHhQd++fTlx4gRjxoxh3rx5hZZt165dhIWFERwcTPfu3dm/fz8PPvggycnJJCYmMmjQIH755Rc6duzInXfeSUREBFu2bCmQT5MmTXj44Yd5+OGHCQ4OBqBVq1a4uroyadIkR8C4devWrFq1ioEDB5KUlDs35x9//EFERATXXXcdjRs3Zs2aNYwaNQrIDSAPGjSIv//+mwEDBpCWlsaIESP4/fffARg/fjzr16/nuuuu44477qBx4/IFNW5qUpOPtkfy6V+RpGRmF1hf18uF34Z2YtvT12EAXloRVmg+oaeTuLFhDf4e2Z1P72jFHxHxPPvTPgASMrLZeTqJ1cM6s/nJbtx8TW0Gf/M3+84UvM4J6dmEnk5iw+Nd+Htkd/o3rsnQJbvIzM7tkTv996N8FXqKeXe2JnRUDwY0rsHO0wWHET+XmsVtX+2gZ31f/niiK092CuKhxaHsjs4990fjUnF1MvHHE1359ZFOOBkN3P7V36Rbcxx5bHy8C2deuYHvH2hfIP/1x2IZ8/N+Xu7ViN+f6EqTGtW446sdpGXlbr/nTDIDGtckdFQPvr+/PSsPxzBvx0kgN4iVnm0jZGQPQkZ2556WZR/e3NPFie71fHnul/38evAsObaCQ/72aVCDrU91Y9mDHVl1+Jxj/xfbHBnPazc04e+R3Rl/fSPe2nCEL0JOlPo8XRARn4a7k4ltT1/H5ie7Ybfb89WXhxaHEpOaxdphXfjzqW5UczZxNC6tQD4bjsUycvleJvRuzM5nujP3jlb4uBYc9vexDnXZ9nQ3Nj/ZleTMbN5YfxiAtUfP8e2uKH4b2olDz13PGzdeAxR93lcfOcf4VQeZeXNztj3djZTMHF5ZFVbsNpeL3Q6PLA7F2WRg29Pd+M8N1zBy+V6OxKbSwNeNSb0bM+qnvSSkWxm5fC/jezUscmjl6+r5sP7xriy8uy2L90bz3y3hhaabuuEoa4+e4+eHr2Xpgx35fm80X4eeKpDun2groPj6mFdFtRUiIiIiIiIiIiIiFU0BYKnS6tevz1dffUWjRo1YsmQJt99+O126dGHPnj350j3//PMsXbqUXr16kZiYWGB9Xv7+/ixYsIDNmzdTvXp1li5dytmzZx3r+/btyzfffMOSJUsA+OSTT4ot46hRo1i2bBm9evUiISGBPXv2sGnTJk6dOsWAAQNYtGgR48ePL3L7rl278sEHHzB06FBOnTpF7dq1WbRoETabjc8//xw3Nzc2bNjATz/9xD333ENUVBTLli3Ll8fs2bNZu3Ytrq6u/PHHH9hsNubOnUtSUhJjxoxh5syZvP/++wB8//33AGRmZgK5geVXX32Vt956q9jjLMrLvRoxfUBTvg49RdNZG5mw6mC+4I63ixMNfd1o4OvGU52D2HI8vsi8aro7E+jlStcgH96/tQU/7I8mLs3qWN+4hjvBPm481z2YXsHVmR9SeEASoJ6PG/V83Hi5V0NiUrM4Epvbk/GT7ZFMuL4RPYOr4+/pQm0Pl0K3X7Ivmlruzkzo3Zj6Pm481C6QAU1q8mWefVZzNlPfx41mtarx8e2tSEjPYtXhGMd6Z7MRF7MJJ1PBpnre3ye4r7Ufd7aoQ7CPG1P7NyUrx8bKPNv7ujpRx8NClyAf7mrhx58ncs+dl4szUUkZxKZlUauahXp5eh2XxXf3t+PuVv68tCKM1u//zuc7TmDPEweu6+VCoJcrHQO8uLNFHcf+C1PXy5W63q7c0bwOY7rV59O/Ikt9nvJydzbj7+lCkxrujOhSz1Ff9p1JZlNEHLNvbUGzWtUI8nbF0+JUaB7z/j7B/W38uKeVH4Fero4epxdrXMMdPw8X6vu48WDbAPadSQHA08VMenYO4fFpeLk4cc35HtJFnfePtx3ngTb+9G5QHT8PF0Z3C2bF4XPFblMeJxLSCZq+zvHf5DWHCqT5OyqRHacSmT6gGX4eLtzarDbt/L1Ydb48T3Wqh7+nC70+/ZNqFjNPd65X5P76Na5JA183egZX59mu9QsN6ubY7Hy24wTjezWkSQ13Wtb24L7Wfqwo5Pr+k21FcfXxYpfaVoiIiIiIiIiIiIhUNA0BLVVe//796d+/P1u3bmXmzJmsWrWK4cOHs3Xr1gJp/f1z5xONjy86cHCBp6cnrVq1YsOGDURERBRY36lTJ8xmM+Hhhfd6K27faWlpjn2URkJCAo8++igAX331FQEBAURERJCVlUX9+vXx8fEBcoO13333XaHltVgs1KhRgxMnTpCcnExUVBQAU6dOZerUqY50J07k9oSbMmUK4eHhvPPOO8yePZvnnnuOl156qVTlzctggAfaBPBAmwB2RiXyxLI9nEzK4MvBbQqkreVuIT7DWkguBTU9PzxsREIaBgoOO9usVjUOxqSUmI+HxYyr2UR8upWkDCvxGVbHkMfFiUxIp4Fv/mBdAx9X9p8tfJ+uTibq+7gRkZBeYt4X8r82wMvx2Ww0EOTtSmRi4dvXdHdm1/nexyO71CMly8otC/7imprVeLvfNbT19yp0u+K4O5t5uVdDXurZgB/3n+GZn/Zhs9sZfm1QsfsvSbNaHkTEHyt0XVnOU976cjwhHXdnE3VLMWdsRHx6kUHfC2x2O2+uP8KiPaeJS8/C1WyipntuL+FOgd68e3NzJq46yMsrwpjUpzGDW/oVed6jUzLZEB6b78cBOXY7aVk5FXatAPw8XFgx9FrHZ0+XggHw00kZ2IHmszbmO9ZuQbnnw2CAu1v6MeaX/TzcPhCjoeC9VZj6Pm6cTs4ssDwp00pKVjaPL93D8KW5P7yxA23qeBRI+0+0Fb5uBc9tcfUxr/K2FSIiIiIiIiIiIiIVTQFgqfJOnz6Nn58fXbp0YebMmbRq1YpDhw6Rk1NwCFnD+WCG3V5wONuL2Ww2R3C3Tp06jsDoBeHh4WRnZ1OvXtE95Irad+fOnbFYLPzwww8YDAbHkM1FGTNmDMePH+ftt9+mU6dOAAQEBODs7MyJEyeIjY2levXqhIaGAjjm+C2uDHXr1gXgvvvu48EHH3SkyRtM/vvvv1m3bh2jR4/mzTffZODAgbRo0aJUx1uYdv5ejOkWzAu/HSh0fWmDTYAjEOrnYSE6Oavg+oR0/D1L1yPPaMwNSnm6OOFhMXMyMZ12/sUH5+t6ueTrjQtwLD6doCICkDk2O6eSMvD3cMHJaMRowDGUbOH5u3Isz/DF2TY7kQnpBHkVnr/RgKN3rsVsZHKfJrzQvSETVx/k/kWhHBjbq9jjKY7RYOCOFnVYdSSGVYdjCg0A591/SSIT0vHzKHyu2rznqTTlusDPw0JqVg7x6VmFDuecVx0PC0fP9+Isyi9hZ5n39wlWPtqZJjXcmf/3CT7e/r9eokPa5gYqv919iuFLd9PWz5NG1d0LPe+Bni70aVCd/5wfKvpiFXWtzCZDiT2IA71cMBkMHHn++kIDxNHJmbyx/giT+zRm5h/HuOWaWo4ezsU5eC6FeoXUfR9XZzwsZj6/szX9G9cs9bFcrrai0PXF1McC+y1HWyEiIiIiIiIiIiJS0RQAlipt27ZtDBgwgBYtWuDl5cWhQ7lDnnbs2LHAPMClFRERwZAhQzh58iTHjx+nc+fOBAUF8ddffwGwfPlyEhMTHZ8HDx5c5n3Uq1ePefPm8cYbb7Bs2TJq164N/C9Am9dPP/3E0qVLcXZ2Zt++fY45fF9//XUee+wxPvroI3r16kXdunXZsmULtWvX5vbbby+xDA899BCzZ8/mu+++4/jx43h7e3Py5Ek+++wzAIYMGYLZbMbHx4fU1NxgmcVSuiBJXh9vO06rOh4EeroQl57Noj2naVqz8DlFS7L9ZAL7zyZjNBgYvzKM64Nzh9S9EABeui+aDgFebImM57dDMSx/qGOZ93Fbs9q8/ftRGlZ3w83JRGgRc3re1dKPtzYe5c31hxnSNoBNEXGsOBTDmmGdHWmOJ6Sz5Xg8/p4WPt9xguwcO/0a18BkNFDf242l+89Q092ZmFRrgSDSox0CGbIolF4NqtO2jicfbT+Ok8lIv8Y1SjyG3dFJ+Lg44ePqRIvaHizacxqb3V6moFlKZjaf/hVJn4Y18HYxcyw+nY3hcQxu6VfqPPJac+QcgZ4uRCVn8P6fETzSPtCxrqjzVBYta3vQuLo7L/x2gNdvuIZzqVlEFtGL+OF2ATz+wx461/Whez0fYtOyaFTdHU+LmePx6cSlWcmx2zEYcgPSF89HfCIhnaTMbOp5u9KilgcGDCRmZBd53oe0DWDE8r10CPDi2kBv0rJyMBkNNPB1q5BrVRJPFzP7ziSTmW2jjZ8nLWp7MOrn/Yzr2QBvFyciE9LpEpT7w48XVxzgjua1eb57A+LTrYz6aR+r8tTpvE4lZXA6OYO/TyXy3h/hTOyTO0+4p8VMZo6NfWeSaVHbgwfa+DNl7SE8nM0E+7pyJjmTej5u+LjmD0D/E23FBcXVx9IqbVshIiIiIiIiIiIiUtEUAJYqzcnJiT59+hAaGkpYWBg1atTg3nvvZcqUKZeUZ0hICMnJyfTr149Zs2blW28ymVi7di0Wi4Xhw4eXa1hkgIEDB3LLLbcAsGnTJm655RZHIDivbdu2AZCVlcXChQsdy19++WVef/113NzcWLx4Mfv27aNv3768/fbbeHsXP7wtQHBwML/99huTJk0iJCQEm81G48aNycjIAMBqtfL777+Tnp5O3bp1mThxIo0aNSrTMdrsdvbHpDBn23FOJ2fiaTHTvb4vH9zSvEz5XHA6OZO7vg4hzZpDj/q+vHtzs3zrP90RycifkvCrZuG/tzSn6/mgVlm8eeM1vLwyjJvmb8fZZMTLxYmWtQv2gKzp7syyBzswfmUYc7ZFEuzjyoK729DG73+BXGuOjbG/7icyIZ3mtarxw4Md8Drf63LagKa8uCKMudsjuTbQi58evjZf/n0b1mDWLc2ZuuEIUcmZdPD3ZNmDHXF3LrlZX37gDJ9sjyTdmkN9Hzdm39qizAHF+HQr204m8OG24ySkW6ldzcJtzWrzyvUNy5TPBZsi4pgfcgJXJ1PuEMPd6jvWFXeeSsvJZOTre9ry/G8HuHbOH9R2t5BqzcHTUvB83dK0NjNuzua/W8J59ud91HR35ochHbi9eW2+3XWKCavD+ODWlqw/FstN87eTlJmNl4uZnvV9AdhzJpkxv+znXGoWNd2dea57MB0CvHhj/eFCz/ugZrVJzLAy7fejHIvLnTd4fK+GNPB1q5BrVZInrg1ixPK9/N/uKB5pH8ii+9oxftVBBi3cQWpWDo2qu7P2sc5sjYxny/F4dj7THYBXejWi/YebWLQ7iiY18t8DXep688qqMJIzc6jr5cK4Xg15rEPuqALNa3lwV4s6PPhdKDtH9eD1G5rw5vojPL18L6eTMvDzsDB/cNt8AeB/uq0orj6WVmnbChEREREREREREZGKZmjYtFUpB+UUqXgh2/6o7CKU2pkzZ2jSpAmNGzdmx44dBdYvWbKEYcOG8eijjxYICpdHr1698PHxwdPTk02bNhEXF8fMmTN5/PHHLznvyvDiiy8yfvx4fH19L0v+93wbQjs/T8ZfXzAIvTMqies/+5PEyf0veT+nknID4O5OJqJTMhm5fC/3tPLnyU6FD6tdlPe3hLPy8Dl+eeTakhNXoiNHjvDdd9/xyiuvXLZ9+L+9hkX3tadH/YJ1oyLP09G4NDwtZsxG2H82hYcWh/Ljgx1pVadqDNH7T1yrqqC4tgKKr49lUVFthYiIiIiIiIiIiEhZqQewyBUoJycHLy8vQkNDSU9PJyAggFGjRjFs2LDKLtpV77s9p/ngz3CSM3Oo42HhrhZ1eLxj3coulpTC5DUH+T08DmuOnWBfV6b2a1plgr9y5VFbISIiIiIiIiIiIpVFPYClUv2begCLiIiIiIiIiIiIiIiIXOmMlV0AERERERERERERERERERGpGAoAi4iIiIiIiIiIiIiIiIhUEQoAi4iIiIiIiIiIiIiIiIhUEeajAydVdhlERERERERERERERERERKQCqAewiIiIiIiIiIiIiIiIiEgVoQCwiIiIiIiIiIiIiIiIiEgVoQCwiIiIiIiIiIiIiIiIiEgVoQCwiIiIiIiIiIiIiIiIiEgVoQCwiIiIiIiIiIiIiIiIiEgVoQCwiIiIiIiIiIiIiIiIiEgVYS4pgQF4qmtDbm7mh4u5fPHi9OwcfjsQzcd/HsVerhxERERERERERERERERERKQkJQaAX+p9DW8PbH3JO7q1uT8eFjPTNxy85LxERERERERERERERERERKSgErv0Dm5dt8J2dnebistL/v2GtAmo7CKIiIiIiIiIiIiIiIiIVCklBoCrWUrsJFxqFZmX/LsNaRPAnNtaVnYxRERERERERERERERERKqU8k3qK3IJFPwVERERERERERERERERuTzKFABOzcousOzIuRSOx6dVWIHevKklUZNvLVXao+Nv5j8DKi6QaDYaePH6a9j3Yn8yp91F7Ou3sWJ4DzoG+lTYPq52Cv6KiIiIiIiIiIiIiIiIXD5lCgAHvP6zIwh8IiE36Dvk622sOhjNZ9vCGbV0J0fOpQCw8mA0I38IYW90YpkKtDsqET9PF2q6WxzLmtbyIPS5G2nn7+1Y5mExE+zrzq6ohDLlXxSjAX589DreurkVK8KiuWv+FkYsCSE8LhUnkzpKVwQFf0VEREREREREREREREQurzJNyutpMXP4XAqeFidavrOSdU/3YvuJOB7uWI9Ptx5j6LXBPPLtdn56rDsv/byb6be0Ztiiv9g++oZS72PX6dyAbht/L9YcPgvAXa0CaePvzd1t6rIz6sJ6bwwGCD2V+9nH1YkP72zPoBb+pGXlMGfLUf6zej85djsAJoOBSTc25+luDXF3NrF8XxQjfwghPt0KwNCO9bm5mR8DP9vEr2HRjvIs2nXC8e+S9jHv3mu5vmFNalWzkJqVw8K/j5Oalc1DHerh7+nK9sg47vvqT6KSMsqV3tlk5LX+LXioQz2cTUZ+2h/FmB9DSc7MDcrPuLUNtzTzo663G6lZ2fScs56ws8nc3tKft29uTXB1d04mpHPvwj/ZcTKe2tUsfHBHe25oUovEdCtzthxlxoaD2MtSKUpJwV8RERERERERERERERGRy69MAeDmdTwJO5PMT/ujSM/O4e11YdSqZmH/mSTubB1I53q+jP91NxuOxnBLcz9ubFKbIV9vK1OBDsUkk5RhpUOgjyMAfEerAL7ffZI7WgXwym97AGgX4E1cWhZHYlMwACuG98TVycTD326nupsz025pjbuziRd/3g3A1IGteLxzMON+3k1sWhZT+rVgxfCedHl/LXbgoY712Rx+Ll/wN6/S7KNPo1qsPBjN1yHHae3nzXu3tWV3VAITfttDWlYOMwe14b+3t+PuBX+WK/30/2fvvsOjqPYGjn83vZFKSCMJEHoJLYD0oiAyTphzAAAgAElEQVSgiCJKExBRRLHgtd/3qhcuIuoFaQLSuwIKgoB0AgKC9AAJEEIgfdN72yT7/hGzN2VrEgji7/M8PpKd2TNnzpw2c3bOeTKQJ1p5MW37BYpL1Cwe0YnZQ9rx5s8XARgZ2JDgiESm/nQeZ1tL7qbm8mQrL36a2IN5x25y8KYSHydb7qTlYKaAvS/3JjG7gGfXnqKZez0WPdOR2ynZ/HQl1qRrZogM/gohhBBCCCGEEEIIIYQQQghxf5g0ANzW04k9YXFsuRRNR29nfgmNo28TdzLyVZSo1fxyLY5m9euRlltIfGY+26/E4lnPxqQIlajhfEwaQb6uAPg529HOy4nhq08S8c+htGpQj7DELDr5uHAmKhWAx5p70MXXlRZf/kr4n1NQF5WoWTayM7MOhVGiVvNWr2ZM236BVX9EAqVTTd/4aDCDW3ry6/UEWrjX46eQGJ3xMnSMjPzSN4mvxGdw/HYyx28nM7yNNzEZeXx/sfQt4oZOtsystGaxsfu72loxrWdTHl9+nCO3SgfGGxy4xpwnAjUDwADnotMIjkjS/P1/j7Vi84UozSB1madae9OygSN9l+wiu7CIoxFJ9Gpcn1Ed/Gp1AFgGf0VdUKlUxMbGolKp6joqog5ZWlri7e2NlZVVXUdFCCGEEEIIIYQQQgghhLhvTBoA7uTjwrjNZ2jr6cjy54LosuAQ7g7WdPV15e2dl4DSaYi7+rnyyrZzrDl7hzlD25kcqZN3UpjUpREAz7dvyKGbSmIz8zh4U8nojn58tv8a3fxc2XQhCoD2Xk7EZuZpBmYBjt5KxMrcjFYN6lFUosbawozgiETN9lsp2USn59He25lfryegUKCZylkbQ8c4/edgdHl30nLxcvzfAHhUei4utlYoQOs0y/r2b+vliIWZgr0v99ZsN1OApbkZNhZm5BeVaI13Oy8nVp6JrPJ5Bx9nbC3NSZ45XPOZhZmCczFpOtNAiL+K2NhYPD09cXR0rOuoiDqUmZlJXFwcjRo1quuoCCGEEEIIIYQQQgghhBD3jUkDwL2b1AdgzhOBBPm6MLC5B2YKBdN6NsXawhw1aqY80gQzhYKfJvYgJiOP13oEmByp/TcS+NdjrfBztmNMRz8W/BYOwLbL0Xw2qA3zj9+kZQNHDt5UAqBQKFDrGbxVKEr/r2cXbiVnE+jlpCcM/cfQpqCoGAszheZvVbEahQLMzRQUlVQNS9/+hX8O8D695iR30nIqfK+wWPvgrwIwUygo0RLvwuISknMK6LPkaIXP81XFRp+fMTZdLn2bWN4CFveTSqWSwV+Bo6Mj0dHRhncUQgghhBBCCCGEEEIIIR4iJg0A+zrb8evLvRnc0hOAtaO7cCc1F3MzBa92b1Jh32fa+VQ7Ur/fSSE9T8XrPQJo2cCRHVdLBxF3XI1l2cjOfDSgFWl5hZyLKX3r9kp8Bj5OtgS42RORUjo42i+gAariEq4nZlGiVqMqLqFvgDu3U0u3N3G1x9fZlivxGQD8FBLDN8M70KdJfY7fTq4SJ0PHuNfCk7MpLlHTyNWOfTe0r1NcmRoIU2bSL6ABa87eqbAtTJmJu4M1wD2PvwwCCyGEEEIIIYQQQgghhBBCCHF/mDQADGgGfwG8HW3xdrSt1QhB6VTMB28qebdfC7ZdjiaroAiArIIidl6N4x99m7P9SgxlL9Huv5HAxdh0fpzYg8/2XcPN3or/DmvP4pO3SP9zbd5FJ27x32HtAUjJKWTG4DZcjE3n1+vxACw9FcHYTn7sn9KHL4/c4I+oFKwtzOni68rRiESjjnEvpeQWsuLMbeY8EYitpTlX4jNo4GBDTEau1gHrMl8evc73LzxCUk4BB28m4GBlwfXELHaHxnMtIZOfX+zJrEOhJGTl06x+PX4JjSMmI6/W4y+DwEIIIYQQQgghhBBCCCGEEELceyYPAN8vv16P57n2Ddl4/m6Fzzecv8Pojr4cuKHUfKYGBq84zpIRnfn+hUfIVRWx9FQE/z5wTbPPh3tCyFMV89WTgdhZWrAnLJ7XfjqvGUQuKC5hwNJj/N9jrRjf2Z//e6wVuYVFXI7L4MgtpVHHuNfe3HGR5JxC3u/XElc7K2Iz8vhk31W939l6OQYzxRlmDm7L272bkZRdwOvbz3NNmUm/pUdZ/Ewnvh3RCXMzBREpOfwWmXRPBoBBBoGFEEIIIYQQQgghhBBCCCGEuNcUvLtV78K2V94bRFtP3WvjmuJKfAaBcw/USljir2tcex8ZBBb3VHh4OG3atLmnxygsLsHK3Kza27UpKlFXWAdc1Ny1a9do1qxZXUdDCCGEEEIIIYQQQgghhLhvDI5OnL6bWmsHO3UnpdbCEn9dmy7H8vpO/W8u3y/5+fl8/Mm/GTdxMlt/3K5zv8zMTMZNnEy/gUM4cfL3exafz/4zm579BvLdytX37BiiZi7EptPky4OM33Je6/blZ+7gOWsf352+o3W7NodvJdHky4P8Y/cVrdtnHb6Bx39+5WB4YrXiXF58Zj7NvjrIkNX3Lh8LIYQQQgghhBBCCCGEEKLuGBwA/nhvCL+ExlFQVFLtg+Spitl+JZaP94ZUOwzxcLlfg8CHjwQz5fU3eWzIMLr16sfQ4c/yr89mEnb9BgCFhYXsP3CIsOs3yMvP1xnOlWuhhF2/QWZmFvsOHLwncS0oKOCX3XvJy8vj552778kxhHbpeSoa/OdXbP/1C+svROvdN7uwmPisfNQ65k5IzC4gw8R1wVNzVXrDDE3MIrOgiFvJOSaFq01KbiExmflcVWbqPJ4QQgghhBBCCCGEEEIIIf66DK4BnJxTyFOrT+rdZ0DTBuye3IvD4YkMW32i1iInHm6bLsfe06mg123YxILFSyt8lpCgZO++A/Tp3YtWLVsYHVaH9oF07RJEbGwcw596srajCoC1tTVjRz/PwUNHGDdm1D05htBu5dm7ZBUUAbDwZAQTOvnWcYwqWj6iA2/1DKCrr3ONw2rr6cjZN/riYmuJQmabFkIIIYQQQgghhBBCCCEeOgYHgI1x5FYiT646wdTuAbURnBA1lpOby9LvVgLg69uQt6e9Rr16DsTGxXPq9zP07d3TpPDs7exYtnj+vYhqBe+98xbvvfPWPT+O+J/iEjXLTkfiZmdFdz9Xdl9P4GhEMv0D6mv22RUaz8zDN7idkksDB6sK3y9Rq/kyOJy156NIyS3E2caq8iE07qTl8sbOEM5EpWFupqC7nws7JnTTbN8aEsuGC9G42FnxTq8A3urZBICP94Wy8uxd1j/fmecCvXlzZwiHbiURn5mPs60lPRu58cXg1vg525KZr2LU5nNcT8omNbcQH0cbnmrtySePtsDeyoKErHy6LD5G8/oOXJ7enzPRaby7+ypR6Xmk5xXSwMGGf/QO4PXujQHIyFcx8/ANdoclEJ+ZT317a1q6O/DT+K7YWppr4h6RkkPbb45UOeefXujK0JYebAuJ46tj4dxJy6WFuwP/fqwljzVzB2DlH3dZcjqS+Mx8cgqLaO7uwLwn29GnsRsAyqx8Pvw1lIPhSdhamvF8oA+fPdYSawvT1lgWQgghhBBCCCGEEEIIIf4OamUAGEoHga8mZNRWcELUSEpyCoWq0ml4OwS2Y0D/vgB0AZ7W8Qbvhk3f892K1ZiZKWjbpg1vTZtK61YtgdI1gPsNHArA22++zsQXxlJQUMDnc77mxs1wEpSJ5Obm4uTkSJegzrw8aSIBTUoH0IzdD2D0Cy9yM/wWvXp2Z+G8rwFYuWYdJ0+dRpmYSFpaOgqFgiaNGzH5xQn079enwjmcPXeedRs2c+VaKLm5udRzcMDHx5vuj3Tj9VdfrnLOoWHXeeHFqp8DNPTxZtf2rQCkpaWxdPkqjh0/QXpGOl5eXgx7YggTxo3F0rK0Gom4HcnS5Su5c+cuqalpZGVn4+LiTJ9ePXnz9ak4OTlqwk5NTWPJdysIPv4bWVlZeHl58fSwJxg/bgzm5qWDiipVEavWruPXfQdQKhOxs7OjYUMf/vXxBzRv1lTXpTfZnusJxGbm83r3xgxp7sHu6wksOxOpGQC+psxk7PfnMVPA4809iEyrOA3zyj/uMvPwDerbW/FY0waciU7Teaz391zj8K0khrTwwNvRBjvLigOY9lYW9GnszNHbSXz46zU6+zjTs5FrlXCOR6ZwJy2XIS08UGYXsP1qHOdj0rjwVn9yVcUE307G3sqcJ1p6cD42nQUnbxOTkcfG0UFVwopKy+N8bDp+zrZ09/fgUHgS7+65SgdvJ3r4uzL5x4vsua6ko7cTQ1t4sPFiDEdvJ1NQVFJhANjR2oIXO/sBcDM5m1N3U3G0tqBlAwd+CU1gwtbzONlY0rORK8duJzN8/WmOvdqLoIYuXI7PICwxi84+zjjbWnL4VhKjN5/lxnuPYWdpzshNZzkXk87QFh7EZ+XzzYkIbC3N+eRR49/iF0IIIYQQQgghhBBCCCH+Lmr19anE7ILaDE6IamvQwB0He3sAftnzK5/8+z9cuqx/DerU1DTy8/PJzc3jj7PnmPrGdFJSUnXuX1BQwO69+wi/FUFWVhbFxcWkpqax/8Ahxk96havXQk3aT5dDh49yOeQKCQlKCgoKyM/PJzTsOu9++E/O/HFWs9++Awd5ddrbnDp9RnOc9IwMroWGcfBQ1TczDXFwcAAgLy+PF195jR+3/0xScjIqVRFRUdF8u3Q5n/x7pmb/qKhojhw9xu3IO6RnZFBcXExycgrbf97FPz74WLNfWno6Eye/yvafd5GamqYJb+G3y/jiq7ma/ZYsW87ylWuIjomlUKUiPSODq9dCqfdnvGrLqrNRALzQoSEDmtbH29GGPWFK4jNL14T+4XIsxWo1H/VvzrYXujDvyXYVvr/pYumawd+PCeKHsUFMDvLTeayC4mIA2ns5MuOxlnw1tOIU6E+09GDbC114t3fpAPfxyGS9cV/ydCAnX+vNwGbu3E3P49ebSs02H0dbNo8J4uwbfalvb8VPV+NRZule53pQswZsGduF9/qUHvvY7WTS81Tsua7Ezc6Ko1N68c2wdrjaWWr9vruDNUufac8Xg1sTl5mPuULBxtGdaeJqz+LfbwOwYVQnfp7QjXlPtqNEDUt+j6wQxts9A9j94iP0a1KftDwVIfGZHL6VxLmYdAYE1GfVyI5sH98VBysLtlyO1Zs2QgghhBBCCCGEEEIIIcTflcyfKR5KNjY2/OufH2JhUfp26p5f9/PSlNd5buwEjgYf1/qdkSOe5qctm3jj9VcByM7O5kjwMaOON37caLZv3cy/Pv4AKysr8vPz+Wpu1Smjjd1Pm44d2vPztu+Z+9UXmrdud/6yF4CioiK+nrsAAB9vbzavX82ZE8H07d1Lb5gtmjcj+OBegg/u5fD+3bRp3QoonfJ6xqf/B8DyVWuJjo4B4N3pb7Jx7UqeerL0begDh45w/ETVNcLnfD6TbZvX079vbwAuXrpMVFTpQOnK1euIjYvDxdmZ1cuXcGDPTiaOHwfAjp2/kKBMBODM2XMABHXuyMnggwQf3Muq777Fy8vTqPQyRmxGHodvJWFlbsbqc1G8vesKthbmFKvVbLpUes5xfw4EN6+vfeC5bHszN3uDx/vPoFYEuNozJzicZl8f4oujN7Xu5+NkC0Bansqo8+jhXzpV8u2U3CrbHG0saedR+vb1nfQ8g2GVP3ZOYem6yDYWZliZG9dcvLrjEnfScvl8cGsGNmsAQGRqabwCPUvj0d7LscLnVeLgaANAam4hsX+m75GIZLw+30fjLw+SXVhEdIbhcxFCCCGEEEIIIYQQQggh/o5kAFg8tAY9NoBN61Yx5PFBWFtbAxARcZt3P/wnGzb9UGV/Hx9vGjfyZ0K5aYjj4hOMOparqyuN/P0Y8fRTmimmr14LJS09vVr7aWNvb4efny/9+/YmsF3pm6MxsaVvQUbeuasJY9yY52nZojmWlhZYWOqf5d3c3BxHR0ccHR1ZvXYD10LDMDMz44tZM2jWtHRN74OHS98e7hLUmXFjRtG6VUs+ev8f2NqWDhQeOHi4SrgNfbwJCGjC6FHPaT6L/jOux38rHTC2tLRk9boNzJw9h7DrNwBQq9Waf/s29AHgcsgV5i1YTFx8Ah07tDeYTqbYfKn07d7C4hJWnr3LyrN3iUgtneJ5w4XSAWs/59Lz1DW1s5+Lnd7t5bX3ciLknf7snNANNztLZh6+wdWEzCr7Kf78v9rI8whPzgbAy9G6yrYStZrbf56TVz0bg2GVP7aPky3N6zsQm5nPsHWneXX7JZRZumd6WH7mDrtCExje2ou3/1y/GKCJa2kaXYzLqPB//z/TrkocFGVxUGvSv52nI/sn99D8t2fSIwbPRQghhBBCCCGEEEIIIYT4O6q1NYCFeBA1axrA5zM/JTs7m+07f+Hbpd+hUhWxdPlKxo15Xut3LCwssLe3IzMzi+zsbJOP2TTgfwNfaWnp1Heruoartv1cnJ2NPoaTkxOAJn5lA2aAZmDWFAcOHWHT91sAeOO1KfTq2V2zLTk5BSgd1C1jY2ODm6sLMbF5pKTqnibb+c94AuRklw5CJqeUhpeYlERiUlKV7xQVlb71Ov3NacTExhF2/QY/7djJTzt20rd3L/79yT8rrCdcE99fLn3L9+iUXjzi5wJAcYmaJl8d5GZyNudi0pjQyY8FJ26z+NRtrsRnUFRScVj21W6NOHU3lUnbLtI/IJrw5JwqxykzavNZLMzMcLW1JFdVAoC1RfV/hzN+y3kcrCzYdzORetYWDGnugaqkNNzI1BxGbT5LTEY+d9PzeMTXBT9nWxL0TAOtzfdjgnhn9xVOR6VSz9pSk9fK5zmAmIw8/rm/dDpzNWpe23EZgBc7+/J698Yci0xh4tYLdPV14bfIFBTAa90bY0ifxm60dHfgSkIm7/xyhSau9iTnFDChsx+9GrmZdC5CCCGEEEIIIYQQQgghxN+BvAEs/hYcHByYMG4MgwcNBCA/Px/ln1MNa6P4c3RLrTb2Hcz/SUz637qtDRq413g/bf4Xv9K/fRs21Ex3vWPnLhKTksjKyiIjI8NgWLFxccz64isA+vfrw4sTXqiw3e3PAezomBjNZ3l5eST/uT6ym6v2Ae7SeP7v32Vp6VivHlA6tfOFMyeq/Dfw0QEAeHl5snHtSpYtns9jA/oDcOy3E6xYvdbgORnjYmw6YYlZ+Dja0M3XRfO5uZmCp1t7AaXr/zZ2tePXlx6hdyM3LsVnci4mncYudnT2KR2wfz7Qh5XPdqSJqz2HbyURl5lPWw9HmtWvOiW0qljNofBE1p2PwsXWkvnD2tFMx9TSxojPLCD4djIdvZ3YMb4bbvZWmm2W5macj8kgPDmbwc0bsGF052odo1WDeuyf3IPkT4dy9Z3+mJspsLcyx9G64lrAIfGZ5BSWrnG8KzSBteejWHs+itupuTzV2ovVIzvi62zL71GptPaox48vdK2Q7rpYmpuxZ9IjjAr0IS4zn19vKEnILsDcTGHwu0IIIYQQQgghhBBCCCHE35G8ASweWu9++E8CGjcmsF1b7O3tiItP4NTpM0DpW76OTo4UFxXVyrHCw29x524U8QkJ/LRjJwABTRrjYG9PZmamUfvVhLW1NeNGP8+6jZsJuXKNwU8+Y9T31Go1//7PbLKzs3FxceGdt6Zp4qtQKKhXrx4DB/Rn/abvOXf+Ihs2/UBQ5478sPVH8vNL3yTt06unSXF9pFsXftnzK+fOX2TO1/MY9sQQLCwsiI6JwdLSUrNu8ZGjx/Dy8qRVyxZ88s8PuBEeTnR0TIWB6Jro6ONM3qxhWrcteKodC55qp/m7m58rB17uoTOscR0bMq5jQ4PH3D6+q9bPnwv05rnA/71hPb6TL+M7+Wr+XjQ8kEXDA6t879ArPfDUMa1zQydbLk/vX+Vzz3o2Fc7b0LGn/3KFkPgMvB1tuJJQOsg7oo1XlTeAh7b00JmeAGM6NGRMB+1pVPn8VjzbkRXPdtT87e1oy9rnO+kMWwghhBBCCCGEEEIIIYQQ/2PR6cTCuo6D+Ft7/J6EeuduFEeDj3M0+LjW7c+PHIG9nV2Fwdma2LvvAHv3Hajw2bTXplR7v+p4feoULCws2LNvP0lJydR3c6O4pJjk5JQqg3VljgYf5/yFSwCkpaXx1IhRmm0ODg4cP7yPlye/yOGjx4iNi+ObhYsrfL9b1yAeHdDPpHi+9uor/H7mD5KTU9j643a2/rhds21A/76aAeCv5s7XOkV0l87Ve5NVVI+dpRlRGXlciMvA3d6KSUF+/Gdgq7qOlhBCCCGEEEIIIYQQQgghdJA3gMVDydnZiVcmv8jpM2e5GxVFdnYOdra2NG7ciGFPDGHE00/V6vEaN/InPSOT7OwsGvn7M3nSRPr16V3t/arD0tKCaa9NqTCgPPnVaSQnp2BnZ6f1O6lpaQbDdbC3Z82KpSxbsYpjv50gIyMTL08PnhgymBcnjMPc3NykeHp6NGDTulWsXL2OE6d+JykpGUtLS3y8vWnVsgUAKlURHdq3I+TqNZKTU7CyKt3+1JNDGTta+9rNfyfa3uwtU/kN35r6YkgbvhjSptbCE0IIIYQQQgghhBBCCCHEvaXo1K2X6YucClFLjh7YU9dRqLbMzEz6DRwKwNtvvs7EF8bWaL+aOn3mLAlKJa1btcTe3o7TZ87y+ZyvAXj2meH830fv35PjPojCw8Np00YGLQVcu3aNZs2a1XU0hBBCCCGEEEIIIYQQQoj7Rt4AFuIhcejIUbb/vKvK5/Z2drwwdpSWbwghhBBCCCGEEEIIIYQQQoiHjVldR0AIUTsa+fvTqmUL6tWrh7m5Oa6uLgx8tD9rVy7D38+vrqN3X1laWtba+s7iryszMxNLS8u6joYQQgghhBBCCCGEEEIIcV/JFNCiTv2Vp4AWDy6VSkVsbCwqlaquoyLqkJWVFd7e3jIILIQQQgghhBBCCCGEEOJvRaaAFkI8dCwtLWnUqFFdR0MIIYQQQgghhBBCCCGEEOK+kymghRBCCCGEEEIIIYQQQgghhBDiISEDwEIIIYQQQgghhBBCCCGEEEII8ZCQAWAhhBBCCCGEEEIIIYQQQgghhHhIyACwEEIIIYQQQgghhBBCCCGEEEI8JGQAWAghhBBCCCGEEEIIIYQQQgghHhIyACyEEEIIIYQQQgghhBBCCCGEEA8JGQAWQgghhBBCCCGEEEIIIYQQQoiHhAwACyGEEEIIIYQQQgghhBBCCCHEQ+KBGAB2rOdY11EQQgghhBBCCCGEEEIIIYQQQoi/vDofAG7Xrh0vv/JyXUdDCCGEEEIIIYQQQgghhBBCCCH+8iyq+8WGDRsyYMAA/Pz9sTA3IyYmlmPHjhEeHl6b8RNCCCGEEEIIIYQQQgghhBBCCGGkar0BHBAQwCtTXiErK4sN69ezcuUqYmJimTBhPB06tK/tOAohhBBCCCGEEEIIIYQQQgghhDBCtd4Afuqppwi5fJkdO3ZoPouJiaGkpIihTzzJlavXKC4qYtTo0fj7++NgZ8ftO5GsXbMWCwsLhj4xlPbtO1CkUpGRkVEhbF8/P4YOHYpHgwYkJSWyc+cu4uLiALSGN3ToUDp07Ii1lRURERGsX7++BskhhBBCCCGEEEIIIYQQQgghhBB/XSYPALu6uVK/fn1++vHHKtvOnj1H37798Pfz4/bt27Ro0Zxfdu7i5q1bWFlaAjB48GAaN2rE2jWrycvLp0+f3jRq1BgAB4d6vDhhAkeOHmXjpUv07NWTMWPG8M0331BSUlIlvGbNm9GxY0dWLF9OZlYW9erVq2FyCCGEEEIIIYQQQgghhBBCCCHEX5fJU0A7OJQOsmZkZlbZVvaZvb2d5rP0jAxysrNJS0sDoGOnThw6dJjo6BiSk5MJD7+l2bdjp45kZGZw8uRJcnJyOHz4CM7Ozng08NAaXkFePpaWlri6uZGfn09SUpKppyOEEEIIIYQQQgghhBBCCCGEEA8Nk98Azs7OAsDJ0bHK9M1Ojo4A5OTkav2utbU1NtbWmsHgyhwd6+Hu3oAZM2ZoPlOjpp5jPeIT4qvsHxUdzc5duxgyZAhDnxjKoYOHCAkJMfWUhBBCCCGEEEIIIYQQQgghhBDioWDyAHBqSipKZSKdg4KIio6usK1zlyCysrOJiorS+t2CggJy83Jxd3fXrOtbXkZaBnHxcSxdstTo+Fy8cIGLFy7QsWNHnnvuOWLjYklJTjHtpIQQQgghhBBCCCGEEEIIIYQQ4iFg8hTQADt2/ESHjh14avhT+Pr54dPQh0GDBtK3d292/fwzRUVFOr979o8/GDhoIAFNA6hXzwHHP98aBggJCaFBgwb069cXFxcXnF2c8fLy1hmWk5MzHh4eWFlZkpCgBNTYWttW55SEEEIIIYQQQgghhBBCCCGEEOIvz+Q3gAGio2NYtWIlAx59lEkvvoiZmYK4uDg2bNjIzZs39X730OEjFBUV8/Twp3FydCQvP4/wWxEAZGZlsmbVagYPGUzvPn1Rq0u4di2UHdu3aw3Ly9uLp4cPx97ejuycHI4dO05MbEx1TkkIIYQQQgghhBBCCCGEEEIIIf7yFJ269VLXdSTE39fRA3vqOgpCCCGEEEIIIYQQQgghhBBCPDSqNQW0EEIIIYQQQgghhBBCCCGEEEKIB48MAAshhBBCCCGEEEIIIYQQQgghxENCBoCF0KO4uJjk5OS6joZ4yOTn55ORkVHX0XggSdr8fWVmZpKXl1fX0Xgg1WbaFBUVSRkzgaTXw0WlUhEWFqb5Ozs7m8jIyDqMUUVSD/69KZVKEhIS6joaD5W67lf+Xcq0obYyNzeXnJyc+xij2peenk5RUVFdR+O+uZd5V56x6FbbaVOX+VapVN6X4/xd6tnacL+uiRBCiAeLDAALocfu3btZuHCh1m2hoaG88sorZGdn1/g4O3bsYMaMGTUO50GRl5fHlClTCOCaLJwAACAASURBVAkJqeuoPJDmzZvHvn37tG6rzXxVHXV9fH1p87ApKCgwet/7WUeo1WpUKlW1v5+Xl8c333zDhAkTeOGFF7h69apR33vttdeIiIjQuq22zv+vUDdpyxf60sZUq1atYtOmTbUS1r2kLR+pVCqWLFnCxIkTGTduHGfOnLnn8firpJfQrXz9cevWrQp1yb59+9i4ceM9PX5xcTHFxcVG7VubZf1eMKXdut/qKm612a4sW7aM33//vRZi9WC7V31NbWWtuv3K2oqjvjL9+eef8+OPP9YofHgw+jaG2sqPPvqIc+fO3ccY1a709HQmT55Menp6XUelWgzVj/e671mZvmcstZmfH/RnLNruufSljanuZb6tXH9VzkMRERG8/vrrWr9bk2tcm3m1pve891pN+zWmXBMhhBAPNxkAFg+9rVu38txzz9X6r908PT0ZOHAgdnZ2NQ6rdevW9O7duxZi9WCwsbFh4MCBeHt713VU/nJqM1/9FY//d/HDDz+waNEio/e/n3XEp59+ysGDB6v9/b179xIdHc2XX37JwoULadq0aY3jVFvn/6DXTSEhIUydOvWeHkOtVt/T8GuLtnx05MgRrly5wqxZs1iyZAnt2rW75/EwJr3ef/99owYRX3zxRYKDg2sjWty6dYvZs2czfvx4xo4dy/vvv/+3GDiqjrrsY6lUKsaOHUtMTEydHL82mdpu3U/3o+7U5UFvVx5E96KvWdtl7X70h3v27EmbNm1qHM6DkAcNtZV/lb6HLn/l+Buqu+uy/tSmNvPzg/6Mpab3XIbcy3xbvv4ytX9Q3Wtc23n1Xqd/TdT0XB/kPpsQQoj7z6KuIyDEvVRQUMDevXuxt7dn9+7dTJ48udbCdnV15fnnn6+VsFq0aEGLFi1qJawHgUKh4LnnnqvraPwl1Wa++ise/+9CpVKZdFN+P+uImv4SOjIykqCgILy8vGopRrV3/g963VRcXExJSUldR+OBoC0f3b59m06dOuHr61uHMauqcePG3Llzp8Jn06dPp3fv3jz77LMApKamkpWVRePGjWt8vJCQEGbNmkWvXr348MMPcXZ2JjIyEnt7+xqH/TCqyz6WWq1+aKYMNbXdup/qsu580NuVB9G96GvWdlm7H/3hfv361Uo4kgeFPobq7get71mb+flBf8byIL99akj5+svU/kF1r3Ft59UHOf1req4Pcp9NCCHE/ScDwOKhdvz4caysrBg7diwrV65k7Nix2NraVtkvPDyc5cuXEx0dja2tLdOnT6d9+/YA3Llzh8mTJ5OdnU2rVq2YNm0a7u7uRERE8MEHH/DTTz8Bpb+yCw4OJj09HWdnZ7p06cKYMWOws7MjISGBefPmoVQqKSoqws/PjzFjxhAYGAjAzp07OX/+PDNnziQhIYG5c+eSmJhIXl4eHh4eTJ06VfMLy5KSEn788Uf27dtHbm4uzs7O9OnTh7Fjx1Y4p2XLllX5ReMnn3xChw4dCA4OZseOHaSmphIQEMDLL79Mw4YNAdi8eTPHjx8nIyMDc3NzevbsyeTJk7GysgLg+vXrrF27lujoaHx8fJgyZYrWN/zGjRvHxx9/TNu2bTly5Ajbtm0jJSUFNzc3vv76axwcHCrsv3r1aoKDgykuLqZ58+ZMmzaN+vXrVwn37t27fPfdd0RERGBtbY2npyfvvPMOXl5eFBYWsnnzZn777TfUajX9+vXjhRdewMysdLKDiIgIVq9ezd27d/Hw8GDMmDEEBQUZTNekpCQWLlxIdHQ0+fn5jBgxgueff54PPviA6OhobGxs6NatGy+//DIWFhYGrzfAoUOH+OWXXwAqpHHlfJWRkcHKlSs5f/485ubmPPPMM4wYMaJCmsydO5fr16+TmZlJ69at+eyzz0hOTmb16tVcvXoVBwcHRo0aRd++fQ2ea+Xjq1QqtmzZwvHjx1GpVAQFBfHiiy9ib29vMK+WP9ctW7awYsUKAC5dusTcuXNZv349CoWCa9euMXv2bNatW6c3bQzlP1PTobwTJ06watUq8vLy8Pb2ZvLkyVrfyigqKmLbtm0cOHCAvLw8OnTowEcffaQ37128eJGNGzeiVCpRq9V88MEHAJw+fVozODRr1ixatWqlM0+ZUkeUp6vsGUqXVatWsWrVKszMzNi2bVuVcPXVIYWFhfz000+aPLRy5UpcXFwMxglgyZIlpKamYmdnx8iRIxk6dChQtY7UV77++OMPNm3aREpKCubm5rRu3ZqJEyfi6ekJVKybDNV3+uqb8sqHY2trS//+/VEqlYSEhKBWqxk8eDDjxo3T7H/o0CF+/vlnMjMzadOmDVOnTsXJyQkoXZO0LF+MGTOGkSNH6k0bQ9cjKSmJJUuWEBYWhqurK2ZmZrRu3RooXTNr0aJFhIaGolAoePrppzXHKxMfH8+MGTNIS0vDxcWFp59+msGDBwOlU+sdPHiQ1NRUbGxsWLJkCRYWFnrr4Zrko4KCAg4dOqSZznPevHn4+/vrTE9ddbe+ekRfeunSpEmTClNb3rp1i5iYGE6ePKm5lpGRkVhZWWnOT9+566t3AVasWEGPHj146623NMcs+y7ob+tOnz7N5s2bSUtLA6Bjx464uLhw6tQpsrKy6NixI2+88UaVOr6goIAmTZoQFBTEsWPHSEhIoGHDhrzzzjuaY5taP+tq3wy15QAJCQlMmzaNxYsX4+XlRX5+PuPHj2fOnDkEBASgUqkYP348//73v7lx44am/jDFzJkziYqKIjs7Gzc3Nx599FEuXLhAREQEDg4OvPTSS3Tv3h0w3If5xz/+AUBgYKDecwf9Zb2MvnJZnq4266OPPqJPnz6asDds2EBCQgLvv/++3npBW7tlbJ+yJnWjrrJcnra6U19ZqE566mq/7kW7Asb1uU+cOME333xT4bNnnnmGF154gfT0dFatWkVISAj29vYMHDiQ4cOHY2ZmZrAvYWz/qXzeAbh48SLz589n3bp1OvNS5b5mWVnLysrC3t6+Sr7//fff2bhxI8nJydjb29OoUSM+/fTTKnGBqmUN9PcrdeW5ynHUVocZkzdAd5mePXs2AQEBjBo1ymDfRt99Jtybvo2+vrGhtvLq1ausWLECpVKJr69vhfWBTe076LpP13f/bsw5GMp3e/fuZfv27eTn59OoUSOt+Q1Kp8KNiIggNzcXDw8PHn/8cYYMGYJCoTC5H6JWq1m7di3BwcEUFBTQrl07/u///g/QXx8YOhdtdXd51el76uvLltHXnuh6xgIV87OhvK8v/e/FMxZT+0bVuefSlzb66nVD+dbQM5kFCxagVquZPn06ABs3biQ6OpqPP/4YKJ1ZLywsjM8++6xC/aUtj5XVN2+88QaJiYlV0rv8NS7fNy0sLKxyzjXJq4bad333vG+++SZxcXEVPvvhhx+wtLTU2/cxVB6NKTu6ztXYfk11rom+/rcp9w9CCCEePDIALB5qBw4c4NFHH6VHjx6sXr2a48eP8/jjj1fZb9WqVbRr147PPvuM7OzsCh3h+vXrax5qLF++nNWrV/Phhx9WCaPszaRnnnmG5ORkVqxYwdKlS3n33XfJyckhIiKChQsXYm5uzqlTp5g1axZff/01/v7+FcLJycnh9u3bLFmyBIBff/2VuXPn8t1332Fpacm2bds4evQo77zzDt7e3mzfvl3rmievvPIKL730EgCLFy8mKSmJNm3acPnyZb777jveeOMNAgIC2L17N//5z39YsGABNjY23Llzh6CgIEaMGIFSqWTevHn4+vry5JNPkpaWxuzZsxk5ciR9+/Zl165dzJs3j0WLFmFubq71GuTl5bF06VL+8Y9/0L59e5RKZZXBX4DHH3+cp59+GpVKxTfffMP333/Pm2++WWGfrKwsPv30U/r378/bb79NUVER06dPJysrCy8vL7Zs2cKlS5eYMWMGRUVFfP7553h7e/PYY4+RkZHBjBkzGDJkCG+99RZXr17l66+/Zs6cOTRu3FhvumZmZhIaGsrixYuxtrbWxOe1117D1dWVhIQEZs+eTfPmzRkwYIBR17t9+/aMGjWKtLQ0vv76a00aV/b1119ja2vLF198UeHY5V24cIFXXnmFDh06UFBQgFqtZu7cubi7uzN//nxu3rzJvHnzaNasGd7e3kbnIYAtW7bw+++/8+6772Jra8vy5ctZsmQJ77//vsG8WqZdu3YsXboUpVKJh4cH165dIzc3l6ioKPz9/QkLC6Nly5ZYWFjoTRtD+c/UdCivdevWmjTeunUrixYtYtmyZVXSY+vWrZw8eZL33nsPDw8Pzdpw+vJeVFQUZmZmLFiwgKKiIurVq0dISAjdunXT3GCXpZeuPFWesemuq+wZky6TJk1i0KBBKBSKKmlgqA4BePbZZzU35GU3m/riVGb48OEEBQVx/fp15s2bR6tWraq8MWmofMXHx2NlZcXcuXMpKChg69atzJw5k2+++aZKGdJX3xmqbyqH06VLF0aOHMmtW7eYM2cOQ4cO5auvviI2NpY5c+YQFBREixYtuHDhAmvWrOGDDz7A19eXRYsWsXbtWt5++20AHBwcND+WKCsT+tJG3/WwsrJizpw5eHp68t///pf8/HyWL1+uCXPnzp0UFhayaNEizMzMtK415erqyscff4yLiwvnzp1jyZIldOjQAU9PT8LCwjTlNTs7Gzs7OzZs2KCzLNRGPhoyZAgTJkwASsuNvvTUVnfrq0cUCoXe9NKladOmZGRkkJSUhLu7O6dOneKxxx7jxIkTxMfH4+XlRUREBAEBAZibmxs8d331bnx8PHFxcbz22mta42KorVMqldjY2LBo0SIyMjKYM2cODRo04F//+hcAc+bMYf/+/YwYMUJT13z33XeUlJSwatUqdu/ezXvvvYebmxurVq1i9erVfPrppybXz6C7fdNXn5bx9PSkQYMGhIWF4eXlxY0bNygpKeHGjRsEBARw69YtzM3NadasGTdu3DB4DbW5ceMGr7/+Oq1bt+bgwYNs2rSJt99+mxYtWnDs2DGWLl1K586dsbKyMtiH+eqrr/D19dU8oNXXthtTD+orl+XparP00VcvVG63jOlT1kbdqKsfVl7lutNQWTA1PY3tz9ZWu2Jsn7tHjx507doVgKNHj7J582YGDhwIlOYze3t7Zs+eTUpKCosWLcLa2pqhQ4fq7UtYWFgY3X/Sx5g2BkrL2tSpU2ndujWhoaHMnz9fk++vXLnCggULmDJlCoGBgVy7do2lS5fqPGblsga6+5WG2uPytNVhZe5H30bffWZltZUHdfWNS0pK9LaVKSkpzJo1i5EjR9K7d29iY2OZP3++ZrupfQdd9+n67t8NnQPoz3e///47mzZtYtq0aQQEBHD+/HnCwsKqZjhK14t++eWXadu2LeHh4Sxbtgxzc3Mef/xxk/shISEhBAcHM2vWLFxcXDRrtxqqD/SdC1Stuyszte9pbNnRVwfUxjMWQ+lfXm09YzGlb1Tdey59aaOvXteXb41pw9q1a8fWrVs1f4eGhhIXF4darUahUBAWFqZz+ZXKeez27dsAvPvuuzg4OLBv3z6t96uApm86f/588vLyWLFihc78YGpeNdS+67vnnTdvHmq1mvz8fP75z3/SuXNno/o++sqjKe1OTfo11bkm+vrfptw/CCGEePDIGsDioXXr1i1u375Nnz59sLKyonv37jrX+LCzsyM+Pp6ioiI8PT0rdIYdHBzw8vLCy8uLoUOHEhoaqvOYTk5OuLu706pVK6ZOnar5RVwZHx8fPD09GTFiBO3atdO75oiHhwceHh48//zzZGRkaH59uHfvXkaPHk27du1wc3Or8GZdeebm5lhZWXH8+HFCQkJ47733sLS05MCBA/Tt25eePXvi6enJpEmTUKlUnD9/XvPdevXq4erqSqtWrejZs6fmxuHo0aO4ubnx1FNP4eTkxKhRo0hMTCQqKkrneVhYWGBtbU10dDTm5uY6p7/08fHB1dUVDw8PBgwYwN27d6vs89tvv2FnZ8fEiRPx8PDAx8dHs62kpIR9+/YxatQoGjZsSKNGjejbt6/mvE6ePImTkxNjxozBw8ODRx99lKCgIM01MCZdvby8cHV1xdXVFSid9tPJyYkWLVrQoUOHKnHWd73d3d1xd3enefPmFdK4vLt37xIWFsa0adPw9/fH09OzysPdMvXr18fZ2RkPDw/Cw8O5efMmkydPxtXVlUceeYSAgAAuXLhg9LmWOXjwIGPGjKFFixb4+fnxyiuvcPr06Qq/5NeVV8tv9/b25sqVK0Dp9KWNGzfm2rVrAFy5coWOHTsaTBtj8p8p6VCeq6srnp6euLi4MGzYMJKSksjJyamy34EDBxg7dixt2rShfv36NGrUyGDeA7C1tcXNzQ0PDw/NL9YVCgVWVlZYWVlpbjoN5anK6aov3XWVPWPSxczMDCsrK60PiYypQ8rqn/KDv/riVMbHxwc3Nzd69uxJkyZNdD5sK9tXV/mytbXFw8MDPz8/3nzzTbKzs7Ved9Bd3+mrb7RxcHDAycmJzp0707hxY9zd3fH09KRz5874+/trHiLt2bOH/v370759e1xdXRk+fHiFtAM0aVf+AbautNF3PSIjI7lz5w6vvvoqDRs2pGnTpjRp0kQTpr29PSkpKWRlZWnKTWXW1tb4+/vj6OjIgAEDcHZ2rlDmnJ2dcXZ2pmHDhkaVhTLVzUdlebOs3BiTnuXrbn31iKH00qVx48ZYW1sTHh4OlL6t1r9/f4KCgjh58iRQWu7KpiE0dO766t2yh8Fubm5a42KorYPStdecnZ3x9/ene/fu2NnZ4e/vj7+/P127dq3ywLN+/fo0aNCAQYMGUVRUROvWrfHw8OCxxx7T7Gtq/ayrfTMlD7Vv315vuxIYGKjzx2nGcnJywsXFhaeeegoAX19fPDw8eOKJJ8jJySE+Ph4w3IexsLDAysoKCwsLg227MfWgoXJZRlubZYi+eqFyu2VMOa7NurFyP6yy8nWnMWXBlPQ0tj8LtdOuGNvnLqsT4+PjWbduHdOnT9eUsevXr/Paa6/h4+NDYGAgzzzzDPv376/wfW19CVP6T/oY08aUcXFxwc3Njd69e1fI9/v27aN3794MGDBAUxfpU76sldHVrzQmz5VXvg6rfMz70bcxdJ9ZXm3kQV19Y0Nt5cmTJ/Hy8mLkyJF4eHjQqVOnKm+3mdJ30HWfru/+3dA5lNGV74KDg+nfvz89evTAw8NDM9uDLmV5rEePHjz99NOamUrKGNsPsbOzo6CggISEBOzt7TVvFBpTH+g6F9B+z1GZKX1PY8uOvjqgNp+xGEr/8mr6jKWMMX2j6t5z6UobQ/W6vnxrTBvWoUMHkpKSSEhIIDc3l7i4OGxtbYmKiqKwsJCwsLAK9+zl6cpjZe3+s88+q/V+tYyNjQ1ubm40bNiQJ598Um9+MCWvGmrf9d3zWlpaYmVlxZo1a3B2dtb8ANWYvo+u8mhqu1Pdfg2Ydk2M6X+bev8ghBDiwSFvAIuH1uHDhwkICND8mrlXr14cOnRI8xZOedOmTWPDhg1MmzaNLl26MGnSJK3TsDg7Oxv19gSgWaNQqVRqvdHy8/MjJibGYDh2dnZYWVmRnZ1NTk4O2dnZRq9/GB8fz5o1a3jnnXc0D4sTExNp3ry5Zh9zc3MaNGhAUlKS1jCcnJyIjIwESn99HB0dzejRozXbFQoFaWlpOh+EWVpa8sknn7Bp0yZ2797NkCFDGDVqVIUOe0lJCT/88APHjx8nKysLKysrrelfNo2YtvTMyckhPz+f+fPns2DBAqB0PbCyBxKJiYlVftnu6elJVFSUyekKpVPyLF++nCtXrlBUVIRCoaB3794699d3vcunceXzLetomyI1NRWAV199VfNZSUkJrVu3Nulcc3Nzyc7OrpBuZf9OSkqqch3K59XKunTpwsWLF+nWrRspKSlMmjSJY8eO0bdvX8LCwnS+zVaT/KcvHSr77bff2LFjhybNoXTtnfJycnLIysqq8uDPUN4zlql5qoyudNdV9kxJF21MrUOMiZO26YGdnJyMrm/1lS9ra2s8PDxQKpUGwymf3/TVN4Y4ODiQn59f4e/c3FygNB+HhIRw6NAhzfbi4uIK+xsTz7K00Xc9LC0tsbGxwdHRUWs4w4YNIy8vj08//RRfX18mTZpUpX2MiIhg3bp13LlzB3Nzc3Jzc3Wus2hKWahJPirP1PTUV48UFRXpTS9dzM3NadOmDTdu3MDV1RW1Wk3z5s3JyMhg/fr1jBgxghs3bmhmedB37obq3Xr16gGl9Zu2wRR9bZ02Dg4O5OXlVfhb1w9PtO1bPl+bUj/rat9MyUNdunRh8eLFlJSUcPHiRV566SW++uoriouLOX/+PIMGDdJ6HtVhY2ODhYWFJl/Z29ujUCjIzc01ug9j6Ny10VUPGlMudbVZgN56zZh6oYyp5fhe142V42ZsWTAmPU1pv8qrbrtiSplSqVQsWLCAwYMHax7OJyYmYmNjU2EQw8vLS+e1Kd+XKBtYMaafUFt5qbzy+V6pVBrVFzJW5X5lbeS5uujblL/PLGsXdKluHtTVN05JSdHbVqakpGidulUXQ/W+rvt0Y+7fjenflyl/bVJSUozuF1fm5+ent8+pr2x36tSJKVOmsG7dOlavXs3YsWPp3bu3yW2sKfnMWOXD1Fd2ytIZjK8DqvuMRVveN5T+ZWryjKU8fX2jmt5zQcW0MVSv68u3xtRTrq6umgFqV1dX2rZti6OjI5cuXSIlJQVnZ2e9P37SR99zAn3nXB3l86op9zHa/Pbbb5w/f5558+ZpflRYnedpppYdbUzt4xtSuQyY8jzDlPsHIYQQdU8GgMVDqbCwkJMnT1JYWMjEiRMrbCsbGC7Pzc2N6dOnk5KSwty5c1mzZo1mupTyDD3kKS8xMREo7UiXrZVRebuuN3i0HVetVmNvb4+trS1JSUkGH6Co1Wq+/fZb+vTpU2FdEHd3d80bK1Da4UxMTNR5o152bCj9pWuTJk346quvjIp3mRYtWjBz5kzCw8OZPXs29evX10xPB6Vrdu7fv5/PP/+chg0bcvDgQfbs2VMlHFdXV83bPpXVq1cPW1tb3nnnHTp37lxlu7u7e5VfVyYkJODu7m5SupbZsmULaWlpLFy4EHt7exYuXKh3f33Xu3wal+fm5kZ+fr5mzRpj1a9fHzMzM1atWqV1HRZjz9XOzg57e3vi4+M1+5blHXd3d5KTk40+l+7duzNjxgx+//132rdvT/v27Vm6dCmnT5/Gz89P55vNNcl/htKhTFZWFvPnz+f999+na9euJCQkVJl+HEof+NvY2JCQkFBhDT5DeU8bKysrVCpVhc9MzVPl6Up3bWWvcePGetNFW9zKM7UOMSZO5esDQ+ekjb7yVVJSolnrypDyx9RX3xhS+cFq5WndOnTooPkVeXmWlpZGPZQoH09918Pd3Z38/Hyd529pacm4ceN49tlnWb9+PXPmzNFMNVbm22+/pX379vzrX/9CoVBoLRtlTCkLNc1HZfSlp679ddUjkZGRetNLn06dOnH48GEKCgro1asXCoWCjh078u2337J//36Ki4s1D+X0nbuhetfR0RE3NzeOHj1aZQ2/sn10tXXaKBSKCvmz8t+V99X1t6n1s672zZQ8FBgYSHFxMSdPniQvL4+2bdvi4eHByZMnuXPnjmZa3Nqi6/z19WEsLCxQKBQV6lRT2nZd9aAx5VJXm1W2rezBdGW66gVtbYOp5bi6daMh2upOU8qCsfWcse1XedVtV0wpU2XrFo4ZM0bzWVn9n5qaqnljOj4+Xm8dWxZXY/tPUL28ZEjlNNPW36xMW1kzFHZN8lxl97tvU/4+05Dq5EF9fWNDfYuyslc2bawhhup9Xffphu7fje3fa0snd3d3nW8qGpKYmKj3uhgq2wMGDKB///4EBwezYMECAgICTG5jy5+LoX59dfqexpYdY+uA6j5j0bXdmHJRdlxTn7FUZqhdq8k9V1kcyxiq1w3lW2Pqqe7du/PHH3/g7u5Op06dcHR0ZOfOnSQkJNCtWzet4RpzHmXnYkz9pys/VCev6mvfDcU7PT2dlStX8uqrr1K/fn3N5zV9nmZs2alJv8bUa2Lq8wxT7h+EEELUPZkCWjyU/vjjDwoKCvjyyy+ZO3eu5r9hw4Zx8uTJKp2h0NBQMjMzsbKywsvLq9q/OLxx4wZ3794lOjqaNWvWEBgYWOEG5OTJkyQmJhIcHMy5c+fo27evycfo3r07W7du5e7duyiVSp1TrRw5coS4uDhGjx5NYWEhhYWFlJSUMGjQII4dO8apU6dISEhg7dq1WFhYGNXR69WrFzExMfz4448olUqUSqVmLRFdVCoV165dIycnB1dXVxwdHaukb0lJCQqFgpKSEp3rgwF07dqV2NhYfvnlF9LT07l06RIlJSWa7f3792fjxo2EhoaSmppKRESE5li9evUiIyOD77//HqVSyeHDhzl37pxmTUFj07VynFUqleZtzcpqer0bN25MkyZNWLx4MZGRkSQlJRn1y8omTZrg7+/P0qVLuXv3LikpKRWmATPlXAcNGsT333/PjRs3iIqKYsWKFXTr1k3v203aNGvWDGdnZzZt2kT37t1xcHCgRYsWrF+/nl69ehkVhqn5z1A6lCnLQ2q1msLCQr03po8++iibNm0iJCSE5ORkzZSv+vKeNl5eXoSHh3P37l1iYmJITU01Kk+ZQlfZM5QuXl5eXLhwgcTERG7evFnl5rMmdYgx9YGx9JWvxMREQkNDUSqVbNy4keLiYjp16mRS+Ibqm+oaMGAABw4c4NSpUyQnJxMbG6t5iODh4UF+fj6nT59GqVQaNUuEvuvRqFEjWrRowaJFi4iMjCQ1NbVCepfVK2q1Gn9/f83bjOWV/V1YWEhxcbHBfGlsWahJPipPX3pqo68eMZReBw8eZN26dVrD7dSpJt9CDAAAIABJREFUE5GRkZw4cUKzbrelpSV9+vRh8+bNtG3bVjO9nKFz11fvKhQKJk6cyNGjR/nuu+8IDQ0lPj6eCxcuEBISYrCtu1dMrZ/1tW/G5iFLS0t69OjBypUreeSRR4DS9VBXrVpFYGCg1jeD7OzsUKlUmmPZ2dmhVCp1TqNqDH19GDMzMzw8PDh16hRJSUlERERUu22vfEwwXC51tVlt2rTh+PHjhIWFGV0vaGu3aqscg+lluTxtdacpZcGY9KyN9stQu2JnZ8fdu3dRqVRGl6nY2Fh27drF5MmTNf2YoqIi/P39ad68OcuWLSM2NpaQkBB27Nhh1JvxxvafoDQvhYeHc+LECVJSUioMBhvTxhjSo0cPgoODuXTpEmlpaZpp3ivTVtYMqUmeK+9+9W0M3Wcaw9i+jb6+saG2slevXmRmZrJ27VoSEhJITEw0OBChr97XdZ9u6P7dlP59ZY8//jjBwcEcPnyY5ORkg2+UXrx4kYSEBK5du8auXbvo16+fzn31le2y9iA/Px9/f38UCgU5OTnVugcvo63uLq86fU9jy05t1AFgOO+bkv66mPoswBg1veeqzFC9ri/fGltP9erVi7CwMM6dO0fXrl1p3749UVFRnDx5UudsDIbyWG2pTl7V174bSv/169fTtGlTunTponmeplara9T3Mbbs1LRfU51rYurzDF303S8JIYSoG/IGsHgoHTt2jB49euDv71/h82HDhrF3717Onj1Ljx49NJ9v27aNsLAwzMzMaNSoUYVpekyRmprKrFmzKCgooG3btkyZMqXC9n379rFkyRJcXFyYOnWq1rd3DJk4cSJr1qzhk08+wcLCAnt7e61ruh0+fJiMjAxeeuklzWfTpk1jwIABvPrqq2zZsoWUlBSaNm3Kp59+anDKGSj9BfZnn33G+vXr+fnnnzEzM6Nbt25MmzZN53fS09NZunQpSqUSW1tbAgMDqzx86tatG5cvX+aTTz4hNzcXOzs72rVrVyUsLy8v3n33XTZt2sT333+vmcKsbE3V8ePH88MPP7B48WJSU1NxcXHhvffe06w/9+mnn7JmzRp2796Np6cn7733nmZaG2PTtcyzzz7LwoULefPNN1GpVDg6OjJs2LAK+9T0epuZmfHxxx+zevVqZs6cSUFBAf369auSr3R9b82aNcyYMYP8/Hy8vb354osvsLS0NOlcR40ahVqt5r///S9FRUUEBQVVeaveWAMGDODnn3+mQ4cOAPTu3ZsrV64YfZNuav4zlA5lnJycePnll1m7di3z5s3D2toaX19frWtHjh8/HgsLC5YsWULa/7N33+FRVG8bx+9NJ70nJBB6AIHQCUgRQZAuqCg2QIrtp6KCgqKCWEBAmlR9QUEQFRBFioUO0mvoSC8JIZX0uvv+EVmNpJOYEL+f6/IyO3PmOWeG3Z058+ycExOjypUra/LkyXm+93LSsmVL7dmzR6NHj5aNjY2ee+65Ar2nCiO3z15+x6VPnz6aOnWqhg0bJnd3d40dOzbbL4sbNWpU5O+QgnwfFFRen6+MjAzNmzdPERERCggI0DvvvJPvU0z/lN/3TVG1bNlSiYmJWrZsmcLCwuTg4KBHH31UFStWlJeXl/r166e5c+fKaDSqS5cuevzxx/OMl9+/x8iRI7Vw4UK9//77SkpKkqurq3ko4l27dmnt2rVKTU2Vj4+PXnjhhVt+dT906FDNnz9fa9eulYWFhdzc3PIcIrmgn4XbeR8V9HjmJK/vEYPBkOfxunTpUq43BH18fFSpUiU5OjrKz8/PvPzee+/V2rVrs/0AIb99z+97t3Xr1vLy8tJXX32lDz74QEajUb6+vurevbuCgoLyPNeVlKJ+P+d0fivM92mHDh3022+/mX9I1KZNGy1evFgdO3bMsd6AgAC1bt1aEydO1KxZs9SqVStt3rxZX375ZZ5PhuUlv2uYQYMGaf78+Vq3bp0CAwP13nvvFenc/ncF/Vzmds7q2rWrQkND9fHHHyslJUUuLi7mY5bb90JO560WLVoUy+dYKvxn+e9y++4s6GehIMezOM5f+Z1XunbtqpkzZ2rz5s3q1KlTgT5TmzdvVnp6ut59913zsvbt2+ull17SG2+8ofnz5+vNN9+Ug4ODunbtqq5du+bbzoJeP0lSYGCgnnrqKS1evFgxMTFycHAwz3dekHNMfu655x5FRkZq1qxZSklJkY+PT67n4Zw+a3m5nffc3/1b1zb59TMLoqDXNnldG+d3rnR1ddXYsWO1cOFCvf766zIajfL09Mz2BN0/5fW9n1s/Pb/+e2Gu7/+pUaNGGjZsmJYvX24eAaFWrVq5frcdPXpUv/32m2xtbdW2bVv17t0719h5nS/Pnz+vefPmKS4uTi4uLnrwwQdVq1YtSSp0H/ym3L67byrKtWdBPzvF8R0g5f/eL8zxz01h7wUURFH6XHkxGAx5fq/n9b4t6PeUl5eX6tevL0tLS/N11835Xf85mshNOb3HCjuSTkEU5b2a1/k9rz5venq6tmzZIin76BqzZ8++rT5MQT87t3tdU5R/k8Lez8hNXv0lAEDpMDQJblPwn0ICxWzTr7cO83un+uijj1SjRg09+uijt6w7e/as3njjDa1YseK267k5DJqdnZ1iYmLMwzx369bttmOXdSaTSZcuXZKHh4cyMzO1Z88effPNN5o3b56srG7v9yzFeVyL89+7JPyX30O48+X3+frxxx+1f/9+jRs37rbqKcnvGwDAfw/nlcK7OZf1zfkGly9froSEBL3++uul3bRild+1TV79zMLgPVj8nnjiCb355puqX79+aTelXMrvvV9cx5/+MQAAKK+4ygfuMNu2bdOPP/6o5ORkubm5qU2bNurSpUtpN+tfERcXp6lTpyo8PFzW1taqWrWqRo0aVSw3LP5Lx/W/tK9AUZXk9w0A4L+H80rhnTlzRnPmzDE/XVy/fn0NGTKktJt1x+I9COSM/jEAACiveAIYpao8PQEMAAAAAAAAAAAAlLbCT8ABAAAAAAAAAAAAACiTSAADAAAAAAAAAAAAQDlR5Mle/Cv5q8O9HVSlalVZWloo4nqEtmzZomPHjhVn+wAAAAAAAAAAAAAABVSkBHD16tU1YOAAhYQc0ZLFi5WQkKCKfn5KTkku7vYBAAAAAAAAAAAAAAqoSAngXr166ejRo1qxfLl5WUREhPlvP39/9ejeTT6+FRUTHaXffluvU6dOSZI6399ZHh4eWvr1UklSrcBa6tv3EX304YeSpP79+8vP318V7OwUHR2lPbv3aueunQWK3anTfWrYqJEcHRyUaTTpSMhh/bR6jTIzMmRvb6+HH35YVatVlckkbd+6VZs2by7K7gMAAAAAAAAAAABAmVToBLCHu4e8vLy0cuXKHNc72Dto8NNPa8eunVq2bLmqVa+mJx5/XHPmzFXYtbB841etVlU/rfpJ586dV0BAJT3Qu7cyjBnau2dvvrF9fSvq5ImT2rJls9zcPdSvXz8FX4/Qjh071KZtG1nbWGvqlCkymiRr6yKPfg0AAAAAAAAAAAAAZZJFYTdwcHKUJN2Iu5Hj+qCgIMUnJGjD+g2KiYnRgf0HdPLUSTVr3qzAdcTGxurGjVgdOXJUW7ZsVauWLQscOykpSfHxCbp08aKOhISoatUqkqTU5FQ5OzvL3t5BiQkJio2JLeyuAwAAAAAAAAAAAECZVugEcFJikiTJ2dklx/Wubq6KiorKtiwyKkpubm5ZL0wmGQpR3/XwcLm5uxcs9j8kJCSogr29JOn337fryNGjGjxkiIYOHSI/v4qFaAUAAAAAAAAAAAAAlH2FTgBHRkYo9kasmjZpkuP6mNgYeXh4ZFvm6eGhmJgYSVJycoocnZwLXJ+bm5vi4uIKFPufTCaT+e+MzEyt//U3TZo4UeHh1/Xkk08VuA0AAAAAAAAAAAAAcCcodAJYktatXasmTRqr1wO9VKVKFbl7uCswMFDVq1fXkZAjcnJ0VMf7OsrNzU1NmjZRndp1tG/ffknShQvnVblSJTVo0EDOTs5ycnK6JX5gYKDc3NxUtWpVtW3bRocOHJSkfGPnpaJvRbm4uMpgkK6FX5OdnZ1kKMyzyAAAAAAAAAAAAABQtlkVZaOjR48pNvYzdenSRQOfHigLg4WioqO04/cdOnfunBZ8+YW6d+um1ne3VnR0lL5eulRhYaGSpMuXr+iXX35Rly73y8nRSckpybp86VK2+NWqVVOz5s2Unp6hkJDD2rJtmyQpMTExz9h5qVe/nlq2aiVrayvFRMfo++9XSH97QhgAAAAAAAAAAAAA7nSGJsFtylQW9N0x7+qrRV/p/Pnzpd0U/As2/bqmtJsAAAAAAAAAAAAAlBtFGgIaAAAAAAAAAAAAAFD2lLkngPHfwhPAAAAAAAAAAAAAQPEp0hzAQFlmYm5nAAAAAAAAAAAA3EEMBkOxxSIBjHLlZvI3MTGxlFsCAAAAAAAAAAAA5M/BwUEmk6nYksAkgFHu3EwC+/n5lXJLAAAAAAAAAAAAgNyFhoYWa/JXkiyKLRJQRjAENAAAAAAAAAAAAO4UxZ3bIgEMAAAAAAAAAAAAAOUECWAAAAAAAAAAAAAAKCdIAAMAAAAAAAAAAABAOUECGAAAAAAAAAAAAADKCRLAAAAAAAAAAAAAAFBOkAAGAAAAAAAAAAAAgHKCBDAAAAAAAAAAAAAAlBMkgAEAAAAAAAAAAACgnCABDAAAAAAAAAAAAADlBAlgAAAAAAAAAAAAACgnSAADAAAAAAAAAAAAQDlRLhLAVlZWpd0EAAAAAAAAAAAAACh1RcqcPvvcs6pcqbJMJqPi4xN06fIlbdq4SeHh4cXdvnxVr1Fdjz7yqMaPH/+v1w0AAAAAAAAAAAAAZUmREsBOTk5as3aNQg6HyMHRQc2bNdegwYM1Y9p0JSYlFncb82RpaSmDRbl4kBkAAAAAAAAAAAAAbkuRx05OSUlVYmKiEhMTtXbtWrUIbqGAqlV04vhxWVpZqXOnTmrYsKFkMOjQoYP65edfZDKZVLduXXXu3EnOLq7KzMzUxQsXtG7dOkVHR0uSHBwd1aNHD9WsUUMpKSnau3evtm7bJplMcnFxVd++D8vL21t2trbavGWzrly5Igd7e3344YeSpPW//aZNmzerW7duatS4sWxtbHT27FktWrSoeI4YAAAAAAAAAAAAAJRRtz15rpWlpRo1aiwrSyulpaZKku7r2FG1Amvp//5vviytLDWgf39FRERo/7798vDwUHp6hmZ++qmsra3VoUMHPf3005o+fboyMjL0xOOPKTk5RfPmzZOzi7Mefriv0tPStXPXTjk4OqhatWqa8skUpaVn1eVbsaISk5L08ccfS5KMmZmqFVhLjRs31ueffaa4+Hg5OTnd7m4CAAAAAAAAAAAAQJlX5ARwzx491L17N9na2MjCwlInT57U2XPnZDAYFBwcrBUrVigyMkKSdPDgQdWpXUf79+2XJKWmpSomJkaStHz5co0cNVK1a9dWZGSkqlSpqvHjJyghIV6RkZHatmWrmrdooZ27dprrjoqOMv/tWzHr/5kZGeZlqckpsra2lruHh65HRCglJaWouwkAAAAAAAAAAAAAd4wiJ4DXb1ivoyFHFdwyWLUCa+mrr76SJNlWqCBbW1s9+sgjMv1Z1iDpalhojnEyMjIUEx0jN3c3ZWZmKjUtVQkJ8eb1kdGRcnN3LVTbLl2+rB9XrVLXrl3VrXs3rf9tvUJCQoqymwAAAEA25y9c0JGjx9WrR7cc1584eUqXL19R504d/+WWAQAAAChpZ8+d1+q1P2vYi8+XdlPuGEuWfquaNWoouEWzYou5aMlSBdWvr0YNG5iX0VcDgL9YFHXD5OQUxcXHacPGjbKwsFCru1tJklKSk5WSmqrFXy/RmDFjNGbMGL07ZozmzZ2XYxyDwSAXF2fFxcUrJjZWtja2cnJyNK/3dPdUTHRsru3ISM+QlaXlLcsPHjigqVOnatPGTerbt688PD2KuqsAAAC4A509d15devbRqdN/FFtMk8mk9z6YoCNHj+Va5lp4uN4f/7GuR0QUW70AAAAAyoZjx0/ox1Wrc12/avUa9en7uNLT04ulvuKOV5LOnD2nI8eO37L862+X6cLFi8Va15cLF+vS5cvm1/TVACC7254D2JiZqZ9+/EkDBw3UyRMnFRMTo4MHDqjL/fcrNSVV0THRcnJ0VExMjJKTs4ZidndzU5UqVRQXF6fglsGysLDUqZMnlZqaqouXLql37z5at26dnF2c1faedtq6dUuu9UdHR8vGxkZ33XWXQsNCZWVprfT0dNnZ2SomJlrXroVLMqmCbYXb3VX8xyUlJenXX3/Vvn37FBUVJUdHR9WpU0ddunSRv79/aTdPkrRj52699OqIHNe9P+Ztdet6/7/cIgAAcjf8jbe07fcdyszMlKuLiypX8teDfR5Qz+5dZTAYbju+g4ODalSrlu3Hhbdrx87dOnP2nKZPmZhrmXvvaad6d92lr5Z8o+GvvFRsdQMAAAD4dxwOOaKZcz7TqVOnZWllqYDKlTV08EC1+fMhqLx4eniqRo1qsrK67VvvJRKvJE2bMUsVK/qqQb27/vW66asBQHbFcta4eOmizpw5oy5du2jp10u17uef1anTfXr44Yfl7OysG3E39M033yr56lVJkoWlpR54oLfc3F117Vq4vlz4pVJTUyVJXy/5Wj16dNezzz2r1JRU7d65S7t27c617hs3bmj9hg16oHdvWVlYaNfuXbp85ap6P/CAHBzslZCYqC1bturK1SvFsav4j4qIiNDUqVMVFfXX/NNxcXHas2ePDhw4oAEDBqhFixal2MIs9erV1bxZM7It+2rJUoUcPaqgoAa5bAUAQOkIv35d97Rro6ce76fEpCTt2btf4z6coNDQMD33zODbju/r461ZM6YUQ0v/8u3yFep6fye5ODvnWe7Rvg9qzHsf6sXnn5WtrU2xtgEAAABAyYm9cUMvv/q66taprffGjJbJaNKZs+fk4OBQoO3vbhWsu1sFF1t7ijteeUVfDQCyK1ICePKkybcsW7J4ifnvzIwM/bzuZ/287ucct4+MjNT8/5uf47qEhHh98803Oa4LvXpVo0ePvmX55k2btHnTpmzLJpw4kWv7gcIwGo2aM2eOoqKiZGNjo1dffVW2trays7PTunXrtG3bNi1cuFD+/v6l/iSwi7OzmjVtbH69Zet27dy9R59OnaxK/n6SpLi4eE2YNEVbtm2XnZ2dHnmoj4YMGiDLP4dSf++D8dq3/6CiY2IkSe3btdGbI0fI8c+L3PT0dM39fL7WrPtF6ekZatemtUa89rIc7O1vac+3y1bouxUrFRkZpZSUFNWtU1tj33lLVasESJL27j+gseM+VFR0jLw8PdX3od7q/+TjkqQDBw9pyvSZCrsWrqSkJNWoXk2P9n1I6375VYdDjsrOzk5DBw1Qv0ceNtd3/MRJTZ46Q6f/OKNK/n56+X/Pc4EMAGWcj7eXghrUlyS1Cm6h2NhY/fjTGnMCOCo6WhMnT9Puvfvk6OigRx7qo6eeeMz8hHBCQoI+/mSaNm/ZKkny9vZWt/s7a/DT/RUaFqaefR7Rt0sWqmaN6pKkDZs2a8asuQoPv646tQP19ptvmNf9/dyTEB8vX18fDX/lZbVr21qSlJaWpr37DuiTjz8yt/+75d9r4eKvFRkZJR9vb02ZNF41a1TX3S1bKjUtTYdDQtSiefHNcwUAAACgZP3xxxklJCbqzZEjVCWgsiSpw733ZCuTmJSk3n0fU1jYNfn6eGfrN6xavVbTZszSxl/XSJI+GD9Re/ftV0RkpKytbdTx3nv02rAX5eiYNVLRshUrtWzFSoWHX1d6RroaBgVp5IhXzffP/hkvv3t3RqNRXyxcrO+Wf6+4+Hh5eLirTu1ATZ7w4S37WhL3377/YZW+/2GVJOmj98fo/k73SZIWf/2tZs6ZJ6PRdEubMzMz9X8LFmrZ9yuVnJyie9q20ajXX5Ozs5M57nfLv9f8LxcpKSlJQfXrmx8ok+irAUBOijwHMPBfcfDgQV398+n1tLQ0zZkzR+PGjdPmzZvVtWtXSVJGRoZ+/jnnHzyUlmvXwjXm/Y80dPBABbfIupgxmUx68ZXhOnvunN4f87b+99xQLf1uuT6dPde83Z59+9WieVNNmzxBI0e8ql2792rm7L/m8J4+c7bWb9ysUa+/prFvv6k9+/ZlW/93x0+clKODgz7+aJwmfPieMjIy9Pqov37EUdnfXyNeG6a5M6er70O9NX3mHB08HCJJunI1VBcuXtIH772jKZPGy97eXmPf/0gNGzTQpPEfqFf3rpo0ZbrOnjsvSboeEaGhz7+kBvXr6dOpk9S8aRMNH/kWc3oAwB3GyclJ6RlZc1sZjUa9/OrrSkxK0qQJH2jQgKc0a+7n2rj5r+lBXhw2XEePHtc7b47UpAkfytvLSwcPHc4x9vYdOzXyrXfV+b6OmjThA3l7eenpoc8p8s8RPm6ee9579y1NnfyxghrU14hRoxURESlJOnHylNLS0tSgftZwZmfOntPHk6fqycf6af68WXrhuaHy9fGWJNna2qh2YC0dPBRSYscKAAAAQPHz9/eThYWFVq1eo8zMzBzLWFla6rmhgzV9ykQ1ahiUrd/wTzt371GTxo00ZdIEvTbsRe3es1cvv/aGef3RY8dla2urj94fq/fHvqOMjAwNGPysYmJic4yX3727mXM+0xeLFuvpAU9q+icf69572mn77ztzjFUS9986dbxX3y5ZqG+XLFTrVi3Ny+vXq6uJ4z/Q6JEjtHtv9vuJM2fP09LvluuFZ4fq/TFv6+y5c3rxleEymUySpJ/WrNOkKdPVp1dPTfhgnOrVq6v0jAzz9vTVAOBW//rEAdu3b9f27dv/7WqBIjt27Fi213Fxcapbt666deumDRs25FquNJlMJo15/0PVrF5Ngwf2Ny/fvXefjh0/oZXLvlZA5axfMFpZWerDCZM15OkB5l8eBtaqqebNmkrKemJ/2YofNOr113QjLk7fLV+pWdM/Ma+PjonRjFlzNXLEqzm2xdvbSy1bNJeUNf/3oGde0JUrV1Wpkr98fX3k6+sjSWrUsIF+/nW9QkKOqHHDIEmSjbW1WgVnDa1dwa6CBj/7gnr16KaKFX3VqmUL/bR2nfbu268a1avpqyXfqG7tQL368v/+jBekjZu3aPOW7Xrk4T7FenwBAMXLZDIpKTlZhw6FaO3Pv+ietm0kSdu279CFCxf1+ZyZsrevoOZNm+jg4RD9+ttGdby3vXbv2acjx47ru68XqUb1apKkLVu36fLlqznWM/+LRep6fyf977mhkqS7WwarT9/HtWTpdxr24vOSss49N+f1ata0sTZv3abfd+5S7149FBEZKVtbGzk5Zf0KPebPX9zf0661/CpWVP1/zHPl5empiMicbwIBAAAAKJv8KlbU6FGva/LUGVq/YZMe6vOAevfqme1pVFtbW3XpnPVka5NGDbVp81ZzvyEndWoHmu+P3VW3jvo9OVA7du42Pznr6+uj1ndnJUtb391KvR/up6++/kYv/++5HOPldu8uMSlJS79dpldfftF8PywuPl7LVqzMdX+L+/6bk5OTeZSlv2vUMMhcT/j1CH23/Pu/2vzdco16/TXz8atVs4b6PPK4duzcrdZ3t9SSpd+qV49u5pGiWt/dUstX/GCOTV8NAG5V9meOB0pZfHz8LcuefvpprV69WuvXrzcvS0xMVGZmpnko5dK09LvlOn7ipL5dslAWFn896H/6jzPy9vIyJ38lqVnTJsrIyND5CxfVoH69W2IFBFRWVHS0JOns2XPKzMzUS6++bl5vMhqVkZmp1NS0fOfNuDlsTmRUtCpV8tcfZ85qxqw5On78pAwWBqWkpCohMSnHbf38fCVJMbGxqljRVwaDQT7e3rpxI+7PfftDh48cVcu2HczbpKen61p4eJ5tAgCUrqXfLtfSb5ebX/d9qI9e+fNmwqk//lBKaqo63N/dvD4zM1N31a0jKeu85unpYU7+5uePM2f1QM+/YllaWqpxoyD98ceZHMvb2NjI18dHUVFZ58GEhMRs8341ahikxg2D9NhTg/Rg71567NGH5e3lZV7v6Oig+PiEArUNAAAAQNnRu1cP3dehvdb98pu+WbZCi5Ys1ZSJ483T1/ydjY2NfHy8zf2G/NSqWUOenh46duJEjlOX2dnaqmnjRjp+vGBTHP793t2lS5eVlpamlsFFG9r437r/Vrmyv7nNFy9eUnp6upo1afy39ZXk4+Ot03+cUeu7W+rS5ct6vN8jucajrwYAtyIBDOTDxcXllmUzZsxQ+D8ubBwdHctE8jc0LEyzZs/Tq8NelF/FitlXmkzmORMLytbG1jzcjbW1tSRpysTx8qvom62ctXX+Xyc2NraSsobMNplMeunVEapf7y5NmzJRVpaWGjPu1rlIzNv+Wfffh96xsrJSxs22WVnr7pbB5l8g3uTs7JxvuwAApadL5/vU/8nHFRoappGj31XVKgGys806X1hbWcvV1VXz587Mto3Nnz84SkpKklUhzr2mopwHbW2V8efQYo6ODkr62w+VrK2tNW/2DG3aslVfLFysZStWaua0T9SoYQNJUmJiklxdb72OAAAAAFD2OTo6qu9DfdSndy+99MoIffTxZH2z+Mscy/6931AQVpaW5ntdObG0tJS1Te7rs9X9t3t3iX/2V4p6j/K2778VsL/19zbfHOY5r20NBotch+OW6KsBQE6YAxjIR4MGDbK9tra21iuvvKIaNWpkWx4UFPRvNitXEz+ZpsDAWnqozwO3rKtZo4auR0ToypW/hsbct/+grCwtVbVKQL6xK1euJAsLC4WGhalq1SrZ/vv7k8YFERUdrYiISPV/4jE1qHeX6tapnWOyvaCqVa2iM2fPyt/fL1tum3MtAAAgAElEQVS73N3dihwTAFDy3NxcVTuwlu5t307PDhmk6TPn6OKly5KkatWqKDY2a96rv3+33/yBU5UqAQq/HqHw69cLVFfNGtW1/8BB8+vMzEwdOhyimjVvHZ4sJ54enkpJTVVCwl+/FLe0tNR9He7VV198rsBaNbVi5V/DkEVGRsrTw6NAsQEAAACUTVaWlmrRrKkuXb5cLPGuhV9X+PUIVa+W80hGJpNJR44ez3V9Xm6Ovnfk6PHbamNu8rv/5uTokK2/VBBVqgTIytJSBw7+1Ve7cjVU4eHXzX21mjWqa9fuvbnGoK8GALfiCWAgH0FBQapWrZrOnz8vKesizGg0ZitjY2OjLl26lEbzstm7/4C2bd+hV1/+n/YfOJRtnZ9f1rwddWoH6vU339ZzQwfrRtwNTZ0xS4/0fcg8R0ZeXF1c1OeBnvp01lylpqaqZo0aio6JkY+3l5o0blSotnq4u8vVxUVLln4nk8kkGxubHIfbLqjH+vXV8pU/avjIt9TngZ6ysbbRhYsX9cRjjxY5JgDg3zWw/xPauHmLxk/8RHNnTlPb1nererWqeu2NNzXk6QHy8PDQpcuX1a5ta/l4e6tD+3by9fXRqNFj9OzQQYqPT9Cu3fvk71cxx/iDBjyl4SPfUiV/fzVoUE+rflqjqOiYPIcS+7s6dQJlbW2tI8eOq1VwC124cFEhR4+pRvVqik9IUGRklOrdVVdS1jBoJ0//oWf/nKMKAAAAwJ3h4OEQrV33i1o0byZnJydduXpVS79dpmZNmxQ55k9r1snFxUU21tZasPArVQmonG3450OHQ/Td8u/l51dRa9f9qtCwMPOcuoXh5eWp+zvdp6nTZ8rCYJCTk6NWrV5b5Hb/U3733+rUDtSCL7/Sbxs2ycrSUp6eHjlOOfd3jg4OevSRhzV1xixJkouzi+Z+Pl91ageqdauseZGHDBqgV4aP1MeTp6pd29bKSM9QWnq6OQZ9NQC4FQlgIB8Gg0HPPvuspk+frrCwMGVkZOiNN94wr7ezs9OQIUPk4+NTiq3Msmv3HkkyXzD93TODn9azQwdp5rTJGj9xit56Z6zs7Oz08IN99OzQQQWu440Rr8rV1UWLFi/Vjbg4eXt56flnhxS6rQaDQRPHf6Ap0z/Vs/8bJoPBIA8P91xv2ufHr2JFffl/c/Xx5Kl66533ZGtrq5o1qqvfIw+XiaG5AQD5s7S01MgRr+rpoc/r9x271Prulvp8zqf6ePJUTZg0RZlGoypX8lfjRg3l4+0tGxsbzZz2iSZMmqIRI0fL09NDVpZWMljkPHTYPe3a6MNx72rWnM81/8tFWTcnPpudbS6ovNjZ2qpJ44baum27WgW3UGRUtOZ/sVBh18Ll4GCvli2a65nBAyVJu3bvlZWVlRo3LBsjhAAAAAAoGFsbG12/HqEJEz9RQkKCPDw81P6etvrf888UOaa1tbVmzpmnyMgoNWncUJ9M/Cjb/SoHBwet/PEnXbh4SZX8/TR35jT5+/kVqa63Rg7XJ9Nm6uPJU2VpaSm/ir6yyKWPVFj53X976MHeOnr8hN7/cILs7Oz07NBB+SaAJenlF5+Xra2tpn86RykpKWrT+m69OXK4ecTBtq3v1tRJE/Tp7Ln6fuWPcnBwULWqVVS5kr8k+moAkBNDk+A2ptJuBP67Nv26pljj3Xw6Nzk5WX5FvEjKTVpamjZv3qz9+/crKipKjo6Oqlu3ru677z55MGQIAABlwoiRo+Xo6KCx77xVIvG3bN2ud8a+r7WrVsjR0THXci8OG67KlStp5IhXS6QdAAAAAO4M3Xs/rP5PPKZH+z6U4/ox4z5UUnKyJo3/oETqX/rtci355lutXrmsROKXFfTVANzJQkNDVaFCBVlYWMhQwPnU88MTwEAB2djYqHPnzurcuXNpNwUAAPxpydJvVatmDdnZ2enQ4RBt2bZdkyd8WGL1tWvbWgEBlTVr7ue53jDYvmOnDh4O0ehRr5dYOwAAAAAgJ+t++U0O9vZyc3fT5UuX9eWixercqWNpN6vE0VcDgOxIAAMAAOCOlJKSoo2bt+jzBQuVnpamypUr6d3Ro3RPuzYlVqfBYNC7o0fpcMiRXMu4ODtr5IhXVbGib4m1AwAAAABycvDQYW3esk1x8fHy8vRUrx7dNGTQwNJuVomjrwYA2TEENErVnTQENAAAAAAAAAAAAFCcSmIIaItiiQIAAAAAAAAAAAAAKHUkgAEAAAAAAAAAAACgnCABDAAAAAAAAAAAAADlBAlgAAAAAAAAAAAAACgnSAADAAAAAAAAAAAAQDlBAhgAAAAAAAAAAAAAyokynQBu1TJYWzb8rGeHDCrtpgAAAAAAAAAAAABAmVekBHDjhkGaO2u6Nv+2Vht/XaP582arZYvmBdr2k4kf6be1q2RtbW1e5uXlqUULPtPsGVOzla1cyV+ODg6qUaNaUZoJAAAAAAAAAAAAAP8pVoXdwNPDQzOmTpa9fQWdOv2H0tPTVTuwpgwWBcslN6hfT+7ubjIYDOZlDvb2qndXXR05djxb2WUrVurkqdP648zZwjYTAAAAAAAAAAAAAP5zCp0AvuuuOrK3r6DjJ07qqaeHSpLsbG2Vlp5uLnN/p/s0+On+qujrqzNnz2rKtE9vSe7u3LpBkvTO2Pd1/MRJSVKDendp/65tkqSuPR9Uo0ZBGv/+WK1Y+aM++niyHuzdS4892ldenh6qUKGCLly8pImfTNP+AwclSQGVK2vYS8+rYYMGcnCwV0RkpLZt36FJU6bL2tpao15/Te3vaSs7OzuFhobp+RdfUWRUVBEOGwAAAAAAAAAAAACUPYUeAvrMmXNKT0/XXXXr6KP3x6hF82ZKSU2V0WiUJLVr21ofvT9Gjo4O2rr9dwUG1tKMqZPl7OyULc6q1Wv1w6rVunz5inlZTEysfli1Wj+sWq3klJRb6q5TO1DVq1XV5StXte/AQdWsUV2TJ3woe/sKcnRw0NxZ09S+XVsdPXZcv67fKH8/PzVp3EiS1PehPurdq4fCw69r1U9rdTU0VNExMYXdfQAAAAAAAAAAAAAoswr9BHBoWJhGjByt1155Sfd3uk/3d7pP585f0FvvjNUfZ85q0MD+kqQx4z7SiZOndPVqqAY/3V+tW7XUul9+M8cZP/ETpaWlSZKqVgmQJF0JDdX7H32cbxu++vob/frbBs2dOU3NmzVV7Vq15OLiIh9vb23bvkOvjBipihV91aNbF/M2NjZZcw6HXbumpd8u06XLlwu76wAAAAAAAAAAAABQphU6ASxJ23fs1PYdO9UwqIEGDXxKbe5upQ/HjdEjj/eXj7eXJGnuzGnZtvH19bn91v5D+PUISZKzi7MqVLCTJMUnJORYdvn3P6pFs2Zq366t7mnbRr9t2KT3PhivlByeNAYAAAAAAAAAAACAO1GREsCenh6KjIzS4ZAjGj/xE635YbmqVgmQhYWFwsKuydvLS1Omz9TJU6fN21y9elWSlJyULLlL3l6eunI1VJKUlJQsKWtZYZhMJkmSQQYdCjmitLQ0de7UUTKZ5OjomK1sQkKCXnj5VdWqWUPDX31Zne/roEOHQ/TtshVFOQQAAAAAAAAAAAAAUOYUOgEc1KC+5s+bpTNnzyk+PkFVq2YN33z02HEZjUYt//4HNQxqoOefGaxDh0OUaTTKw91dTw4cIkk6fvKUKlXy1ycTx+vSpcvasGmzfl2/URERkfLx9tacT6cqPT1Dn0ybUah2hYVd05tvj9ULzw3VfR3vVVRUtKS/ksSDBvZX44ZBuhYeLnc3N0kyD0ENAAAAAAAAAAAAAOVBoRPAGRkZ2rV7r+rWqa3q1aoqJiZWa9f9ohmz50qS1v78qyRp0MCn1LxZU6Wmpen06T9ka2uj1NQ0TZ85W+5ubmoYVF8+3l46cOiQjEaj3h47Tm+NfF1NmjRWTHSMXFxcCr0zm7du0+at2yRJTZs01mezZygyMkqSZGlhodq1a6lFi2aKjY3Vd8tX6qfVawtdBwAAAAAAAAAAAACUVYYmwW1Mpd2I4rL4y//Tjbg4JSYmqmmTxnJ1cdGESVO0bMXK0m4acrHp1zXFGs9kMsloNCo5OVl+fn7FGhsAAAAAAAAAAAAoTqGhoapQoYIsLCxkMBiKJWaR5gAuiywsLJSQkKC6dWrLztZO4dfDtfjrb7T8+x9Ku2koJZcuXSrtJgAAAAAAAAAAAAC5srIq/nRtuUkAG41GPffiK6XdDJQhAQEBpd0EAAAAAAAAAAAAIFehoaHFHtOi2CMCAAAAAAAAAAAAAEoFCWAAAAAAAAAAAAAAKCdIAAMAAAAAAAAAAABAOUECGAAAAAAAAAAAAADKCRLAAAAAAAAAAAAAAFBOkAAGAAAAAAAAAAAAgHKCBDAAAAAAAAAAAAAAlBMkgAEAAAAAAAAAAACgnCABDAAAAAAAAAAAAADlBAlgAAAAAAAAAAAAACgnSAADAAAAAAAAAAAAQDlBAhgAAAAAAAAAAAAAygkSwAAAAAAAAAAAAABQTpAABgAAAAAAAAAAAIByggQwAAAAAAAAAAAAAJQTxZ4AtrCwkIVFwcMWtjwAAAAAAAAAAAAAIGdWRdmofv16uvfeDvLwcFdKSqpCQ0P19ZIlkqR3331XM2fP0vXw6/lXbmlZqPIAAAAAAAAAAAAAgNwVOgHs4emhRx99VOt+/lmnTpxSBfsK8vb2VkZmpiytrGRpVfCQJoOhUOUBAAAAAAAAAAAAALkrdPbVy8tbJkm7d+1WZmamFC1duXIlW5lhLw+TJJ09c1YLvligBg0aqEePHrKzs1NEZIRW/7RaFy5cyLX8s889p8OHDmnXrl2SpM73d5aHh4eWfr1UlfwrqVfvXvLx9lFKSoq+W/adzp45W9T9B/APv5+P1Pw957Xg0eYlEv9QaKx+PBqqMZ3vKpH4AID/jpMnT2rjxo164YUXSiT+hQsXtHfvXvXt27dE4gMAAAC485R0PwQAgOJQ6ATw5YuXlJycoiefelK//fqrQkPDbikza9ZMhV+PkMlkkiRduHhBc+fOVXp6hjp0vFcP931YkydNzrV8Xrr37KFz585pwfwFqlChglJSkgu7CwDycOTaDf16KrzE4m8/F6kv9p4nAQwAuG2XLl1SSEhIicU/efKkNm3aRAIYAAAAgFlh+iGpqak6cuSIgoKCZGNjU6xtSE1NVa1atYotJgCgfCl0AjgxKVFzZs9S+/b3atDgIYqKitQvv/yic2fPmctkZGYqMyPD/Do+Lt789++//67gFsGytbVVRmZmjuXzkpqSIg93D1laWSkmJqawzQfKvT5f/q7Vx8OUYTTJ08FG1d0dNTi4moYEV5OFwVDazQMAwGzSpEnav3+/jEajnJyc5OPjow4dOqhDhw6ysLAo7eYBAAAA+I8aNWqUzp07d8vyL774olBxLl68qIkTJ+qzzz4r1gTwV199JS8vLxLAAIBcFWkC3tjYG/rhhx+0Zs0atWvXVgMGDNDc2XN1PTIix/JBQUG655575ObmprS0NEmSpaWlOQF8K5MMyjlR9f2K73V/l/s1fPhrOnHihNauWavExMSi7AZQIPv37y9QOT8/P1WsWLGEW5O/y7HJeqCen4a3r63E1AxtPRehF78/oBPhcZr6QKPSbh4AAGZRUVFq3ry5evbsqZSUFJ04cULz58/XlStXNHDgwNJuHgAAAID/sODgYHXp0iXbMjs7u1JqDQAAhVOkBPBN6enp2rBhoxo3aaIatWroWvg1GY1GWVn+FdbevoIeeeQRff311zp+4oQ8PNz12quvSZKMmZm3lJeklKQUOTo55lhnXHycli1bJmcnZ/V7vJ+6deumZcuW3c5uAHkqaAJYUplIAEtSJVd7tariIUm6L9BHiWmZmr/nvDkBvCLkikatOaLLsUlqUslNn/Vtqvq+LjnG2nTmugZ+s1fh8Snyc6mg5++uodfb15YkbT0XoeGrDutiTJJik9MU4GavqQ80Us+7/MzbX45N0uDv9mnbuQhVdK6gik5cKAMA/uLh4aHAwEBJWT8aTE1N1caNG80J4F27dunrr79WZGSkqlevrmeeeUYBAQE5xjp69Khmz56t2NhYubu7q3PnzurVq5ck6fjx41q0aJEiIyOVmJgoT09PDRgwQM2aNTNvHxkZqblz5+rEiRNyc3OTq6trCe89AAAAgLLKw8ND9erVy7dcXv2Qm5555hlJWQ+QTJs2Ldu6M2fOaMmSJbpy5YoSExPVvn17PfPMM1q1apVWrVql5ORk+fn56cknn1TDhg3N261fv17r16+XJA0bNkytW7dWbGysFixYoCNHjsje3l7333+/evbsKQOjAgLAf06hE8B+fhXlW7GiLl+6rMzMTFWtVlXOzs66Hn5dJpNJMTExCgoKUmJiohwcHXUjJlYGg0EGg0HW1tbZnuzNqXzo1as6f+G8glsG69Tp04qJjpJ9BXvzNlWqVFFERITSMtIVFRklR4ecE8VAcbl5gXYnc7CxVEp61hP3a0+E6ZGvdurNDnXVqqqHvtx7QXd/ulGnR3WVbw7J2Roejpreu5G8HGy142KU3lgdolZVPNSmmqfORSXq5PV4fftUS1kYDFpy4KIe/HKHLr7dXX7OFZRhNKnj3C1ytrPWV48HKz3TqClbTv/buw8AuIPY2tqaR4w5cOCApk6dqj59+igwMFCbN2/W22+/rRkzZuSYnPX19dXAgQPl7Oys06dPa/HixQoMDFSdOnV0/fp1hYaG6pVXXpGFhYW2bdumyZMna/bs2XJ3d1dmZqbGjRsne3t7vfTSS8rIyNDq1av/7d0HAAAAUEaYTCZl/m0ES4PBkONUNXn1Q24aO3asHB0dZW1tfcv2V65c0ZkzZzRs2DDZ2dnJ1tZWklS3bl0FBATIxsZGGzdu1NSpUzV37lzzU8itWrXSQw89JEny9PSU0WjU+PHj5eLiouHDh+vatWtasGCBvL291bJly2I9NgCAsq/QCWA7uwpq1qyZunXrLitLS0VHx+inn37S6dNZSZ3Vq1erZ8+eatkyWJcvX9b8+Qu0atUqdeveTf2cnJSWnqHw6+Hmk2dO5Xfu3ClPTw898cQTsrWxUWJSovbt2ydJ6tihowKqBMgkk8LCwvTjDz8W4+EAbnWnDQEtZV2gpmcaFZucri3nIjR7x1ndX9tXkvTh+hN6vHGAPuhaX5LUpbavAies09Qtp/Vxj6BbYgW42SvALetHGK2reWrpgUvacSFKbap5SpJsrSzUrW7Wft9b01s/HgvVuhPXNDi4mlYfD9XZqASdf6u7OUZUYpombzlV4scAAHBnMJlMysjIUFJSko4fP65ffvlFjRpljVjx/fffq02bNurXr58kqVGjRnr55Ze1evVqPfnkk7fE8vT0lKdn1vmpTp062r59u06dOmW+8WJlZaUmTZpIkurVq6e9e/fq0KFD6tChg/bv36/w8HDNmjXLHCMhIUGrVq0q8WMAAAAAoOxZt26d1q1bZ37do0cP9e/f/5Zy+fVDpKz7hnmNMGRtbZ1tdCJJ2eb3rVq1qrZu3aorV66oZs2akiQHB4dsoyPt27dPV69e1XvvvSc7OzvVr19fJ0+e1I4dO0gAA8B/UKETwOfOndNn8z7Ldf3p06f1ySefZFu2e/du7d69u8Dl09PT9f33KyWtvKX8gi8WFLbJwG25E4eAnrH9jGZsPyNJsrOy0CMNK+uTXllDxISE3dCgFtXMZS0tDGpb3VOHw2JzjBUSdkOj1oRo7+VoWRgMSkrLVFxKeo5lba0sFOBqr2vxKZKkk9fjVdn1rwQyAAD/9PebKtbW1mrVqpX5psqlS5fUoUMHc1kLCwvVrVtXFy9ezDHWxYsXtWTJEp09e1YGg0FpaWlKTk7Osay1tbU8PT0VG5t1/gsNDZWHh4f5xg0AAACA/7bWrVurR48e5te5JXAL0w8pjN27d+uHH35QWFiY7O2z7q0lJSXlWv7ChQtKS0vToEGDzMuMRqOqV69+220BANx5bmsOYOC/4E4cAvqxxpU14p7acq1gIz8XO9lZWZrXmWRSQaf9MJmkbp9vU3AVd60e3FbWFgYN+GZPntvYWVsqPdMoKSu5nJFpKvJ+AADKv9atW6tnz55ycHCQm5ubbGxszOtMpoKfQ0wmk8aPH6+aNWtq1KhRsrS01KxZs/LcxsbGRhkZGZKykstGo7FoOwEAAACg3HFxcVGNGjXyLJNfP6Soc+9euXJFU6dO1UMPPaTmzZsrJSVF7777bp5xrays5OzsrPfeey/b8pyGnQYAlH8kgIF83IlDQHs72qlJJbcc19X3ddGWsxHmp4AzjSZtPx+pPvX9JUkGGWRS1g338IQUXY1L1oj2tRUc4C5J8rC3LXA7Gvi6KDQuWceuxamer/Pt7BIAoJxycXHJ9RfplStX1vHjx81PARuNRp08eVItWrSQlHXT42aS+MaNG4qOjlavXr3MQ6U5OTkVuB0BAQGKjo7W5cuXVbly5dvZJQAAAADlWGH6ITef3E1MTMxzCOh/unjxoiwsLNS3b98c19vb29/yNLC/v7/i4uLMfwMA/ttIAAP5uBOHgM7LWx3rqs+Xv6u6h6NaVfHQgj3nFR6fqlfaBUqSfJ3sdD0hVauOharnXX7ydLDR1C2nZWoXKDsrC8UmpxW4rvtr+6p5ZXc98MV2je1cT/4uFXTwakxJ7RoAoJx58MEHNWnSJPn4+CgwMFCbNm3SjRs31L17d0lZQ7DduHFD+/btU9OmTeXk5KTVq1ere/fusra2VmJiYoHratiwoWrWrKmJEyeqb9++cnd31/nz50tq1wAAAADcoQrTD/H29paDg4NWrFih9u3bKzw8XJ06dcq3jkqVKikjI0MrVqxQo0aNbhkdqVq1alq5cqV27twpS0tLubq6qmnTpqpUqZImTZqkBx98UK6urrp27ZqaNm0qDw+PYj8OAICyjQQwkI87cQjovPSq56clj7fU6HVH9NGGE2rs76rtL94rf5cKkqSudX3VvW5FjVoTol71/LS8/916bdUhdZizWQZDVoK4mrtDgeoyGKRfnmmn4asO6aWVB5WSkSlfJzt1CvQpyV0EAJQTzZo108svv6ylS5dq5cqVqlq1qsaNGyd396xRKRo3bqwmTZpoyZIlatasmYYPH66FCxfqvffek8FgkKurq7y9vQtUl8Fg0OjRo7Vo0SItWLBA6enpcnV1VVBQUEnuIgAAAIA7TGH6IdbW1nruuee0ePFi7dmzR5UqVVK7du1ka5v3CHtVqlTRkCFDtGrVKi1btkw2Njby9/c3P13cqVMnnTlzRnPnzpWtra369u2rwMBAjR07VgsWLND8+fNlNBrl4+OjOnXqkAAGgP8gQ5PgNkzQiVKz6dc1xRrPZDLJaDQqOTlZfn5+xRobAAAAAAAAAAAAKE6hoaGqUKGCLCwsijx//D9ZFEsUAAAAAAAAAAAAAECpIwEMAAAAAAAAAAAAAOUECWAAAAAAAAAAAAAAKCdIAAMAAAAAAAAAAABAOUECGAAAAAAAAAAAAADKCRLAAAAAAAAAAAAAAFBOkAAGAAAAAAAAAAAAgHKCBDAAAAAAAAAAAAAAlBMkgAEAAAAAAAAAAACgnCABDAAAAAAAAAAAAADlBAlgAAAAAAAAAAAAACgnSAADAAAAAAAAAAAAQDnxryeArSwtSzR+lSpV9MYbb8jOzq5E6wEAAAAAAAAAAACAssaqKBuNeH2E3Fzdsi3bt2+fVq5cmed2Q4YM0dGjR7Vr166iVFsg0dFR2rtvr1JSU0usDgAAAAAAAAAAAAAoi4qUAJak1WtW60jIUfPr9PS0fLextCpydQUWH5+gTRs3lXg9AAAAAAAAAAAAAFDWFDkjm5KSqoSE+GzLLC0t9b//vaCjR49p48aNsrGx1svDhmn9+vU6dPCQJKlnz57q2bOnjMZMvfPOu7K0slLnTp3UsGFDyWDQoUMH9cvPv8hkMumuu+5Sp86d5OTkLBsrK124eFErVqzQjRs3JEndunVTo8aNZWtjo7Nnz2rRokXy8/fX/154QaNHj5YkOTg6qkePHqpZo4ZSUlK0d+9ebd22TTKZ5O7urn6P9ZOrq5tsbW0UEx2jH3/8QefPX5AkNW7SRB07dJCTs5Pi4+I1a9ZMJSenFPWQAQAAAAAAAAAAAECJKtZHcjMzM7V8+QoNfWaojh07puCWwQoLCzMnfyVpzZo12r1njwwmkyTpvo4dVSuwlv7v/+bL0spSA/r3V0REhPbv2y93d3elpaVpxrTpsrG11QMP9FSPHj20ZMkS1QqspcaNG+vzzz5TXHy8nJyccmzTE48/puTkFM2bN0/OLs56+OG+Sk9L185dO2VXoYL8/fw1afIkSVKrlq3Ur18/TZo4SRaWFnqwT2998823OnPmD7m5uZP8BQAAAAAAAAAAAFCmWRR1wwd69dQ7b79t/s/dw12SFBoaqt+3/64nn3xS9erV148/rMq2ndFoVGZGhjIyM2UwGBQcHKwN6zcoMjJC4deu6eDBg6pTu465fFpamuLi4xQZGaHff9+hqlWrSpJSk1NkbW0tdw8PpaSkKCIi4pY2+vj4qEqVqlq58gdFRkbq3Nlz2rZlq5q3aJGtXGxMrGJjYrVx4wY5OjrJw9NTxkyj0tIz5O3jrcxMo65du1bUQwUAAAAAAAAAAAAA/4oiPwG8fv2G/2fvvsOjqvI/jr9nMqmkV0gBQgu9BKQqCApIkWJHUNF1YdeKbd2fZV11bQuKCrjWVRBprvRepCNgCL0FkkB6IL3Xmd8fMSMhbQgoip/X8/g8Zm77zrnn3Lnc7z3ncOToz3MA5+T8PBz0/gP7GThwIKdOn6o2TPSFHJ2ccHR05O677sLy02cGIDE5qcb183LzcHFxASAuPp5ly5czbNgwho8YzsYNGzl06FCV9b28vCguqTpUdVpGGl7entlWRpYAACAASURBVDXuv7i4hNLSElxcnEktL2f2l18yeOgQ+vXrx+4fdrNp0yYsFkuN24qIiIiIiIiIiIiIiIiIXG0NTgDnFxSQlZlVfYHBwG1jx7Jz5046de5Et/Bw9kdGAlBWVorJ7udDFhUWUlRczMKFC4g6GVXvMc1UTb7uj4xkf2Qk3bp148477yQxKbHK8sysLBwdHHFzcyU3Nw8AX29fMjNqiLvyGBYLFWnoiiTzF59/QXBQMPfdfx9ZmVlE7IuoN04RERERERERERERERERkauhwUNAOzk54urqZv2vUaNGAPTp1RtHR0fWrl3L0iVLGTl8OI1cKpalp6UT1i4MT08PgoODMdrZsT8ykluGDqVZs2a4ubsRGNgEZ2eneo/v4eFJQEAADg72pKSkAhacHZ2rrJOaksLZuDjGjBmLr68vLVq24IYB/dn74556929nZ0doaHMcHR3JyckhP78AZxfnercTEREREREREREREREREblaGtwDeOSIkYwcMdL6d1FhIe++9y6DbhrEnK+/xmw2c/LkSWJiYxkydAhLlixh27Zt3HXXXUyZMoWcnFy++OIL1qxdy+DBN3PHHXfg7u5Odk42CxYspDAxsY6jQ5PAJowZPZpGjVzIy89n69ZtJCQmEBgUVGW9ed/MY+TIEUz+y2SKi4rZ88Nudu+uPwHs6urKmLFj8fLyorS4hFOnT7N3796GFZaIiIiIiIiIiIiIiIiIyK/AEN7rek1qK1fN5vWrruj+LBYLZrOZwsJCAgMDr+i+RURERERERERERERERK6kpKQknJ2dMRqNGAyGK7LPBg8BLSIiIiIiIiIiIiIiIiIivy1KAIuIiIiIiIiIiIiIiIiIXCOUABYRERERERERERERERERuUYoASwiIiIiIiIiIiIiIiIico1QAlhERERERERERERERERE5BqhBLCIiIiIiIiIiIiIiIiIyDVCCWARERERERERERERERERkWuEEsAiIiIiIiIiIiIiIiIiItcIJYBFRERERERERERERERERK4RSgCLiIiIiIiIiIiIiIiIiFwjlAAWEREREREREREREREREblGKAEsIiIiIiIiIiIiIiIiInKNUAJYREREREREREREREREROQaoQSwiIiIiIiIiIiIiIiIiMg1QglgEREREREREREREREREZFrhBLAIiIiIiIiIiIiIiIiIiLXCFN2dvbVjkFERERERERERERERERERK4A9QAWEREREREREREREREREblGKAEsIiIiIiIiIiIiIiIiInKNUAJYREREREREREREREREROQaoQSwiIiIiIiIiIiIiIiIiMg1QglgEREREREREREREREREZFrhBLAIiIiIiIiIiIiIiIiIiLXCNPl7sDNzY2+ffsRFXWS2NjYKxGTyBURFxd3tUMQERERERERERERERERqZXJdNnp2ur7bPCGJhO9e/emT9++ONjb06NHd6KiotiwcSNZmZlXMkYREREREREREREREREREbFBgxLAJpOJW4YNo0vnzlU+b9OmDS1atODHiAh2bN9OSUnJFQlSpCEaN258tUMQERERERERERERERERqVVaWtoV3+clJYADGgcwdMhQPD092bZ9OyeOH+fGGwcSEOD/8w5NJvr07k2nTp3YsnkLBw8euOJBX0kTxt3NoSNHOXT4yNUORURERERERERERERERETkshhatu1kqW8lFxcXbrzxRrp06YLRaLR+npaWxpYtW3B0dKD/DQPw8PSotm1KcgrrN64nPi7+ykZ+hWxYs5wPZv6HlavWXNZ+eoR3IzkllcSkpCsU2R9D5J4dV3R/FosFs9lMYWEhvr6+V3TfIiIiIiIiIiIiIiIiIldSWloazs7OGI1GDAbDFdmnTT2APT09sTPZVfvc19eXO+64g/j4BFauWkFA48b063s9zs5O1nVKy8owYMDZxZnCgkKbgpr61r+4vl8fTCYTmVlZJCYmsXzlapYuX4nFUm+++qr44L1/889/vaUEsIiIiIiIiIiIiIiIiIhcNTYlgMdPmMDe3XuYO/dr+vbtR6tWraosDwkJZvz4CZw8eZKFCxfQJqwNLUNbsH3HDgwGAyOGj2DL1i0cP37cpqACAvzZun0H38xfiLOzC926dOa5p6fQvFlTpn8469K/pYiIiIiIiIiIiIiIiIjIH4BNCWAHe3uuv+F6uoWHs2PHDvbu3cuAAQMICgqqsl5YWBhBwcHMnfs10dExDBo4sNo6tjp37jyHjxwDYO+PETg7OzP61uFM/3AW7du15fFHJhPavDlubq6sXL2Wt/79LkajkT89eD93jB2Dk5MT23fu5J1p75Obm2vd7523j2Xi/eNxcXHh8JGjODo4WJc9cN+9jBw+jDvH3Wf9bOXSb5kzdz6L/rcYgBahzfn7c0/ToX078vLy+c+nn7N0+UoA3nztFd587RUAbrl1LCaTiReef5YunTthMZtZs24D/373/QaVh4iIiIiIiIiIiIiIiIhIfWxKAFdq1MiFoUOHkJmVydYtW9mzZw83DrgRbx9vSkpL+XHPHqJjorlp0M20bt2q/h1egsLCQhx+Sta2aBFK+3btePmfr1NQUEBRcTEAj/11EqNvHcmMjz4mOyeHSX96kA/f+zcP/vmvAIwcfgvPTHmc/371NUeOHqNzpw5c1z3c5hh8fX344tOP2Be5n7+/+Ar2DvYkJ6dYl38w4yN27dkLQFZWNv969WVcXV159vkXsVjMmEyXVNwiIiIiIiIiIiIiIiIiIpekQRlJL08vxowZQ0pyCus3rsfRwZGsrCzCu3dnwoT7MBqNlx2YwWDAZDLh5upKeLeu3HH7GH74KbkKUFJawrYdO61/N3Jx4e47b+edadNZvnI1AKdPR/O/BXPp27sXu3bvYdzdd7Ji1Ro+/eJLAHbt3sPtt42xOaa777idnJwcnn/hH5SXl1dbnnr+PDExsda/fby9OXs2joh9kZf8/UVERERERERERERERERELtVldUlt3KQx99x9D0lJifj7+WOyt79ScXHPXXdwz113AFBcXMyGTZv5YMZHta7ftGkIDg4ORO4/YP0sPiGR1HPnaN26Jbt276FpSDDzF/2vwTG1btWSAwcP15j8rcm8hd/yxqv/IDgokHkLv2XL1u0NPraIiIiIiIiIiIiIiIiISH2uyJjEgYENm+e3Lus2bGTuvIXk5uZxPi2NkpKSOtc3GAwAWCy1r2M2W7Cro3dyWVkZjo4OtS43GA2YzeYal1lqOPCWrdu5/Z4J3HPnHfzrny+z64c9/O2Fl2sPUERERERERERERERERETkMlz+WM2/kIyMTE6cjCIxKane5C/A2bNxlJaWEd6ti/WzoMBAAvz9OR0dA0B0TAy9el5X6z7Op6Xj4+NDIxeXGpfHxp6la5fONQ5xnZeXj5ura7XPU1JSeX/GLJ79+4sMvLE/wUGB9X4XEREREREREREREREREZGGuCI9gH8L8gsKWPS/xTz52CMAZGfnMOnhBzkZdYpdP+wB4Iuv5jB96ttkZD7Jjp27MJlM2F8wbPXuPXspLyvj5RefZ/nK1ZjNZpydnK3LF3z7P24fO4qpb/+L5StWU1pWSnl5OXv2RnAy6hRjR99KUlIyvr4+7NkbQe9e15GSeo78/Hy6d+tGWVkZObm5v27BiIiIiIiIiIiIiIiIiMgfxjWTAAaY8dHHFBUX8fijf8HJ0ZEdu3bzzrT3rMMz79y1m2f+9gKP/XUSt40eRX5BPmfOnCUhIRGAnJxcnnn+Rf72zBSmvf0m+QX5JCYlERcXD1T05n34L4/xt2em8Obrr1BSUsLC/y1mz94I3p8xi3+8+Hemvv0vzqelExN7ht49r6Nv3944ODgQH5/Ay/98nZwcJYBFRERERERERERERERE5JdhaNm2Ux2z5lYYOGggPa/ricnUsHxxbGwsK1euJCcnp0Hby7Urcs+OK7o/i8WC2WymsLAQX1/fK7pvERERERERERERERERkSspLS0NZ2dnjEYjBoPhiuzTpozu5u83s3//AQbffDNt2rSxeecZGRls2rSJqKioBgcoIiIiIiIiIiIiIiIiIiK2sblLb1ZmJt9++y2hoaHcPPhm/P38a123uLiYnTt2svfHvZSXl1+RQEVEREREREREREREREREpG6XPKZzbGwsn3/2Od3Dw7mh/wBcXJytyywWC4cOHWLL5s3k5edf0UBFRERERERERERERERERKRuDZrU12KxELFvH0eOHqN//xsIDw8nKSmJ9evXk5KScqVjFBERERERERERERERERERGzQoAVypqKiQ9evXs+uHH8jLzb1SMYmIiIiIiIiIiIiIiIiISAMYr8ROlPwVEfl9WH4sma8j42pcNmtXDJujz//KEf12fLgzmk2nzl3tMETkAmvWrOHw4cNXOwz5BRw5coTFixdz5swZAHJycti4cSMrV668ypHVLS8vjwULFpCTk3O1Q7mmqK3/erZs2cKqVasavP2VaAOrVq3i5MmTDd7+9yYhIYH58+dflWPv37+fjRs3XpVji4hcy06ePMmnn356tcMQERGp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vY6djwyosycxwI0fb2dc12Am9w6tcz0REbl85eXlPPDAA0BFQtvWuSN/qyrnMF21ahXz58+nb9++PPLII1c7rN+1devWsXbtWqZPn361QxH5TVq0aBGpqanWkQ/+aM6dO8fTTz/NW2+9VesQ9VOmTGH48OEMGTLkF4lB1ykRERER+aNKS0vD2dkZo9HY4PnjL6YewCL1cHJyYtCgQWRlZZGQkEB+fj5t27a1ztF0ub03RH4PDiVnU2628OrGEwwPa1xr8vd0Wh7F5WYWHkwgObeIB3o0/ZUjFRGRa8GMGTOIjo4mIyMDk8nEmDFjrnZIvzu7du3CyckJd3d3UlJSWLFiBb17977aYYn8pmRnZ5OTk0NcXBwbN27kpZdeutoh/aHoOiUiIiIi8stRAljERp6enlWGJBT5I5m4aB9xWYXc0iaAj8bWPsfXzF0x/PfHs3QP9mTJ/b1xMtk2VKiIiMiFioqKyMnJISAggHvvvZfAwMCrHdLvzsmTJ9m3b591+OL+/fsrkS5ykePHj/Pxxx/j4+PDpEmTaNpULy/+mnSdEhERERH55WgIaLmqfg9DQIuIiIiIiIiIiIiIiIj8En6JIaA1dq2IiIiIiIiIiIiIiIiIyDVCCWARERERERERERERERERkWuEEsAiIiIiIiIiIiIiIiIiItcIJYBFRERERERERERERERERK4RSgCLiIiIiIiIiIiIiIiIiFwjlAAWEREREREREREREREREblGKAEsIiIiIiIiIiIiIiIiInKNUAJYREREREREREREREREROQaoQSwiIiIiIiIiIiIiIiIiMg1QglgEREREREREREREREREZFrhOlydxDgH8Atw4ZhNEJCQgIRP+4jMyvzSsQmIiIiIiIiIiIiIiIiIiKX4LISwAH+Adw7/l5cXFwACAwMomu3cNatXcOhQ4evSIAiIiIiIiIiIiIiIiIiImKbBg8B7eLiQrm5HLPFUuVzB3t7br11FGPHjsXZ2fmyAxQREREREREREREREREREdvYefsG/PNSN/Lz8+PBBx+ktLSU77//nrbt2uHg4FBtnW5du+Lo6EhZaSlGoxEHR0eKi4ttPk67tmGsWb6Y8rJy9h88dKlhyu/A5D8/dMX3abFYKCsrs/ZMFxEREREREREREREREfktKigowN7eHoPBgMFguCL7vOQewO7u7owfP55GjRrRv39/2rVrxzdz55KXn19tXSdnZ/r168cDEydy/wP3Y2eyu6RjjR93F2lp6dx+22hMpsuerlhERERERERERERERERE5Jp2yVlVdw8PGjVqZP27f//+AHwzdy7jJ0zg/9m7zyitqrtt4NcMQxMGGUCKRlAgigWwJjawFyyxYMGu8Ymxa4pppj1JTDNq7JrEJPbea8SKgIKIgoCdKr0NIG1gZt4PPM4rAXQGxpI7v99arDVnn733+Z97LT5d679P84/d+8iCBfNzy623Zu6cubV+TuvWrbLXHnvkjHPOzxWX/iF77t4r/Z95ruZ+38MPzVF9D0u7tm1TUlKSESNH5ZLLrsiEiROTJD17dM/555yZjTbcMM1Lm2fSpEm56tobMmjwyzV7tGpVlu9/5/x8fccd8uHCD3PvfQ/mltvvTJI0b948N95wTTq0b5dFixbnxUGDc9kVV2fx4sVJkvPPPSu77bJz2rXdIEuWLMnpZ52XNq1b5xc//XFAzvZfAAAgAElEQVRatSrLzFmzct/9D9Xst+02PXPBuWelQ/t2ad68NNOmT8/lV1ydFwcNrqmnefPm+f53zsvuvXdLqqvz9LPP5+LfX5Ik6bP/vjn15BOzQZvWGT3mrfzh0sszadIHtf49AQAAAAAAgMJX5yOg58+fn6UVFenSuXPNWKdOnbJo0aLVHge9NuFvkhxz1BFp1KhRbvzHTWndqlV222XnPPbEv2ruH33k4SltXppLLr0iAwe/lO7dt8ppp5yYhx99PEuWLMmOO2yfgw48IL/6ze/z1NPPpGmTprng3LPyxujR+WDylBQVFeWGa65IZVVlLr38yowbPyHnnXtWxk+YkHHjJ2TZsmVZsODD3H3fAxk5alSOP/aYFKUor70+Ikly0Y++nxEjR+aqa6/P0FeG5c2330nFsoq8+957uff+hzJnztycd86ZGfrKq5k+fUZ22H67HHjAfvnZ//4m/3rq6bRoUZozTj8tDz/yeBYtWpQk+cu1V6ZDh/a54urr8uS/ns7ESZMycdIH2aP3bvnZT36UG/9xU+665/5sv23PHHLQgbnvgYfq9Jt+GTkCGgAAAAAAgP9Wn8UR0Gt1rvLQIUOy1ZZbZMMNN6oZW10n8NqGv0nyjYMPyl9v/EeS5MFHHsudt/wjHTtunIkTJ9XMmTZ9ega/PCRJMmjwy7nvrltz/LHH5OrrbkiSLFu2LAMGDqq5v36LFjn9tFPz8pBX0mvXXbJJp44545zzs2jR4gwb/lp69uieffbaM88+90Kqq6vz5FP9a5611RZbpEf3rVeq8c233smrw1+vuZ4+fUamT5+RJBn5xqjst+/e6dF964wY+UZNPYNfWlHvq8NfS+9eu2bnnb6Whx99PDt9bcdsuUW39O13wiqdvaedenJuv/Pu3P/gw0mS3/7h0jx47x3ZdJNOGTd+Qp1/WwAAAAAAAKAwrVUA/JWNN06bDdquMv7xEPiwQw/NfQ/cv1bh7/bbbZOyspZ57oUXkyRjx47L6DFv5uADD8i11/91tWuWLl2a114fkS232HyN+740ZGh+dOF3kySbbdY1TZo0Sf/HH66536BBg4x5860kSWlpac4/58x8/Ws7ptl6TbN8+fJM/JQjl7t26ZxzzzojW2yxeaqrqtO4SeM0a7b6LtSKZcsyY/qMtGndOkny1a5dMn3GzNUe6/zVrl3SpXPnnHTCsSuNt2/XTgAMAAAAAAAA1KhzALzTTjtljz32SIMGDVZ7v3fv3lm6dGn+duONa13UwQf2SfNmzfLis/9aabxNmza57oa/pbq6erXrli+vzLJly9e4b2VlZSoqKpKs6MYtLy/P6Wedt9Kcpf93/4ffvyBdu3TJr3/7h8yZMycnHn9sNtqwwyfW/edL/5DRo9/Mdy/8cZYvX55f/uzHnzh/aUVFGpSs+B2LiouTNb7X8vzzltvy9Me+gZwkM2bO/MT9AQAAAAAAgP8utQ6AGzZqlL6HH54uXbvWjC1ZvDiPPPJI2nfokF69eiVJ5s9fkHfefXetC2ratGn22mP3/OFPl2fkG6NqxluUlua6q/+cHXfYPkNfGbbatd233jIvDnppjXv36L51xk+YmCQZP35iysrKVvz9f2Mft/lmm+WxJ56sedYHkyd/YgDcunWrtGvbNj/+6S8yavSYJEn5vPmf8rb/37hx49O27Qb5ykYb5oPJU1a6N37CxHTeZJPV1gkAAAAAAADwkVoFwEVFRTmy75Hp3HnTmrHq6uo88NBDGfv++3nn3XezaNGidOvWLY899njK59b92OeP7N5rtxQVJY889kSWLl260r0xb76VPvvvUxPKbtOjR47qe3gmT5mSAw/YLx06dMg99z5QM795s2b59v98MyPfGJWtt94yhxzUJ7/41W+TJC8OGpyxY8flkt9fnL//8+bMnjM3G39lo7w4cHBmzJyZsWPHZf9998mbb72duXPL075du0+se/bsOZlbXp5jjzk6RbknFcuWpbR581q/96CXXs648eNz2SW/z9//eUvmzJ2bVmVlefKp/rnpltty8a9+kRkzZ2XI0FfSuHGjNG7cJP/q/3St9wcAAAAAAAAKX60C4K99bceVwt8keeWVoRn7/vs118OGDcuwYavvzK2LPvvvmyFDh60S/ibJcy8MyCknnZA//OnPSZKFCxfm0EMOyiadOmby5Ck5+7zvZsrUqTXzly1blq222iLH9jsqCxcuzJ8uv7ImNK2qqsq3zz4/P/jeBfnB9y5IcXGDTJ4yJa+NGJkZM2fmsiuuyo9/8P38/uJfpXGjximfV54XBw7+xNp/dNHPc8G5Z+e6q/+c6urqzJ4zJ1OmTP3ENR+pqqrKmed8Jxd+9/z88MLvpGFJSUa+MSpPPtU//Z95Likqyrf/59QcdeThmTdvXp7q/6wAGAAAAAAAAFhJUZdu3Vf/4dmPOe+881JaWlpzPXbs2Nx1112pqqr6TIv7JL/46Y/StGnT/OiiX6z2/sEH9cn555yZfft843OujLoYPmRgve5XXV2dqqqqLF68OG3atKnXvQEAAAAAAKA+zZo1K02bNk1xcXGKiorqZc9adQBXV63IiKuqqjJ8+Gvp3/+pLzT8BQAAAAAAAGBVtQqAb7/z9nTetEvGjx+XmTNnftY1AQAAAAAAALAWanUENHxWHAENAAAAAADAf6vP4gjo4nrZBQAAAAAAAIAvnAAYAAAAAAAAoEAIgAEAAAAAAAAKhAAYAAAAAAAAoEAIgAEAAAAAAAAKhAAYAAAAAAAAoEAIgAEAAAAAAAAKhAAYAAAAAAAAoEAIgAEAAAAAAAAKhAAYAAAAAAAAoEAIgAEAAAAAAAAKhAAYAAAAAAAAoEAIgAEAAAAAAAAKhAAYAAAAAAAAoEAIgAEAAAAAAAAKhAAYAAAAAAAAoECUfNEFwGdl1qxZX3QJAAAAAAAA8LmqtwC4pKQke++zd6ZNmZoRI0fW17YFp1Oj5dmh2fJs0aQymzSqTLMGycLKZHxFg7y5pEGGLSzJhAq5/LooKipKo0aNUlVV9UWXAgAAAAAAAGtUXFycoqKiet2zXpLGkpKSHH3MMdl0k02S7ZPp06dn2vTp9bH1avXovnUOPeSg/Pq3f/jMnvFZ6NNiaU5qs3SV8WYNkq2aVmarppXp06Ii985tnCfnN/4CKiwMRUVFKSkpSXV19RddCgAAAAAAAKxRUVHRly8ALikpydFHH70i/E0yZ87szFswf50L+yRdu3TO17+2Q73td8hBfXLyicfl2BNPzbJly+tt34/7brtF2bHZp+/drEFycpul2bJJZS6bsd5nUkshKyoqSnV19WfynwUAAAAAAAA+C/WZa61VANyzR4+0WH/9vPjiizn88MOz6aabJlkR/t56621ZvGjxOhV1ye9+k9123TklJSWZW16eyZOn5OFHH8+DDz/6mXR1zpo1O++/P+4zC3/7tFhaq/D343Zsvjx9lizNEzqB60zwCwAAAAAAwH+rOgfArVq1ygEHHJCShg2TJK+88ko22XTTfLhgfm699bYsWLCgZm7z0tKUlpZm6pQpdXpGu3Zt88KLA3PbHXeladP1sm3PHrnwuxdkk04dc/mV19S15E/10pCheWnI0HrfN1nxzd/VHfvc6Yz/TbNu2yZJxl3xwywe9+Yqc/qWLc2YJQ18ExgAAAAAAAColeK6Lthh++1rwt/evXtn4403zp133rFK+NuyrCynnnxKvnnqqenRo3udC5sxY2beGDUmQ18Zlhv+9vfcfe/9+cbBB6527hWX/TE//sH3aq43/spGeWXwC+ncedOasd177Za7b785g154Oo8/fF+uv+aKbLThhkmSgw/qk/5PPFwz92c/+WEevPeOvPD0k3nh6Sfz61/+NM3W+//HMR/V9/A8fP9dGfTC03ngnjtWes6/22ENnb8zHr81Yy74RqbcfkU6HPGt1c5p1mDN6wEAAAAAAAD+XZ1bSzt26rTSde/evZMByYsTX6wZa1lWlhOPPyEt1m+RJGnVqvU6lpksXrw4jRo1Wqu1u+z09Vzy+9/k9jvvyUtDhmSDDTbILy76UcrKWmbyarqTd9xhuwwZOiz/6v9M2rdvl/POPiNnn3l6/njpn9O586b5wfcuyJ8uvzKjRo/JRhttmOnTZ6zx2Vs2qVz9+0x8N0lS3GS9LJ8/9xPX31fH9wUAAAAAAAD+O9U5AC4ra7nKWO/evVOUogx4ccAq4e+bb76ZF154oc6FFRUVpaSkJKXNm2e7bbfJkX0PW+tjmr95yol5+tnn8+erVhwf3XL99T91zbvvvZ9hrw5PkmzQunWOOPzQ/PHSP6dVWVmqq6szYOCgTJ06LaPHrHp088dt0mj1AXCSNGrTIRsec3be/vnJa5zT6RPWAwAAAAAAAHxcnQPgkpKGqx3v1btXkmT8xAlpsl7TJCvC3wceeCDV1dV1Lqzf0Uem39FHJkmWLl2a/s88lyuuurbO+yRJly6d8+jjT67V2iSZOOmDtGndKkkyYuTIvD5iZG7759/ywEOP5K577s+MmTPXuHa9BqsfL26yXr76s79mwnU/z7LZ09e4vtka1gMAAAAAAAD8uzoHwJ+kV+9eyYvJPXffnZ49e+aRRx5Zq/A3Sf7V/+ncevtdWbDgw8ycNSsVFRVrnFtZWZlGjVYfTBcVFaXZeuulsnLtO2mXVixNScmKn2rZsuU545wLsufuvXPyicel7xGH5bzvXJiRb4xa7dpFlasPgTc67vzMeOK2LBj1yV3NizQAAwAAAAAAALVUXN8b9urVKx07dsxDDz2Uqqqqtd5nzpy5eevtdzJ5ypRVwt/q6uoUFRXVXM+aNTsdO3Zc7T7V1dWZOGlSum+91VrX8u+qqqryzHPP5+TTvp333ns/fQ8/dI1zx1esvoV3/R32SOs9Ds3mF9+WLj+6ps7rAQAAAAAAAP5dvXYAf6RXrxXHQQ8YMOCz2D5z5sxNq7Ky9N5t1wwYOCjPPT8gh33j4JzxrW9m+Osj06F9u5Xm33bH3bnwuxdk4sRJefPtt7PrLjuv9bM36dQxW2+9VcaOHZfS0uZp3bp1Ro1e83eAxyxpkC2brtrGO+qs/Wv1vDFLBMAAAAAAAABA7dQpAN5vv/1SXPzpTcMVFRWZP3/+Whf1aQa//HIGDn45Z595egYMHJSXhgzN5Vdek5OOPzYnnnBc5s2bl+GvjciHCz5Mkjz48KMpLS3N0UcdkdLmzfPmW28nyVodT926dat88+QT06F9uyxcuChDXxmWv/3jpjXOH7awJAe2qFjjt4A/yaLKZMCC1R9tDQAAAAAAAPDvirp0616rFHSH7bfP/gccsMb7y5cvz5y5czJ+7Li8MmxYysvL663I+ta1S+fcccs/csgRR2fatOmf+fP6tFiak9osrfO6m2c1zhPzG38GFX15DB8y8IsuAQAAAAAAAApGrTuAW7VpU/P3qFGj8sijj6b6Y9/4XZtu2s/Lttv0zAYbtMmUKVPTokVpTjvl5Lz19jufS/ibJE/Mb5wtmlZmx2bLa73mlYUlBR/+AgAAAAAAAPWr1gHwoIGD0qhhw5SXl2fQoEFf6sD33238lY3yzVNOzAZt2mTe/Pl5dfhrueqaGz7XGi6bvl76tFiaI8uWfuJx0Isqk3vnFn7nLwAAAAAAAFD/an0ENPWjU6Pl2aHZ8mzZpDKbNKrMeg1WhL7jKxpkzJIGGbCgYWYuX4sPBv+HcgQ0AAAAAAAA1J9adwBTPyZUlGRCRUnu+6ILAQAAAAAAAApO8RddAAAAAAAAAAD1QwAMAAAAAAAAUCAEwAAAAAAAAAAFQgAMAAAAAAAAUCAEwAAAAAAAAAAFQgAMAAAAAAAAUCAEwAAAAAAAAAAFQgAMAAAAAAAAUCAEwAAAAAAAAAAFQgAMAAAAAAAAUCAEwAAAAAAAAAAFQgAMAAAAAAAAUCAEwAAAAAAAAAAFQgAMAAAAAAAAUCAEwAAAAAAAAAAFQgAMAAAAAAAAUCBK1nWD3XffPdts0zMpKs4rQ4dm8ODB9VEXAAAAAAAAAHW0TgFwjx7ds9tuu9Vc77nnnpk7d27efPPNdS4MAAAAAAAAgLpZpyOgu3XbYpWxzTfffF22BAAAAAAAAGAtrVMA3LDhqg3EDRs2XJctkyT33317TjvlpNWOf+u0U9Z5fwAAAAAAAIBCtE4B8KzZs1cZmzFjxrpsCQAAAAAAAMBaWqdvAI8aOSo7bL9DzXV1dXXGjBmzzkXVRklJSS787vnZc4/eadqkScaNn5CTT/t2qqur07BhSU4/7Zvpc8C+adSwYQYMHJzLr7g6CxctSvPmzfOzH/8gW27RLa1at8oHkz7IMSeckqP6Hp4Tj++X1q1bZ8aMmfneD3+SsWPHfS7vAgAAAAAAAFAf1ikAnjxlcl566aXsvPPOSZLBgwZl5syZ9VLYpzn80EOy5+698ts//CmzZ89O+/btU11dnSQ596wzstsuO+eSS69IZVVlfvC9C3LmGd/Kny67IqWlzbPXnrvn8iuvzptvvZOmTZqkc+dN84PvXZA/XX5lRo0ek4022jDTp+tkBgAAAAAAAP6zrFMAnCTPPvtsXhv+WpJkbvncdS6otlqVlWXe/AUZNPilLFu2PG+MWtF53KJFaY7qe3jO/c6FGfbq8Jq555x5ev502RU1618eOqymw3eH7bdLdXV1BgwclKlTp2X0mDc/t/cAAAAAAAAAqC91DoCbNGmSXXbdNZt/dbN8uHBBnnjiycyaNStJ0r5Dhxx88EFp0qhJRo0elUGDBmbZsuX1XnSSPPbEk/nGIQfmrttuzl1335uHHn08S5YsSZfOnVNSUpIrLv1DzdyiouI0bFiSRo0arXavESNH5vURI3PbP/+WBx56JHfdc39mfE6dzAAAAAAAAAD1pU4BcPNmzXLiSSelVatWSZJWrVvltNNOy+DBg9OguDg77bxzGjRokCTZdddd07Vr19xyyy1ZunRpnYpatGhRSktLVxlvuX6LLFy4MEnyweQpOfrYk/KNQw7KyScdn2OO6ptTTz8zy5YtS5J8/4cXZeq0aSut/+jev1u2bHnOOOeC7Ll775x84nHpe8RhOe87F2bkG6PqVDcAAAAAAADAF6m4LpMP6NOnJvz9SElJSXr37p1dd9utJvz9SLt27bLf/vvVuaiJEydlh+23XWlsyy26pbS0NOPGTagZW7hoUe64654ce+KpadW6VXbvtVsmffBBKisr06FD+4yfMHGlfx99I3h1qqqq8sxzz+fk076d9957P30PP7TOdQMAAAAAAAB8kWrdAdx0vab56le/WucHbLXlVun/VP8sWbKk1mtuuf3O/PNv1+fSP/42T/6rf1q0aJFTTjohb7/zbl4e+kqSZOevfy2NGjXKjJkz06ljxzRq2Cjl5fMyb978PPjwozn3rG+ncePGeX/suJS1bJkZM2fmtddHrPZ5m3TqmK233ipjx45LaWnztG7dOqNG+w4wAAAAAAAA8J+l1gFwWcuyFBfXqWE4SdKgQYOUtWqVqVOm1HrNm2+9nTPPvSAXnHt2fvmzn2TJkqUZMHBQLr/y6pou3k026ZRTTjw+LVqUZtbsObn51tsyYOCgJMkll12R8vLynHh8v6zfokVmzJyV6/9y4xqf17p1q3zz5BPToX27LFy4KENfGZa//eOmOr8rAAAAAAAAwBepqEu37ms+F/ljNt74KznppJPX6iE333xTJk36YK3WUtiGDxn4RZcAAAAAAAAABaPuLb0AAAAAAAAAfCnV+gjoDz6YnJtvvikdO3ZKhw4dssEGG2T99ddPgwYNVppXWVmZeeXzMmPmjEydMiUTP/ggkz+YXO+FAwAAAAAAALCyWgfA1dXVmTTpg1WOcm62XrM0atQo1dVVWbK0IkuWLK73IgEAAAAAAAD4dLUOgNdk4aKFWbhoYX3UAgAAAAAAAMA68A1gAAAAAAAAgAIhAAYAAAAAAAAoEAJgAAAAAAAAgAIhAAYAAAAAAAAoEAJgAAAAAAAAgAIhAAYAAAAAAAAoEAJgAAAAAAAAgAIhAAYAAAAAAAAoEAJgAAAAAAAAgAIhAAYAAAAAAAAoEAJgAAAAAAAAgAIhAAYAAAAAAAAoEAJgAAAAAAAAgAIhAAYAAAAAAAAoEAJgAAAAAAAAgAIhAAYAAAAAAAAoECX1tlFJSXbdZddsudUWaV7aIsOGvZLnnn2uvrYHAAAAAAAA4FPUSwdww4YlOemkk7Jbr93SqlXrTBg/IQNeGFAfW9e7spYt89tf/SJtN9jgiy4FAAAAAAAAoF7VSwDcu/ce6dChQ5Lk3Xffy3333ZvKysr62Lrerb9+i+y7z15p3LjRF10KAAAAAAAAQL2qlyOgu3fvXvP3+AnjVwl/d9ppp7z88su12uvvf7k23bfearX3nh8wMBf+6KK1LxQAAAAAAACggK1zANywpGGaNVuv5nrfffZJVWVVhg17JUly8MEHZ6stt6x1APyny69M8+bNkyRnn/GtfPjhh7np1juSJHPmzFnXcgEAAAAAAAAK1joHwMuWL8vixUvStGmTmrH9998vxcVFadu2bXr27Jm55XNrvd+YN9+q+fv4Y4/OvHnzM/SVYSvN2WvP3XPOGaenXbu2eeudd3Px7y/J2LHjau537rxpLvrh99Nt880yffqMXH39X/Lscy+s9nnt2rXNT374/fTs0T3VVVV54l/988dL/1zregEAAAAAAAC+LNY5AC5rVZbKymVJmqw0vu+++9b8PWb0mHV9TI1ddv56fvfrX+YfN9+aN0aNzsEHHpAbb7gmR/Y7IbNnz0mrVmW58YZr8vKQofn7Tbek+9Zb5Xe//mW++4MfZ9DgVbuQLzj3rDRv3jzf/+FFqa6uSklJvZyKDQAAAAAAAPC5W6e0c9NNN80Rhx+eJk2brnHO9OnTM2jgoHV5zEpOO+WkPPnU07n+LzcmSV56eWjuu+u2HHfMUbnq2htyzFF9M3/+/Fz081+lqqoqgwa/nHZt2+Z/Tj15tQFw61atMmHCxAx7dXi91QgAAAAAAADwRShe24U77LBD+vXrt1L4u3DhwixZvDhJsmjR4rwydGhu+udNWbZ82bpX+n+6dOmcV4e/VnNdVVWV10eMSNeuXZIkm3XtmtdHvJGqqqqaOa++9nq6dum82v1uv+ue7L/v3vnLtVdmj9171VudAAAAAAAAAJ+3OncAFxcX54AD9s+222630vjSJUty6623ZtasWWnYqFGWVVTUW5EfV5SiT75fVJTq6upa7/f8Cy+mb78T0u+oI/ObX/4sg18akh/85GfrWiYAAAAAAADA565OHcBN12ua4447bpXwt6qqKvc/+GBmzZqVJJ9Z+Jsk748dm2236VlzXVxcnJ49euT9seOSJO+9Pzbb9Oye4uL//2rbb9szY8eNT5LUZMNF/z9InjZtev581TX5/o8uyp579M5XNtrwM6sfAAAAAAAA4LNS6w7gsrJWOfa4filrWbbKvWeeeSZj33+/Xgtbk3/efFsu+f1vMmXq1LwxanS+cdCBadWqLHfedW+S5K577suRfQ/Lb375szz82OPpvvVWOfCA/fODH6/o6p0zd26qq6tzwH775Jbb7sy+e++ZadNnZOHChdl+222zfPnyzF+w4HN5FwAAAAAAAID6VOsA+OCDD0zjRo0zaODA9NymZ5o3L02SvP766xk6dOhnVuC/GzBwUH76y1/nrG9/K6ecdELefvudfOuMczJj5swkycxZs3L6mefmRxd+N5f+8XeZOXNmfvqLX+WFFwcmSRYsWJC//v2f6XfUkXn08Sez09d2zC677JRGjRpl0qQP8rNf/jrz5wuAAQAAAAAAgP88RV26da/VB3MvvPD7GfH6iDzVv3969+6dXr16ZeLECbnttttTVVX1WddJgRo+ZOAXXQIAAAAAAAAUjFp3AE+ePCXde/RIkmy19daZWz439953n/AXAAAAAAAA4EuiuLYTH3300UyZMjU9t9kms2bNzB2335nFixZ/lrUBAAAAAAAAUAe1PgIaPguOgAYAAAAAAID6U+sOYAAAAAAAAAC+3ATAAAAAAAAAAAVCAAwAAAAAAABQIATAAAAAAAAAAAVCAAwAAAAAAABQIATAAAAAAAAAAAVCAAwAAAAAAABQIATAAAAAAAAAAAVCAAwAAAAAAABQIATAAAAAAAAAAAVCAAwAAAAAAABQIATAAAAAAAAAAAVCAAwAAAAAAABQIATAAAAAAAAAAAVCAAwAAAAAAABQIATAAAAAAAAAAAVCAAwAAAAAAABQIATAAAAAAAAAAAWipC6TTzrx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AwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAAAAUhAAMAAAAAAAAUhAAMAAAAAAAAUBACMAAAAAAAAEBBCMAAAAAAAAAABSEAAwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAAAAUhAAMAAAAAAAAUhAAMAAAAAAAAUBACMAAAAAAAAEBBCMAAAAAAAAAABSEAAwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAAAAUhAAMAAAAAAAAUhAAMAAAAAAAAUBACMAAAAAAAAEBBCMAAAAAAAAAABSEAAwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAAAAUhAAMAAAAAAAAUhAAMAAAAAAAAUBACMAAAAAAAAEBBCMAAAAAAAAAABSEAAwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAAAAUhAAMAAAAAAAAUhAAMAAAAAAAAUBACMAAAAAAAAEBBCMAAAAAAAAAABSEAAwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAAAAUhAAMAAAAAAAAUhAAMAAAAAAAAUBACMAAAAAAAAEBBCMAAAAAAAAAABSEAAwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAAAAUhAAMAAAAAAAAUhAAMAAAAAAAAUBACMAAAAAAAAEBBCMAAAAAAAAAABSEAAwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAAAAUhAAMAAAAAAAAUhAAMAAAAAAAAUBACMAAAAAAAAEBBCMAAAAAAAAAABSEAAwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAAAAUhAAMAAAAAAAAUhAAMAAAAAAAAUBACMAAAAAAAAEBBCMAAAAAAAAAABSEAAwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAAAAUhAAMAAAAAAAAUhAAMAAAAAAAAUBACMAAAAAAAAEBBCMAAAAAAAAAABSEAAwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAAAAUhAAMAAAAAAAAUhAAMAAAAAAAAUBACMAAAAAAAAEBBCMAAAAAAAAAABSEAAwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAAAAUhAAMAAAAAAAAUhAAMAAAAAAAAUBACMAAAAAAAAEBBCMAAAAAAAAAABSEAAwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAAAAUhAAMAAAAAAAAUhAAMAAAAAAAAUBACMAAAAAAAAEBBCMAAAAAAAAAABSEAAwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAAAAUhAAMAAAAAAAAUhAAMAAAAAAAAUBACMAAAAAAAAEBBCMAAAAAAAAAABSEAAwAAAAAAABSEAAwAAAAAAABQEAIwAAAAAAAAQEEIwAAAAAAAAAAFIQADAAAAAAAAFIQADAAAAAAAAFAQAjAAAAAAAABAQQjAAAAAAAAA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",
|
438 |
+
"mime_type": "image/png"
|
439 |
+
}
|
440 |
+
],
|
441 |
+
"match": {
|
442 |
+
"location": "/tmp/tests/test-acceptance/features/step_definitions/common.js:35"
|
443 |
+
}
|
444 |
+
}
|
445 |
+
],
|
446 |
+
"tags": [
|
447 |
+
{
|
448 |
+
"name": "@flexible-shipping",
|
449 |
+
"line": 1
|
450 |
+
}
|
451 |
+
],
|
452 |
+
"type": "scenario"
|
453 |
+
}
|
454 |
+
],
|
455 |
+
"id": "tracker-message-flexible-shippping-tests",
|
456 |
+
"keyword": "Feature",
|
457 |
+
"line": 2,
|
458 |
+
"name": "Tracker message Flexible Shippping tests",
|
459 |
+
"tags": [
|
460 |
+
{
|
461 |
+
"name": "@flexible-shipping",
|
462 |
+
"line": 1
|
463 |
+
}
|
464 |
+
],
|
465 |
+
"uri": "/tmp/tests/test-acceptance/features/tests_scenario/flexible-shipping/trackerMessageIsVisibleWhenActivatePluginFlexibleShippingTest.feature"
|
466 |
+
}
|
467 |
+
]
|
flexible-shipping.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
Plugin Name: Flexible Shipping
|
4 |
Plugin URI: https://wordpress.org/plugins/flexible-shipping/
|
5 |
Description: Create additional shipment methods in WooCommerce and enable pricing based on cart weight or total.
|
6 |
-
Version: 2.1.
|
7 |
Author: WP Desk
|
8 |
Author URI: https://www.wpdesk.net/
|
9 |
Text Domain: flexible-shipping
|
@@ -11,7 +11,7 @@
|
|
11 |
Requires at least: 4.5
|
12 |
Tested up to: 4.9.6
|
13 |
WC requires at least: 3.0.0
|
14 |
-
WC tested up to: 3.4.
|
15 |
|
16 |
Copyright 2017 WP Desk Ltd.
|
17 |
|
@@ -36,13 +36,16 @@ if ( ! defined( 'ABSPATH' ) ) {
|
|
36 |
exit;
|
37 |
} // Exit if accessed directly
|
38 |
|
39 |
-
$plugin_version = '2.1.
|
40 |
|
41 |
define( 'FLEXIBLE_SHIPPING_VERSION', $plugin_version );
|
42 |
|
43 |
-
require_once(
|
|
|
44 |
require_once( 'classes/tracker.php' );
|
45 |
|
|
|
|
|
46 |
$requirements_checker = new WPDesk_Requirement_Checker_1_10(
|
47 |
__FILE__,
|
48 |
'5.5',
|
@@ -51,16 +54,25 @@ $requirements_checker = new WPDesk_Requirement_Checker_1_10(
|
|
51 |
);
|
52 |
|
53 |
$requirements_checker
|
54 |
-
->add_plugin_require('woocommerce/woocommerce.php', 'WooCommerce' );
|
55 |
|
56 |
$requirements_checker->check_requirements_and_load_plugin_deferred();
|
57 |
|
58 |
add_action( 'plugins_loaded', 'flexible_shipping_plugins_loaded', 9 );
|
59 |
-
if ( !function_exists( 'flexible_shipping_plugins_loaded' ) ) {
|
60 |
function flexible_shipping_plugins_loaded() {
|
61 |
-
if ( !
|
62 |
-
|
63 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
64 |
}
|
|
|
|
|
|
|
65 |
}
|
66 |
}
|
3 |
Plugin Name: Flexible Shipping
|
4 |
Plugin URI: https://wordpress.org/plugins/flexible-shipping/
|
5 |
Description: Create additional shipment methods in WooCommerce and enable pricing based on cart weight or total.
|
6 |
+
Version: 2.1.5
|
7 |
Author: WP Desk
|
8 |
Author URI: https://www.wpdesk.net/
|
9 |
Text Domain: flexible-shipping
|
11 |
Requires at least: 4.5
|
12 |
Tested up to: 4.9.6
|
13 |
WC requires at least: 3.0.0
|
14 |
+
WC tested up to: 3.4.3
|
15 |
|
16 |
Copyright 2017 WP Desk Ltd.
|
17 |
|
36 |
exit;
|
37 |
} // Exit if accessed directly
|
38 |
|
39 |
+
$plugin_version = '2.1.5';
|
40 |
|
41 |
define( 'FLEXIBLE_SHIPPING_VERSION', $plugin_version );
|
42 |
|
43 |
+
require_once( __DIR__ . '/vendor/autoload.php' );
|
44 |
+
|
45 |
require_once( 'classes/tracker.php' );
|
46 |
|
47 |
+
require_once( dirname( __FILE__ ) . '/classes/wpdesk/class-requirement-checker.php' );
|
48 |
+
|
49 |
$requirements_checker = new WPDesk_Requirement_Checker_1_10(
|
50 |
__FILE__,
|
51 |
'5.5',
|
54 |
);
|
55 |
|
56 |
$requirements_checker
|
57 |
+
->add_plugin_require( 'woocommerce/woocommerce.php', 'WooCommerce' );
|
58 |
|
59 |
$requirements_checker->check_requirements_and_load_plugin_deferred();
|
60 |
|
61 |
add_action( 'plugins_loaded', 'flexible_shipping_plugins_loaded', 9 );
|
62 |
+
if ( ! function_exists( 'flexible_shipping_plugins_loaded' ) ) {
|
63 |
function flexible_shipping_plugins_loaded() {
|
64 |
+
if ( ! function_exists( 'should_enable_wpdesk_tracker' ) ) {
|
65 |
+
function should_enable_wpdesk_tracker() {
|
66 |
+
$tracker_enabled = true;
|
67 |
+
if ( ! empty( $_SERVER['SERVER_ADDR'] ) && $_SERVER['SERVER_ADDR'] === '127.0.0.1' ) {
|
68 |
+
$tracker_enabled = false;
|
69 |
+
}
|
70 |
+
|
71 |
+
return apply_filters( 'wpdesk_tracker_enabled', $tracker_enabled );
|
72 |
+
}
|
73 |
}
|
74 |
+
|
75 |
+
$tracker_factory = new WPDesk_Tracker_Factory();
|
76 |
+
$tracker_factory->create_tracker( basename( dirname( __FILE__ ) ) );
|
77 |
}
|
78 |
}
|
inc/wpdesk-tracker/class-wpdesk-tracker-factory.php
ADDED
@@ -0,0 +1,91 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Factory' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Can create and build tracker instance.
|
20 |
+
*
|
21 |
+
* Class WPDesk_Tracker_Factory
|
22 |
+
*/
|
23 |
+
class WPDesk_Tracker_Factory {
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Static tracker instance, single for application.
|
27 |
+
*
|
28 |
+
* @var WPDesk_Tracker
|
29 |
+
*/
|
30 |
+
private static $tracker;
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Builds tracker instance.
|
34 |
+
*
|
35 |
+
* @param string $basename Plugin basename.
|
36 |
+
*
|
37 |
+
* @return WPDesk_Tracker built tracker.
|
38 |
+
*/
|
39 |
+
private function build_tracker( $basename ) {
|
40 |
+
$sender = new WPDesk_Tracker_Sender_Wordpress_To_WPDesk();
|
41 |
+
$sender = new WPDesk_Tracker_Sender_Logged( $sender );
|
42 |
+
|
43 |
+
$tracker = new WPDesk_Tracker(
|
44 |
+
$basename,
|
45 |
+
$sender
|
46 |
+
);
|
47 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Gateways() );
|
48 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Identification() );
|
49 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Identification_Gdpr() );
|
50 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Jetpack() );
|
51 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_License_Emails() );
|
52 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Orders() );
|
53 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Orders_Country() );
|
54 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Orders_Month() );
|
55 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Plugins() );
|
56 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Products() );
|
57 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Products_Variations() );
|
58 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Server() );
|
59 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Settings() );
|
60 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Shipping_Classes() );
|
61 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Shipping_Methods() );
|
62 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Shipping_Methods_Zones() );
|
63 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Templates() );
|
64 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Theme() );
|
65 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_User_Agent() );
|
66 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Users() );
|
67 |
+
$tracker->add_data_provider( new WPDesk_Tracker_Data_Provider_Wordpress() );
|
68 |
+
|
69 |
+
$tracker->init();
|
70 |
+
|
71 |
+
return $tracker;
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Creates tracker instance.
|
76 |
+
*
|
77 |
+
* @param string $basename Plugin basename.
|
78 |
+
*
|
79 |
+
* @return WPDesk_Tracker created tracker.
|
80 |
+
*/
|
81 |
+
public function create_tracker( $basename ) {
|
82 |
+
if ( empty( self::$tracker ) ) {
|
83 |
+
self::$tracker = $this->build_tracker( $basename );
|
84 |
+
}
|
85 |
+
|
86 |
+
return self::$tracker;
|
87 |
+
}
|
88 |
+
}
|
89 |
+
|
90 |
+
}
|
91 |
+
|
inc/wpdesk-tracker/class-wpdesk-tracker.php
CHANGED
@@ -2,86 +2,108 @@
|
|
2 |
/**
|
3 |
* WP Desk Tracker
|
4 |
*
|
5 |
-
* @class
|
6 |
-
* @version
|
7 |
-
* @package
|
8 |
-
* @category
|
9 |
-
* @author
|
10 |
*/
|
11 |
|
12 |
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
-
|
14 |
}
|
15 |
|
16 |
-
if ( !class_exists( 'WPDesk_Tracker' ) ) {
|
17 |
|
18 |
class WPDesk_Tracker {
|
19 |
|
20 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
|
22 |
-
|
|
|
|
|
|
|
23 |
|
24 |
-
|
|
|
|
|
|
|
25 |
|
26 |
-
|
|
|
|
|
|
|
27 |
|
28 |
-
public
|
|
|
|
|
|
|
29 |
|
30 |
/**
|
31 |
-
*
|
32 |
-
*
|
|
|
33 |
*/
|
34 |
-
|
35 |
-
|
|
|
36 |
|
37 |
/**
|
38 |
* Hook into cron event.
|
39 |
*/
|
40 |
-
public
|
41 |
-
|
42 |
-
add_action( '
|
43 |
-
add_action( '
|
44 |
-
add_action( '
|
45 |
-
add_action( '
|
46 |
-
add_action( '
|
47 |
-
add_action( '
|
48 |
-
add_action( '
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
add_action( '
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
add_filter( '
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
|
|
|
|
|
|
|
|
68 |
|
69 |
global $pagenow;
|
70 |
if ( 'plugins.php' === $pagenow ) {
|
71 |
-
add_action( 'admin_footer', array(
|
72 |
}
|
73 |
-
|
74 |
}
|
75 |
|
76 |
-
public
|
77 |
-
$
|
78 |
-
if ( apply_filters( 'wpdesk_tracker_use_testdata', false ) ) {
|
79 |
-
$api_url = self::$test_api_url;
|
80 |
-
}
|
81 |
-
return $api_url;
|
82 |
}
|
83 |
|
84 |
-
|
|
|
85 |
if ( apply_filters( 'wpdesk_tracker_use_testdata', false ) && apply_filters( 'wpdesk_tracker_show_testdata', false ) ) {
|
86 |
include( 'views/tracker-styles.php' );
|
87 |
}
|
@@ -90,7 +112,7 @@ if ( !class_exists( 'WPDesk_Tracker' ) ) {
|
|
90 |
/**
|
91 |
* @param WP_Admin_Bar $wp_admin_bar
|
92 |
*/
|
93 |
-
public
|
94 |
if ( apply_filters( 'wpdesk_tracker_use_testdata', false ) && apply_filters( 'wpdesk_tracker_show_testdata', false ) ) {
|
95 |
$args = array(
|
96 |
'id' => 'my_page',
|
@@ -102,17 +124,17 @@ if ( !class_exists( 'WPDesk_Tracker' ) ) {
|
|
102 |
}
|
103 |
|
104 |
|
105 |
-
public
|
106 |
$options = get_option( 'wpdesk_helper_options' );
|
107 |
-
if ( !is_array( $options ) ) {
|
108 |
$options = array();
|
109 |
}
|
110 |
if ( empty( $options['wpdesk_tracker_agree'] ) ) {
|
111 |
$options['wpdesk_tracker_agree'] = '0';
|
112 |
}
|
113 |
$wpdesk_tracker_agree = $options['wpdesk_tracker_agree'];
|
114 |
-
$wp_next_scheduled
|
115 |
-
if ( $wpdesk_tracker_agree == '1' &&
|
116 |
wp_schedule_event( time(), 'daily', 'wpdesk_tracker_send_event' );
|
117 |
}
|
118 |
if ( $wpdesk_tracker_agree == '0' && $wp_next_scheduled ) {
|
@@ -120,12 +142,12 @@ if ( !class_exists( 'WPDesk_Tracker' ) ) {
|
|
120 |
}
|
121 |
}
|
122 |
|
123 |
-
public
|
124 |
-
$wpdesk_translation = load_plugin_textdomain( 'wpdesk-tracker',
|
125 |
}
|
126 |
|
127 |
-
public
|
128 |
-
if ( !is_network_admin() &&
|
129 |
$plugins = array(
|
130 |
'wpdesk-helper/wpdesk-helper.php' => 'wpdesk-helper/wpdesk-helper.php'
|
131 |
);
|
@@ -134,22 +156,22 @@ if ( !class_exists( 'WPDesk_Tracker' ) ) {
|
|
134 |
}
|
135 |
}
|
136 |
|
137 |
-
public
|
138 |
$screen = get_current_screen();
|
139 |
if ( $screen->id == 'admin_page_wpdesk_tracker' || $screen->id == 'admin_page_wpdesk_tracker_deactivate' ) {
|
140 |
-
wp_register_style( 'wpdesk-helper-tracker', plugin_dir_url( __FILE__ ) . 'assets/css/tracker.css', array(),
|
141 |
wp_enqueue_style( 'wpdesk-helper-tracker' );
|
142 |
}
|
143 |
}
|
144 |
|
145 |
-
public
|
146 |
add_submenu_page(
|
147 |
null,
|
148 |
'WP Desk Tracker',
|
149 |
'WP Desk Tracker',
|
150 |
'manage_options',
|
151 |
'wpdesk_tracker',
|
152 |
-
array(
|
153 |
);
|
154 |
add_submenu_page(
|
155 |
null,
|
@@ -157,18 +179,18 @@ if ( !class_exists( 'WPDesk_Tracker' ) ) {
|
|
157 |
'Deactivate plugin',
|
158 |
'manage_options',
|
159 |
'wpdesk_tracker_deactivate',
|
160 |
-
array(
|
161 |
);
|
162 |
}
|
163 |
|
164 |
-
public
|
165 |
-
|
166 |
}
|
167 |
|
168 |
|
169 |
-
public
|
170 |
$option = get_option( 'wpdesk_helper_options' );
|
171 |
-
if (
|
172 |
add_option( 'wpdesk_helper_options', array() );
|
173 |
}
|
174 |
$type = '';
|
@@ -176,8 +198,8 @@ if ( !class_exists( 'WPDesk_Tracker' ) ) {
|
|
176 |
$type = $_REQUEST['type'];
|
177 |
}
|
178 |
if ( $type == 'allow' ) {
|
179 |
-
$options = get_option('wpdesk_helper_options', array() );
|
180 |
-
if ( !is_array( $options ) ) {
|
181 |
$options = array();
|
182 |
}
|
183 |
update_option( 'wpdesk_helper_options', $options );
|
@@ -186,115 +208,90 @@ if ( !class_exists( 'WPDesk_Tracker' ) ) {
|
|
186 |
update_option( 'wpdesk_helper_options', $options );
|
187 |
}
|
188 |
if ( $type == 'dismiss' ) {
|
189 |
-
$options = get_option('wpdesk_helper_options', array() );
|
190 |
-
if ( !is_array( $options ) ) {
|
191 |
$options = array();
|
192 |
}
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
self::$request_coupon = true;
|
200 |
-
$options = get_option('wpdesk_helper_options', array() );
|
201 |
-
if ( !is_array( $options ) ) {
|
202 |
-
$options = array();
|
203 |
-
}
|
204 |
-
update_option( 'wpdesk_helper_options', $options );
|
205 |
-
delete_option( 'wpdesk_tracker_notice' );
|
206 |
-
$options['wpdesk_tracker_agree'] = '1';
|
207 |
-
update_option( 'wpdesk_helper_options', $options );
|
208 |
-
}
|
209 |
-
if ( $type == 'dismiss_coupon' ) {
|
210 |
-
self::$dismiss_coupon = true;
|
211 |
-
$options = get_option('wpdesk_helper_options', array() );
|
212 |
-
if ( !is_array( $options ) ) {
|
213 |
-
$options = array();
|
214 |
}
|
215 |
-
remove_action( 'update_option_wpdesk_helper_options', array( __CLASS__, 'update_option_wpdesk_helper_options' ), 10, 3 );
|
216 |
-
unset( $options['wpdesk_tracker_agree'] );
|
217 |
-
update_option( 'wpdesk_helper_options', $options );
|
218 |
-
add_action( 'update_option_wpdesk_helper_options', array( __CLASS__, 'update_option_wpdesk_helper_options' ), 10, 3 );
|
219 |
-
delete_option( 'wpdesk_tracker_notice' );
|
220 |
-
$options['wpdesk_tracker_agree'] = '0';
|
221 |
-
update_option( 'wpdesk_helper_options', $options );
|
222 |
-
update_option( 'wpdesk_tracker_notice', 'dismiss_all' );
|
223 |
}
|
224 |
}
|
225 |
|
226 |
-
public
|
227 |
if ( empty( $old_value ) ) {
|
228 |
$old_value = array( 'wpdesk_tracker_agree' => '-1' );
|
229 |
}
|
230 |
-
if ( !isset( $old_value['wpdesk_tracker_agree'] ) ) {
|
231 |
$old_value['wpdesk_tracker_agree'] = '-1';
|
232 |
}
|
233 |
if ( empty( $value ) ) {
|
234 |
$value = array( 'wpdesk_tracker_agree' => '-1' );
|
235 |
}
|
236 |
-
if ( !isset( $value['wpdesk_tracker_agree'] ) ) {
|
237 |
$value['wpdesk_tracker_agree'] = '-1';
|
238 |
}
|
239 |
if ( $old_value['wpdesk_tracker_agree'] != '1' ) {
|
240 |
if ( $value['wpdesk_tracker_agree'] == '1' ) {
|
241 |
-
|
242 |
}
|
243 |
}
|
244 |
if ( $old_value['wpdesk_tracker_agree'] != '0' ) {
|
245 |
if ( $value['wpdesk_tracker_agree'] == '0' ) {
|
246 |
-
|
247 |
update_option( 'wpdesk_tracker_notice', 'dismiss_all' );
|
248 |
}
|
249 |
}
|
250 |
}
|
251 |
|
252 |
-
public
|
253 |
if ( apply_filters( 'wpdesk_tracker_do_not_ask', false ) ) {
|
254 |
-
if ( !is_array( $value ) ) {
|
255 |
$value = array();
|
256 |
}
|
257 |
$value['wpdesk_tracker_agree'] = 1;
|
258 |
}
|
|
|
259 |
return $value;
|
260 |
}
|
261 |
|
262 |
-
public
|
263 |
if ( apply_filters( 'wpdesk_tracker_do_not_ask', false ) ) {
|
264 |
-
$default
|
265 |
$default['wpdesk_tracker_agree'] = 1;
|
266 |
}
|
|
|
267 |
return $default;
|
268 |
}
|
269 |
|
270 |
-
public
|
271 |
-
if ( !
|
272 |
return;
|
273 |
}
|
274 |
-
$screen
|
275 |
-
$options = get_option('wpdesk_helper_options', array() );
|
276 |
-
if ( !is_array( $options ) ) {
|
277 |
$options = array();
|
278 |
}
|
279 |
if ( get_option( 'wpdesk_tracker_notice', '0' ) != 'dismiss_all' ) {
|
280 |
if ( empty( $options['wpdesk_tracker_agree'] ) || $options['wpdesk_tracker_agree'] == '0' ) {
|
281 |
-
$coupon_avaliable = false;
|
282 |
-
if ( get_option( 'wpdesk_tracker_notice', '0' ) == '1' ) {
|
283 |
-
$coupon_avaliable = true;
|
284 |
-
}
|
285 |
if ( in_array( $screen->id, apply_filters( 'wpdesk_tracker_notice_screens', array() ) ) ) {
|
286 |
-
$user
|
287 |
-
$username
|
288 |
$terms_url = get_locale() == 'pl_PL' ? 'https://www.wpdesk.pl/dane-uzytkowania/' : 'https://www.wpdesk.net/usage-tracking/';
|
289 |
-
$shop_url
|
290 |
include( 'views/tracker-notice.php' );
|
291 |
}
|
292 |
}
|
293 |
}
|
294 |
if ( $screen->id == 'plugins' ) {
|
295 |
if ( isset( $_GET['wpdesk_tracker_opt_out'] ) ) {
|
296 |
-
$options = get_option('wpdesk_helper_options', array() );
|
297 |
-
if ( !is_array( $options ) ) {
|
298 |
$options = array();
|
299 |
}
|
300 |
delete_option( 'wpdesk_tracker_notice' );
|
@@ -305,180 +302,77 @@ if ( !class_exists( 'WPDesk_Tracker' ) ) {
|
|
305 |
}
|
306 |
}
|
307 |
|
308 |
-
public
|
309 |
-
$user
|
310 |
-
$username
|
311 |
$allow_url = admin_url( 'admin.php?page=wpdesk_tracker' );
|
312 |
$allow_url = add_query_arg( 'plugin', $_GET['plugin'], $allow_url );
|
313 |
-
$skip_url
|
314 |
$allow_url = add_query_arg( 'allow', '1', $allow_url );
|
315 |
-
$skip_url
|
316 |
$terms_url = get_locale() == 'pl_PL' ? 'https://www.wpdesk.pl/dane-uzytkowania/' : 'https://www.wpdesk.net/usage-tracking/';
|
317 |
include( 'views/tracker-connect.php' );
|
318 |
}
|
319 |
|
320 |
-
public
|
321 |
-
$user
|
322 |
-
$username
|
323 |
-
$plugin
|
324 |
$active_plugins = get_plugins();
|
325 |
-
$plugin_name
|
326 |
include( 'views/tracker-deactivate.php' );
|
327 |
}
|
328 |
|
329 |
-
public
|
330 |
if ( isset( $_GET['page'] ) && $_GET['page'] == 'wpdesk_tracker' ) {
|
331 |
if ( isset( $_GET['plugin'] ) && isset( $_GET['allow'] ) ) {
|
332 |
-
$options = get_option('wpdesk_helper_options', array() );
|
333 |
-
if ( !is_array( $options ) ) {
|
334 |
$options = array();
|
335 |
}
|
336 |
if ( $_GET['allow'] == '0' ) {
|
337 |
-
remove_action( 'update_option_wpdesk_helper_options', array(
|
|
|
|
|
|
|
338 |
unset( $options['wpdesk_tracker_agree'] );
|
339 |
update_option( 'wpdesk_helper_options', $options );
|
340 |
-
add_action( 'update_option_wpdesk_helper_options', array(
|
|
|
|
|
|
|
341 |
$options['wpdesk_tracker_agree'] = '0';
|
342 |
update_option( 'wpdesk_helper_options', $options );
|
343 |
update_option( 'wpdesk_tracker_notice', '1' );
|
344 |
-
}
|
345 |
-
|
346 |
-
|
|
|
|
|
347 |
unset( $options['wpdesk_tracker_agree'] );
|
348 |
update_option( 'wpdesk_helper_options', $options );
|
349 |
-
add_action( 'update_option_wpdesk_helper_options', array(
|
|
|
|
|
|
|
350 |
delete_option( 'wpdesk_tracker_notice' );
|
351 |
update_option( 'wpdesk_tracker_agree', '1' );
|
352 |
$options['wpdesk_tracker_agree'] = '1';
|
353 |
update_option( 'wpdesk_helper_options', $options );
|
354 |
}
|
355 |
-
wp_redirect(admin_url( 'plugins.php' ) );
|
356 |
exit();
|
357 |
}
|
358 |
}
|
359 |
}
|
360 |
|
361 |
-
public
|
362 |
-
|
363 |
-
$license_emails_email = array();
|
364 |
-
$license_emails = array();
|
365 |
-
if ( ! isset( $wpdesk_helper_plugins ) ) $wpdesk_helper_plugins = array();
|
366 |
-
foreach ( $wpdesk_helper_plugins as $key => $plugin ) {
|
367 |
-
if ( isset( $plugin['api_manager'] ) ) {
|
368 |
-
$api_manager = $plugin['api_manager'];
|
369 |
-
if ( isset( $api_manager->options[$api_manager->activation_email] ) ) {
|
370 |
-
$license_emails_email[ $api_manager->options[ $api_manager->activation_email ] ] = $api_manager->options[ $api_manager->activation_email ];
|
371 |
-
}
|
372 |
-
}
|
373 |
-
}
|
374 |
-
foreach ( $license_emails_email as $email ) {
|
375 |
-
$license_emails[] = $email;
|
376 |
-
}
|
377 |
-
$data['license_emails'] = $license_emails;
|
378 |
-
return $data;
|
379 |
-
}
|
380 |
-
|
381 |
-
public static function wpdesk_tracker_data_shipping_country_per_order( $data ) {
|
382 |
-
global $wpdb;
|
383 |
-
$query = $wpdb->get_results("
|
384 |
-
SELECT m.meta_value AS shipping_country, p.post_status AS post_status , COUNT(p.ID) AS orders
|
385 |
-
FROM {$wpdb->postmeta} m, {$wpdb->posts} p
|
386 |
-
WHERE p.ID = m.post_id
|
387 |
-
AND m.meta_key = '_shipping_country'
|
388 |
-
GROUP BY shipping_country, post_status ORDER BY orders DESC"
|
389 |
-
);
|
390 |
-
$data['shipping_country_per_order'] = array();
|
391 |
-
if ( $query ) {
|
392 |
-
foreach ( $query as $row ) {
|
393 |
-
if ( !isset( $data['shipping_country_per_order'][$row->shipping_country] ) ) {
|
394 |
-
$data['shipping_country_per_order'][$row->shipping_country] = array();
|
395 |
-
}
|
396 |
-
$data['shipping_country_per_order'][$row->shipping_country][$row->post_status] = $row->orders;
|
397 |
-
}
|
398 |
-
}
|
399 |
-
return $data;
|
400 |
-
}
|
401 |
-
|
402 |
-
public static function wpdesk_tracker_data_shipping_classes( $data ) {
|
403 |
-
$data['number_of_shipping_classes'] = 0;
|
404 |
-
$shipping_classes = WC()->shipping()->get_shipping_classes();
|
405 |
-
if ( is_array( $shipping_classes ) ) {
|
406 |
-
$data['number_of_shipping_classes'] = count( $shipping_classes );
|
407 |
-
}
|
408 |
-
return $data;
|
409 |
-
}
|
410 |
-
|
411 |
-
public static function wpdesk_tracker_data_product_variations( $data ) {
|
412 |
-
$data['number_of_variations'] = 0;
|
413 |
-
$number_of_variations = wp_count_posts( 'product_variation' );
|
414 |
-
$data['number_of_variations'] = $number_of_variations;
|
415 |
-
return $data;
|
416 |
-
}
|
417 |
-
|
418 |
-
public static function wpdesk_tracker_data_orders_per_month( $data ) {
|
419 |
-
global $wpdb;
|
420 |
-
$query = $wpdb->get_results("
|
421 |
-
SELECT min(post_date) min, max(post_date) max, TIMESTAMPDIFF(MONTH, min(post_date), max(post_date) )+1 months
|
422 |
-
FROM {$wpdb->posts} p
|
423 |
-
WHERE p.post_type = 'shop_order'
|
424 |
-
AND p.post_status = 'wc-completed'
|
425 |
-
"
|
426 |
-
);
|
427 |
-
$data['orders_per_month'] = array();
|
428 |
-
if ( $query ) {
|
429 |
-
foreach ( $query as $row ) {
|
430 |
-
$data['orders_per_month']['first'] = $row->min;
|
431 |
-
$data['orders_per_month']['last'] = $row->max;
|
432 |
-
$data['orders_per_month']['months'] = $row->months;
|
433 |
-
if ( $row->months != 0 ) {
|
434 |
-
if ( isset( $data['orders'] ) && isset( $data['orders']['wc-completed'] ) ) {
|
435 |
-
$data['orders_per_month']['per_month'] = floatval($data['orders']['wc-completed'])/floatval($row->months);
|
436 |
-
}
|
437 |
-
}
|
438 |
-
}
|
439 |
-
}
|
440 |
-
return $data;
|
441 |
-
}
|
442 |
|
443 |
-
public static function wpdesk_tracker_data_shipping_methods_in_zones( $data ) {
|
444 |
-
if ( class_exists( 'WC_Shipping_Zones' )) {
|
445 |
-
$other_zones = WC_Shipping_Zones::get_zones();
|
446 |
-
$zones = array();
|
447 |
-
foreach ( $other_zones as $zone ) {
|
448 |
-
$zones[] = WC_Shipping_Zones::get_zone_by( 'zone_id', $zone['zone_id'] );
|
449 |
-
}
|
450 |
-
$zones[] = WC_Shipping_Zones::get_zone_by();
|
451 |
-
$data['shipping_methods_by_title'] = array();
|
452 |
-
$data['shipping_zones_by_name'] = array();
|
453 |
-
foreach ( $zones as $zone ) {
|
454 |
-
if ( empty( $data['shipping_zones_by_name'][$zone->get_zone_name()] ) ) {
|
455 |
-
$data['shipping_zones_by_name'][$zone->get_zone_name()] = 1;
|
456 |
-
}
|
457 |
-
else {
|
458 |
-
$data['shipping_zones_by_name'][$zone->get_zone_name()]++;
|
459 |
-
}
|
460 |
-
foreach ( $zone->get_shipping_methods() as $shipping_method ) {
|
461 |
-
if ( empty( $data['shipping_methods_by_title'][$shipping_method->method_title] ) ) {
|
462 |
-
$data['shipping_methods_by_title'][$shipping_method->method_title] = 1;
|
463 |
-
}
|
464 |
-
else {
|
465 |
-
$data['shipping_methods_by_title'][$shipping_method->method_title]++;
|
466 |
-
}
|
467 |
-
}
|
468 |
-
}
|
469 |
-
}
|
470 |
return $data;
|
471 |
}
|
472 |
|
473 |
-
public
|
474 |
-
|
475 |
-
$data['message_version'] = self::$message_version;
|
476 |
-
|
477 |
-
return $data;
|
478 |
-
}
|
479 |
-
|
480 |
-
public static function send_deactivation_data() {
|
481 |
-
|
482 |
$params = array();
|
483 |
|
484 |
$params['click_action'] = 'plugin_deactivation';
|
@@ -489,31 +383,20 @@ if ( !class_exists( 'WPDesk_Tracker' ) ) {
|
|
489 |
|
490 |
$params['reason'] = $_REQUEST['reason'];
|
491 |
|
492 |
-
if ( !empty( $_REQUEST['additional_info'] ) ) {
|
493 |
$params['additional_info'] = $_REQUEST['additional_info'];
|
494 |
}
|
495 |
|
496 |
-
$
|
497 |
-
'method' => 'POST',
|
498 |
-
'timeout' => 5,
|
499 |
-
'redirection' => 5,
|
500 |
-
'httpversion' => '1.0',
|
501 |
-
'blocking' => false,
|
502 |
-
'headers' => array( 'user-agent' => 'WPDeskTracker' ),
|
503 |
-
'body' => json_encode( $params ),
|
504 |
-
'cookies' => array(),
|
505 |
-
)
|
506 |
-
);
|
507 |
}
|
508 |
|
509 |
-
|
510 |
/**
|
511 |
* Decide whether to send tracking data or not.
|
512 |
*
|
513 |
* @param boolean $override
|
514 |
*/
|
515 |
-
public
|
516 |
-
$options = get_option('wpdesk_helper_options', array() );
|
517 |
if ( empty( $options ) ) {
|
518 |
$options = array();
|
519 |
}
|
@@ -523,7 +406,7 @@ if ( !class_exists( 'WPDesk_Tracker' ) ) {
|
|
523 |
if ( empty( $click_action ) && $options['wpdesk_tracker_agree'] == '0' ) {
|
524 |
return;
|
525 |
}
|
526 |
-
if ( !
|
527 |
return;
|
528 |
}
|
529 |
// Dont trigger this on AJAX Requests
|
@@ -532,13 +415,13 @@ if ( !class_exists( 'WPDesk_Tracker' ) ) {
|
|
532 |
}
|
533 |
if ( ! apply_filters( 'wpdesk_tracker_send_override', $override ) ) {
|
534 |
// Send a maximum of once per week by default.
|
535 |
-
$last_send =
|
536 |
if ( $last_send && $last_send > apply_filters( 'wpdesk_tracker_last_send_interval', strtotime( '-1 week' ) ) ) {
|
537 |
return;
|
538 |
}
|
539 |
} else {
|
540 |
// Make sure there is at least a 1 hour delay between override sends, we dont want duplicate calls due to double clicking links.
|
541 |
-
$last_send =
|
542 |
if ( empty( $click_action ) && $last_send && $last_send > strtotime( '-1 hours' ) ) {
|
543 |
return;
|
544 |
}
|
@@ -548,398 +431,82 @@ if ( !class_exists( 'WPDesk_Tracker' ) ) {
|
|
548 |
update_option( 'wpdesk_tracker_last_send', time() );
|
549 |
|
550 |
if ( empty( $click_action ) || $click_action == 'agree' ) {
|
551 |
-
$params =
|
552 |
|
553 |
if ( isset( $params['active_plugins'] ) ) {
|
554 |
-
foreach ( $params['active_plugins'] as $plugin
|
555 |
-
$option_name
|
556 |
$activation_date = get_option( $option_name, '' );
|
557 |
if ( $activation_date != '' ) {
|
558 |
-
$params['active_plugins'][$plugin]['activation_date'] = $activation_date;
|
559 |
}
|
560 |
}
|
561 |
}
|
562 |
|
563 |
-
if ( !empty( $click_action ) ) {
|
564 |
$params['click_action'] = 'agree';
|
565 |
}
|
566 |
-
|
567 |
-
|
568 |
-
$params['click_action'] = 'agree_coupon';
|
569 |
-
}
|
570 |
-
}
|
571 |
-
else {
|
572 |
-
$params = array( 'click_action' => 'no' );
|
573 |
-
if ( self::$dismiss_coupon ) {
|
574 |
-
$params = array(
|
575 |
-
'click_action' => 'no_coupon',
|
576 |
-
);
|
577 |
-
$params['message_version'] = self::$message_version;
|
578 |
-
}
|
579 |
$params['url'] = home_url();
|
580 |
}
|
581 |
|
582 |
$params['localhost'] = 'no';
|
583 |
-
if ( !empty( $_SERVER['SERVER_ADDR'] ) && $_SERVER['SERVER_ADDR'] == '127.0.0.1' ) {
|
584 |
$params['localhost'] = 'yes';
|
585 |
}
|
586 |
|
587 |
-
$
|
588 |
-
'method' => 'POST',
|
589 |
-
'timeout' => 5,
|
590 |
-
'redirection' => 5,
|
591 |
-
'httpversion' => '1.0',
|
592 |
-
'blocking' => false,
|
593 |
-
'headers' => array( 'user-agent' => 'WPDeskTracker' ),
|
594 |
-
'body' => json_encode( $params ),
|
595 |
-
'cookies' => array(),
|
596 |
-
)
|
597 |
-
);
|
598 |
-
|
599 |
}
|
600 |
|
601 |
-
/**
|
602 |
-
* Get the last time tracking data was sent.
|
603 |
-
* @return int|bool
|
604 |
-
*/
|
605 |
-
private static function get_last_send_time() {
|
606 |
-
return apply_filters( 'wpdesk_tracker_last_send_time', get_option( 'wpdesk_tracker_last_send', false ) );
|
607 |
-
}
|
608 |
|
609 |
/**
|
610 |
-
*
|
611 |
-
*
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
// General site info
|
617 |
-
$data['url'] = home_url();
|
618 |
-
$data['email'] = apply_filters( 'wpdesk_tracker_admin_email', get_option( 'admin_email' ) );
|
619 |
-
$data['theme'] = self::get_theme_info();
|
620 |
-
|
621 |
-
// WordPress Info
|
622 |
-
$data['wp'] = self::get_wordpress_info();
|
623 |
-
|
624 |
-
// Server Info
|
625 |
-
$data['server'] = self::get_server_info();
|
626 |
-
|
627 |
-
// Plugin info
|
628 |
-
$all_plugins = self::get_all_plugins();
|
629 |
-
$data['active_plugins'] = $all_plugins['active_plugins'];
|
630 |
-
$data['inactive_plugins'] = $all_plugins['inactive_plugins'];
|
631 |
-
|
632 |
-
// Jetpack & WooCommerce Connect
|
633 |
-
$data['jetpack_version'] = defined( 'JETPACK__VERSION' ) ? JETPACK__VERSION : 'none';
|
634 |
-
$data['jetpack_connected'] = ( class_exists( 'Jetpack' ) && is_callable( 'Jetpack::is_active' ) && Jetpack::is_active() ) ? 'yes' : 'no';
|
635 |
-
$data['jetpack_is_staging'] = ( class_exists( 'Jetpack' ) && is_callable( 'Jetpack::is_staging_site' ) && Jetpack::is_staging_site() ) ? 'yes' : 'no';
|
636 |
-
$data['connect_installed'] = class_exists( 'WC_Connect_Loader' ) ? 'yes' : 'no';
|
637 |
-
$data['connect_active'] = ( class_exists( 'WC_Connect_Loader' ) && wp_next_scheduled( 'wc_connect_fetch_service_schemas' ) ) ? 'yes' : 'no';
|
638 |
-
|
639 |
-
// Store count info
|
640 |
-
$data['users'] = self::get_user_counts();
|
641 |
-
$data['products'] = self::get_product_counts();
|
642 |
-
$data['orders'] = self::get_order_counts();
|
643 |
-
|
644 |
-
// Payment gateway info
|
645 |
-
$data['gateways'] = self::get_active_payment_gateways();
|
646 |
-
|
647 |
-
// Shipping method info
|
648 |
-
$data['shipping_methods'] = self::get_active_shipping_methods();
|
649 |
-
|
650 |
-
// Get all WooCommerce options info
|
651 |
-
$data['settings'] = self::get_all_woocommerce_options_values();
|
652 |
-
|
653 |
-
// Template overrides
|
654 |
-
$data['template_overrides'] = self::get_all_template_overrides();
|
655 |
-
|
656 |
-
// Template overrides
|
657 |
-
$data['admin_user_agents'] = self::get_admin_user_agents();
|
658 |
-
|
659 |
-
return apply_filters( 'wpdesk_tracker_data', $data );
|
660 |
-
}
|
661 |
-
|
662 |
-
/**
|
663 |
-
* Get the current theme info, theme name and version.
|
664 |
-
* @return array
|
665 |
-
*/
|
666 |
-
public static function get_theme_info() {
|
667 |
-
$theme_data = wp_get_theme();
|
668 |
-
$theme_child_theme = is_child_theme() ? 'Yes' : 'No';
|
669 |
-
$theme_wc_support = ( ! current_theme_supports( 'woocommerce' ) && ! in_array( $theme_data->template, wc_get_core_supported_themes() ) ) ? 'No' : 'Yes';
|
670 |
-
|
671 |
-
return array( 'name' => $theme_data->Name,
|
672 |
-
'version' => $theme_data->Version,
|
673 |
-
'child_theme' => $theme_child_theme,
|
674 |
-
'wc_support' => $theme_wc_support
|
675 |
-
);
|
676 |
-
}
|
677 |
-
|
678 |
-
/**
|
679 |
-
* Get WordPress related data.
|
680 |
-
* @return array
|
681 |
-
*/
|
682 |
-
private static function get_wordpress_info() {
|
683 |
-
$wp_data = array();
|
684 |
-
|
685 |
-
$memory = wc_let_to_num( WP_MEMORY_LIMIT );
|
686 |
-
|
687 |
-
if ( function_exists( 'memory_get_usage' ) ) {
|
688 |
-
$system_memory = wc_let_to_num( @ini_get( 'memory_limit' ) );
|
689 |
-
$memory = max( $memory, $system_memory );
|
690 |
-
}
|
691 |
-
|
692 |
-
$wp_data['memory_limit'] = size_format( $memory );
|
693 |
-
$wp_data['debug_mode'] = ( defined( 'WP_DEBUG' ) && WP_DEBUG ) ? 'Yes' : 'No';
|
694 |
-
$wp_data['locale'] = get_locale();
|
695 |
-
$wp_data['version'] = get_bloginfo( 'version' );
|
696 |
-
$wp_data['multisite'] = is_multisite() ? 'Yes' : 'No';
|
697 |
-
|
698 |
-
return $wp_data;
|
699 |
-
}
|
700 |
-
|
701 |
-
/**
|
702 |
-
* Get server related info.
|
703 |
-
* @return array
|
704 |
-
*/
|
705 |
-
private static function get_server_info() {
|
706 |
-
$server_data = array();
|
707 |
-
|
708 |
-
if ( isset( $_SERVER['SERVER_SOFTWARE'] ) && ! empty( $_SERVER['SERVER_SOFTWARE'] ) ) {
|
709 |
-
$server_data['software'] = $_SERVER['SERVER_SOFTWARE'];
|
710 |
-
}
|
711 |
-
|
712 |
-
if ( function_exists( 'phpversion' ) ) {
|
713 |
-
$server_data['php_version'] = phpversion();
|
714 |
-
}
|
715 |
-
|
716 |
-
if ( function_exists( 'ini_get' ) ) {
|
717 |
-
$server_data['php_post_max_size'] = size_format( wc_let_to_num( ini_get( 'post_max_size' ) ) );
|
718 |
-
$server_data['php_time_limt'] = ini_get( 'max_execution_time' );
|
719 |
-
$server_data['php_max_input_vars'] = ini_get( 'max_input_vars' );
|
720 |
-
$server_data['php_suhosin'] = extension_loaded( 'suhosin' ) ? 'Yes' : 'No';
|
721 |
-
}
|
722 |
-
|
723 |
-
global $wpdb;
|
724 |
-
$server_data['mysql_version'] = $wpdb->db_version();
|
725 |
-
|
726 |
-
$server_data['php_max_upload_size'] = size_format( wp_max_upload_size() );
|
727 |
-
$server_data['php_default_timezone'] = date_default_timezone_get();
|
728 |
-
$server_data['php_soap'] = class_exists( 'SoapClient' ) ? 'Yes' : 'No';
|
729 |
-
$server_data['php_fsockopen'] = function_exists( 'fsockopen' ) ? 'Yes' : 'No';
|
730 |
-
$server_data['php_curl'] = function_exists( 'curl_init' ) ? 'Yes' : 'No';
|
731 |
-
|
732 |
-
return $server_data;
|
733 |
-
}
|
734 |
-
|
735 |
-
/**
|
736 |
-
* Get all plugins grouped into activated or not.
|
737 |
-
* @return array
|
738 |
-
*/
|
739 |
-
private static function get_all_plugins() {
|
740 |
-
// Ensure get_plugins function is loaded
|
741 |
-
if ( ! function_exists( 'get_plugins' ) ) {
|
742 |
-
include ABSPATH . '/wp-admin/includes/plugin.php';
|
743 |
-
}
|
744 |
-
|
745 |
-
$plugins = get_plugins();
|
746 |
-
$active_plugins_keys = get_option( 'active_plugins', array() );
|
747 |
-
$active_plugins = array();
|
748 |
-
|
749 |
-
foreach ( $plugins as $k => $v ) {
|
750 |
-
// Take care of formatting the data how we want it.
|
751 |
-
$formatted = array();
|
752 |
-
$formatted['name'] = strip_tags( $v['Name'] );
|
753 |
-
if ( isset( $v['Version'] ) ) {
|
754 |
-
$formatted['version'] = strip_tags( $v['Version'] );
|
755 |
-
}
|
756 |
-
if ( isset( $v['Author'] ) ) {
|
757 |
-
$formatted['author'] = strip_tags( $v['Author'] );
|
758 |
-
}
|
759 |
-
if ( isset( $v['Network'] ) ) {
|
760 |
-
$formatted['network'] = strip_tags( $v['Network'] );
|
761 |
-
}
|
762 |
-
if ( isset( $v['PluginURI'] ) ) {
|
763 |
-
$formatted['plugin_uri'] = strip_tags( $v['PluginURI'] );
|
764 |
-
}
|
765 |
-
if ( in_array( $k, $active_plugins_keys ) ) {
|
766 |
-
// Remove active plugins from list so we can show active and inactive separately
|
767 |
-
unset( $plugins[ $k ] );
|
768 |
-
$active_plugins[ $k ] = $formatted;
|
769 |
-
} else {
|
770 |
-
$plugins[ $k ] = $formatted;
|
771 |
-
}
|
772 |
-
}
|
773 |
-
|
774 |
-
return array( 'active_plugins' => $active_plugins, 'inactive_plugins' => $plugins );
|
775 |
-
}
|
776 |
-
|
777 |
-
/**
|
778 |
-
* Get user totals based on user role.
|
779 |
-
* @return array
|
780 |
-
*/
|
781 |
-
private static function get_user_counts() {
|
782 |
-
$user_count = array();
|
783 |
-
$user_count_data = count_users();
|
784 |
-
$user_count['total'] = $user_count_data['total_users'];
|
785 |
-
|
786 |
-
// Get user count based on user role
|
787 |
-
foreach ( $user_count_data['avail_roles'] as $role => $count ) {
|
788 |
-
$user_count[ $role ] = $count;
|
789 |
-
}
|
790 |
-
|
791 |
-
return $user_count;
|
792 |
-
}
|
793 |
-
|
794 |
-
/**
|
795 |
-
* Get product totals based on product type.
|
796 |
-
* @return array
|
797 |
-
*/
|
798 |
-
private static function get_product_counts() {
|
799 |
-
$product_count = array();
|
800 |
-
$product_count_data = wp_count_posts( 'product' );
|
801 |
-
$product_count['total'] = $product_count_data->publish;
|
802 |
-
|
803 |
-
$product_statuses = get_terms( 'product_type', array( 'hide_empty' => 0 ) );
|
804 |
-
foreach ( $product_statuses as $product_status ) {
|
805 |
-
$product_count[ $product_status->name ] = $product_status->count;
|
806 |
-
}
|
807 |
-
|
808 |
-
return $product_count;
|
809 |
-
}
|
810 |
-
|
811 |
-
/**
|
812 |
-
* Get order counts based on order status.
|
813 |
-
* @return array
|
814 |
*/
|
815 |
-
private
|
816 |
-
|
817 |
-
|
818 |
-
|
819 |
-
|
820 |
-
|
821 |
}
|
822 |
-
|
823 |
-
return $order_count;
|
824 |
}
|
825 |
|
826 |
/**
|
827 |
-
* Get
|
828 |
-
* @return
|
829 |
*/
|
830 |
-
private
|
831 |
-
|
832 |
-
$gateways = WC()->payment_gateways->payment_gateways();
|
833 |
-
foreach ( $gateways as $id => $gateway ) {
|
834 |
-
if ( isset( $gateway->enabled ) && 'yes' === $gateway->enabled ) {
|
835 |
-
$active_gateways[ $id ] = array( 'title' => $gateway->title, 'supports' => $gateway->supports );
|
836 |
-
}
|
837 |
-
}
|
838 |
-
|
839 |
-
return $active_gateways;
|
840 |
}
|
841 |
|
842 |
/**
|
843 |
-
* Get a list of all active shipping methods.
|
844 |
* @return array
|
845 |
*/
|
846 |
-
private
|
847 |
-
$
|
848 |
-
|
849 |
-
|
850 |
-
|
851 |
-
$active_methods[ $id ] = array( 'title' => $shipping_method->title,
|
852 |
-
'tax_status' => $shipping_method->tax_status
|
853 |
-
);
|
854 |
}
|
855 |
}
|
856 |
|
857 |
-
return $
|
858 |
-
}
|
859 |
-
|
860 |
-
/**
|
861 |
-
* Get all options starting with woocommerce_ prefix.
|
862 |
-
* @return array
|
863 |
-
*/
|
864 |
-
private static function get_all_woocommerce_options_values() {
|
865 |
-
return array(
|
866 |
-
'version' => WC()->version,
|
867 |
-
'currency' => get_woocommerce_currency(),
|
868 |
-
'base_location' => WC()->countries->get_base_country(),
|
869 |
-
'selling_locations' => WC()->countries->get_allowed_countries(),
|
870 |
-
'api_enabled' => get_option( 'woocommerce_api_enabled' ),
|
871 |
-
'weight_unit' => get_option( 'woocommerce_weight_unit' ),
|
872 |
-
'dimension_unit' => get_option( 'woocommerce_dimension_unit' ),
|
873 |
-
'download_method' => get_option( 'woocommerce_file_download_method' ),
|
874 |
-
'download_require_login' => get_option( 'woocommerce_downloads_require_login' ),
|
875 |
-
'calc_taxes' => get_option( 'woocommerce_calc_taxes' ),
|
876 |
-
'coupons_enabled' => get_option( 'woocommerce_enable_coupons' ),
|
877 |
-
'guest_checkout' => get_option( 'woocommerce_enable_guest_checkout' ),
|
878 |
-
'secure_checkout' => get_option( 'woocommerce_force_ssl_checkout' ),
|
879 |
-
'enable_signup_and_login_from_checkout' => get_option( 'woocommerce_enable_signup_and_login_from_checkout' ),
|
880 |
-
'enable_myaccount_registration' => get_option( 'woocommerce_enable_myaccount_registration' ),
|
881 |
-
'registration_generate_username' => get_option( 'woocommerce_registration_generate_username' ),
|
882 |
-
'registration_generate_password' => get_option( 'woocommerce_registration_generate_password' ),
|
883 |
-
);
|
884 |
}
|
885 |
|
886 |
/**
|
887 |
-
*
|
888 |
* @return array
|
889 |
*/
|
890 |
-
private
|
891 |
-
$
|
892 |
-
$template_paths = apply_filters( 'woocommerce_template_overrides_scan_paths', array( 'WooCommerce' => WC()->plugin_path() . '/templates/' ) );
|
893 |
-
$scanned_files = array();
|
894 |
-
|
895 |
-
require_once( WC()->plugin_path() . '/includes/admin/class-wc-admin-status.php' );
|
896 |
-
|
897 |
-
foreach ( $template_paths as $plugin_name => $template_path ) {
|
898 |
-
$scanned_files[ $plugin_name ] = WC_Admin_Status::scan_template_files( $template_path );
|
899 |
-
}
|
900 |
-
|
901 |
-
foreach ( $scanned_files as $plugin_name => $files ) {
|
902 |
-
foreach ( $files as $file ) {
|
903 |
-
if ( file_exists( get_stylesheet_directory() . '/' . $file ) ) {
|
904 |
-
$theme_file = get_stylesheet_directory() . '/' . $file;
|
905 |
-
} elseif ( file_exists( get_stylesheet_directory() . '/woocommerce/' . $file ) ) {
|
906 |
-
$theme_file = get_stylesheet_directory() . '/woocommerce/' . $file;
|
907 |
-
} elseif ( file_exists( get_template_directory() . '/' . $file ) ) {
|
908 |
-
$theme_file = get_template_directory() . '/' . $file;
|
909 |
-
} elseif ( file_exists( get_template_directory() . '/woocommerce/' . $file ) ) {
|
910 |
-
$theme_file = get_template_directory() . '/woocommerce/' . $file;
|
911 |
-
} else {
|
912 |
-
$theme_file = false;
|
913 |
-
}
|
914 |
|
915 |
-
|
916 |
-
$override_data[] = basename( $theme_file );
|
917 |
-
}
|
918 |
-
}
|
919 |
-
}
|
920 |
-
|
921 |
-
return $override_data;
|
922 |
-
}
|
923 |
-
|
924 |
-
/**
|
925 |
-
* When an admin user logs in, there user agent is tracked in user meta and collected here.
|
926 |
-
* @return array
|
927 |
-
*/
|
928 |
-
private static function get_admin_user_agents() {
|
929 |
-
return array_filter( (array) get_option( 'woocommerce_tracker_ua', array() ) );
|
930 |
}
|
931 |
}
|
932 |
|
933 |
}
|
934 |
-
|
935 |
-
if ( !function_exists( 'wpdesk_tracker_enabled' ) ) {
|
936 |
-
function wpdesk_tracker_enabled() {
|
937 |
-
$tracker_enabled = true;
|
938 |
-
if ( !empty( $_SERVER['SERVER_ADDR'] ) && $_SERVER['SERVER_ADDR'] == '127.0.0.1' ) {
|
939 |
-
$tracker_enabled = false;
|
940 |
-
}
|
941 |
-
return apply_filters( 'wpdesk_tracker_enabled', $tracker_enabled );
|
942 |
-
// add_filter( 'wpdesk_tracker_enabled', '__return_true' );
|
943 |
-
// add_filter( 'wpdesk_tracker_do_not_ask', '__return_true' );
|
944 |
-
}
|
945 |
-
}
|
2 |
/**
|
3 |
* WP Desk Tracker
|
4 |
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
*/
|
11 |
|
12 |
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
}
|
15 |
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker' ) ) {
|
17 |
|
18 |
class WPDesk_Tracker {
|
19 |
|
20 |
+
/**
|
21 |
+
* @var string
|
22 |
+
*/
|
23 |
+
private $script_version = '11';
|
24 |
+
|
25 |
+
/**
|
26 |
+
* @var string
|
27 |
+
*/
|
28 |
+
private $plugin_basename = '';
|
29 |
|
30 |
+
/**
|
31 |
+
* @var string
|
32 |
+
*/
|
33 |
+
private $message_version = '4';
|
34 |
|
35 |
+
/**
|
36 |
+
* @var WPDesk_Tracker_Data_Provider[]
|
37 |
+
*/
|
38 |
+
private $providers = [];
|
39 |
|
40 |
+
/**
|
41 |
+
* @var WPDesk_Tracker_Sender
|
42 |
+
*/
|
43 |
+
private $sender;
|
44 |
|
45 |
+
public function __construct( $plugin_basename, WPDesk_Tracker_Sender $sender ) {
|
46 |
+
$this->plugin_basename = $plugin_basename;
|
47 |
+
$this->set_sender( $sender );
|
48 |
+
}
|
49 |
|
50 |
/**
|
51 |
+
* Setter for object that sends data.
|
52 |
+
*
|
53 |
+
* @param WPDesk_Tracker_Sender $sender Object that can send payloads.
|
54 |
*/
|
55 |
+
public function set_sender( WPDesk_Tracker_Sender $sender ) {
|
56 |
+
$this->sender = $sender;
|
57 |
+
}
|
58 |
|
59 |
/**
|
60 |
* Hook into cron event.
|
61 |
*/
|
62 |
+
public function init() {
|
63 |
+
add_action( 'plugins_loaded', array( $this, 'load_plugin_text_domain' ) );
|
64 |
+
add_action( 'admin_init', array( $this, 'init_schedule' ) );
|
65 |
+
add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ), 100 );
|
66 |
+
add_action( 'wpdesk_tracker_send_event', array( $this, 'send_tracking_data' ) );
|
67 |
+
add_action( 'admin_menu', array( $this, 'admin_menu' ) );
|
68 |
+
add_action( 'admin_init', array( $this, 'admin_init' ) );
|
69 |
+
add_action( 'admin_notices', array( $this, 'admin_notices' ) );
|
70 |
+
add_action( 'wp_ajax_wpdesk_tracker_notice_handler', array(
|
71 |
+
$this,
|
72 |
+
'wp_ajax_wpdesk_tracker_notice_handler'
|
73 |
+
) );
|
74 |
+
add_action( 'wp_ajax_wpdesk_tracker_deactivation_handler', array(
|
75 |
+
$this,
|
76 |
+
'wp_ajax_wpdesk_tracker_deactivation_handler'
|
77 |
+
) );
|
78 |
+
|
79 |
+
add_action( 'update_option_wpdesk_helper_options', array(
|
80 |
+
$this,
|
81 |
+
'update_option_wpdesk_helper_options'
|
82 |
+
), 10, 3 );
|
83 |
+
add_filter( 'option_wpdesk_helper_options', array( $this, 'option_wpdesk_helper_options' ), 10, 2 );
|
84 |
+
add_filter( 'default_option_wpdesk_helper_options', array(
|
85 |
+
$this,
|
86 |
+
'default_option_wpdesk_helper_options'
|
87 |
+
), 10, 3 );
|
88 |
+
|
89 |
+
add_filter( 'wpdesk_tracker_data', array( $this, 'wpdesk_tracker_message_version' ) );
|
90 |
+
|
91 |
+
add_action( 'admin_bar_menu', array( $this, 'admin_bar_menu' ), 999 );
|
92 |
+
add_action( 'wp_head', array( $this, 'wp_head' ), 999 );
|
93 |
+
add_action( 'admin_head', array( $this, 'wp_head' ), 999 );
|
94 |
|
95 |
global $pagenow;
|
96 |
if ( 'plugins.php' === $pagenow ) {
|
97 |
+
add_action( 'admin_footer', array( $this, 'admin_footer' ) );
|
98 |
}
|
|
|
99 |
}
|
100 |
|
101 |
+
public function add_data_provider( WPDesk_Tracker_Data_Provider $provider ) {
|
102 |
+
$this->providers[] = $provider;
|
|
|
|
|
|
|
|
|
103 |
}
|
104 |
|
105 |
+
|
106 |
+
public function wp_head() {
|
107 |
if ( apply_filters( 'wpdesk_tracker_use_testdata', false ) && apply_filters( 'wpdesk_tracker_show_testdata', false ) ) {
|
108 |
include( 'views/tracker-styles.php' );
|
109 |
}
|
112 |
/**
|
113 |
* @param WP_Admin_Bar $wp_admin_bar
|
114 |
*/
|
115 |
+
public function admin_bar_menu( $wp_admin_bar ) {
|
116 |
if ( apply_filters( 'wpdesk_tracker_use_testdata', false ) && apply_filters( 'wpdesk_tracker_show_testdata', false ) ) {
|
117 |
$args = array(
|
118 |
'id' => 'my_page',
|
124 |
}
|
125 |
|
126 |
|
127 |
+
public function init_schedule() {
|
128 |
$options = get_option( 'wpdesk_helper_options' );
|
129 |
+
if ( ! is_array( $options ) ) {
|
130 |
$options = array();
|
131 |
}
|
132 |
if ( empty( $options['wpdesk_tracker_agree'] ) ) {
|
133 |
$options['wpdesk_tracker_agree'] = '0';
|
134 |
}
|
135 |
$wpdesk_tracker_agree = $options['wpdesk_tracker_agree'];
|
136 |
+
$wp_next_scheduled = wp_next_scheduled( 'wpdesk_tracker_send_event' );
|
137 |
+
if ( $wpdesk_tracker_agree == '1' && ! $wp_next_scheduled ) {
|
138 |
wp_schedule_event( time(), 'daily', 'wpdesk_tracker_send_event' );
|
139 |
}
|
140 |
if ( $wpdesk_tracker_agree == '0' && $wp_next_scheduled ) {
|
142 |
}
|
143 |
}
|
144 |
|
145 |
+
public function load_plugin_text_domain() {
|
146 |
+
$wpdesk_translation = load_plugin_textdomain( 'wpdesk-tracker', false, $this->plugin_basename . '/inc/wpdesk-tracker/lang' );
|
147 |
}
|
148 |
|
149 |
+
public function admin_footer() {
|
150 |
+
if ( ! is_network_admin() && should_enable_wpdesk_tracker() && ! apply_filters( 'wpdesk_tracker_do_not_ask', false ) ) {
|
151 |
$plugins = array(
|
152 |
'wpdesk-helper/wpdesk-helper.php' => 'wpdesk-helper/wpdesk-helper.php'
|
153 |
);
|
156 |
}
|
157 |
}
|
158 |
|
159 |
+
public function admin_enqueue_scripts() {
|
160 |
$screen = get_current_screen();
|
161 |
if ( $screen->id == 'admin_page_wpdesk_tracker' || $screen->id == 'admin_page_wpdesk_tracker_deactivate' ) {
|
162 |
+
wp_register_style( 'wpdesk-helper-tracker', plugin_dir_url( __FILE__ ) . 'assets/css/tracker.css', array(), $this->script_version, 'all' );
|
163 |
wp_enqueue_style( 'wpdesk-helper-tracker' );
|
164 |
}
|
165 |
}
|
166 |
|
167 |
+
public function admin_menu() {
|
168 |
add_submenu_page(
|
169 |
null,
|
170 |
'WP Desk Tracker',
|
171 |
'WP Desk Tracker',
|
172 |
'manage_options',
|
173 |
'wpdesk_tracker',
|
174 |
+
array( $this, 'wpdesk_tracker_page' )
|
175 |
);
|
176 |
add_submenu_page(
|
177 |
null,
|
179 |
'Deactivate plugin',
|
180 |
'manage_options',
|
181 |
'wpdesk_tracker_deactivate',
|
182 |
+
array( $this, 'wpdesk_tracker_deactivate' )
|
183 |
);
|
184 |
}
|
185 |
|
186 |
+
public function wp_ajax_wpdesk_tracker_deactivation_handler() {
|
187 |
+
$this->send_deactivation_data();
|
188 |
}
|
189 |
|
190 |
|
191 |
+
public function wp_ajax_wpdesk_tracker_notice_handler() {
|
192 |
$option = get_option( 'wpdesk_helper_options' );
|
193 |
+
if ( ! $option ) {
|
194 |
add_option( 'wpdesk_helper_options', array() );
|
195 |
}
|
196 |
$type = '';
|
198 |
$type = $_REQUEST['type'];
|
199 |
}
|
200 |
if ( $type == 'allow' ) {
|
201 |
+
$options = get_option( 'wpdesk_helper_options', array() );
|
202 |
+
if ( ! is_array( $options ) ) {
|
203 |
$options = array();
|
204 |
}
|
205 |
update_option( 'wpdesk_helper_options', $options );
|
208 |
update_option( 'wpdesk_helper_options', $options );
|
209 |
}
|
210 |
if ( $type == 'dismiss' ) {
|
211 |
+
$options = get_option( 'wpdesk_helper_options', array() );
|
212 |
+
if ( ! is_array( $options ) ) {
|
213 |
$options = array();
|
214 |
}
|
215 |
+
if (get_option('wpdesk_tracker_notice', '0') === '2') {
|
216 |
+
update_option( 'wpdesk_tracker_notice', 'dismiss_all' );
|
217 |
+
$options['wpdesk_tracker_agree'] = '0';
|
218 |
+
update_option( 'wpdesk_helper_options', $options );
|
219 |
+
} else {
|
220 |
+
update_option( 'wpdesk_tracker_notice', '2' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
221 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
222 |
}
|
223 |
}
|
224 |
|
225 |
+
public function update_option_wpdesk_helper_options( $old_value, $value, $option ) {
|
226 |
if ( empty( $old_value ) ) {
|
227 |
$old_value = array( 'wpdesk_tracker_agree' => '-1' );
|
228 |
}
|
229 |
+
if ( ! isset( $old_value['wpdesk_tracker_agree'] ) ) {
|
230 |
$old_value['wpdesk_tracker_agree'] = '-1';
|
231 |
}
|
232 |
if ( empty( $value ) ) {
|
233 |
$value = array( 'wpdesk_tracker_agree' => '-1' );
|
234 |
}
|
235 |
+
if ( ! isset( $value['wpdesk_tracker_agree'] ) ) {
|
236 |
$value['wpdesk_tracker_agree'] = '-1';
|
237 |
}
|
238 |
if ( $old_value['wpdesk_tracker_agree'] != '1' ) {
|
239 |
if ( $value['wpdesk_tracker_agree'] == '1' ) {
|
240 |
+
$this->send_tracking_data( true, 'agree' );
|
241 |
}
|
242 |
}
|
243 |
if ( $old_value['wpdesk_tracker_agree'] != '0' ) {
|
244 |
if ( $value['wpdesk_tracker_agree'] == '0' ) {
|
245 |
+
$this->send_tracking_data( true, 'no' );
|
246 |
update_option( 'wpdesk_tracker_notice', 'dismiss_all' );
|
247 |
}
|
248 |
}
|
249 |
}
|
250 |
|
251 |
+
public function option_wpdesk_helper_options( $value, $option ) {
|
252 |
if ( apply_filters( 'wpdesk_tracker_do_not_ask', false ) ) {
|
253 |
+
if ( ! is_array( $value ) ) {
|
254 |
$value = array();
|
255 |
}
|
256 |
$value['wpdesk_tracker_agree'] = 1;
|
257 |
}
|
258 |
+
|
259 |
return $value;
|
260 |
}
|
261 |
|
262 |
+
public function default_option_wpdesk_helper_options( $default, $option = null, $passed_default = null ) {
|
263 |
if ( apply_filters( 'wpdesk_tracker_do_not_ask', false ) ) {
|
264 |
+
$default = array();
|
265 |
$default['wpdesk_tracker_agree'] = 1;
|
266 |
}
|
267 |
+
|
268 |
return $default;
|
269 |
}
|
270 |
|
271 |
+
public function admin_notices() {
|
272 |
+
if ( ! should_enable_wpdesk_tracker() ) {
|
273 |
return;
|
274 |
}
|
275 |
+
$screen = get_current_screen();
|
276 |
+
$options = get_option( 'wpdesk_helper_options', array() );
|
277 |
+
if ( ! is_array( $options ) ) {
|
278 |
$options = array();
|
279 |
}
|
280 |
if ( get_option( 'wpdesk_tracker_notice', '0' ) != 'dismiss_all' ) {
|
281 |
if ( empty( $options['wpdesk_tracker_agree'] ) || $options['wpdesk_tracker_agree'] == '0' ) {
|
|
|
|
|
|
|
|
|
282 |
if ( in_array( $screen->id, apply_filters( 'wpdesk_tracker_notice_screens', array() ) ) ) {
|
283 |
+
$user = wp_get_current_user();
|
284 |
+
$username = $user->first_name ? $user->first_name : $user->user_login;
|
285 |
$terms_url = get_locale() == 'pl_PL' ? 'https://www.wpdesk.pl/dane-uzytkowania/' : 'https://www.wpdesk.net/usage-tracking/';
|
286 |
+
$shop_url = get_locale() == 'pl_PL' ? 'https://www.wpdesk.pl/' : 'https://www.wpdesk.net/';
|
287 |
include( 'views/tracker-notice.php' );
|
288 |
}
|
289 |
}
|
290 |
}
|
291 |
if ( $screen->id == 'plugins' ) {
|
292 |
if ( isset( $_GET['wpdesk_tracker_opt_out'] ) ) {
|
293 |
+
$options = get_option( 'wpdesk_helper_options', array() );
|
294 |
+
if ( ! is_array( $options ) ) {
|
295 |
$options = array();
|
296 |
}
|
297 |
delete_option( 'wpdesk_tracker_notice' );
|
302 |
}
|
303 |
}
|
304 |
|
305 |
+
public function wpdesk_tracker_page() {
|
306 |
+
$user = wp_get_current_user();
|
307 |
+
$username = $user->first_name ? $user->first_name : $user->user_login;
|
308 |
$allow_url = admin_url( 'admin.php?page=wpdesk_tracker' );
|
309 |
$allow_url = add_query_arg( 'plugin', $_GET['plugin'], $allow_url );
|
310 |
+
$skip_url = $allow_url;
|
311 |
$allow_url = add_query_arg( 'allow', '1', $allow_url );
|
312 |
+
$skip_url = add_query_arg( 'allow', '0', $skip_url );
|
313 |
$terms_url = get_locale() == 'pl_PL' ? 'https://www.wpdesk.pl/dane-uzytkowania/' : 'https://www.wpdesk.net/usage-tracking/';
|
314 |
include( 'views/tracker-connect.php' );
|
315 |
}
|
316 |
|
317 |
+
public function wpdesk_tracker_deactivate() {
|
318 |
+
$user = wp_get_current_user();
|
319 |
+
$username = $user->first_name;
|
320 |
+
$plugin = $_GET['plugin'];
|
321 |
$active_plugins = get_plugins();
|
322 |
+
$plugin_name = $active_plugins[ $plugin ]['Name'];
|
323 |
include( 'views/tracker-deactivate.php' );
|
324 |
}
|
325 |
|
326 |
+
public function admin_init() {
|
327 |
if ( isset( $_GET['page'] ) && $_GET['page'] == 'wpdesk_tracker' ) {
|
328 |
if ( isset( $_GET['plugin'] ) && isset( $_GET['allow'] ) ) {
|
329 |
+
$options = get_option( 'wpdesk_helper_options', array() );
|
330 |
+
if ( ! is_array( $options ) ) {
|
331 |
$options = array();
|
332 |
}
|
333 |
if ( $_GET['allow'] == '0' ) {
|
334 |
+
remove_action( 'update_option_wpdesk_helper_options', array(
|
335 |
+
$this,
|
336 |
+
'update_option_wpdesk_helper_options'
|
337 |
+
), 10, 3 );
|
338 |
unset( $options['wpdesk_tracker_agree'] );
|
339 |
update_option( 'wpdesk_helper_options', $options );
|
340 |
+
add_action( 'update_option_wpdesk_helper_options', array(
|
341 |
+
$this,
|
342 |
+
'update_option_wpdesk_helper_options'
|
343 |
+
), 10, 3 );
|
344 |
$options['wpdesk_tracker_agree'] = '0';
|
345 |
update_option( 'wpdesk_helper_options', $options );
|
346 |
update_option( 'wpdesk_tracker_notice', '1' );
|
347 |
+
} else {
|
348 |
+
remove_action( 'update_option_wpdesk_helper_options', array(
|
349 |
+
$this,
|
350 |
+
'update_option_wpdesk_helper_options'
|
351 |
+
), 10, 3 );
|
352 |
unset( $options['wpdesk_tracker_agree'] );
|
353 |
update_option( 'wpdesk_helper_options', $options );
|
354 |
+
add_action( 'update_option_wpdesk_helper_options', array(
|
355 |
+
$this,
|
356 |
+
'update_option_wpdesk_helper_options'
|
357 |
+
), 10, 3 );
|
358 |
delete_option( 'wpdesk_tracker_notice' );
|
359 |
update_option( 'wpdesk_tracker_agree', '1' );
|
360 |
$options['wpdesk_tracker_agree'] = '1';
|
361 |
update_option( 'wpdesk_helper_options', $options );
|
362 |
}
|
363 |
+
wp_redirect( admin_url( 'plugins.php' ) );
|
364 |
exit();
|
365 |
}
|
366 |
}
|
367 |
}
|
368 |
|
369 |
+
public function wpdesk_tracker_message_version( $data ) {
|
370 |
+
$data['message_version'] = $this->message_version;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
371 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
372 |
return $data;
|
373 |
}
|
374 |
|
375 |
+
public function send_deactivation_data() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
376 |
$params = array();
|
377 |
|
378 |
$params['click_action'] = 'plugin_deactivation';
|
383 |
|
384 |
$params['reason'] = $_REQUEST['reason'];
|
385 |
|
386 |
+
if ( ! empty( $_REQUEST['additional_info'] ) ) {
|
387 |
$params['additional_info'] = $_REQUEST['additional_info'];
|
388 |
}
|
389 |
|
390 |
+
$this->send_payload_to_wpdesk( $params );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
391 |
}
|
392 |
|
|
|
393 |
/**
|
394 |
* Decide whether to send tracking data or not.
|
395 |
*
|
396 |
* @param boolean $override
|
397 |
*/
|
398 |
+
public function send_tracking_data( $override = false, $click_action = null ) {
|
399 |
+
$options = get_option( 'wpdesk_helper_options', array() );
|
400 |
if ( empty( $options ) ) {
|
401 |
$options = array();
|
402 |
}
|
406 |
if ( empty( $click_action ) && $options['wpdesk_tracker_agree'] == '0' ) {
|
407 |
return;
|
408 |
}
|
409 |
+
if ( ! should_enable_wpdesk_tracker() ) {
|
410 |
return;
|
411 |
}
|
412 |
// Dont trigger this on AJAX Requests
|
415 |
}
|
416 |
if ( ! apply_filters( 'wpdesk_tracker_send_override', $override ) ) {
|
417 |
// Send a maximum of once per week by default.
|
418 |
+
$last_send = $this->get_last_send_time();
|
419 |
if ( $last_send && $last_send > apply_filters( 'wpdesk_tracker_last_send_interval', strtotime( '-1 week' ) ) ) {
|
420 |
return;
|
421 |
}
|
422 |
} else {
|
423 |
// Make sure there is at least a 1 hour delay between override sends, we dont want duplicate calls due to double clicking links.
|
424 |
+
$last_send = $this->get_last_send_time();
|
425 |
if ( empty( $click_action ) && $last_send && $last_send > strtotime( '-1 hours' ) ) {
|
426 |
return;
|
427 |
}
|
431 |
update_option( 'wpdesk_tracker_last_send', time() );
|
432 |
|
433 |
if ( empty( $click_action ) || $click_action == 'agree' ) {
|
434 |
+
$params = $this->get_tracking_data();
|
435 |
|
436 |
if ( isset( $params['active_plugins'] ) ) {
|
437 |
+
foreach ( $params['active_plugins'] as $plugin => $plugin_data ) {
|
438 |
+
$option_name = 'plugin_activation_' . $plugin;
|
439 |
$activation_date = get_option( $option_name, '' );
|
440 |
if ( $activation_date != '' ) {
|
441 |
+
$params['active_plugins'][ $plugin ]['activation_date'] = $activation_date;
|
442 |
}
|
443 |
}
|
444 |
}
|
445 |
|
446 |
+
if ( ! empty( $click_action ) ) {
|
447 |
$params['click_action'] = 'agree';
|
448 |
}
|
449 |
+
} else {
|
450 |
+
$params = array( 'click_action' => 'no' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
451 |
$params['url'] = home_url();
|
452 |
}
|
453 |
|
454 |
$params['localhost'] = 'no';
|
455 |
+
if ( ! empty( $_SERVER['SERVER_ADDR'] ) && $_SERVER['SERVER_ADDR'] == '127.0.0.1' ) {
|
456 |
$params['localhost'] = 'yes';
|
457 |
}
|
458 |
|
459 |
+
$this->send_payload_to_wpdesk( $params );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
460 |
}
|
461 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
462 |
|
463 |
/**
|
464 |
+
* Sends payload to WPDesk servers.
|
465 |
+
*
|
466 |
+
* @param array $payload Payload to sent.
|
467 |
+
*
|
468 |
+
* @return bool If sending was successfull.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
469 |
*/
|
470 |
+
private function send_payload_to_wpdesk( array $payload ) {
|
471 |
+
try {
|
472 |
+
$this->sender->send_payload( $payload );
|
473 |
+
return true;
|
474 |
+
} catch (WPDesk_Tracker_Sender_Exception_WpError $e) {
|
475 |
+
return false;
|
476 |
}
|
|
|
|
|
477 |
}
|
478 |
|
479 |
/**
|
480 |
+
* Get the last time tracking data was sent.
|
481 |
+
* @return int|bool
|
482 |
*/
|
483 |
+
private function get_last_send_time() {
|
484 |
+
return apply_filters( 'wpdesk_tracker_last_send_time', get_option( 'wpdesk_tracker_last_send', false ) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
485 |
}
|
486 |
|
487 |
/**
|
|
|
488 |
* @return array
|
489 |
*/
|
490 |
+
private function get_data_from_providers() {
|
491 |
+
$data = array();
|
492 |
+
if ( ! empty( $this->providers ) ) {
|
493 |
+
foreach ( $this->providers as $provider ) {
|
494 |
+
$data = array_merge( $data, $provider->get_data() );
|
|
|
|
|
|
|
495 |
}
|
496 |
}
|
497 |
|
498 |
+
return $data;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
499 |
}
|
500 |
|
501 |
/**
|
502 |
+
* Get all the tracking data.
|
503 |
* @return array
|
504 |
*/
|
505 |
+
private function get_tracking_data() {
|
506 |
+
$data = $this->get_data_from_providers();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
507 |
|
508 |
+
return apply_filters( 'wpdesk_tracker_data', $data );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
509 |
}
|
510 |
}
|
511 |
|
512 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-gateways.php
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Gateways' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Gateways
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Gateways implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Get a list of all active payment gateways.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
$active_gateways = array();
|
30 |
+
$gateways = WC()->payment_gateways->payment_gateways();
|
31 |
+
foreach ( $gateways as $id => $gateway ) {
|
32 |
+
if ( isset( $gateway->enabled ) && 'yes' === $gateway->enabled ) {
|
33 |
+
$active_gateways[ $id ] = array( 'title' => $gateway->title, 'supports' => $gateway->supports );
|
34 |
+
}
|
35 |
+
}
|
36 |
+
|
37 |
+
return ['gateways' => $active_gateways];
|
38 |
+
}
|
39 |
+
|
40 |
+
}
|
41 |
+
|
42 |
+
}
|
43 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-identification-gdpr.php
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Identification_Gdpr' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Identification_Gdpr
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Identification_Gdpr implements WPDesk_Tracker_Data_Provider {
|
22 |
+
const DATA_KEY_DOMAIN_HASH = 'domain_hash';
|
23 |
+
|
24 |
+
const DATA_KEY_UNIQUE_HASH = 'unique_hash';
|
25 |
+
|
26 |
+
const DATA_KEY_EMAIL_HASH = 'email_hash';
|
27 |
+
|
28 |
+
const WPDESK_TRACKER_UNIQUE_HASH_OPTION_NAME = 'wpdesk_tracker_unique_hash';
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Hash unique for wordpress instance.
|
32 |
+
*
|
33 |
+
* @return string
|
34 |
+
*/
|
35 |
+
private function get_unique_hash() {
|
36 |
+
$hash = get_option( self::WPDESK_TRACKER_UNIQUE_HASH_OPTION_NAME, false );
|
37 |
+
if ( ! $hash ) {
|
38 |
+
$hash = md5( uniqid() . NONCE_SALT );
|
39 |
+
update_option( self::WPDESK_TRACKER_UNIQUE_HASH_OPTION_NAME, $hash );
|
40 |
+
}
|
41 |
+
|
42 |
+
return $hash;
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* Get info that allows anonymous data rollup.
|
47 |
+
*
|
48 |
+
* @return array Data provided to tracker.
|
49 |
+
*/
|
50 |
+
public function get_data() {
|
51 |
+
$data = [];
|
52 |
+
$data[ self::DATA_KEY_DOMAIN_HASH ] = md5( home_url() . NONCE_SALT );
|
53 |
+
$data[ self::DATA_KEY_UNIQUE_HASH ] = $this->get_unique_hash();
|
54 |
+
$data[ self::DATA_KEY_EMAIL_HASH ] = md5( apply_filters( 'wpdesk_tracker_admin_email', get_option( 'admin_email' ) ) . NONCE_SALT );
|
55 |
+
|
56 |
+
return $data;
|
57 |
+
}
|
58 |
+
|
59 |
+
}
|
60 |
+
|
61 |
+
}
|
62 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-identification.php
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Identification' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Identification
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Identification implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Get info that allows session identification.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
$data = [];
|
30 |
+
$data['url'] = home_url();
|
31 |
+
$data['email'] = apply_filters( 'wpdesk_tracker_admin_email', get_option( 'admin_email' ) );
|
32 |
+
|
33 |
+
return $data;
|
34 |
+
}
|
35 |
+
|
36 |
+
}
|
37 |
+
|
38 |
+
}
|
39 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-jetpack.php
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Jetpack' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Jetpack
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Jetpack implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Info about jetpack.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
$data = [];
|
30 |
+
$data['jetpack_version'] = defined( 'JETPACK__VERSION' ) ? JETPACK__VERSION : 'none';
|
31 |
+
$data['jetpack_connected'] = ( class_exists( 'Jetpack' ) && is_callable( 'Jetpack::is_active' ) && Jetpack::is_active() ) ? 'yes' : 'no';
|
32 |
+
$data['jetpack_is_staging'] = ( class_exists( 'Jetpack' ) && is_callable( 'Jetpack::is_staging_site' ) && Jetpack::is_staging_site() ) ? 'yes' : 'no';
|
33 |
+
$data['connect_installed'] = class_exists( 'WC_Connect_Loader' ) ? 'yes' : 'no';
|
34 |
+
$data['connect_active'] = ( class_exists( 'WC_Connect_Loader' ) && wp_next_scheduled( 'wc_connect_fetch_service_schemas' ) ) ? 'yes' : 'no';
|
35 |
+
|
36 |
+
return $data;
|
37 |
+
}
|
38 |
+
|
39 |
+
}
|
40 |
+
|
41 |
+
}
|
42 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-license-emails.php
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_License_Emails' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_License_Emails
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_License_Emails implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Info about license emails from api manager.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
global $wpdesk_helper_plugins;
|
30 |
+
$license_emails_email = array();
|
31 |
+
$license_emails = array();
|
32 |
+
if ( ! isset( $wpdesk_helper_plugins ) ) {
|
33 |
+
$wpdesk_helper_plugins = array();
|
34 |
+
}
|
35 |
+
foreach ( $wpdesk_helper_plugins as $key => $plugin ) {
|
36 |
+
if ( isset( $plugin['api_manager'] ) ) {
|
37 |
+
$api_manager = $plugin['api_manager'];
|
38 |
+
if ( isset( $api_manager->options[ $api_manager->activation_email ] ) ) {
|
39 |
+
$license_emails_email[ $api_manager->options[ $api_manager->activation_email ] ] = $api_manager->options[ $api_manager->activation_email ];
|
40 |
+
}
|
41 |
+
}
|
42 |
+
}
|
43 |
+
foreach ( $license_emails_email as $email ) {
|
44 |
+
$license_emails[] = $email;
|
45 |
+
}
|
46 |
+
$data['license_emails'] = $license_emails;
|
47 |
+
|
48 |
+
return $data;
|
49 |
+
}
|
50 |
+
|
51 |
+
}
|
52 |
+
|
53 |
+
}
|
54 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders-country.php
ADDED
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Orders_Country' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Orders_Country
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Orders_Country implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Info about shipping coutry per order.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
global $wpdb;
|
30 |
+
$query = $wpdb->get_results( "
|
31 |
+
SELECT m.meta_value AS shipping_country, p.post_status AS post_status , COUNT(p.ID) AS orders
|
32 |
+
FROM {$wpdb->postmeta} m, {$wpdb->posts} p
|
33 |
+
WHERE p.ID = m.post_id
|
34 |
+
AND m.meta_key = '_shipping_country'
|
35 |
+
GROUP BY shipping_country, post_status ORDER BY orders DESC"
|
36 |
+
);
|
37 |
+
$data['shipping_country_per_order'] = array();
|
38 |
+
if ( $query ) {
|
39 |
+
foreach ( $query as $row ) {
|
40 |
+
if ( ! isset( $data['shipping_country_per_order'][ $row->shipping_country ] ) ) {
|
41 |
+
$data['shipping_country_per_order'][ $row->shipping_country ] = array();
|
42 |
+
}
|
43 |
+
$data['shipping_country_per_order'][ $row->shipping_country ][ $row->post_status ] = $row->orders;
|
44 |
+
}
|
45 |
+
}
|
46 |
+
|
47 |
+
return $data;
|
48 |
+
}
|
49 |
+
|
50 |
+
}
|
51 |
+
|
52 |
+
}
|
53 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders-month.php
ADDED
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Orders_Month' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Orders_Month
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Orders_Month implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Info about orders per month.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
global $wpdb;
|
30 |
+
$query = $wpdb->get_results( "
|
31 |
+
SELECT min(post_date) min, max(post_date) max, TIMESTAMPDIFF(MONTH, min(post_date), max(post_date) )+1 months
|
32 |
+
FROM {$wpdb->posts} p
|
33 |
+
WHERE p.post_type = 'shop_order'
|
34 |
+
AND p.post_status = 'wc-completed'
|
35 |
+
"
|
36 |
+
);
|
37 |
+
$data['orders_per_month'] = array();
|
38 |
+
if ( $query ) {
|
39 |
+
foreach ( $query as $row ) {
|
40 |
+
$data['orders_per_month']['first'] = $row->min;
|
41 |
+
$data['orders_per_month']['last'] = $row->max;
|
42 |
+
$data['orders_per_month']['months'] = $row->months;
|
43 |
+
if ( $row->months != 0 ) {
|
44 |
+
if ( isset( $data['orders'] ) && isset( $data['orders']['wc-completed'] ) ) {
|
45 |
+
$data['orders_per_month']['per_month'] = floatval( $data['orders']['wc-completed'] ) / floatval( $row->months );
|
46 |
+
}
|
47 |
+
}
|
48 |
+
}
|
49 |
+
}
|
50 |
+
|
51 |
+
return $data;
|
52 |
+
}
|
53 |
+
|
54 |
+
}
|
55 |
+
|
56 |
+
}
|
57 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders.php
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Orders' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Orders
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Orders implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Get order counts based on order status.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
$order_count = array();
|
30 |
+
$order_count_data = wp_count_posts( 'shop_order' );
|
31 |
+
|
32 |
+
foreach ( wc_get_order_statuses() as $status_slug => $status_name ) {
|
33 |
+
$order_count[ $status_slug ] = $order_count_data->{$status_slug};
|
34 |
+
}
|
35 |
+
|
36 |
+
return ['orders' => $order_count];
|
37 |
+
}
|
38 |
+
|
39 |
+
}
|
40 |
+
|
41 |
+
}
|
42 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-plugins.php
ADDED
@@ -0,0 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Plugins
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Plugins implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Get all plugins grouped into activated or not.
|
25 |
+
*
|
26 |
+
* @return array
|
27 |
+
*/
|
28 |
+
private function get_all_plugins() {
|
29 |
+
// Ensure get_plugins function is loaded
|
30 |
+
if ( ! function_exists( 'get_plugins' ) ) {
|
31 |
+
include ABSPATH . '/wp-admin/includes/plugin.php';
|
32 |
+
}
|
33 |
+
|
34 |
+
$plugins = get_plugins();
|
35 |
+
$active_plugins_keys = get_option( 'active_plugins', array() );
|
36 |
+
$active_plugins = array();
|
37 |
+
|
38 |
+
foreach ( $plugins as $k => $v ) {
|
39 |
+
// Take care of formatting the data how we want it.
|
40 |
+
$formatted = array();
|
41 |
+
$formatted['name'] = strip_tags( $v['Name'] );
|
42 |
+
if ( isset( $v['Version'] ) ) {
|
43 |
+
$formatted['version'] = strip_tags( $v['Version'] );
|
44 |
+
}
|
45 |
+
if ( isset( $v['Author'] ) ) {
|
46 |
+
$formatted['author'] = strip_tags( $v['Author'] );
|
47 |
+
}
|
48 |
+
if ( isset( $v['Network'] ) ) {
|
49 |
+
$formatted['network'] = strip_tags( $v['Network'] );
|
50 |
+
}
|
51 |
+
if ( isset( $v['PluginURI'] ) ) {
|
52 |
+
$formatted['plugin_uri'] = strip_tags( $v['PluginURI'] );
|
53 |
+
}
|
54 |
+
if ( in_array( $k, $active_plugins_keys ) ) {
|
55 |
+
// Remove active plugins from list so we can show active and inactive separately
|
56 |
+
unset( $plugins[ $k ] );
|
57 |
+
$active_plugins[ $k ] = $formatted;
|
58 |
+
} else {
|
59 |
+
$plugins[ $k ] = $formatted;
|
60 |
+
}
|
61 |
+
}
|
62 |
+
|
63 |
+
return array( 'active_plugins' => $active_plugins, 'inactive_plugins' => $plugins );
|
64 |
+
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
* Provides data
|
68 |
+
*
|
69 |
+
* @return array Data provided to tracker.
|
70 |
+
*/
|
71 |
+
public function get_data() {
|
72 |
+
$data = [];
|
73 |
+
|
74 |
+
$all_plugins = $this->get_all_plugins();
|
75 |
+
$data['active_plugins'] = $all_plugins['active_plugins'];
|
76 |
+
$data['inactive_plugins'] = $all_plugins['inactive_plugins'];
|
77 |
+
|
78 |
+
return $data;
|
79 |
+
}
|
80 |
+
|
81 |
+
}
|
82 |
+
|
83 |
+
}
|
84 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-products-variations.php
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Products_Variations' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Products_Variations
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Products_Variations implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Info about numer of variations.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
$data['number_of_variations'] = 0;
|
30 |
+
$number_of_variations = wp_count_posts( 'product_variation' );
|
31 |
+
$data['number_of_variations'] = $number_of_variations;
|
32 |
+
|
33 |
+
return $data;
|
34 |
+
}
|
35 |
+
|
36 |
+
}
|
37 |
+
|
38 |
+
}
|
39 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-products.php
ADDED
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Products' ) ) {
|
17 |
+
/**
|
18 |
+
* Class WPDesk_Tracker_Data_Provider_Products
|
19 |
+
*/
|
20 |
+
class WPDesk_Tracker_Data_Provider_Products implements WPDesk_Tracker_Data_Provider {
|
21 |
+
|
22 |
+
/**
|
23 |
+
* Get product totals based on product type.
|
24 |
+
*
|
25 |
+
* @return array Data provided to tracker.
|
26 |
+
*/
|
27 |
+
public function get_data() {
|
28 |
+
$product_count = array();
|
29 |
+
$product_count_data = wp_count_posts( 'product' );
|
30 |
+
$product_count['total'] = $product_count_data->publish;
|
31 |
+
|
32 |
+
$product_statuses = get_terms( 'product_type', array( 'hide_empty' => 0 ) );
|
33 |
+
foreach ( $product_statuses as $product_status ) {
|
34 |
+
$product_count[ $product_status->name ] = $product_status->count;
|
35 |
+
}
|
36 |
+
|
37 |
+
return ['products' => $product_count];
|
38 |
+
}
|
39 |
+
|
40 |
+
}
|
41 |
+
|
42 |
+
}
|
43 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-server.php
ADDED
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Server' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Server
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Server implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Info about bawic server data.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
$server_data = array();
|
30 |
+
|
31 |
+
if ( isset( $_SERVER['SERVER_SOFTWARE'] ) && ! empty( $_SERVER['SERVER_SOFTWARE'] ) ) {
|
32 |
+
$server_data['software'] = $_SERVER['SERVER_SOFTWARE'];
|
33 |
+
}
|
34 |
+
|
35 |
+
if ( function_exists( 'phpversion' ) ) {
|
36 |
+
$server_data['php_version'] = phpversion();
|
37 |
+
}
|
38 |
+
|
39 |
+
if ( function_exists( 'ini_get' ) ) {
|
40 |
+
$server_data['php_post_max_size'] = size_format( wc_let_to_num( ini_get( 'post_max_size' ) ) );
|
41 |
+
$server_data['php_time_limt'] = ini_get( 'max_execution_time' );
|
42 |
+
$server_data['php_max_input_vars'] = ini_get( 'max_input_vars' );
|
43 |
+
$server_data['php_suhosin'] = extension_loaded( 'suhosin' ) ? 'Yes' : 'No';
|
44 |
+
}
|
45 |
+
|
46 |
+
global $wpdb;
|
47 |
+
$server_data['mysql_version'] = $wpdb->db_version();
|
48 |
+
|
49 |
+
$server_data['php_max_upload_size'] = size_format( wp_max_upload_size() );
|
50 |
+
$server_data['php_default_timezone'] = date_default_timezone_get();
|
51 |
+
$server_data['php_soap'] = class_exists( 'SoapClient' ) ? 'Yes' : 'No';
|
52 |
+
$server_data['php_fsockopen'] = function_exists( 'fsockopen' ) ? 'Yes' : 'No';
|
53 |
+
$server_data['php_curl'] = function_exists( 'curl_init' ) ? 'Yes' : 'No';
|
54 |
+
|
55 |
+
return ['server' => $server_data];
|
56 |
+
}
|
57 |
+
|
58 |
+
}
|
59 |
+
|
60 |
+
}
|
61 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-settings.php
ADDED
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Settings' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Settings
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Settings implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Get all options starting with woocommerce_ prefix.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
return [
|
30 |
+
'settings' => array(
|
31 |
+
'version' => WC()->version,
|
32 |
+
'currency' => get_woocommerce_currency(),
|
33 |
+
'base_location' => WC()->countries->get_base_country(),
|
34 |
+
'selling_locations' => WC()->countries->get_allowed_countries(),
|
35 |
+
'api_enabled' => get_option( 'woocommerce_api_enabled' ),
|
36 |
+
'weight_unit' => get_option( 'woocommerce_weight_unit' ),
|
37 |
+
'dimension_unit' => get_option( 'woocommerce_dimension_unit' ),
|
38 |
+
'download_method' => get_option( 'woocommerce_file_download_method' ),
|
39 |
+
'download_require_login' => get_option( 'woocommerce_downloads_require_login' ),
|
40 |
+
'calc_taxes' => get_option( 'woocommerce_calc_taxes' ),
|
41 |
+
'coupons_enabled' => get_option( 'woocommerce_enable_coupons' ),
|
42 |
+
'guest_checkout' => get_option( 'woocommerce_enable_guest_checkout' ),
|
43 |
+
'secure_checkout' => get_option( 'woocommerce_force_ssl_checkout' ),
|
44 |
+
'enable_signup_and_login_from_checkout' => get_option( 'woocommerce_enable_signup_and_login_from_checkout' ),
|
45 |
+
'enable_myaccount_registration' => get_option( 'woocommerce_enable_myaccount_registration' ),
|
46 |
+
'registration_generate_username' => get_option( 'woocommerce_registration_generate_username' ),
|
47 |
+
'registration_generate_password' => get_option( 'woocommerce_registration_generate_password' ),
|
48 |
+
)
|
49 |
+
];
|
50 |
+
}
|
51 |
+
|
52 |
+
}
|
53 |
+
|
54 |
+
}
|
55 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-classes.php
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Shipping_Classes' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Shipping_Classes
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Shipping_Classes implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Info about number of shipping classes
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
$data['number_of_shipping_classes'] = 0;
|
30 |
+
$shipping_classes = WC()->shipping()->get_shipping_classes();
|
31 |
+
if ( is_array( $shipping_classes ) ) {
|
32 |
+
$data['number_of_shipping_classes'] = count( $shipping_classes );
|
33 |
+
}
|
34 |
+
|
35 |
+
return $data;
|
36 |
+
}
|
37 |
+
|
38 |
+
}
|
39 |
+
|
40 |
+
}
|
41 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-methods-zones.php
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Shipping_Methods_Zones' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Shipping_Methods_Zones
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Shipping_Methods_Zones implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Info about shipping methods in zones and by title.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
if ( class_exists( 'WC_Shipping_Zones' ) ) {
|
30 |
+
$other_zones = WC_Shipping_Zones::get_zones();
|
31 |
+
$zones = array();
|
32 |
+
foreach ( $other_zones as $zone ) {
|
33 |
+
$zones[] = WC_Shipping_Zones::get_zone_by( 'zone_id', $zone['zone_id'] );
|
34 |
+
}
|
35 |
+
$zones[] = WC_Shipping_Zones::get_zone_by();
|
36 |
+
$data['shipping_methods_by_title'] = array();
|
37 |
+
$data['shipping_zones_by_name'] = array();
|
38 |
+
foreach ( $zones as $zone ) {
|
39 |
+
if ( empty( $data['shipping_zones_by_name'][ $zone->get_zone_name() ] ) ) {
|
40 |
+
$data['shipping_zones_by_name'][ $zone->get_zone_name() ] = 1;
|
41 |
+
} else {
|
42 |
+
$data['shipping_zones_by_name'][ $zone->get_zone_name() ] ++;
|
43 |
+
}
|
44 |
+
foreach ( $zone->get_shipping_methods() as $shipping_method ) {
|
45 |
+
if ( empty( $data['shipping_methods_by_title'][ $shipping_method->method_title ] ) ) {
|
46 |
+
$data['shipping_methods_by_title'][ $shipping_method->method_title ] = 1;
|
47 |
+
} else {
|
48 |
+
$data['shipping_methods_by_title'][ $shipping_method->method_title ] ++;
|
49 |
+
}
|
50 |
+
}
|
51 |
+
}
|
52 |
+
}
|
53 |
+
|
54 |
+
return $data;
|
55 |
+
}
|
56 |
+
|
57 |
+
}
|
58 |
+
|
59 |
+
}
|
60 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-methods.php
ADDED
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Shipping_Methods' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Shipping_Methods
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Shipping_Methods implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Get a list of all active shipping methods.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
|
30 |
+
$active_methods = array();
|
31 |
+
$shipping_methods = WC()->shipping->get_shipping_methods();
|
32 |
+
foreach ( $shipping_methods as $id => $shipping_method ) {
|
33 |
+
if ( isset( $shipping_method->enabled ) && 'yes' === $shipping_method->enabled ) {
|
34 |
+
$active_methods[ $id ] = array(
|
35 |
+
'title' => $shipping_method->title,
|
36 |
+
'tax_status' => $shipping_method->tax_status
|
37 |
+
);
|
38 |
+
}
|
39 |
+
}
|
40 |
+
|
41 |
+
return ['shipping_methods' => $active_methods];
|
42 |
+
}
|
43 |
+
|
44 |
+
}
|
45 |
+
|
46 |
+
}
|
47 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-templates.php
ADDED
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Templates' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Templates
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Templates implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Look for any template override and return filenames.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
$override_data = array();
|
30 |
+
$template_paths = apply_filters( 'woocommerce_template_overrides_scan_paths', array( 'WooCommerce' => WC()->plugin_path() . '/templates/' ) );
|
31 |
+
$scanned_files = array();
|
32 |
+
|
33 |
+
require_once( WC()->plugin_path() . '/includes/admin/class-wc-admin-status.php' );
|
34 |
+
|
35 |
+
foreach ( $template_paths as $plugin_name => $template_path ) {
|
36 |
+
$scanned_files[ $plugin_name ] = WC_Admin_Status::scan_template_files( $template_path );
|
37 |
+
}
|
38 |
+
|
39 |
+
foreach ( $scanned_files as $plugin_name => $files ) {
|
40 |
+
foreach ( $files as $file ) {
|
41 |
+
if ( file_exists( get_stylesheet_directory() . '/' . $file ) ) {
|
42 |
+
$theme_file = get_stylesheet_directory() . '/' . $file;
|
43 |
+
} elseif ( file_exists( get_stylesheet_directory() . '/woocommerce/' . $file ) ) {
|
44 |
+
$theme_file = get_stylesheet_directory() . '/woocommerce/' . $file;
|
45 |
+
} elseif ( file_exists( get_template_directory() . '/' . $file ) ) {
|
46 |
+
$theme_file = get_template_directory() . '/' . $file;
|
47 |
+
} elseif ( file_exists( get_template_directory() . '/woocommerce/' . $file ) ) {
|
48 |
+
$theme_file = get_template_directory() . '/woocommerce/' . $file;
|
49 |
+
} else {
|
50 |
+
$theme_file = false;
|
51 |
+
}
|
52 |
+
|
53 |
+
if ( false !== $theme_file ) {
|
54 |
+
$override_data[] = basename( $theme_file );
|
55 |
+
}
|
56 |
+
}
|
57 |
+
}
|
58 |
+
|
59 |
+
return ['template_overrides' => $override_data];
|
60 |
+
}
|
61 |
+
|
62 |
+
}
|
63 |
+
|
64 |
+
}
|
65 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-theme.php
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Theme' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Theme
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Theme implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Get the current theme info, theme name and version.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
$theme_data = wp_get_theme();
|
30 |
+
$theme_child_theme = is_child_theme() ? 'Yes' : 'No';
|
31 |
+
|
32 |
+
return [
|
33 |
+
'theme' => array(
|
34 |
+
'name' => $theme_data->Name,
|
35 |
+
'version' => $theme_data->Version,
|
36 |
+
'child_theme' => $theme_child_theme,
|
37 |
+
)
|
38 |
+
];
|
39 |
+
}
|
40 |
+
|
41 |
+
}
|
42 |
+
|
43 |
+
}
|
44 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-user-agent.php
ADDED
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_User_Agent' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_User_Agent
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_User_Agent implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* When an admin user logs in, there user agent is tracked in user meta and collected here.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
return [ 'admin_user_agents' => array_filter( (array) get_option( 'woocommerce_tracker_ua', array() ) ) ];
|
30 |
+
}
|
31 |
+
|
32 |
+
}
|
33 |
+
|
34 |
+
}
|
35 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-users.php
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Users' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Users
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Users implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Get user totals based on user role.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
$user_count = array();
|
30 |
+
$user_count_data = count_users();
|
31 |
+
$user_count['total'] = $user_count_data['total_users'];
|
32 |
+
|
33 |
+
// Get user count based on user role
|
34 |
+
foreach ( $user_count_data['avail_roles'] as $role => $count ) {
|
35 |
+
$user_count[ $role ] = $count;
|
36 |
+
}
|
37 |
+
|
38 |
+
return ['users' => $user_count];
|
39 |
+
}
|
40 |
+
|
41 |
+
}
|
42 |
+
|
43 |
+
}
|
44 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-wordpress.php
ADDED
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider_Wordpress' ) ) {
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Class WPDesk_Tracker_Data_Provider_Wordpress
|
20 |
+
*/
|
21 |
+
class WPDesk_Tracker_Data_Provider_Wordpress implements WPDesk_Tracker_Data_Provider {
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Get WordPress related data.
|
25 |
+
*
|
26 |
+
* @return array Data provided to tracker.
|
27 |
+
*/
|
28 |
+
public function get_data() {
|
29 |
+
$wp_data = array();
|
30 |
+
|
31 |
+
$memory = wc_let_to_num( WP_MEMORY_LIMIT );
|
32 |
+
|
33 |
+
if ( function_exists( 'memory_get_usage' ) ) {
|
34 |
+
$system_memory = wc_let_to_num( @ini_get( 'memory_limit' ) );
|
35 |
+
$memory = max( $memory, $system_memory );
|
36 |
+
}
|
37 |
+
|
38 |
+
$wp_data['memory_limit'] = size_format( $memory );
|
39 |
+
$wp_data['debug_mode'] = ( defined( 'WP_DEBUG' ) && WP_DEBUG ) ? 'Yes' : 'No';
|
40 |
+
$wp_data['locale'] = get_locale();
|
41 |
+
$wp_data['version'] = get_bloginfo( 'version' );
|
42 |
+
$wp_data['multisite'] = is_multisite() ? 'Yes' : 'No';
|
43 |
+
|
44 |
+
return ['wp' => $wp_data];
|
45 |
+
}
|
46 |
+
|
47 |
+
}
|
48 |
+
|
49 |
+
}
|
50 |
+
|
inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider.php
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* WP Desk Tracker
|
4 |
+
*
|
5 |
+
* @class WPDESK_Tracker
|
6 |
+
* @version 1.3.2
|
7 |
+
* @package WPDESK/Helper
|
8 |
+
* @category Class
|
9 |
+
* @author WP Desk
|
10 |
+
*/
|
11 |
+
|
12 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
13 |
+
exit;
|
14 |
+
}
|
15 |
+
|
16 |
+
if ( ! class_exists( 'WPDesk_Tracker_Data_Provider' ) ) {
|
17 |
+
|
18 |
+
interface WPDesk_Tracker_Data_Provider {
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Provides data
|
22 |
+
*
|
23 |
+
* @return array Data provided to tracker.
|
24 |
+
*/
|
25 |
+
public function get_data();
|
26 |
+
|
27 |
+
}
|
28 |
+
|
29 |
+
}
|
30 |
+
|
inc/wpdesk-tracker/lang/wpdesk-tracker-pl_PL.mo
CHANGED
Binary file
|
inc/wpdesk-tracker/lang/wpdesk-tracker-pl_PL.po
CHANGED
@@ -1,15 +1,15 @@
|
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: WP Desk Tracker\n"
|
4 |
-
"POT-Creation-Date:
|
5 |
-
"PO-Revision-Date:
|
6 |
"Last-Translator: Piotr Jabłonowski <piotr.jablonowski@wpdesk.net>\n"
|
7 |
"Language-Team: \n"
|
8 |
"Language: pl_PL\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
-
"X-Generator: Poedit 2.0.
|
13 |
"X-Poedit-Basepath: ../..\n"
|
14 |
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
15 |
"|| n%100>=20) ? 1 : 2);\n"
|
@@ -20,13 +20,6 @@ msgstr ""
|
|
20 |
"X-Poedit-SearchPath-0: .\n"
|
21 |
"X-Poedit-SearchPathExcluded-0: wpdesk-logger.php\n"
|
22 |
|
23 |
-
#: functions.php:67
|
24 |
-
#, php-format
|
25 |
-
msgid "Redirecting. If page not redirects click %s here %s."
|
26 |
-
msgstr ""
|
27 |
-
"Przekierowywanie. Jeśli strona nie przekierowuje cię automatycznie, kliknij "
|
28 |
-
"%s tu %s."
|
29 |
-
|
30 |
#: wpdesk-tracker/views/tracker-connect.php:7
|
31 |
#: wpdesk-tracker/views/tracker-notice.php:5
|
32 |
#: wpdesk-tracker/views/tracker-notice.php:22
|
@@ -106,7 +99,7 @@ msgid ""
|
|
106 |
" If you have a moment, please let us know why you are deactivating plugin "
|
107 |
"(anonymous feedback):"
|
108 |
msgstr ""
|
109 |
-
"
|
110 |
"(anonimowa opinia):"
|
111 |
|
112 |
#: wpdesk-tracker/views/tracker-deactivate.php:16
|
@@ -135,7 +128,7 @@ msgstr "Nie potrzebuję już wtyczki"
|
|
135 |
|
136 |
#: wpdesk-tracker/views/tracker-deactivate.php:59
|
137 |
msgid "It's a temporary deactivation. I'm just debugging an issue."
|
138 |
-
msgstr "Jest to tymczasowa dezaktywacja, debaguję problem
|
139 |
|
140 |
#: wpdesk-tracker/views/tracker-deactivate.php:67
|
141 |
msgid "Other"
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: WP Desk Tracker\n"
|
4 |
+
"POT-Creation-Date: 2017-10-04 17:34+0200\n"
|
5 |
+
"PO-Revision-Date: 2017-10-04 17:36+0200\n"
|
6 |
"Last-Translator: Piotr Jabłonowski <piotr.jablonowski@wpdesk.net>\n"
|
7 |
"Language-Team: \n"
|
8 |
"Language: pl_PL\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"X-Generator: Poedit 2.0.3\n"
|
13 |
"X-Poedit-Basepath: ../..\n"
|
14 |
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
15 |
"|| n%100>=20) ? 1 : 2);\n"
|
20 |
"X-Poedit-SearchPath-0: .\n"
|
21 |
"X-Poedit-SearchPathExcluded-0: wpdesk-logger.php\n"
|
22 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
#: wpdesk-tracker/views/tracker-connect.php:7
|
24 |
#: wpdesk-tracker/views/tracker-notice.php:5
|
25 |
#: wpdesk-tracker/views/tracker-notice.php:22
|
99 |
" If you have a moment, please let us know why you are deactivating plugin "
|
100 |
"(anonymous feedback):"
|
101 |
msgstr ""
|
102 |
+
"Jeśli masz chwilę, prosimy daj nam znać dlaczego dezaktywowałeś wtyczkę "
|
103 |
"(anonimowa opinia):"
|
104 |
|
105 |
#: wpdesk-tracker/views/tracker-deactivate.php:16
|
128 |
|
129 |
#: wpdesk-tracker/views/tracker-deactivate.php:59
|
130 |
msgid "It's a temporary deactivation. I'm just debugging an issue."
|
131 |
+
msgstr "Jest to tymczasowa dezaktywacja, debaguję problem"
|
132 |
|
133 |
#: wpdesk-tracker/views/tracker-deactivate.php:67
|
134 |
msgid "Other"
|
inc/wpdesk-tracker/sender/Exception/class-wpdesk-tracker-sender-exception-wperror.php
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
+
if ( ! class_exists( 'WPDesk_Tracker_Sender_Exception_WpError' ) ) {
|
8 |
+
|
9 |
+
class WPDesk_Tracker_Sender_Exception_WpError extends RuntimeException {
|
10 |
+
public function __construct( $message = "", WP_Error $wp_error ) {
|
11 |
+
$message = $message . ' WP_Error: ' . $wp_error->get_error_message();
|
12 |
+
parent::__construct( $message, $wp_error->get_error_code() );
|
13 |
+
}
|
14 |
+
}
|
15 |
+
|
16 |
+
}
|
17 |
+
|
inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender-logged.php
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
+
if ( ! class_exists( 'WPDesk_Tracker_Sender_Logged' ) ) {
|
8 |
+
|
9 |
+
class WPDesk_Tracker_Sender_Logged implements WPDesk_Tracker_Sender {
|
10 |
+
|
11 |
+
const LOGGER_SOURCE = 'wpdesk-sender';
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Decorated sender.
|
15 |
+
*
|
16 |
+
* @var WPDesk_Tracker_Sender
|
17 |
+
*/
|
18 |
+
private $sender;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* WPDesk_Tracker_Sender_Logged constructor.
|
22 |
+
*
|
23 |
+
* @param WPDesk_Tracker_Sender $sender Sender to decorate.
|
24 |
+
*/
|
25 |
+
|
26 |
+
public function __construct(WPDesk_Tracker_Sender $sender) {
|
27 |
+
$this->sender = $sender;
|
28 |
+
}
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Sends payload logging payload and the response.
|
32 |
+
*
|
33 |
+
* @param array $payload Payload to send.
|
34 |
+
*
|
35 |
+
* @throws WPDesk_Tracker_Sender_Exception_WpError Error if send failed.
|
36 |
+
*
|
37 |
+
* @return array If succeeded. Array containing 'headers', 'body', 'response', 'cookies', 'filename'.
|
38 |
+
*/
|
39 |
+
public function send_payload(array $payload) {
|
40 |
+
if (class_exists('WPDesk_Logger_Factory')) {
|
41 |
+
WPDesk_Logger_Factory::log_message("Sender payload: " . json_encode($payload), self::LOGGER_SOURCE, WPDesk_Logger::DEBUG);
|
42 |
+
try {
|
43 |
+
$response = $this->sender->send_payload($payload);
|
44 |
+
WPDesk_Logger_Factory::log_message('Sender response: ' . json_encode($response), self::LOGGER_SOURCE, WPDesk_Logger::DEBUG);
|
45 |
+
return $response;
|
46 |
+
} catch (WPDesk_Tracker_Sender_Exception_WpError $exception) {
|
47 |
+
WPDesk_Logger_Factory::log_exception($exception);
|
48 |
+
throw $exception;
|
49 |
+
}
|
50 |
+
} else {
|
51 |
+
return $this->sender->send_payload($payload);
|
52 |
+
}
|
53 |
+
}
|
54 |
+
}
|
55 |
+
}
|
56 |
+
|
inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender-wordpress-to-wpdesk.php
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
+
if ( ! class_exists( 'WPDesk_Tracker_Sender_Wordpress_To_WPDesk' ) ) {
|
8 |
+
|
9 |
+
class WPDesk_Tracker_Sender_Wordpress_To_WPDesk implements WPDesk_Tracker_Sender {
|
10 |
+
|
11 |
+
/**
|
12 |
+
* URL to the WP Desk Tracker API endpoint.
|
13 |
+
* @var string
|
14 |
+
*/
|
15 |
+
private $api_url = 'https://data.wpdesk.org/?track=1';
|
16 |
+
|
17 |
+
private $test_api_url = 'https://testdata.wpdesk.org/?track=1';
|
18 |
+
|
19 |
+
private function get_api_url() {
|
20 |
+
$api_url = $this->api_url;
|
21 |
+
if ( apply_filters( 'wpdesk_tracker_use_testdata', false ) ) {
|
22 |
+
$api_url = $this->test_api_url;
|
23 |
+
}
|
24 |
+
|
25 |
+
return $api_url;
|
26 |
+
}
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Sends payload to predefined receiver.
|
30 |
+
*
|
31 |
+
* @param array $payload Payload to send.
|
32 |
+
*
|
33 |
+
* @throws WPDesk_Tracker_Sender_Exception_WpError Error if send failed.
|
34 |
+
*
|
35 |
+
* @return array If succeeded. Array containing 'headers', 'body', 'response', 'cookies', 'filename'.
|
36 |
+
*/
|
37 |
+
public function send_payload( array $payload ) {
|
38 |
+
$response = wp_remote_post( $this->get_api_url(), array(
|
39 |
+
'method' => 'POST',
|
40 |
+
'timeout' => 5,
|
41 |
+
'redirection' => 5,
|
42 |
+
'httpversion' => '1.0',
|
43 |
+
'blocking' => false,
|
44 |
+
'headers' => array( 'user-agent' => 'WPDeskTracker' ),
|
45 |
+
'body' => json_encode( $payload ),
|
46 |
+
'cookies' => array(),
|
47 |
+
)
|
48 |
+
);
|
49 |
+
|
50 |
+
if ( $response instanceof WP_Error ) {
|
51 |
+
throw new WPDesk_Tracker_Sender_Exception_WpError( 'Payload send error', $response );
|
52 |
+
} else {
|
53 |
+
return $response;
|
54 |
+
}
|
55 |
+
}
|
56 |
+
|
57 |
+
}
|
58 |
+
|
59 |
+
}
|
60 |
+
|
inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender.php
ADDED
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
4 |
+
exit;
|
5 |
+
}
|
6 |
+
|
7 |
+
if ( ! class_exists( 'WPDesk_Tracker_Sender' ) ) {
|
8 |
+
|
9 |
+
interface WPDesk_Tracker_Sender {
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Sends payload to predefined receiver.
|
13 |
+
*
|
14 |
+
* @param array $payload Payload to send.
|
15 |
+
*
|
16 |
+
* @return array If succeeded. Array containing 'headers', 'body', 'response', 'cookies', 'filename'.
|
17 |
+
*/
|
18 |
+
public function send_payload( array $payload );
|
19 |
+
|
20 |
+
}
|
21 |
+
|
22 |
+
}
|
23 |
+
|
inc/wpdesk-tracker/views/tracker-connect.php
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
|
6 |
<p>
|
7 |
<?php printf ( __( 'Hey %s,', 'wpdesk-tracker'), $username ); ?><br/>
|
8 |
-
<?php _e( 'Please help us improve our plugins! If you opt-in, we will collect some non-sensitive data and usage information. If you skip this, that\'s okay! All plugins will work just fine.', 'wpdesk-tracker' ); ?>
|
9 |
</p>
|
10 |
</div>
|
11 |
|
@@ -24,7 +24,7 @@
|
|
24 |
<i class="dashicons dashicons-admin-settings"></i>
|
25 |
<div>
|
26 |
<span><?php _e( 'Your Site Overview', 'wpdesk-tracker' ); ?></span>
|
27 |
-
<p><?php _e( '
|
28 |
</div>
|
29 |
</li>
|
30 |
<li id="permission-events" class="permission events">
|
@@ -38,14 +38,7 @@
|
|
38 |
<i class="dashicons dashicons-store"></i>
|
39 |
<div>
|
40 |
<span><?php _e( 'Your Store Overview', 'wpdesk-tracker' ); ?></span>
|
41 |
-
<p><?php _e( '
|
42 |
-
</div>
|
43 |
-
</li>
|
44 |
-
<li id="permission-notices" class="permission notices">
|
45 |
-
<i class="dashicons dashicons-testimonial"></i>
|
46 |
-
<div>
|
47 |
-
<span><?php _e( 'Admin Updates', 'wpdesk-tracker' ); ?></span>
|
48 |
-
<p><?php _e( 'Announcements, updates, marketing, no spam and easy opt-out', 'wpdesk-tracker' ); ?></p>
|
49 |
</div>
|
50 |
</li>
|
51 |
</ul>
|
5 |
|
6 |
<p>
|
7 |
<?php printf ( __( 'Hey %s,', 'wpdesk-tracker'), $username ); ?><br/>
|
8 |
+
<?php _e( 'Please help us improve our plugins! If you opt-in, we will collect some non-sensitive data and usage information anonymously. If you skip this, that\'s okay! All plugins will work just fine.', 'wpdesk-tracker' ); ?>
|
9 |
</p>
|
10 |
</div>
|
11 |
|
24 |
<i class="dashicons dashicons-admin-settings"></i>
|
25 |
<div>
|
26 |
<span><?php _e( 'Your Site Overview', 'wpdesk-tracker' ); ?></span>
|
27 |
+
<p><?php _e( 'WP version, PHP info', 'wpdesk-tracker' ); ?></p>
|
28 |
</div>
|
29 |
</li>
|
30 |
<li id="permission-events" class="permission events">
|
38 |
<i class="dashicons dashicons-store"></i>
|
39 |
<div>
|
40 |
<span><?php _e( 'Your Store Overview', 'wpdesk-tracker' ); ?></span>
|
41 |
+
<p><?php _e( 'Anonymized and non-sensitive store usage information', 'wpdesk-tracker' ); ?></p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
</div>
|
43 |
</li>
|
44 |
</ul>
|
inc/wpdesk-tracker/views/tracker-notice.php
CHANGED
@@ -1,62 +1,17 @@
|
|
1 |
<?php if ( ! defined( 'ABSPATH' ) ) { exit; } ?>
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
); ?>
|
14 |
-
</p>
|
15 |
-
<p>
|
16 |
-
<button id="wpdesk_tracker_allow_coupon_button_notice" class="button button-primary"><?php _e( 'Allow', 'wpdesk-tracker' ); ?></button>
|
17 |
-
</p>
|
18 |
-
</div>
|
19 |
-
<?php else : ?>
|
20 |
-
<div id="wpdesk_tracker_notice" class="updated notice wpdesk_tracker_notice is-dismissible">
|
21 |
-
<p>
|
22 |
-
<?php printf ( __( 'Hey %s,', 'wpdesk-tracker'), $username ); ?><br/>
|
23 |
-
<?php _e( 'Please help us improve our plugins! If you opt-in, we will collect some non-sensitive data and usage information. If you skip this, that\'s okay! All plugins will work just fine.', 'wpdesk-tracker'); ?>
|
24 |
-
<a href="<?php echo $terms_url; ?>" target="_blank"><?php _e( 'Find out more »', 'wpdesk-tracker' ); ?></a>
|
25 |
-
</p>
|
26 |
-
<p>
|
27 |
-
<button id="wpdesk_tracker_allow_button_notice" class="button button-primary"><?php _e( 'Allow', 'wpdesk-tracker' ); ?></button>
|
28 |
-
</p>
|
29 |
-
</div>
|
30 |
-
<?php endif; ?>
|
31 |
|
32 |
<script type="text/javascript">
|
33 |
-
jQuery(document).on('click', '#wpdesk_tracker_notice_coupon .notice-dismiss',function(e){
|
34 |
-
e.preventDefault();
|
35 |
-
console.log('dismiss');
|
36 |
-
jQuery.ajax( '<?php echo admin_url('admin-ajax.php'); ?>',
|
37 |
-
{
|
38 |
-
type: 'POST',
|
39 |
-
data: {
|
40 |
-
action: 'wpdesk_tracker_notice_handler',
|
41 |
-
type: 'dismiss_coupon',
|
42 |
-
}
|
43 |
-
}
|
44 |
-
);
|
45 |
-
})
|
46 |
-
jQuery(document).on('click', '#wpdesk_tracker_allow_coupon_button_notice',function(e){
|
47 |
-
e.preventDefault();
|
48 |
-
console.log('allow');
|
49 |
-
jQuery.ajax( '<?php echo admin_url('admin-ajax.php'); ?>',
|
50 |
-
{
|
51 |
-
type: 'POST',
|
52 |
-
data: {
|
53 |
-
action: 'wpdesk_tracker_notice_handler',
|
54 |
-
type: 'allow_coupon',
|
55 |
-
}
|
56 |
-
}
|
57 |
-
);
|
58 |
-
jQuery('#wpdesk_tracker_notice_coupon').hide();
|
59 |
-
});
|
60 |
jQuery(document).on('click', '#wpdesk_tracker_notice .notice-dismiss',function(e){
|
61 |
e.preventDefault();
|
62 |
console.log('dismiss');
|
1 |
<?php if ( ! defined( 'ABSPATH' ) ) { exit; } ?>
|
2 |
+
|
3 |
+
<div id="wpdesk_tracker_notice" class="updated notice wpdesk_tracker_notice is-dismissible">
|
4 |
+
<p>
|
5 |
+
<?php printf ( __( 'Hey %s,', 'wpdesk-tracker'), $username ); ?><br/>
|
6 |
+
<?php _e( 'We need your help to improve <strong>WP Desk plugins</strong>, so they are more useful for you and the rest of <strong>30,000+ users</strong>. By collecting data on how you use our plugins, you will help us a lot. We will not collect any sensitive data, so you can feel safe.', 'wpdesk-tracker'); ?>
|
7 |
+
<a href="<?php echo $terms_url; ?>" target="_blank"><?php _e( 'Find out more »', 'wpdesk-tracker' ); ?></a>
|
8 |
+
</p>
|
9 |
+
<p>
|
10 |
+
<button id="wpdesk_tracker_allow_button_notice" class="button button-primary"><?php _e( 'Allow', 'wpdesk-tracker' ); ?></button>
|
11 |
+
</p>
|
12 |
+
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
|
14 |
<script type="text/javascript">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
jQuery(document).on('click', '#wpdesk_tracker_notice .notice-dismiss',function(e){
|
16 |
e.preventDefault();
|
17 |
console.log('dismiss');
|
languages/flexible-shipping-pl_PL.mo
CHANGED
Binary file
|
languages/flexible-shipping-pl_PL.po
CHANGED
@@ -1,15 +1,15 @@
|
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: Flexible Shipping\n"
|
4 |
-
"POT-Creation-Date: 2018-
|
5 |
-
"PO-Revision-Date: 2018-
|
6 |
"Last-Translator: Piotr Jabłonowski <piotr.jablonowski@wpdesk.net>\n"
|
7 |
"Language-Team: Maciej Swoboda <maciej.swoboda@gmail.com>\n"
|
8 |
"Language: pl_PL\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
-
"X-Generator: Poedit 2.0.
|
13 |
"X-Poedit-Basepath: ..\n"
|
14 |
"X-Poedit-WPHeader: flexible-shipping.php\n"
|
15 |
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
@@ -323,11 +323,11 @@ msgstr "Przesyłka do zamówienia %s, %s"
|
|
323 |
msgid "Added new shipment via metabox. Shipment ID: %s"
|
324 |
msgstr "Dodano nową przesyłkę. Numer przesyłki: %s"
|
325 |
|
326 |
-
#: classes/order-add-shipping.php:
|
327 |
msgid "Select integration"
|
328 |
msgstr "Wybierz integrację"
|
329 |
|
330 |
-
#: classes/order-add-shipping.php:
|
331 |
msgid "Add shipping"
|
332 |
msgstr "Dodaj przesyłkę"
|
333 |
|
@@ -713,11 +713,11 @@ msgstr "Metoda wysyłki nie znaleziona."
|
|
713 |
msgid "Shipping method %s updated."
|
714 |
msgstr "Metoda wysyłki zaktualizowana: %s."
|
715 |
|
716 |
-
#: classes/tracker.php:
|
717 |
msgid "Opt-in"
|
718 |
msgstr "Opt-in"
|
719 |
|
720 |
-
#: classes/tracker.php:
|
721 |
msgid "Opt-out"
|
722 |
msgstr "Opt-out"
|
723 |
|
@@ -1029,21 +1029,19 @@ msgstr ""
|
|
1029 |
|
1030 |
#: inc/wpdesk-tracker/views/tracker-connect.php:7
|
1031 |
#: inc/wpdesk-tracker/views/tracker-notice.php:5
|
1032 |
-
#: inc/wpdesk-tracker/views/tracker-notice.php:22
|
1033 |
#, php-format
|
1034 |
msgid "Hey %s,"
|
1035 |
msgstr "Hej %s,"
|
1036 |
|
1037 |
#: inc/wpdesk-tracker/views/tracker-connect.php:8
|
1038 |
-
#: inc/wpdesk-tracker/views/tracker-notice.php:23
|
1039 |
msgid ""
|
1040 |
"Please help us improve our plugins! If you opt-in, we will collect some non-"
|
1041 |
-
"sensitive data and usage information. If you skip this, that's
|
1042 |
-
"plugins will work just fine."
|
1043 |
msgstr ""
|
1044 |
"Proszę pomóż nam udoskonalić nasze wtyczki! Jeśli się zgodzisz, będziemy "
|
1045 |
-
"zbierać niewrażliwe dane użytkowania. Jeśli pominiesz ten krok, w
|
1046 |
-
"Wszystkie wtyczki będą działać."
|
1047 |
|
1048 |
#: inc/wpdesk-tracker/views/tracker-connect.php:13
|
1049 |
msgid "Allow & Continue →"
|
@@ -1062,8 +1060,8 @@ msgid "Your Site Overview"
|
|
1062 |
msgstr "Dane witryny"
|
1063 |
|
1064 |
#: inc/wpdesk-tracker/views/tracker-connect.php:27
|
1065 |
-
msgid "
|
1066 |
-
msgstr "
|
1067 |
|
1068 |
#: inc/wpdesk-tracker/views/tracker-connect.php:33
|
1069 |
msgid "Plugin Usage"
|
@@ -1078,21 +1076,11 @@ msgid "Your Store Overview"
|
|
1078 |
msgstr "Ustawienia i informacje o użytkowaniu wtyczek WP Desk"
|
1079 |
|
1080 |
#: inc/wpdesk-tracker/views/tracker-connect.php:41
|
1081 |
-
msgid "
|
1082 |
-
msgstr "Tylko niewrażliwe dane o użytkowaniu sklepu"
|
1083 |
|
1084 |
#: inc/wpdesk-tracker/views/tracker-connect.php:47
|
1085 |
-
|
1086 |
-
msgstr "Powiadomienia"
|
1087 |
-
|
1088 |
-
#: inc/wpdesk-tracker/views/tracker-connect.php:48
|
1089 |
-
msgid "Announcements, updates, marketing, no spam and easy opt-out"
|
1090 |
-
msgstr ""
|
1091 |
-
"Ważne powiadomienia, uaktualnienia, marketing, żadnego spamu i łatwa "
|
1092 |
-
"rezygnacja"
|
1093 |
-
|
1094 |
-
#: inc/wpdesk-tracker/views/tracker-connect.php:54
|
1095 |
-
#: inc/wpdesk-tracker/views/tracker-notice.php:24
|
1096 |
msgid "Find out more »"
|
1097 |
msgstr "Dowiedz się więcej »"
|
1098 |
|
@@ -1153,28 +1141,20 @@ msgstr "Pomiń i dezaktywuj"
|
|
1153 |
msgid "Submit & Deactivate"
|
1154 |
msgstr "Anuluj"
|
1155 |
|
1156 |
-
#: inc/wpdesk-tracker/views/tracker-notice.php:
|
1157 |
-
#, php-format
|
1158 |
msgid ""
|
1159 |
"We need your help to improve <strong>WP Desk plugins</strong>, so they are "
|
1160 |
-
"more useful for you and the rest of <strong>
|
1161 |
"collecting data on how you use our plugins, you will help us a lot. We will "
|
1162 |
-
"not collect any sensitive data, so you can feel safe.
|
1163 |
-
"your consent, we will send you a <strong>discount coupon</strong> for %sWP "
|
1164 |
-
"Desk plugins%s, which you can use yourself or share with others. %sFind out "
|
1165 |
-
"more »%s"
|
1166 |
msgstr ""
|
1167 |
"Potrzebujemy Twojej pomocy, aby dalej rozwijać <strong>wtyczki WP Desk</"
|
1168 |
"strong> i były one jeszcze bardziej pomocne dla Ciebie i pozostałych ponad "
|
1169 |
-
"<strong>
|
1170 |
"korzystasz z naszych wtyczek bardzo nam w tym pomożesz. Nie będziemy zbierać "
|
1171 |
-
"żadnych danych wrażliwych, więc możesz czuć się bezpiecznie.
|
1172 |
-
"Twoją zgodę otrzymasz <strong>kupon rabatowy</strong> na %swtyczki WP Desk"
|
1173 |
-
"%s, który możesz wykorzystać sam lub podzielić się z innymi. %sDowiedz się "
|
1174 |
-
"więcej »%s"
|
1175 |
|
1176 |
-
#: inc/wpdesk-tracker/views/tracker-notice.php:
|
1177 |
-
#: inc/wpdesk-tracker/views/tracker-notice.php:27
|
1178 |
msgid "Allow"
|
1179 |
msgstr "Pozwól"
|
1180 |
|
@@ -1207,6 +1187,14 @@ msgstr "WP Desk"
|
|
1207 |
msgid "https://www.wpdesk.net/"
|
1208 |
msgstr "https://www.wpdesk.pl/"
|
1209 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1210 |
#~ msgid "Stopping a rule"
|
1211 |
#~ msgstr "Zatrzymywanie reguł"
|
1212 |
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: Flexible Shipping\n"
|
4 |
+
"POT-Creation-Date: 2018-06-25 13:10+0200\n"
|
5 |
+
"PO-Revision-Date: 2018-06-25 13:10+0200\n"
|
6 |
"Last-Translator: Piotr Jabłonowski <piotr.jablonowski@wpdesk.net>\n"
|
7 |
"Language-Team: Maciej Swoboda <maciej.swoboda@gmail.com>\n"
|
8 |
"Language: pl_PL\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"X-Generator: Poedit 2.0.8\n"
|
13 |
"X-Poedit-Basepath: ..\n"
|
14 |
"X-Poedit-WPHeader: flexible-shipping.php\n"
|
15 |
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
323 |
msgid "Added new shipment via metabox. Shipment ID: %s"
|
324 |
msgstr "Dodano nową przesyłkę. Numer przesyłki: %s"
|
325 |
|
326 |
+
#: classes/order-add-shipping.php:84
|
327 |
msgid "Select integration"
|
328 |
msgstr "Wybierz integrację"
|
329 |
|
330 |
+
#: classes/order-add-shipping.php:93
|
331 |
msgid "Add shipping"
|
332 |
msgstr "Dodaj przesyłkę"
|
333 |
|
713 |
msgid "Shipping method %s updated."
|
714 |
msgstr "Metoda wysyłki zaktualizowana: %s."
|
715 |
|
716 |
+
#: classes/tracker.php:183
|
717 |
msgid "Opt-in"
|
718 |
msgstr "Opt-in"
|
719 |
|
720 |
+
#: classes/tracker.php:187
|
721 |
msgid "Opt-out"
|
722 |
msgstr "Opt-out"
|
723 |
|
1029 |
|
1030 |
#: inc/wpdesk-tracker/views/tracker-connect.php:7
|
1031 |
#: inc/wpdesk-tracker/views/tracker-notice.php:5
|
|
|
1032 |
#, php-format
|
1033 |
msgid "Hey %s,"
|
1034 |
msgstr "Hej %s,"
|
1035 |
|
1036 |
#: inc/wpdesk-tracker/views/tracker-connect.php:8
|
|
|
1037 |
msgid ""
|
1038 |
"Please help us improve our plugins! If you opt-in, we will collect some non-"
|
1039 |
+
"sensitive data and usage information anonymously. If you skip this, that's "
|
1040 |
+
"okay! All plugins will work just fine."
|
1041 |
msgstr ""
|
1042 |
"Proszę pomóż nam udoskonalić nasze wtyczki! Jeśli się zgodzisz, będziemy "
|
1043 |
+
"zbierać niewrażliwe dane użytkowania anonimowo. Jeśli pominiesz ten krok, w "
|
1044 |
+
"porządku! Wszystkie wtyczki będą działać."
|
1045 |
|
1046 |
#: inc/wpdesk-tracker/views/tracker-connect.php:13
|
1047 |
msgid "Allow & Continue →"
|
1060 |
msgstr "Dane witryny"
|
1061 |
|
1062 |
#: inc/wpdesk-tracker/views/tracker-connect.php:27
|
1063 |
+
msgid "WP version, PHP info"
|
1064 |
+
msgstr "Wersja WP, PHP info"
|
1065 |
|
1066 |
#: inc/wpdesk-tracker/views/tracker-connect.php:33
|
1067 |
msgid "Plugin Usage"
|
1076 |
msgstr "Ustawienia i informacje o użytkowaniu wtyczek WP Desk"
|
1077 |
|
1078 |
#: inc/wpdesk-tracker/views/tracker-connect.php:41
|
1079 |
+
msgid "Anonymized and non-sensitive store usage information"
|
1080 |
+
msgstr "Tylko niewrażliwe i anonimowe dane o użytkowaniu sklepu"
|
1081 |
|
1082 |
#: inc/wpdesk-tracker/views/tracker-connect.php:47
|
1083 |
+
#: inc/wpdesk-tracker/views/tracker-notice.php:7
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1084 |
msgid "Find out more »"
|
1085 |
msgstr "Dowiedz się więcej »"
|
1086 |
|
1141 |
msgid "Submit & Deactivate"
|
1142 |
msgstr "Anuluj"
|
1143 |
|
1144 |
+
#: inc/wpdesk-tracker/views/tracker-notice.php:6
|
|
|
1145 |
msgid ""
|
1146 |
"We need your help to improve <strong>WP Desk plugins</strong>, so they are "
|
1147 |
+
"more useful for you and the rest of <strong>30,000+ users</strong>. By "
|
1148 |
"collecting data on how you use our plugins, you will help us a lot. We will "
|
1149 |
+
"not collect any sensitive data, so you can feel safe."
|
|
|
|
|
|
|
1150 |
msgstr ""
|
1151 |
"Potrzebujemy Twojej pomocy, aby dalej rozwijać <strong>wtyczki WP Desk</"
|
1152 |
"strong> i były one jeszcze bardziej pomocne dla Ciebie i pozostałych ponad "
|
1153 |
+
"<strong>30 000 użytkowników</strong>. Zbierając dane na temat tego jak "
|
1154 |
"korzystasz z naszych wtyczek bardzo nam w tym pomożesz. Nie będziemy zbierać "
|
1155 |
+
"żadnych danych wrażliwych, więc możesz czuć się bezpiecznie."
|
|
|
|
|
|
|
1156 |
|
1157 |
+
#: inc/wpdesk-tracker/views/tracker-notice.php:10
|
|
|
1158 |
msgid "Allow"
|
1159 |
msgstr "Pozwól"
|
1160 |
|
1187 |
msgid "https://www.wpdesk.net/"
|
1188 |
msgstr "https://www.wpdesk.pl/"
|
1189 |
|
1190 |
+
#~ msgid "Admin Updates"
|
1191 |
+
#~ msgstr "Powiadomienia"
|
1192 |
+
|
1193 |
+
#~ msgid "Announcements, updates, marketing, no spam and easy opt-out"
|
1194 |
+
#~ msgstr ""
|
1195 |
+
#~ "Ważne powiadomienia, uaktualnienia, marketing, żadnego spamu i łatwa "
|
1196 |
+
#~ "rezygnacja"
|
1197 |
+
|
1198 |
#~ msgid "Stopping a rule"
|
1199 |
#~ msgstr "Zatrzymywanie reguł"
|
1200 |
|
readme.txt
CHANGED
@@ -4,7 +4,7 @@ Donate link: https://www.wpdesk.net/products/flexible-shipping-pro-woocommerce/
|
|
4 |
Tags: table rate, table rate shipping, woocommerce shipping, flexible shipping, woocommerce table rate shipping, cart based shipping, weight shipping, weight based shipping, totals based shipping, order based shipping, shipping zones, shipping classes
|
5 |
Requires at least: 4.5
|
6 |
Tested up to: 4.9.6
|
7 |
-
Stable tag: 2.1.
|
8 |
Requires PHP: 5.5
|
9 |
License: GPLv3 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
@@ -171,6 +171,10 @@ If you are upgrading from the old Flexible Shipping version (1.3.2, woo-flexible
|
|
171 |
|
172 |
== Changelog ==
|
173 |
|
|
|
|
|
|
|
|
|
174 |
= 2.1.4 - 2018-06-11 =
|
175 |
* Fixed missing metabox Add Shipment in WooCommerce 3.4
|
176 |
|
4 |
Tags: table rate, table rate shipping, woocommerce shipping, flexible shipping, woocommerce table rate shipping, cart based shipping, weight shipping, weight based shipping, totals based shipping, order based shipping, shipping zones, shipping classes
|
5 |
Requires at least: 4.5
|
6 |
Tested up to: 4.9.6
|
7 |
+
Stable tag: 2.1.5
|
8 |
Requires PHP: 5.5
|
9 |
License: GPLv3 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
171 |
|
172 |
== Changelog ==
|
173 |
|
174 |
+
= 2.1.5 - 2018-06-25 =
|
175 |
+
* Tweaked tracker data anonymization
|
176 |
+
* Fixed tracker notice
|
177 |
+
|
178 |
= 2.1.4 - 2018-06-11 =
|
179 |
* Fixed missing metabox Add Shipment in WooCommerce 3.4
|
180 |
|
vendor/autoload.php
CHANGED
@@ -4,4 +4,4 @@
|
|
4 |
|
5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
|
7 |
-
return
|
4 |
|
5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
|
7 |
+
return ComposerAutoloaderInitcf82b5fb62aaabc643f4fe04648afaad::getLoader();
|
vendor/composer/autoload_classmap.php
CHANGED
@@ -6,4 +6,59 @@ $vendorDir = dirname(dirname(__FILE__));
|
|
6 |
$baseDir = dirname($vendorDir);
|
7 |
|
8 |
return array(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
);
|
6 |
$baseDir = dirname($vendorDir);
|
7 |
|
8 |
return array(
|
9 |
+
'Browser' => $baseDir . '/classes/wpdesk/settings-api/modules/sysinfo/browser.php',
|
10 |
+
'S214_Sysinfo' => $baseDir . '/classes/wpdesk/settings-api/modules/sysinfo/class.s214-sysinfo.php',
|
11 |
+
'WPDesk_Flexible_Shipping' => $baseDir . '/classes/shipping-method.php',
|
12 |
+
'WPDesk_Flexible_Shipping_Add_Shipping' => $baseDir . '/classes/order-add-shipping.php',
|
13 |
+
'WPDesk_Flexible_Shipping_Admin_Notices' => $baseDir . '/classes/admin-notices.php',
|
14 |
+
'WPDesk_Flexible_Shipping_Bulk_Actions' => $baseDir . '/classes/bulk-actions.php',
|
15 |
+
'WPDesk_Flexible_Shipping_Export' => $baseDir . '/classes/flexible-shipping-export.php',
|
16 |
+
'WPDesk_Flexible_Shipping_Factory' => $baseDir . '/classes/flexible-shipping-factory.php',
|
17 |
+
'WPDesk_Flexible_Shipping_Info' => $baseDir . '/classes/shipping-method-info.php',
|
18 |
+
'WPDesk_Flexible_Shipping_Manifest' => $baseDir . '/classes/manifest/class-manifest.php',
|
19 |
+
'WPDesk_Flexible_Shipping_Manifest_FS' => $baseDir . '/classes/manifest/class-manifest-fs.php',
|
20 |
+
'WPDesk_Flexible_Shipping_Manifest_Interface' => $baseDir . '/classes/manifest/interface-manifest.php',
|
21 |
+
'WPDesk_Flexible_Shipping_Multicurrency' => $baseDir . '/classes/multicurrency.php',
|
22 |
+
'WPDesk_Flexible_Shipping_Multilingual' => $baseDir . '/classes/multilingual.php',
|
23 |
+
'WPDesk_Flexible_Shipping_Plugin' => $baseDir . '/classes/flexible-shipping-plugin.php',
|
24 |
+
'WPDesk_Flexible_Shipping_Shipment' => $baseDir . '/classes/shipment/class-shipment.php',
|
25 |
+
'WPDesk_Flexible_Shipping_Shipment_Ajax' => $baseDir . '/classes/shipment/ajax.php',
|
26 |
+
'WPDesk_Flexible_Shipping_Shipment_CPT' => $baseDir . '/classes/shipment/cpt-shipment.php',
|
27 |
+
'WPDesk_Flexible_Shipping_Shipment_Interface' => $baseDir . '/classes/shipment/interface-shipment.php',
|
28 |
+
'WPDesk_Flexible_Shipping_Shipping_Manifest_CPT' => $baseDir . '/classes/manifest/cpt-shipping-manifest.php',
|
29 |
+
'WPDesk_Flexible_Shipping_Tracker' => $baseDir . '/classes/tracker.php',
|
30 |
+
'WPDesk_Helper_Plugin' => $baseDir . '/classes/wpdesk/class-helper.php',
|
31 |
+
'WPDesk_Plugin_1_10' => $baseDir . '/classes/wpdesk/class-plugin.php',
|
32 |
+
'WPDesk_Plugin_Factory_1_10' => $baseDir . '/classes/wpdesk/interface-plugin-factory.php',
|
33 |
+
'WPDesk_Requirement_Checker_1_10' => $baseDir . '/classes/wpdesk/class-requirement-checker.php',
|
34 |
+
'WPDesk_S214_Settings_1_10' => $baseDir . '/classes/wpdesk/settings-api/class.s214-settings.php',
|
35 |
+
'WPDesk_Settings_1_10' => $baseDir . '/classes/wpdesk/class-settings.php',
|
36 |
+
'WPDesk_Tracker' => $baseDir . '/inc/wpdesk-tracker/class-wpdesk-tracker.php',
|
37 |
+
'WPDesk_Tracker_Data_Provider' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider.php',
|
38 |
+
'WPDesk_Tracker_Data_Provider_Gateways' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-gateways.php',
|
39 |
+
'WPDesk_Tracker_Data_Provider_Identification' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-identification.php',
|
40 |
+
'WPDesk_Tracker_Data_Provider_Identification_Gdpr' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-identification-gdpr.php',
|
41 |
+
'WPDesk_Tracker_Data_Provider_Jetpack' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-jetpack.php',
|
42 |
+
'WPDesk_Tracker_Data_Provider_License_Emails' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-license-emails.php',
|
43 |
+
'WPDesk_Tracker_Data_Provider_Orders' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders.php',
|
44 |
+
'WPDesk_Tracker_Data_Provider_Orders_Country' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders-country.php',
|
45 |
+
'WPDesk_Tracker_Data_Provider_Orders_Month' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders-month.php',
|
46 |
+
'WPDesk_Tracker_Data_Provider_Plugins' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-plugins.php',
|
47 |
+
'WPDesk_Tracker_Data_Provider_Products' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-products.php',
|
48 |
+
'WPDesk_Tracker_Data_Provider_Products_Variations' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-products-variations.php',
|
49 |
+
'WPDesk_Tracker_Data_Provider_Server' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-server.php',
|
50 |
+
'WPDesk_Tracker_Data_Provider_Settings' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-settings.php',
|
51 |
+
'WPDesk_Tracker_Data_Provider_Shipping_Classes' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-classes.php',
|
52 |
+
'WPDesk_Tracker_Data_Provider_Shipping_Methods' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-methods.php',
|
53 |
+
'WPDesk_Tracker_Data_Provider_Shipping_Methods_Zones' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-methods-zones.php',
|
54 |
+
'WPDesk_Tracker_Data_Provider_Templates' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-templates.php',
|
55 |
+
'WPDesk_Tracker_Data_Provider_Theme' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-theme.php',
|
56 |
+
'WPDesk_Tracker_Data_Provider_User_Agent' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-user-agent.php',
|
57 |
+
'WPDesk_Tracker_Data_Provider_Users' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-users.php',
|
58 |
+
'WPDesk_Tracker_Data_Provider_Wordpress' => $baseDir . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-wordpress.php',
|
59 |
+
'WPDesk_Tracker_Factory' => $baseDir . '/inc/wpdesk-tracker/class-wpdesk-tracker-factory.php',
|
60 |
+
'WPDesk_Tracker_Sender' => $baseDir . '/inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender.php',
|
61 |
+
'WPDesk_Tracker_Sender_Exception_WpError' => $baseDir . '/inc/wpdesk-tracker/sender/Exception/class-wpdesk-tracker-sender-exception-wperror.php',
|
62 |
+
'WPDesk_Tracker_Sender_Logged' => $baseDir . '/inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender-logged.php',
|
63 |
+
'WPDesk_Tracker_Sender_Wordpress_To_WPDesk' => $baseDir . '/inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender-wordpress-to-wpdesk.php',
|
64 |
);
|
vendor/composer/autoload_real.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
-
class
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
@@ -19,15 +19,15 @@ class ComposerAutoloaderInite5c7bd96112481520aa09571fa61f763
|
|
19 |
return self::$loader;
|
20 |
}
|
21 |
|
22 |
-
spl_autoload_register(array('
|
23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
24 |
-
spl_autoload_unregister(array('
|
25 |
|
26 |
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
27 |
if ($useStaticLoader) {
|
28 |
require_once __DIR__ . '/autoload_static.php';
|
29 |
|
30 |
-
call_user_func(\Composer\Autoload\
|
31 |
} else {
|
32 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
33 |
foreach ($map as $namespace => $path) {
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
+
class ComposerAutoloaderInitcf82b5fb62aaabc643f4fe04648afaad
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
19 |
return self::$loader;
|
20 |
}
|
21 |
|
22 |
+
spl_autoload_register(array('ComposerAutoloaderInitcf82b5fb62aaabc643f4fe04648afaad', 'loadClassLoader'), true, true);
|
23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
24 |
+
spl_autoload_unregister(array('ComposerAutoloaderInitcf82b5fb62aaabc643f4fe04648afaad', 'loadClassLoader'));
|
25 |
|
26 |
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
27 |
if ($useStaticLoader) {
|
28 |
require_once __DIR__ . '/autoload_static.php';
|
29 |
|
30 |
+
call_user_func(\Composer\Autoload\ComposerStaticInitcf82b5fb62aaabc643f4fe04648afaad::getInitializer($loader));
|
31 |
} else {
|
32 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
33 |
foreach ($map as $namespace => $path) {
|
vendor/composer/autoload_static.php
CHANGED
@@ -4,11 +4,70 @@
|
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
-
class
|
8 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
public static function getInitializer(ClassLoader $loader)
|
10 |
{
|
11 |
return \Closure::bind(function () use ($loader) {
|
|
|
12 |
|
13 |
}, null, ClassLoader::class);
|
14 |
}
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
+
class ComposerStaticInitcf82b5fb62aaabc643f4fe04648afaad
|
8 |
{
|
9 |
+
public static $classMap = array (
|
10 |
+
'Browser' => __DIR__ . '/../..' . '/classes/wpdesk/settings-api/modules/sysinfo/browser.php',
|
11 |
+
'S214_Sysinfo' => __DIR__ . '/../..' . '/classes/wpdesk/settings-api/modules/sysinfo/class.s214-sysinfo.php',
|
12 |
+
'WPDesk_Flexible_Shipping' => __DIR__ . '/../..' . '/classes/shipping-method.php',
|
13 |
+
'WPDesk_Flexible_Shipping_Add_Shipping' => __DIR__ . '/../..' . '/classes/order-add-shipping.php',
|
14 |
+
'WPDesk_Flexible_Shipping_Admin_Notices' => __DIR__ . '/../..' . '/classes/admin-notices.php',
|
15 |
+
'WPDesk_Flexible_Shipping_Bulk_Actions' => __DIR__ . '/../..' . '/classes/bulk-actions.php',
|
16 |
+
'WPDesk_Flexible_Shipping_Export' => __DIR__ . '/../..' . '/classes/flexible-shipping-export.php',
|
17 |
+
'WPDesk_Flexible_Shipping_Factory' => __DIR__ . '/../..' . '/classes/flexible-shipping-factory.php',
|
18 |
+
'WPDesk_Flexible_Shipping_Info' => __DIR__ . '/../..' . '/classes/shipping-method-info.php',
|
19 |
+
'WPDesk_Flexible_Shipping_Manifest' => __DIR__ . '/../..' . '/classes/manifest/class-manifest.php',
|
20 |
+
'WPDesk_Flexible_Shipping_Manifest_FS' => __DIR__ . '/../..' . '/classes/manifest/class-manifest-fs.php',
|
21 |
+
'WPDesk_Flexible_Shipping_Manifest_Interface' => __DIR__ . '/../..' . '/classes/manifest/interface-manifest.php',
|
22 |
+
'WPDesk_Flexible_Shipping_Multicurrency' => __DIR__ . '/../..' . '/classes/multicurrency.php',
|
23 |
+
'WPDesk_Flexible_Shipping_Multilingual' => __DIR__ . '/../..' . '/classes/multilingual.php',
|
24 |
+
'WPDesk_Flexible_Shipping_Plugin' => __DIR__ . '/../..' . '/classes/flexible-shipping-plugin.php',
|
25 |
+
'WPDesk_Flexible_Shipping_Shipment' => __DIR__ . '/../..' . '/classes/shipment/class-shipment.php',
|
26 |
+
'WPDesk_Flexible_Shipping_Shipment_Ajax' => __DIR__ . '/../..' . '/classes/shipment/ajax.php',
|
27 |
+
'WPDesk_Flexible_Shipping_Shipment_CPT' => __DIR__ . '/../..' . '/classes/shipment/cpt-shipment.php',
|
28 |
+
'WPDesk_Flexible_Shipping_Shipment_Interface' => __DIR__ . '/../..' . '/classes/shipment/interface-shipment.php',
|
29 |
+
'WPDesk_Flexible_Shipping_Shipping_Manifest_CPT' => __DIR__ . '/../..' . '/classes/manifest/cpt-shipping-manifest.php',
|
30 |
+
'WPDesk_Flexible_Shipping_Tracker' => __DIR__ . '/../..' . '/classes/tracker.php',
|
31 |
+
'WPDesk_Helper_Plugin' => __DIR__ . '/../..' . '/classes/wpdesk/class-helper.php',
|
32 |
+
'WPDesk_Plugin_1_10' => __DIR__ . '/../..' . '/classes/wpdesk/class-plugin.php',
|
33 |
+
'WPDesk_Plugin_Factory_1_10' => __DIR__ . '/../..' . '/classes/wpdesk/interface-plugin-factory.php',
|
34 |
+
'WPDesk_Requirement_Checker_1_10' => __DIR__ . '/../..' . '/classes/wpdesk/class-requirement-checker.php',
|
35 |
+
'WPDesk_S214_Settings_1_10' => __DIR__ . '/../..' . '/classes/wpdesk/settings-api/class.s214-settings.php',
|
36 |
+
'WPDesk_Settings_1_10' => __DIR__ . '/../..' . '/classes/wpdesk/class-settings.php',
|
37 |
+
'WPDesk_Tracker' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/class-wpdesk-tracker.php',
|
38 |
+
'WPDesk_Tracker_Data_Provider' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider.php',
|
39 |
+
'WPDesk_Tracker_Data_Provider_Gateways' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-gateways.php',
|
40 |
+
'WPDesk_Tracker_Data_Provider_Identification' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-identification.php',
|
41 |
+
'WPDesk_Tracker_Data_Provider_Identification_Gdpr' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-identification-gdpr.php',
|
42 |
+
'WPDesk_Tracker_Data_Provider_Jetpack' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-jetpack.php',
|
43 |
+
'WPDesk_Tracker_Data_Provider_License_Emails' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-license-emails.php',
|
44 |
+
'WPDesk_Tracker_Data_Provider_Orders' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders.php',
|
45 |
+
'WPDesk_Tracker_Data_Provider_Orders_Country' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders-country.php',
|
46 |
+
'WPDesk_Tracker_Data_Provider_Orders_Month' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-orders-month.php',
|
47 |
+
'WPDesk_Tracker_Data_Provider_Plugins' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-plugins.php',
|
48 |
+
'WPDesk_Tracker_Data_Provider_Products' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-products.php',
|
49 |
+
'WPDesk_Tracker_Data_Provider_Products_Variations' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-products-variations.php',
|
50 |
+
'WPDesk_Tracker_Data_Provider_Server' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-server.php',
|
51 |
+
'WPDesk_Tracker_Data_Provider_Settings' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-settings.php',
|
52 |
+
'WPDesk_Tracker_Data_Provider_Shipping_Classes' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-classes.php',
|
53 |
+
'WPDesk_Tracker_Data_Provider_Shipping_Methods' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-methods.php',
|
54 |
+
'WPDesk_Tracker_Data_Provider_Shipping_Methods_Zones' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-shipping-methods-zones.php',
|
55 |
+
'WPDesk_Tracker_Data_Provider_Templates' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-templates.php',
|
56 |
+
'WPDesk_Tracker_Data_Provider_Theme' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-theme.php',
|
57 |
+
'WPDesk_Tracker_Data_Provider_User_Agent' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-user-agent.php',
|
58 |
+
'WPDesk_Tracker_Data_Provider_Users' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-users.php',
|
59 |
+
'WPDesk_Tracker_Data_Provider_Wordpress' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/data_provider/class-wpdesk-tracker-data-provider-wordpress.php',
|
60 |
+
'WPDesk_Tracker_Factory' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/class-wpdesk-tracker-factory.php',
|
61 |
+
'WPDesk_Tracker_Sender' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender.php',
|
62 |
+
'WPDesk_Tracker_Sender_Exception_WpError' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/sender/Exception/class-wpdesk-tracker-sender-exception-wperror.php',
|
63 |
+
'WPDesk_Tracker_Sender_Logged' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender-logged.php',
|
64 |
+
'WPDesk_Tracker_Sender_Wordpress_To_WPDesk' => __DIR__ . '/../..' . '/inc/wpdesk-tracker/sender/class-wpdesk-tracker-sender-wordpress-to-wpdesk.php',
|
65 |
+
);
|
66 |
+
|
67 |
public static function getInitializer(ClassLoader $loader)
|
68 |
{
|
69 |
return \Closure::bind(function () use ($loader) {
|
70 |
+
$loader->classMap = ComposerStaticInitcf82b5fb62aaabc643f4fe04648afaad::$classMap;
|
71 |
|
72 |
}, null, ClassLoader::class);
|
73 |
}
|